[superlu] 01/02: Imported Upstream version 5.2.0+dfsg
Nico Schlömer
nschloe-guest at moszumanska.debian.org
Thu May 19 07:32:44 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 1be9a549a558671afdaaebd8dca2065be6f9cedb
Author: Nico Schlömer <nico.schloemer at gmail.com>
Date: Thu May 19 09:32:13 2016 +0200
Imported Upstream version 5.2.0+dfsg
---
._SuperLU_5.2.0 | Bin 0 -> 239 bytes
CBLAS/Makefile | 86 -
CBLAS/cgemv.c | 399 --
CBLAS/cgerc.c | 205 -
CBLAS/chemv.c | 421 --
CBLAS/cher2.c | 436 --
CBLAS/ctrsv.c | 509 --
CBLAS/dgemv.c | 299 -
CBLAS/dger.c | 182 -
CBLAS/dsymv.c | 300 -
CBLAS/dsyr2.c | 264 -
CBLAS/dtrsv.c | 338 --
CBLAS/sgemv.c | 299 -
CBLAS/sger.c | 181 -
CBLAS/slu_Cnames.h | 1 -
CBLAS/ssymv.c | 300 -
CBLAS/ssyr2.c | 263 -
CBLAS/strsv.c | 338 --
CBLAS/zgemv.c | 400 --
CBLAS/zgerc.c | 206 -
CBLAS/zhemv.c | 421 --
CBLAS/zher2.c | 437 --
CBLAS/ztrsv.c | 510 --
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 1281 -> 0 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 35 -> 0 bytes
DOC/html/tab_l.gif | Bin 706 -> 0 bytes
DOC/html/tab_r.gif | Bin 2585 -> 0 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 | 177 -
EXAMPLE/README | 51 -
EXAMPLE/cfgmr.c | 334 --
EXAMPLE/citersol.c | 372 --
EXAMPLE/citersol1 | Bin 494264 -> 0 bytes
EXAMPLE/citersol1.c | 381 --
EXAMPLE/clinsol.c | 115 -
EXAMPLE/clinsol1.c | 120 -
EXAMPLE/clinsolx.c | 212 -
EXAMPLE/clinsolx1.c | 241 -
EXAMPLE/clinsolx2.c | 277 -
EXAMPLE/dfgmr.c | 298 -
EXAMPLE/ditersol.c | 370 --
EXAMPLE/ditersol1 | Bin 309565 -> 0 bytes
EXAMPLE/ditersol1.c | 379 --
EXAMPLE/dlinsol.c | 115 -
EXAMPLE/dlinsol1.c | 120 -
EXAMPLE/dlinsolx.c | 212 -
EXAMPLE/dlinsolx1.c | 241 -
EXAMPLE/dlinsolx2.c | 277 -
EXAMPLE/fgmr.c | 263 -
EXAMPLE/sfgmr.c | 298 -
EXAMPLE/sitersol.c | 370 --
EXAMPLE/sitersol1 | Bin 387935 -> 0 bytes
EXAMPLE/sitersol1.c | 379 --
EXAMPLE/slinsol.c | 115 -
EXAMPLE/slinsol1.c | 120 -
EXAMPLE/slinsolx.c | 212 -
EXAMPLE/slinsolx1.c | 241 -
EXAMPLE/slinsolx2.c | 277 -
EXAMPLE/sp_ienv.c | 79 -
EXAMPLE/superlu.c | 84 -
EXAMPLE/zfgmr.c | 334 --
EXAMPLE/zitersol.c | 372 --
EXAMPLE/zitersol1 | Bin 551323 -> 0 bytes
EXAMPLE/zitersol1.c | 381 --
EXAMPLE/zlinsol.c | 115 -
EXAMPLE/zlinsol1.c | 120 -
EXAMPLE/zlinsolx.c | 212 -
EXAMPLE/zlinsolx1.c | 241 -
EXAMPLE/zlinsolx2.c | 277 -
FORTRAN/Makefile | 36 -
FORTRAN/README | 10 -
FORTRAN/c_fortran_cgssv.c | 174 -
FORTRAN/c_fortran_dgssv.c | 174 -
FORTRAN/c_fortran_dgssv.c.bak | 175 -
FORTRAN/c_fortran_dgssv.c.old | 175 -
FORTRAN/c_fortran_sgssv.c | 174 -
FORTRAN/c_fortran_zgssv.c | 174 -
FORTRAN/f77_main.f | 48 -
FORTRAN/f77_main.f.old | 48 -
FORTRAN/z_f77_main.f | 50 -
INSTALL/Makefile | 26 -
INSTALL/dlamchtst.c | 34 -
INSTALL/install.csh | 14 -
MAKE_INC/make.alpha | 49 -
MAKE_INC/make.altix | 58 -
MAKE_INC/make.cray | 56 -
MAKE_INC/make.hppa | 58 -
MAKE_INC/make.linux | 65 -
MAKE_INC/make.mac-x | 55 -
MAKE_INC/make.rs6k | 61 -
MAKE_INC/make.sgi | 53 -
MAKE_INC/make.solaris | 54 -
MAKE_INC/make.sp | 62 -
MAKE_INC/make.sun4 | 59 -
MATLAB/mexlusolve.c | 153 -
MATLAB/mexsuperlu.c | 260 -
README | 159 -
SRC/Makefile | 152 -
SRC/ccolumn_bmod.c | 365 --
SRC/ccolumn_dfs.c | 275 -
SRC/ccopy_to_ucol.c | 103 -
SRC/cdiagonal.c | 133 -
SRC/cgscon.c | 154 -
SRC/cgsequ.c | 195 -
SRC/cgsisx.c | 727 ---
SRC/cgsisx.c.bak | 723 ---
SRC/cgsitrf.c | 637 --
SRC/cgsitrf.c.bak | 629 --
SRC/cgsrfs.c | 460 --
SRC/cgssv.c | 227 -
SRC/cgssvx.c | 622 --
SRC/cgssvx.c.bak | 619 --
SRC/cgstrf.c | 436 --
SRC/cgstrs.c | 350 --
SRC/clacon.c | 221 -
SRC/clacon.c.bak | 221 -
SRC/clangs.c | 119 -
SRC/claqgs.c | 147 -
SRC/cldperm.c | 168 -
SRC/cmemory.c | 701 ---
SRC/cmyblas2.c | 188 -
SRC/colamd.c | 3414 -----------
SRC/colamd.h | 249 -
SRC/cpanel_bmod.c | 487 --
SRC/cpanel_dfs.c | 254 -
SRC/cpivotL.c | 185 -
SRC/cpivotgrowth.c | 114 -
SRC/cpruneL.c | 154 -
SRC/creadhb.c | 267 -
SRC/creadrb.c | 246 -
SRC/creadtriple.c | 140 -
SRC/csnode_bmod.c | 120 -
SRC/csnode_dfs.c | 112 -
SRC/csp_blas2.c | 573 --
SRC/csp_blas3.c | 127 -
SRC/cutil.c | 475 --
SRC/dcolumn_bmod.c | 352 --
SRC/dcolumn_dfs.c | 275 -
SRC/dcomplex.c | 147 -
SRC/dcopy_to_ucol.c | 103 -
SRC/ddiagonal.c | 129 -
SRC/dgscon.c | 157 -
SRC/dgsequ.c | 195 -
SRC/dgsisx.c | 727 ---
SRC/dgsisx.c.bak | 727 ---
SRC/dgsitrf.c | 639 --
SRC/dgsitrf.c.bak | 626 --
SRC/dgsrfs.c | 452 --
SRC/dgssv.c | 227 -
SRC/dgssvx.c | 622 --
SRC/dgssvx.c.bak | 614 --
SRC/dgstrf.c | 436 --
SRC/dgstrs.c | 337 --
SRC/dlacon.c | 236 -
SRC/dlacon.c.bak | 236 -
SRC/dlamch.c | 971 ---
SRC/dlangs.c | 119 -
SRC/dlaqgs.c | 145 -
SRC/dldperm.c | 165 -
SRC/dmemory.c | 701 ---
SRC/dmyblas2.c | 230 -
SRC/dpanel_bmod.c | 459 --
SRC/dpanel_dfs.c | 254 -
SRC/dpivotL.c | 184 -
SRC/dpivotgrowth.c | 113 -
SRC/dpruneL.c | 154 -
SRC/dreadhb.c | 257 -
SRC/dreadrb.c | 237 -
SRC/dreadtriple.c | 140 -
SRC/dsnode_bmod.c | 118 -
SRC/dsnode_dfs.c | 112 -
SRC/dsp_blas2.c | 477 --
SRC/dsp_blas3.c | 127 -
SRC/dutil.c | 471 --
SRC/dzsum1.c | 94 -
SRC/get_perm_c.c | 457 --
SRC/heap_relax_snode.c | 124 -
SRC/html_mainpage.h | 21 -
SRC/icmax1.c | 116 -
SRC/ilu_ccolumn_dfs.c | 258 -
SRC/ilu_ccopy_to_ucol.c | 211 -
SRC/ilu_ccopy_to_ucol.c.bak | 202 -
SRC/ilu_cdrop_row.c | 339 --
SRC/ilu_cpanel_dfs.c | 248 -
SRC/ilu_cpivotL.c | 274 -
SRC/ilu_csnode_dfs.c | 90 -
SRC/ilu_dcolumn_dfs.c | 258 -
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/ilu_dpanel_dfs.c | 248 -
SRC/ilu_dpivotL.c | 266 -
SRC/ilu_dsnode_dfs.c | 90 -
SRC/ilu_heap_relax_snode.c | 120 -
SRC/ilu_relax_snode.c | 69 -
SRC/ilu_scolumn_dfs.c | 258 -
SRC/ilu_scopy_to_ucol.c | 207 -
SRC/ilu_scopy_to_ucol.c.bak | 199 -
SRC/ilu_sdrop_row.c | 329 -
SRC/ilu_spanel_dfs.c | 248 -
SRC/ilu_spivotL.c | 266 -
SRC/ilu_ssnode_dfs.c | 90 -
SRC/ilu_zcolumn_dfs.c | 258 -
SRC/ilu_zcopy_to_ucol.c | 211 -
SRC/ilu_zcopy_to_ucol.c.bak | 202 -
SRC/ilu_zdrop_row.c | 339 --
SRC/ilu_zpanel_dfs.c | 248 -
SRC/ilu_zpivotL.c | 274 -
SRC/ilu_zsnode_dfs.c | 90 -
SRC/izmax1.c | 113 -
SRC/lsame.c | 83 -
SRC/mark_relax.c | 47 -
SRC/memory.c | 210 -
SRC/mmd.c | 1012 ----
SRC/qselect.c | 74 -
SRC/relax_snode.c | 75 -
SRC/scolumn_bmod.c | 352 --
SRC/scolumn_dfs.c | 275 -
SRC/scomplex.c | 147 -
SRC/scopy_to_ucol.c | 103 -
SRC/scsum1.c | 99 -
SRC/sdiagonal.c | 129 -
SRC/sgscon.c | 157 -
SRC/sgsequ.c | 195 -
SRC/sgsisx.c | 727 ---
SRC/sgsisx.c.bak | 723 ---
SRC/sgsitrf.c | 639 --
SRC/sgsitrf.c.bak | 626 --
SRC/sgsrfs.c | 452 --
SRC/sgssv.c | 227 -
SRC/sgssvx.c | 622 --
SRC/sgstrf.c | 436 --
SRC/sgstrs.c | 337 --
SRC/slacon.c | 236 -
SRC/slacon.c.bak | 236 -
SRC/slamch.c | 993 ---
SRC/slangs.c | 119 -
SRC/slaqgs.c | 145 -
SRC/sldperm.c | 168 -
SRC/slu_Cnames.h | 458 --
SRC/slu_cdefs.h | 284 -
SRC/slu_dcomplex.h | 78 -
SRC/slu_ddefs.h | 281 -
SRC/slu_scomplex.h | 78 -
SRC/slu_sdefs.h | 281 -
SRC/slu_util.h | 367 --
SRC/slu_zdefs.h | 284 -
SRC/smemory.c | 701 ---
SRC/smyblas2.c | 230 -
SRC/sp_coletree.c | 419 --
SRC/sp_ienv.c | 79 -
SRC/sp_preorder.c | 208 -
SRC/spanel_bmod.c | 459 --
SRC/spanel_dfs.c | 254 -
SRC/spivotL.c | 184 -
SRC/spivotgrowth.c | 113 -
SRC/spruneL.c | 154 -
SRC/sreadhb.c | 257 -
SRC/sreadrb.c | 237 -
SRC/sreadtriple.c | 140 -
SRC/ssnode_bmod.c | 118 -
SRC/ssnode_dfs.c | 112 -
SRC/ssp_blas2.c | 477 --
SRC/ssp_blas3.c | 127 -
SRC/superlu_enum_consts.h | 71 -
SRC/superlu_timer.c | 72 -
SRC/supermatrix.h | 180 -
SRC/sutil.c | 471 --
SRC/temp | 445 --
SRC/util.c | 495 --
SRC/xerbla.c | 43 -
SRC/zcolumn_bmod.c | 367 --
SRC/zcolumn_dfs.c | 275 -
SRC/zcopy_to_ucol.c | 103 -
SRC/zdiagonal.c | 133 -
SRC/zgscon.c | 154 -
SRC/zgsequ.c | 195 -
SRC/zgsisx.c | 727 ---
SRC/zgsisx.c.bak | 723 ---
SRC/zgsitrf.c | 637 --
SRC/zgsitrf.c.bak | 629 --
SRC/zgsrfs.c | 460 --
SRC/zgssv.c | 227 -
SRC/zgssvx.c | 622 --
SRC/zgstrf.c | 436 --
SRC/zgstrs.c | 350 --
SRC/zlacon.c | 221 -
SRC/zlacon.c.bak | 221 -
SRC/zlangs.c | 119 -
SRC/zlaqgs.c | 147 -
SRC/zldperm.c | 168 -
SRC/zmemory.c | 701 ---
SRC/zmyblas2.c | 188 -
SRC/zpanel_bmod.c | 487 --
SRC/zpanel_dfs.c | 254 -
SRC/zpivotL.c | 185 -
SRC/zpivotgrowth.c | 114 -
SRC/zpruneL.c | 154 -
SRC/zreadhb.c | 267 -
SRC/zreadrb.c | 246 -
SRC/zreadtriple.c | 140 -
SRC/zsnode_bmod.c | 120 -
SRC/zsnode_dfs.c | 112 -
SRC/zsp_blas2.c | 573 --
SRC/zsp_blas3.c | 127 -
SRC/zutil.c | 475 --
SuperLU_5.2.0/._.gitignore | Bin 0 -> 239 bytes
SuperLU_5.2.0/._CBLAS | Bin 0 -> 239 bytes
SuperLU_5.2.0/._CMakeLists.txt | Bin 0 -> 239 bytes
SuperLU_5.2.0/._DOC | Bin 0 -> 239 bytes
SuperLU_5.2.0/._DoxyConfig | Bin 0 -> 239 bytes
SuperLU_5.2.0/._EXAMPLE | Bin 0 -> 239 bytes
SuperLU_5.2.0/._FORTRAN | Bin 0 -> 239 bytes
SuperLU_5.2.0/._INSTALL | Bin 0 -> 239 bytes
SuperLU_5.2.0/._License.txt | Bin 0 -> 239 bytes
SuperLU_5.2.0/._MAKE_INC | Bin 0 -> 239 bytes
SuperLU_5.2.0/._MATLAB | Bin 0 -> 239 bytes
SuperLU_5.2.0/._Makefile | Bin 0 -> 239 bytes
SuperLU_5.2.0/._README | Bin 0 -> 239 bytes
SuperLU_5.2.0/._SRC | Bin 0 -> 239 bytes
SuperLU_5.2.0/._TESTING | Bin 0 -> 239 bytes
SuperLU_5.2.0/._cmake | Bin 0 -> 239 bytes
SuperLU_5.2.0/._lib | Bin 0 -> 239 bytes
SuperLU_5.2.0/._make.inc.in | Bin 0 -> 239 bytes
SuperLU_5.2.0/.gitignore | 9 +
SuperLU_5.2.0/CBLAS/._CMakeLists.txt | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._Makefile | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._caxpy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._ccopy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._cdotc.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._cgemv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._cgerc.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._chemv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._cher2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._cscal.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._cswap.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._ctrsv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dasum.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._daxpy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dcabs1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dcopy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._ddot.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dgemv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dger.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dnrm2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._drot.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dscal.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dswap.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dsymv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dsyr2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dtrsv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dzasum.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._dznrm2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._f2c.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._icamax.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._idamax.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._isamax.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._izamax.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._sasum.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._saxpy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._scasum.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._scnrm2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._scopy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._sdot.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._sgemv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._sger.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._slu_Cnames.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._snrm2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._srot.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._sscal.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._sswap.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._ssymv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._ssyr2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._strsv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._superlu_f2c.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._zaxpy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._zcopy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._zdotc.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._zgemv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._zgerc.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._zhemv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._zher2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._zscal.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._zswap.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/._ztrsv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/CBLAS/CMakeLists.txt | 82 +
SuperLU_5.2.0/CBLAS/Makefile | 86 +
{CBLAS => SuperLU_5.2.0/CBLAS}/caxpy.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/ccopy.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/cdotc.c | 0
SuperLU_5.2.0/CBLAS/cgemv.c | 394 ++
SuperLU_5.2.0/CBLAS/cgerc.c | 205 +
SuperLU_5.2.0/CBLAS/chemv.c | 420 ++
SuperLU_5.2.0/CBLAS/cher2.c | 435 ++
{CBLAS => SuperLU_5.2.0/CBLAS}/cscal.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/cswap.c | 0
SuperLU_5.2.0/CBLAS/ctrsv.c | 508 ++
{CBLAS => SuperLU_5.2.0/CBLAS}/dasum.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/daxpy.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/dcabs1.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/dcopy.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/ddot.c | 0
SuperLU_5.2.0/CBLAS/dgemv.c | 295 +
SuperLU_5.2.0/CBLAS/dger.c | 180 +
{CBLAS => SuperLU_5.2.0/CBLAS}/dnrm2.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/drot.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/dscal.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/dswap.c | 0
SuperLU_5.2.0/CBLAS/dsymv.c | 299 +
SuperLU_5.2.0/CBLAS/dsyr2.c | 262 +
SuperLU_5.2.0/CBLAS/dtrsv.c | 337 ++
{CBLAS => SuperLU_5.2.0/CBLAS}/dzasum.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/dznrm2.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/f2c.h | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/icamax.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/idamax.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/isamax.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/izamax.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/sasum.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/saxpy.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/scasum.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/scnrm2.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/scopy.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/sdot.c | 0
SuperLU_5.2.0/CBLAS/sgemv.c | 298 +
SuperLU_5.2.0/CBLAS/sger.c | 181 +
SuperLU_5.2.0/CBLAS/slu_Cnames.h | 442 ++
{CBLAS => SuperLU_5.2.0/CBLAS}/snrm2.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/srot.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/sscal.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/sswap.c | 0
SuperLU_5.2.0/CBLAS/ssymv.c | 299 +
SuperLU_5.2.0/CBLAS/ssyr2.c | 261 +
SuperLU_5.2.0/CBLAS/strsv.c | 334 ++
{CBLAS => SuperLU_5.2.0/CBLAS}/superlu_f2c.h | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/zaxpy.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/zcopy.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/zdotc.c | 0
SuperLU_5.2.0/CBLAS/zgemv.c | 396 ++
SuperLU_5.2.0/CBLAS/zgerc.c | 207 +
SuperLU_5.2.0/CBLAS/zhemv.c | 417 ++
SuperLU_5.2.0/CBLAS/zher2.c | 436 ++
{CBLAS => SuperLU_5.2.0/CBLAS}/zscal.c | 0
{CBLAS => SuperLU_5.2.0/CBLAS}/zswap.c | 0
SuperLU_5.2.0/CBLAS/ztrsv.c | 508 ++
SuperLU_5.2.0/CMakeLists.txt | 143 +
SuperLU_5.2.0/DOC/._html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/._ug.pdf | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._EXAMPLE_2sp__ienv_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._SRC_2sp__ienv_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._annotated.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ccolumn__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ccolumn__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ccopy__to__ucol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cdiagonal_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cfgmr_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cgscon_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cgsequ_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cgsisx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cgsitrf_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cgsrfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cgssv_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cgssvx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cgstrf_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cgstrs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._citersol1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._citersol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._clacon_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._clangs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._claqgs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cldperm_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._clinsol1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._clinsol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._clinsolx1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._clinsolx2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._clinsolx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cmemory_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cmyblas2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._colamd_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._colamd_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cpanel__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cpanel__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cpivotL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cpivotgrowth_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cpruneL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._creadhb_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._creadrb_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._creadtriple_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._csnode__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._csnode__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._csp__blas2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._csp__blas3_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._cutil_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dcolumn__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dcolumn__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dcomplex_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dcopy__to__ucol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ddiagonal_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dfgmr_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dgscon_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dgsequ_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dgsisx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dgsitrf_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dgsrfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dgssv_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dgssvx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dgstrf_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dgstrs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ditersol1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ditersol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dlacon_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dlangs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dlaqgs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dldperm_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dlinsol1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dlinsol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dlinsolx1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dlinsolx2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dlinsolx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dmemory_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dmyblas2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._doxygen.css | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._doxygen.png | Bin 0 -> 367 bytes
SuperLU_5.2.0/DOC/html/._dpanel__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dpanel__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dpivotL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dpivotgrowth_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dpruneL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dreadhb_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dreadrb_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dreadtriple_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dsnode__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dsnode__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dsp__blas2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dsp__blas3_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dutil_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._dzsum1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._fgmr_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._files.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._functions.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._functions_vars.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._get__perm__c_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._globals.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._globals_defs.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._globals_enum.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._globals_eval.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._globals_func.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._globals_type.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._globals_vars.html | Bin 0 -> 239 bytes
.../DOC/html/._heap__relax__snode_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._html__mainpage_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._icmax1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__ccolumn__dfs_8c.html | Bin 0 -> 239 bytes
.../DOC/html/._ilu__ccopy__to__ucol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__cdrop__row_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__cpanel__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__cpivotL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__csnode__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__dcolumn__dfs_8c.html | Bin 0 -> 239 bytes
.../DOC/html/._ilu__dcopy__to__ucol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__ddrop__row_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__dpanel__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__dpivotL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__dsnode__dfs_8c.html | Bin 0 -> 239 bytes
.../DOC/html/._ilu__heap__relax__snode_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__relax__snode_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__scolumn__dfs_8c.html | Bin 0 -> 239 bytes
.../DOC/html/._ilu__scopy__to__ucol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__sdrop__row_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__spanel__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__spivotL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__ssnode__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__zcolumn__dfs_8c.html | Bin 0 -> 239 bytes
.../DOC/html/._ilu__zcopy__to__ucol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__zdrop__row_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__zpanel__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__zpivotL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ilu__zsnode__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._index.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._izmax1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._mark__relax_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._mc64ad_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._memory_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._mmd_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._qselect_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._relax__snode_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._scolumn__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._scolumn__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._scomplex_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._scopy__to__ucol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._scsum1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sdiagonal_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sfgmr_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sgscon_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sgsequ_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sgsisx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sgsitrf_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sgsrfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sgssv_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sgssvx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sgstrf_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sgstrs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sitersol1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sitersol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slacon_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slangs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slaqgs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sldperm_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slinsol1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slinsol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slinsolx1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slinsolx2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slinsolx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slu__Cnames_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slu__cdefs_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slu__dcomplex_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slu__ddefs_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slu__scomplex_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slu__sdefs_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slu__util_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._slu__zdefs_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._smemory_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._smyblas2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sp__coletree_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sp__preorder_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._spanel__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._spanel__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._spivotL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._spivotgrowth_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._spruneL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sreadhb_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sreadrb_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sreadtriple_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ssnode__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ssnode__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ssp__blas2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._ssp__blas3_8c.html | Bin 0 -> 239 bytes
.../DOC/html/._structColamd__Col__struct.html | Bin 0 -> 239 bytes
.../DOC/html/._structColamd__Row__struct.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structDNformat.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structGlobalLU__t.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structLU__stack__t.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structNCPformat.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structNCformat.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structNRformat.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structNRformat__loc.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structSCPformat.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structSCformat.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structSuperLUStat__t.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structSuperMatrix.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structcomplex.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structdoublecomplex.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structe__node.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._structmem__usage__t.html | Bin 0 -> 239 bytes
.../DOC/html/._structsuperlu__options__t.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._superlu_8c.html | Bin 0 -> 239 bytes
.../DOC/html/._superlu__enum__consts_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._superlu__timer_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._supermatrix_8h.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._sutil_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._tabs.css | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._util_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zcolumn__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zcolumn__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zcopy__to__ucol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zdiagonal_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zfgmr_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zgscon_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zgsequ_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zgsisx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zgsitrf_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zgsrfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zgssv_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zgssvx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zgstrf_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zgstrs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zitersol1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zitersol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zlacon_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zlangs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zlaqgs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zldperm_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zlinsol1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zlinsol_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zlinsolx1_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zlinsolx2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zlinsolx_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zmemory_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zmyblas2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zpanel__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zpanel__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zpivotL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zpivotgrowth_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zpruneL_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zreadhb_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zreadrb_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zreadtriple_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zsnode__bmod_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zsnode__dfs_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zsp__blas2_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zsp__blas3_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/._zutil_8c.html | Bin 0 -> 239 bytes
SuperLU_5.2.0/DOC/html/EXAMPLE_2sp__ienv_8c.html | 136 +
SuperLU_5.2.0/DOC/html/SRC_2sp__ienv_8c.html | 136 +
SuperLU_5.2.0/DOC/html/annotated.html | 80 +
SuperLU_5.2.0/DOC/html/ccolumn__bmod_8c.html | 321 +
SuperLU_5.2.0/DOC/html/ccolumn__dfs_8c.html | 238 +
SuperLU_5.2.0/DOC/html/ccopy__to__ucol_8c.html | 161 +
SuperLU_5.2.0/DOC/html/cdiagonal_8c.html | 152 +
SuperLU_5.2.0/DOC/html/cfgmr_8c.html | 267 +
SuperLU_5.2.0/DOC/html/cgscon_8c.html | 185 +
SuperLU_5.2.0/DOC/html/cgsequ_8c.html | 194 +
SuperLU_5.2.0/DOC/html/cgsisx_8c.html | 528 ++
SuperLU_5.2.0/DOC/html/cgsitrf_8c.html | 299 +
SuperLU_5.2.0/DOC/html/cgsrfs_8c.html | 287 +
SuperLU_5.2.0/DOC/html/cgssv_8c.html | 239 +
SuperLU_5.2.0/DOC/html/cgssvx_8c.html | 481 ++
SuperLU_5.2.0/DOC/html/cgstrf_8c.html | 309 +
SuperLU_5.2.0/DOC/html/cgstrs_8c.html | 368 ++
SuperLU_5.2.0/DOC/html/citersol1_8c.html | 399 ++
SuperLU_5.2.0/DOC/html/citersol_8c.html | 371 ++
SuperLU_5.2.0/DOC/html/clacon_8c.html | 173 +
SuperLU_5.2.0/DOC/html/clangs_8c.html | 151 +
SuperLU_5.2.0/DOC/html/claqgs_8c.html | 208 +
SuperLU_5.2.0/DOC/html/cldperm_8c.html | 324 +
SuperLU_5.2.0/DOC/html/clinsol1_8c.html | 117 +
SuperLU_5.2.0/DOC/html/clinsol_8c.html | 117 +
SuperLU_5.2.0/DOC/html/clinsolx1_8c.html | 169 +
SuperLU_5.2.0/DOC/html/clinsolx2_8c.html | 169 +
SuperLU_5.2.0/DOC/html/clinsolx_8c.html | 169 +
SuperLU_5.2.0/DOC/html/cmemory_8c.html | 1047 ++++
SuperLU_5.2.0/DOC/html/cmyblas2_8c.html | 236 +
SuperLU_5.2.0/DOC/html/colamd_8c.html | 1790 ++++++
SuperLU_5.2.0/DOC/html/colamd_8h.html | 806 +++
SuperLU_5.2.0/DOC/html/cpanel__bmod_8c.html | 302 +
SuperLU_5.2.0/DOC/html/cpanel__dfs_8c.html | 216 +
SuperLU_5.2.0/DOC/html/cpivotL_8c.html | 188 +
SuperLU_5.2.0/DOC/html/cpivotgrowth_8c.html | 162 +
SuperLU_5.2.0/DOC/html/cpruneL_8c.html | 163 +
SuperLU_5.2.0/DOC/html/creadhb_8c.html | 447 ++
SuperLU_5.2.0/DOC/html/creadrb_8c.html | 437 ++
SuperLU_5.2.0/DOC/html/creadtriple_8c.html | 176 +
SuperLU_5.2.0/DOC/html/csnode__bmod_8c.html | 161 +
SuperLU_5.2.0/DOC/html/csnode__dfs_8c.html | 178 +
SuperLU_5.2.0/DOC/html/csp__blas2_8c.html | 451 ++
SuperLU_5.2.0/DOC/html/csp__blas3_8c.html | 239 +
SuperLU_5.2.0/DOC/html/cutil_8c.html | 1014 ++++
SuperLU_5.2.0/DOC/html/dcolumn__bmod_8c.html | 321 +
SuperLU_5.2.0/DOC/html/dcolumn__dfs_8c.html | 238 +
SuperLU_5.2.0/DOC/html/dcomplex_8c.html | 288 +
SuperLU_5.2.0/DOC/html/dcopy__to__ucol_8c.html | 161 +
SuperLU_5.2.0/DOC/html/ddiagonal_8c.html | 161 +
SuperLU_5.2.0/DOC/html/dfgmr_8c.html | 261 +
SuperLU_5.2.0/DOC/html/dgscon_8c.html | 185 +
SuperLU_5.2.0/DOC/html/dgsequ_8c.html | 194 +
SuperLU_5.2.0/DOC/html/dgsisx_8c.html | 516 ++
SuperLU_5.2.0/DOC/html/dgsitrf_8c.html | 299 +
SuperLU_5.2.0/DOC/html/dgsrfs_8c.html | 287 +
SuperLU_5.2.0/DOC/html/dgssv_8c.html | 239 +
SuperLU_5.2.0/DOC/html/dgssvx_8c.html | 481 ++
SuperLU_5.2.0/DOC/html/dgstrf_8c.html | 309 +
SuperLU_5.2.0/DOC/html/dgstrs_8c.html | 368 ++
SuperLU_5.2.0/DOC/html/ditersol1_8c.html | 399 ++
SuperLU_5.2.0/DOC/html/ditersol_8c.html | 371 ++
SuperLU_5.2.0/DOC/html/dlacon_8c.html | 228 +
SuperLU_5.2.0/DOC/html/dlangs_8c.html | 142 +
SuperLU_5.2.0/DOC/html/dlaqgs_8c.html | 208 +
SuperLU_5.2.0/DOC/html/dldperm_8c.html | 324 +
SuperLU_5.2.0/DOC/html/dlinsol1_8c.html | 117 +
SuperLU_5.2.0/DOC/html/dlinsol_8c.html | 117 +
SuperLU_5.2.0/DOC/html/dlinsolx1_8c.html | 169 +
SuperLU_5.2.0/DOC/html/dlinsolx2_8c.html | 169 +
SuperLU_5.2.0/DOC/html/dlinsolx_8c.html | 169 +
SuperLU_5.2.0/DOC/html/dmemory_8c.html | 1046 ++++
SuperLU_5.2.0/DOC/html/dmyblas2_8c.html | 219 +
SuperLU_5.2.0/DOC/html/doxygen.css | 1366 +++++
SuperLU_5.2.0/DOC/html/doxygen.png | Bin 0 -> 3779 bytes
SuperLU_5.2.0/DOC/html/dpanel__bmod_8c.html | 302 +
SuperLU_5.2.0/DOC/html/dpanel__dfs_8c.html | 216 +
SuperLU_5.2.0/DOC/html/dpivotL_8c.html | 179 +
SuperLU_5.2.0/DOC/html/dpivotgrowth_8c.html | 162 +
SuperLU_5.2.0/DOC/html/dpruneL_8c.html | 163 +
SuperLU_5.2.0/DOC/html/dreadhb_8c.html | 446 ++
SuperLU_5.2.0/DOC/html/dreadrb_8c.html | 436 ++
SuperLU_5.2.0/DOC/html/dreadtriple_8c.html | 176 +
SuperLU_5.2.0/DOC/html/dsnode__bmod_8c.html | 161 +
SuperLU_5.2.0/DOC/html/dsnode__dfs_8c.html | 178 +
SuperLU_5.2.0/DOC/html/dsp__blas2_8c.html | 444 ++
SuperLU_5.2.0/DOC/html/dsp__blas3_8c.html | 239 +
SuperLU_5.2.0/DOC/html/dutil_8c.html | 1005 ++++
SuperLU_5.2.0/DOC/html/dzsum1_8c.html | 169 +
SuperLU_5.2.0/DOC/html/fgmr_8c.html | 360 ++
SuperLU_5.2.0/DOC/html/files.html | 305 +
SuperLU_5.2.0/DOC/html/functions.html | 508 ++
SuperLU_5.2.0/DOC/html/functions_vars.html | 508 ++
SuperLU_5.2.0/DOC/html/get__perm__c_8c.html | 454 ++
SuperLU_5.2.0/DOC/html/globals.html | 101 +
SuperLU_5.2.0/DOC/html/globals_defs.html | 575 ++
SuperLU_5.2.0/DOC/html/globals_enum.html | 114 +
SuperLU_5.2.0/DOC/html/globals_eval.html | 412 ++
SuperLU_5.2.0/DOC/html/globals_func.html | 98 +
SuperLU_5.2.0/DOC/html/globals_type.html | 96 +
SuperLU_5.2.0/DOC/html/globals_vars.html | 196 +
SuperLU_5.2.0/DOC/html/heap__relax__snode_8c.html | 154 +
SuperLU_5.2.0/DOC/html/html__mainpage_8h.html | 67 +
SuperLU_5.2.0/DOC/html/icmax1_8c.html | 161 +
SuperLU_5.2.0/DOC/html/ilu__ccolumn__dfs_8c.html | 206 +
.../DOC/html/ilu__ccopy__to__ucol_8c.html | 242 +
SuperLU_5.2.0/DOC/html/ilu__cdrop__row_8c.html | 520 ++
SuperLU_5.2.0/DOC/html/ilu__cpanel__dfs_8c.html | 219 +
SuperLU_5.2.0/DOC/html/ilu__cpivotL_8c.html | 235 +
SuperLU_5.2.0/DOC/html/ilu__csnode__dfs_8c.html | 166 +
SuperLU_5.2.0/DOC/html/ilu__dcolumn__dfs_8c.html | 206 +
.../DOC/html/ilu__dcopy__to__ucol_8c.html | 242 +
SuperLU_5.2.0/DOC/html/ilu__ddrop__row_8c.html | 529 ++
SuperLU_5.2.0/DOC/html/ilu__dpanel__dfs_8c.html | 210 +
SuperLU_5.2.0/DOC/html/ilu__dpivotL_8c.html | 226 +
SuperLU_5.2.0/DOC/html/ilu__dsnode__dfs_8c.html | 166 +
.../DOC/html/ilu__heap__relax__snode_8c.html | 155 +
SuperLU_5.2.0/DOC/html/ilu__relax__snode_8c.html | 155 +
SuperLU_5.2.0/DOC/html/ilu__scolumn__dfs_8c.html | 206 +
.../DOC/html/ilu__scopy__to__ucol_8c.html | 242 +
SuperLU_5.2.0/DOC/html/ilu__sdrop__row_8c.html | 529 ++
SuperLU_5.2.0/DOC/html/ilu__spanel__dfs_8c.html | 210 +
SuperLU_5.2.0/DOC/html/ilu__spivotL_8c.html | 226 +
SuperLU_5.2.0/DOC/html/ilu__ssnode__dfs_8c.html | 166 +
SuperLU_5.2.0/DOC/html/ilu__zcolumn__dfs_8c.html | 206 +
.../DOC/html/ilu__zcopy__to__ucol_8c.html | 242 +
SuperLU_5.2.0/DOC/html/ilu__zdrop__row_8c.html | 520 ++
SuperLU_5.2.0/DOC/html/ilu__zpanel__dfs_8c.html | 219 +
SuperLU_5.2.0/DOC/html/ilu__zpivotL_8c.html | 235 +
SuperLU_5.2.0/DOC/html/ilu__zsnode__dfs_8c.html | 166 +
SuperLU_5.2.0/DOC/html/index.html | 53 +
SuperLU_5.2.0/DOC/html/izmax1_8c.html | 161 +
SuperLU_5.2.0/DOC/html/mark__relax_8c.html | 153 +
SuperLU_5.2.0/DOC/html/mc64ad_8c.html | 951 +++
SuperLU_5.2.0/DOC/html/memory_8c.html | 321 +
SuperLU_5.2.0/DOC/html/mmd_8c.html | 498 ++
SuperLU_5.2.0/DOC/html/qselect_8c.html | 155 +
SuperLU_5.2.0/DOC/html/relax__snode_8c.html | 154 +
SuperLU_5.2.0/DOC/html/scolumn__bmod_8c.html | 321 +
SuperLU_5.2.0/DOC/html/scolumn__dfs_8c.html | 238 +
SuperLU_5.2.0/DOC/html/scomplex_8c.html | 288 +
SuperLU_5.2.0/DOC/html/scopy__to__ucol_8c.html | 161 +
SuperLU_5.2.0/DOC/html/scsum1_8c.html | 169 +
SuperLU_5.2.0/DOC/html/sdiagonal_8c.html | 161 +
SuperLU_5.2.0/DOC/html/sfgmr_8c.html | 261 +
SuperLU_5.2.0/DOC/html/sgscon_8c.html | 185 +
SuperLU_5.2.0/DOC/html/sgsequ_8c.html | 194 +
SuperLU_5.2.0/DOC/html/sgsisx_8c.html | 516 ++
SuperLU_5.2.0/DOC/html/sgsitrf_8c.html | 299 +
SuperLU_5.2.0/DOC/html/sgsrfs_8c.html | 287 +
SuperLU_5.2.0/DOC/html/sgssv_8c.html | 239 +
SuperLU_5.2.0/DOC/html/sgssvx_8c.html | 481 ++
SuperLU_5.2.0/DOC/html/sgstrf_8c.html | 309 +
SuperLU_5.2.0/DOC/html/sgstrs_8c.html | 368 ++
SuperLU_5.2.0/DOC/html/sitersol1_8c.html | 399 ++
SuperLU_5.2.0/DOC/html/sitersol_8c.html | 371 ++
SuperLU_5.2.0/DOC/html/slacon_8c.html | 228 +
SuperLU_5.2.0/DOC/html/slangs_8c.html | 142 +
SuperLU_5.2.0/DOC/html/slaqgs_8c.html | 208 +
SuperLU_5.2.0/DOC/html/sldperm_8c.html | 324 +
SuperLU_5.2.0/DOC/html/slinsol1_8c.html | 117 +
SuperLU_5.2.0/DOC/html/slinsol_8c.html | 117 +
SuperLU_5.2.0/DOC/html/slinsolx1_8c.html | 169 +
SuperLU_5.2.0/DOC/html/slinsolx2_8c.html | 169 +
SuperLU_5.2.0/DOC/html/slinsolx_8c.html | 169 +
SuperLU_5.2.0/DOC/html/slu__Cnames_8h.html | 193 +
SuperLU_5.2.0/DOC/html/slu__cdefs_8h.html | 6304 ++++++++++++++++++++
SuperLU_5.2.0/DOC/html/slu__dcomplex_8h.html | 526 ++
SuperLU_5.2.0/DOC/html/slu__ddefs_8h.html | 6233 +++++++++++++++++++
SuperLU_5.2.0/DOC/html/slu__scomplex_8h.html | 526 ++
SuperLU_5.2.0/DOC/html/slu__sdefs_8h.html | 6233 +++++++++++++++++++
SuperLU_5.2.0/DOC/html/slu__util_8h.html | 2254 +++++++
SuperLU_5.2.0/DOC/html/slu__zdefs_8h.html | 6304 ++++++++++++++++++++
SuperLU_5.2.0/DOC/html/smemory_8c.html | 1046 ++++
SuperLU_5.2.0/DOC/html/smyblas2_8c.html | 219 +
SuperLU_5.2.0/DOC/html/sp__coletree_8c.html | 573 ++
SuperLU_5.2.0/DOC/html/sp__preorder_8c.html | 206 +
SuperLU_5.2.0/DOC/html/spanel__bmod_8c.html | 302 +
SuperLU_5.2.0/DOC/html/spanel__dfs_8c.html | 216 +
SuperLU_5.2.0/DOC/html/spivotL_8c.html | 179 +
SuperLU_5.2.0/DOC/html/spivotgrowth_8c.html | 162 +
SuperLU_5.2.0/DOC/html/spruneL_8c.html | 163 +
SuperLU_5.2.0/DOC/html/sreadhb_8c.html | 446 ++
SuperLU_5.2.0/DOC/html/sreadrb_8c.html | 436 ++
SuperLU_5.2.0/DOC/html/sreadtriple_8c.html | 176 +
SuperLU_5.2.0/DOC/html/ssnode__bmod_8c.html | 161 +
SuperLU_5.2.0/DOC/html/ssnode__dfs_8c.html | 178 +
SuperLU_5.2.0/DOC/html/ssp__blas2_8c.html | 444 ++
SuperLU_5.2.0/DOC/html/ssp__blas3_8c.html | 239 +
.../DOC/html/structColamd__Col__struct.html | 283 +
.../DOC/html/structColamd__Row__struct.html | 183 +
SuperLU_5.2.0/DOC/html/structDNformat.html | 97 +
SuperLU_5.2.0/DOC/html/structGlobalLU__t.html | 314 +
SuperLU_5.2.0/DOC/html/structLU__stack__t.html | 139 +
SuperLU_5.2.0/DOC/html/structNCPformat.html | 139 +
SuperLU_5.2.0/DOC/html/structNCformat.html | 125 +
SuperLU_5.2.0/DOC/html/structNRformat.html | 125 +
SuperLU_5.2.0/DOC/html/structNRformat__loc.html | 153 +
SuperLU_5.2.0/DOC/html/structSCPformat.html | 223 +
SuperLU_5.2.0/DOC/html/structSCformat.html | 181 +
SuperLU_5.2.0/DOC/html/structSuperLUStat__t.html | 153 +
SuperLU_5.2.0/DOC/html/structSuperMatrix.html | 153 +
SuperLU_5.2.0/DOC/html/structcomplex.html | 97 +
SuperLU_5.2.0/DOC/html/structdoublecomplex.html | 97 +
SuperLU_5.2.0/DOC/html/structe__node.html | 100 +
SuperLU_5.2.0/DOC/html/structmem__usage__t.html | 97 +
.../DOC/html/structsuperlu__options__t.html | 447 ++
SuperLU_5.2.0/DOC/html/superlu_8c.html | 125 +
.../DOC/html/superlu__enum__consts_8h.html | 491 ++
SuperLU_5.2.0/DOC/html/superlu__timer_8c.html | 109 +
SuperLU_5.2.0/DOC/html/supermatrix_8h.html | 222 +
SuperLU_5.2.0/DOC/html/sutil_8c.html | 1005 ++++
SuperLU_5.2.0/DOC/html/tabs.css | 60 +
SuperLU_5.2.0/DOC/html/util_8c.html | 923 +++
SuperLU_5.2.0/DOC/html/zcolumn__bmod_8c.html | 321 +
SuperLU_5.2.0/DOC/html/zcolumn__dfs_8c.html | 238 +
SuperLU_5.2.0/DOC/html/zcopy__to__ucol_8c.html | 161 +
SuperLU_5.2.0/DOC/html/zdiagonal_8c.html | 152 +
SuperLU_5.2.0/DOC/html/zfgmr_8c.html | 267 +
SuperLU_5.2.0/DOC/html/zgscon_8c.html | 185 +
SuperLU_5.2.0/DOC/html/zgsequ_8c.html | 194 +
SuperLU_5.2.0/DOC/html/zgsisx_8c.html | 516 ++
SuperLU_5.2.0/DOC/html/zgsitrf_8c.html | 299 +
SuperLU_5.2.0/DOC/html/zgsrfs_8c.html | 287 +
SuperLU_5.2.0/DOC/html/zgssv_8c.html | 239 +
SuperLU_5.2.0/DOC/html/zgssvx_8c.html | 481 ++
SuperLU_5.2.0/DOC/html/zgstrf_8c.html | 309 +
SuperLU_5.2.0/DOC/html/zgstrs_8c.html | 368 ++
SuperLU_5.2.0/DOC/html/zitersol1_8c.html | 399 ++
SuperLU_5.2.0/DOC/html/zitersol_8c.html | 371 ++
SuperLU_5.2.0/DOC/html/zlacon_8c.html | 173 +
SuperLU_5.2.0/DOC/html/zlangs_8c.html | 151 +
SuperLU_5.2.0/DOC/html/zlaqgs_8c.html | 208 +
SuperLU_5.2.0/DOC/html/zldperm_8c.html | 324 +
SuperLU_5.2.0/DOC/html/zlinsol1_8c.html | 117 +
SuperLU_5.2.0/DOC/html/zlinsol_8c.html | 117 +
SuperLU_5.2.0/DOC/html/zlinsolx1_8c.html | 169 +
SuperLU_5.2.0/DOC/html/zlinsolx2_8c.html | 169 +
SuperLU_5.2.0/DOC/html/zlinsolx_8c.html | 169 +
SuperLU_5.2.0/DOC/html/zmemory_8c.html | 1047 ++++
SuperLU_5.2.0/DOC/html/zmyblas2_8c.html | 236 +
SuperLU_5.2.0/DOC/html/zpanel__bmod_8c.html | 302 +
SuperLU_5.2.0/DOC/html/zpanel__dfs_8c.html | 216 +
SuperLU_5.2.0/DOC/html/zpivotL_8c.html | 188 +
SuperLU_5.2.0/DOC/html/zpivotgrowth_8c.html | 162 +
SuperLU_5.2.0/DOC/html/zpruneL_8c.html | 163 +
SuperLU_5.2.0/DOC/html/zreadhb_8c.html | 447 ++
SuperLU_5.2.0/DOC/html/zreadrb_8c.html | 437 ++
SuperLU_5.2.0/DOC/html/zreadtriple_8c.html | 176 +
SuperLU_5.2.0/DOC/html/zsnode__bmod_8c.html | 161 +
SuperLU_5.2.0/DOC/html/zsnode__dfs_8c.html | 178 +
SuperLU_5.2.0/DOC/html/zsp__blas2_8c.html | 451 ++
SuperLU_5.2.0/DOC/html/zsp__blas3_8c.html | 239 +
SuperLU_5.2.0/DOC/html/zutil_8c.html | 1014 ++++
SuperLU_5.2.0/DOC/ug.pdf | Bin 0 -> 687318 bytes
SuperLU_5.2.0/DoxyConfig | 1356 +++++
SuperLU_5.2.0/EXAMPLE/._.gitignore | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._Makefile | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._README | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._cfgmr.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._cg20.cua | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._citersol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._citersol1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._clinsol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._clinsol1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._clinsolx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._clinsolx1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._clinsolx2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._clinsolx3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._cmat.cua | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._dfgmr.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._ditersol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._ditersol1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._dlinsol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._dlinsol1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._dlinsolx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._dlinsolx1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._dlinsolx2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._dlinsolx3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._fgmr.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._g20.rua | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._sfgmr.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._sitersol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._sitersol1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._slinsol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._slinsol1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._slinsolx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._slinsolx1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._slinsolx2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._slinsolx3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._sp_ienv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._superlu.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._zfgmr.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._zitersol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._zitersol1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._zlinsol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._zlinsol1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._zlinsolx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._zlinsolx1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._zlinsolx2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/._zlinsolx3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/EXAMPLE/.gitignore | 34 +
SuperLU_5.2.0/EXAMPLE/Makefile | 197 +
SuperLU_5.2.0/EXAMPLE/README | 55 +
SuperLU_5.2.0/EXAMPLE/cfgmr.c | 344 ++
{EXAMPLE => SuperLU_5.2.0/EXAMPLE}/cg20.cua | 0
SuperLU_5.2.0/EXAMPLE/citersol.c | 386 ++
SuperLU_5.2.0/EXAMPLE/citersol1.c | 395 ++
SuperLU_5.2.0/EXAMPLE/clinsol.c | 126 +
SuperLU_5.2.0/EXAMPLE/clinsol1.c | 131 +
SuperLU_5.2.0/EXAMPLE/clinsolx.c | 226 +
SuperLU_5.2.0/EXAMPLE/clinsolx1.c | 257 +
SuperLU_5.2.0/EXAMPLE/clinsolx2.c | 293 +
SuperLU_5.2.0/EXAMPLE/clinsolx3.c | 288 +
{EXAMPLE => SuperLU_5.2.0/EXAMPLE}/cmat.cua | 0
SuperLU_5.2.0/EXAMPLE/dfgmr.c | 308 +
SuperLU_5.2.0/EXAMPLE/ditersol.c | 384 ++
SuperLU_5.2.0/EXAMPLE/ditersol1.c | 393 ++
SuperLU_5.2.0/EXAMPLE/dlinsol.c | 126 +
SuperLU_5.2.0/EXAMPLE/dlinsol1.c | 131 +
SuperLU_5.2.0/EXAMPLE/dlinsolx.c | 226 +
SuperLU_5.2.0/EXAMPLE/dlinsolx1.c | 257 +
SuperLU_5.2.0/EXAMPLE/dlinsolx2.c | 293 +
SuperLU_5.2.0/EXAMPLE/dlinsolx3.c | 288 +
SuperLU_5.2.0/EXAMPLE/fgmr.c | 273 +
{EXAMPLE => SuperLU_5.2.0/EXAMPLE}/g20.rua | 0
SuperLU_5.2.0/EXAMPLE/sfgmr.c | 308 +
SuperLU_5.2.0/EXAMPLE/sitersol.c | 384 ++
SuperLU_5.2.0/EXAMPLE/sitersol1.c | 393 ++
SuperLU_5.2.0/EXAMPLE/slinsol.c | 126 +
SuperLU_5.2.0/EXAMPLE/slinsol1.c | 131 +
SuperLU_5.2.0/EXAMPLE/slinsolx.c | 226 +
SuperLU_5.2.0/EXAMPLE/slinsolx1.c | 257 +
SuperLU_5.2.0/EXAMPLE/slinsolx2.c | 293 +
SuperLU_5.2.0/EXAMPLE/slinsolx3.c | 288 +
SuperLU_5.2.0/EXAMPLE/sp_ienv.c | 89 +
SuperLU_5.2.0/EXAMPLE/superlu.c | 94 +
SuperLU_5.2.0/EXAMPLE/zfgmr.c | 344 ++
SuperLU_5.2.0/EXAMPLE/zitersol.c | 386 ++
SuperLU_5.2.0/EXAMPLE/zitersol1.c | 395 ++
SuperLU_5.2.0/EXAMPLE/zlinsol.c | 126 +
SuperLU_5.2.0/EXAMPLE/zlinsol1.c | 131 +
SuperLU_5.2.0/EXAMPLE/zlinsolx.c | 226 +
SuperLU_5.2.0/EXAMPLE/zlinsolx1.c | 257 +
SuperLU_5.2.0/EXAMPLE/zlinsolx2.c | 293 +
SuperLU_5.2.0/EXAMPLE/zlinsolx3.c | 288 +
SuperLU_5.2.0/FORTRAN/._Makefile | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._README | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._c_fortran_cgssv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._c_fortran_dgssv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._c_fortran_sgssv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._c_fortran_zgssv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._f77_main.f | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._f77exm.out | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._hbcode1.f | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._test_omp.F | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._z_f77_main.f | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/._zhbcode1.f | Bin 0 -> 239 bytes
SuperLU_5.2.0/FORTRAN/Makefile | 40 +
SuperLU_5.2.0/FORTRAN/README | 16 +
SuperLU_5.2.0/FORTRAN/c_fortran_cgssv.c | 188 +
SuperLU_5.2.0/FORTRAN/c_fortran_dgssv.c | 188 +
SuperLU_5.2.0/FORTRAN/c_fortran_sgssv.c | 188 +
SuperLU_5.2.0/FORTRAN/c_fortran_zgssv.c | 188 +
SuperLU_5.2.0/FORTRAN/f77_main.f | 58 +
{FORTRAN => SuperLU_5.2.0/FORTRAN}/f77exm.out | 0
{FORTRAN => SuperLU_5.2.0/FORTRAN}/hbcode1.f | 0
SuperLU_5.2.0/FORTRAN/test_omp.F | 130 +
SuperLU_5.2.0/FORTRAN/z_f77_main.f | 60 +
{FORTRAN => SuperLU_5.2.0/FORTRAN}/zhbcode1.f | 0
SuperLU_5.2.0/INSTALL/._Makefile | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._dlamch.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._dlamchtst.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._dmach.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._dmachtst.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._install.csh | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._lsame.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._slamch.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._slamchtst.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._smach.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._smachtst.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._superlu_timer.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/._timertst.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/INSTALL/Makefile | 32 +
{INSTALL => SuperLU_5.2.0/INSTALL}/dlamch.c | 0
SuperLU_5.2.0/INSTALL/dlamchtst.c | 34 +
SuperLU_5.2.0/INSTALL/dmach.c | 84 +
SuperLU_5.2.0/INSTALL/dmachtst.c | 34 +
SuperLU_5.2.0/INSTALL/install.csh | 14 +
{INSTALL => SuperLU_5.2.0/INSTALL}/lsame.c | 0
{INSTALL => SuperLU_5.2.0/INSTALL}/slamch.c | 0
{INSTALL => SuperLU_5.2.0/INSTALL}/slamchtst.c | 0
SuperLU_5.2.0/INSTALL/smach.c | 84 +
SuperLU_5.2.0/INSTALL/smachtst.c | 34 +
{INSTALL => SuperLU_5.2.0/INSTALL}/superlu_timer.c | 0
{INSTALL => SuperLU_5.2.0/INSTALL}/timertst.c | 0
SuperLU_5.2.0/License.txt | 29 +
SuperLU_5.2.0/MAKE_INC/._make.alpha | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.altix | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.cray | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.cray_xc30 | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.cray_xe6 | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.hppa | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.inc | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.linux | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.mac-x | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.rs6k | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.scg1 | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.solaris | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/._make.sp | Bin 0 -> 239 bytes
SuperLU_5.2.0/MAKE_INC/make.alpha | 49 +
SuperLU_5.2.0/MAKE_INC/make.altix | 58 +
SuperLU_5.2.0/MAKE_INC/make.cray | 56 +
SuperLU_5.2.0/MAKE_INC/make.cray_xc30 | 64 +
SuperLU_5.2.0/MAKE_INC/make.cray_xe6 | 64 +
SuperLU_5.2.0/MAKE_INC/make.hppa | 58 +
{MAKE_INC => SuperLU_5.2.0/MAKE_INC}/make.inc | 0
SuperLU_5.2.0/MAKE_INC/make.linux | 65 +
SuperLU_5.2.0/MAKE_INC/make.mac-x | 65 +
SuperLU_5.2.0/MAKE_INC/make.rs6k | 61 +
SuperLU_5.2.0/MAKE_INC/make.scg1 | 65 +
SuperLU_5.2.0/MAKE_INC/make.solaris | 54 +
SuperLU_5.2.0/MAKE_INC/make.sp | 62 +
SuperLU_5.2.0/MATLAB/._Makefile | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._README | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._airfoil2.mat | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._babble.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._burble.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._copyright.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._hbo.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._isperm.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._lusolve.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._mexlusolve.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._mexlusolve.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._mexopts.sh.old | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._mexsuperlu.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._mexsuperlu.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._permutation.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._resetrandoms.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._smallmesh.mat | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._spart2.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._spypart.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._superlu.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._time.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._try2.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._try3.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._try4.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._trylusolve.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._trysuperlu.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._trytime.m | Bin 0 -> 239 bytes
SuperLU_5.2.0/MATLAB/._verbose.m | Bin 0 -> 239 bytes
{MATLAB => SuperLU_5.2.0/MATLAB}/Makefile | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/README | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/airfoil2.mat | Bin
{MATLAB => SuperLU_5.2.0/MATLAB}/babble.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/burble.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/copyright.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/hbo.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/isperm.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/lusolve.m | 0
SuperLU_5.2.0/MATLAB/mexlusolve.c | 163 +
{MATLAB => SuperLU_5.2.0/MATLAB}/mexlusolve.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/mexopts.sh.old | 0
SuperLU_5.2.0/MATLAB/mexsuperlu.c | 275 +
{MATLAB => SuperLU_5.2.0/MATLAB}/mexsuperlu.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/permutation.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/resetrandoms.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/smallmesh.mat | Bin
{MATLAB => SuperLU_5.2.0/MATLAB}/spart2.m | 0
SuperLU_5.2.0/MATLAB/spypart.m | 35 +
{MATLAB => SuperLU_5.2.0/MATLAB}/superlu.m | 0
SuperLU_5.2.0/MATLAB/time.m | 12 +
{MATLAB => SuperLU_5.2.0/MATLAB}/try2.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/try3.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/try4.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/trylusolve.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/trysuperlu.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/trytime.m | 0
{MATLAB => SuperLU_5.2.0/MATLAB}/verbose.m | 0
Makefile => SuperLU_5.2.0/Makefile | 0
SuperLU_5.2.0/README | 160 +
SuperLU_5.2.0/SRC/._CMakeLists.txt | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._Makefile | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ccolumn_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ccolumn_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ccopy_to_ucol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cdiagonal.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cgscon.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cgsequ.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cgsisx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cgsitrf.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cgsrfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cgssv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cgssvx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cgstrf.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cgstrs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._clacon.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._clacon2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._clangs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._claqgs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cldperm.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cmemory.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cmyblas2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._colamd.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._colamd.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cpanel_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cpanel_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cpivotL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cpivotgrowth.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cpruneL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._creadhb.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._creadrb.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._creadtriple.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._csnode_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._csnode_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._csp_blas2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._csp_blas3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._cutil.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dcolumn_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dcolumn_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dcomplex.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dcopy_to_ucol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ddiagonal.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dgscon.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dgsequ.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dgsisx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dgsitrf.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dgsrfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dgssv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dgssvx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dgstrf.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dgstrs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dlacon.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dlacon2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dlangs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dlaqgs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dldperm.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dmach.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dmemory.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dmyblas2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dpanel_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dpanel_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dpivotL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dpivotgrowth.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dpruneL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dreadhb.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dreadrb.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dreadtriple.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dsnode_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dsnode_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dsp_blas2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dsp_blas3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dutil.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._dzsum1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._get_perm_c.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._heap_relax_snode.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._html_mainpage.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._icmax1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_ccolumn_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_ccopy_to_ucol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_cdrop_row.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_cpanel_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_cpivotL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_csnode_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_dcolumn_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_dcopy_to_ucol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_ddrop_row.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_dpanel_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_dpivotL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_dsnode_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_heap_relax_snode.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_relax_snode.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_scolumn_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_scopy_to_ucol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_sdrop_row.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_spanel_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_spivotL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_ssnode_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_zcolumn_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_zcopy_to_ucol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_zdrop_row.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_zpanel_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_zpivotL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ilu_zsnode_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._input_error.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._izmax1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._mark_relax.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._mc64ad.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._memory.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._mmd.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._qselect.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._relax_snode.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._scolumn_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._scolumn_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._scomplex.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._scopy_to_ucol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._scsum1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sdiagonal.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sgscon.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sgsequ.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sgsisx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sgsitrf.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sgsrfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sgssv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sgssvx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sgstrf.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sgstrs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slacon.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slacon2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slangs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slaqgs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sldperm.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slu_Cnames.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slu_cdefs.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slu_dcomplex.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slu_ddefs.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slu_scomplex.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slu_sdefs.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slu_util.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._slu_zdefs.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._smach.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._smemory.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._smyblas2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sp_coletree.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sp_ienv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sp_preorder.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._spanel_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._spanel_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._spivotL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._spivotgrowth.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._spruneL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sreadhb.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sreadrb.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sreadtriple.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ssnode_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ssnode_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ssp_blas2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._ssp_blas3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._superlu_enum_consts.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._superlu_timer.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._supermatrix.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._sutil.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._util.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zcolumn_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zcolumn_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zcopy_to_ucol.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zdiagonal.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zgscon.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zgsequ.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zgsisx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zgsitrf.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zgsrfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zgssv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zgssvx.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zgstrf.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zgstrs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zlacon.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zlacon2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zlangs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zlaqgs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zldperm.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zmemory.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zmyblas2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zpanel_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zpanel_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zpivotL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zpivotgrowth.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zpruneL.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zreadhb.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zreadrb.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zreadtriple.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zsnode_bmod.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zsnode_dfs.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zsp_blas2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zsp_blas3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/._zutil.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/SRC/CMakeLists.txt | 241 +
SuperLU_5.2.0/SRC/Makefile | 135 +
SuperLU_5.2.0/SRC/ccolumn_bmod.c | 375 ++
SuperLU_5.2.0/SRC/ccolumn_dfs.c | 281 +
SuperLU_5.2.0/SRC/ccopy_to_ucol.c | 113 +
SuperLU_5.2.0/SRC/cdiagonal.c | 143 +
SuperLU_5.2.0/SRC/cgscon.c | 165 +
SuperLU_5.2.0/SRC/cgsequ.c | 205 +
SuperLU_5.2.0/SRC/cgsisx.c | 738 +++
SuperLU_5.2.0/SRC/cgsitrf.c | 661 ++
SuperLU_5.2.0/SRC/cgsrfs.c | 475 ++
SuperLU_5.2.0/SRC/cgssv.c | 238 +
SuperLU_5.2.0/SRC/cgssvx.c | 646 ++
SuperLU_5.2.0/SRC/cgstrf.c | 459 ++
SuperLU_5.2.0/SRC/cgstrs.c | 360 ++
SuperLU_5.2.0/SRC/clacon.c | 232 +
SuperLU_5.2.0/SRC/clacon2.c | 239 +
SuperLU_5.2.0/SRC/clangs.c | 129 +
SuperLU_5.2.0/SRC/claqgs.c | 157 +
SuperLU_5.2.0/SRC/cldperm.c | 178 +
SuperLU_5.2.0/SRC/cmemory.c | 710 +++
SuperLU_5.2.0/SRC/cmyblas2.c | 198 +
SuperLU_5.2.0/SRC/colamd.c | 3424 +++++++++++
SuperLU_5.2.0/SRC/colamd.h | 259 +
SuperLU_5.2.0/SRC/cpanel_bmod.c | 494 ++
SuperLU_5.2.0/SRC/cpanel_dfs.c | 264 +
SuperLU_5.2.0/SRC/cpivotL.c | 195 +
SuperLU_5.2.0/SRC/cpivotgrowth.c | 124 +
SuperLU_5.2.0/SRC/cpruneL.c | 164 +
SuperLU_5.2.0/SRC/creadhb.c | 379 ++
SuperLU_5.2.0/SRC/creadrb.c | 365 ++
SuperLU_5.2.0/SRC/creadtriple.c | 150 +
SuperLU_5.2.0/SRC/csnode_bmod.c | 130 +
SuperLU_5.2.0/SRC/csnode_dfs.c | 122 +
SuperLU_5.2.0/SRC/csp_blas2.c | 608 ++
SuperLU_5.2.0/SRC/csp_blas3.c | 137 +
SuperLU_5.2.0/SRC/cutil.c | 485 ++
SuperLU_5.2.0/SRC/dcolumn_bmod.c | 362 ++
SuperLU_5.2.0/SRC/dcolumn_dfs.c | 281 +
SuperLU_5.2.0/SRC/dcomplex.c | 157 +
SuperLU_5.2.0/SRC/dcopy_to_ucol.c | 113 +
SuperLU_5.2.0/SRC/ddiagonal.c | 139 +
SuperLU_5.2.0/SRC/dgscon.c | 168 +
SuperLU_5.2.0/SRC/dgsequ.c | 205 +
SuperLU_5.2.0/SRC/dgsisx.c | 738 +++
SuperLU_5.2.0/SRC/dgsitrf.c | 663 ++
SuperLU_5.2.0/SRC/dgsrfs.c | 468 ++
SuperLU_5.2.0/SRC/dgssv.c | 238 +
SuperLU_5.2.0/SRC/dgssvx.c | 646 ++
SuperLU_5.2.0/SRC/dgstrf.c | 459 ++
SuperLU_5.2.0/SRC/dgstrs.c | 347 ++
SuperLU_5.2.0/SRC/dlacon.c | 247 +
SuperLU_5.2.0/SRC/dlacon2.c | 254 +
SuperLU_5.2.0/SRC/dlangs.c | 129 +
SuperLU_5.2.0/SRC/dlaqgs.c | 155 +
SuperLU_5.2.0/SRC/dldperm.c | 175 +
SuperLU_5.2.0/SRC/dmach.c | 93 +
SuperLU_5.2.0/SRC/dmemory.c | 710 +++
SuperLU_5.2.0/SRC/dmyblas2.c | 240 +
SuperLU_5.2.0/SRC/dpanel_bmod.c | 466 ++
SuperLU_5.2.0/SRC/dpanel_dfs.c | 264 +
SuperLU_5.2.0/SRC/dpivotL.c | 194 +
SuperLU_5.2.0/SRC/dpivotgrowth.c | 123 +
SuperLU_5.2.0/SRC/dpruneL.c | 164 +
SuperLU_5.2.0/SRC/dreadhb.c | 369 ++
SuperLU_5.2.0/SRC/dreadrb.c | 356 ++
SuperLU_5.2.0/SRC/dreadtriple.c | 150 +
SuperLU_5.2.0/SRC/dsnode_bmod.c | 128 +
SuperLU_5.2.0/SRC/dsnode_dfs.c | 122 +
SuperLU_5.2.0/SRC/dsp_blas2.c | 490 ++
SuperLU_5.2.0/SRC/dsp_blas3.c | 137 +
SuperLU_5.2.0/SRC/dutil.c | 481 ++
SuperLU_5.2.0/SRC/dzsum1.c | 104 +
SuperLU_5.2.0/SRC/get_perm_c.c | 467 ++
SuperLU_5.2.0/SRC/heap_relax_snode.c | 134 +
SuperLU_5.2.0/SRC/html_mainpage.h | 31 +
SuperLU_5.2.0/SRC/icmax1.c | 126 +
SuperLU_5.2.0/SRC/ilu_ccolumn_dfs.c | 265 +
SuperLU_5.2.0/SRC/ilu_ccopy_to_ucol.c | 221 +
SuperLU_5.2.0/SRC/ilu_cdrop_row.c | 349 ++
SuperLU_5.2.0/SRC/ilu_cpanel_dfs.c | 258 +
SuperLU_5.2.0/SRC/ilu_cpivotL.c | 284 +
SuperLU_5.2.0/SRC/ilu_csnode_dfs.c | 100 +
SuperLU_5.2.0/SRC/ilu_dcolumn_dfs.c | 265 +
SuperLU_5.2.0/SRC/ilu_dcopy_to_ucol.c | 217 +
SuperLU_5.2.0/SRC/ilu_ddrop_row.c | 339 ++
SuperLU_5.2.0/SRC/ilu_dpanel_dfs.c | 258 +
SuperLU_5.2.0/SRC/ilu_dpivotL.c | 276 +
SuperLU_5.2.0/SRC/ilu_dsnode_dfs.c | 100 +
SuperLU_5.2.0/SRC/ilu_heap_relax_snode.c | 130 +
SuperLU_5.2.0/SRC/ilu_relax_snode.c | 79 +
SuperLU_5.2.0/SRC/ilu_scolumn_dfs.c | 265 +
SuperLU_5.2.0/SRC/ilu_scopy_to_ucol.c | 217 +
SuperLU_5.2.0/SRC/ilu_sdrop_row.c | 339 ++
SuperLU_5.2.0/SRC/ilu_spanel_dfs.c | 258 +
SuperLU_5.2.0/SRC/ilu_spivotL.c | 276 +
SuperLU_5.2.0/SRC/ilu_ssnode_dfs.c | 100 +
SuperLU_5.2.0/SRC/ilu_zcolumn_dfs.c | 265 +
SuperLU_5.2.0/SRC/ilu_zcopy_to_ucol.c | 221 +
SuperLU_5.2.0/SRC/ilu_zdrop_row.c | 349 ++
SuperLU_5.2.0/SRC/ilu_zpanel_dfs.c | 258 +
SuperLU_5.2.0/SRC/ilu_zpivotL.c | 284 +
SuperLU_5.2.0/SRC/ilu_zsnode_dfs.c | 100 +
SuperLU_5.2.0/SRC/input_error.c | 50 +
SuperLU_5.2.0/SRC/izmax1.c | 123 +
SuperLU_5.2.0/SRC/mark_relax.c | 57 +
SuperLU_5.2.0/SRC/mc64ad.c | 2645 ++++++++
SuperLU_5.2.0/SRC/memory.c | 220 +
SuperLU_5.2.0/SRC/mmd.c | 1022 ++++
SuperLU_5.2.0/SRC/qselect.c | 84 +
SuperLU_5.2.0/SRC/relax_snode.c | 85 +
SuperLU_5.2.0/SRC/scolumn_bmod.c | 362 ++
SuperLU_5.2.0/SRC/scolumn_dfs.c | 281 +
SuperLU_5.2.0/SRC/scomplex.c | 157 +
SuperLU_5.2.0/SRC/scopy_to_ucol.c | 113 +
SuperLU_5.2.0/SRC/scsum1.c | 109 +
SuperLU_5.2.0/SRC/sdiagonal.c | 139 +
SuperLU_5.2.0/SRC/sgscon.c | 168 +
SuperLU_5.2.0/SRC/sgsequ.c | 205 +
SuperLU_5.2.0/SRC/sgsisx.c | 738 +++
SuperLU_5.2.0/SRC/sgsitrf.c | 663 ++
SuperLU_5.2.0/SRC/sgsrfs.c | 468 ++
SuperLU_5.2.0/SRC/sgssv.c | 238 +
SuperLU_5.2.0/SRC/sgssvx.c | 646 ++
SuperLU_5.2.0/SRC/sgstrf.c | 459 ++
SuperLU_5.2.0/SRC/sgstrs.c | 347 ++
SuperLU_5.2.0/SRC/slacon.c | 247 +
SuperLU_5.2.0/SRC/slacon2.c | 254 +
SuperLU_5.2.0/SRC/slangs.c | 129 +
SuperLU_5.2.0/SRC/slaqgs.c | 155 +
SuperLU_5.2.0/SRC/sldperm.c | 178 +
SuperLU_5.2.0/SRC/slu_Cnames.h | 452 ++
SuperLU_5.2.0/SRC/slu_cdefs.h | 285 +
SuperLU_5.2.0/SRC/slu_dcomplex.h | 88 +
SuperLU_5.2.0/SRC/slu_ddefs.h | 282 +
SuperLU_5.2.0/SRC/slu_scomplex.h | 88 +
SuperLU_5.2.0/SRC/slu_sdefs.h | 282 +
SuperLU_5.2.0/SRC/slu_util.h | 400 ++
SuperLU_5.2.0/SRC/slu_zdefs.h | 285 +
SuperLU_5.2.0/SRC/smach.c | 93 +
SuperLU_5.2.0/SRC/smemory.c | 710 +++
SuperLU_5.2.0/SRC/smyblas2.c | 240 +
SuperLU_5.2.0/SRC/sp_coletree.c | 429 ++
SuperLU_5.2.0/SRC/sp_ienv.c | 89 +
SuperLU_5.2.0/SRC/sp_preorder.c | 220 +
SuperLU_5.2.0/SRC/spanel_bmod.c | 466 ++
SuperLU_5.2.0/SRC/spanel_dfs.c | 264 +
SuperLU_5.2.0/SRC/spivotL.c | 194 +
SuperLU_5.2.0/SRC/spivotgrowth.c | 123 +
SuperLU_5.2.0/SRC/spruneL.c | 164 +
SuperLU_5.2.0/SRC/sreadhb.c | 369 ++
SuperLU_5.2.0/SRC/sreadrb.c | 356 ++
SuperLU_5.2.0/SRC/sreadtriple.c | 150 +
SuperLU_5.2.0/SRC/ssnode_bmod.c | 128 +
SuperLU_5.2.0/SRC/ssnode_dfs.c | 122 +
SuperLU_5.2.0/SRC/ssp_blas2.c | 490 ++
SuperLU_5.2.0/SRC/ssp_blas3.c | 137 +
SuperLU_5.2.0/SRC/superlu_enum_consts.h | 81 +
SuperLU_5.2.0/SRC/superlu_timer.c | 82 +
SuperLU_5.2.0/SRC/supermatrix.h | 190 +
SuperLU_5.2.0/SRC/sutil.c | 481 ++
SuperLU_5.2.0/SRC/util.c | 503 ++
SuperLU_5.2.0/SRC/zcolumn_bmod.c | 377 ++
SuperLU_5.2.0/SRC/zcolumn_dfs.c | 281 +
SuperLU_5.2.0/SRC/zcopy_to_ucol.c | 113 +
SuperLU_5.2.0/SRC/zdiagonal.c | 143 +
SuperLU_5.2.0/SRC/zgscon.c | 165 +
SuperLU_5.2.0/SRC/zgsequ.c | 205 +
SuperLU_5.2.0/SRC/zgsisx.c | 738 +++
SuperLU_5.2.0/SRC/zgsitrf.c | 661 ++
SuperLU_5.2.0/SRC/zgsrfs.c | 475 ++
SuperLU_5.2.0/SRC/zgssv.c | 238 +
SuperLU_5.2.0/SRC/zgssvx.c | 646 ++
SuperLU_5.2.0/SRC/zgstrf.c | 459 ++
SuperLU_5.2.0/SRC/zgstrs.c | 360 ++
SuperLU_5.2.0/SRC/zlacon.c | 232 +
SuperLU_5.2.0/SRC/zlacon2.c | 239 +
SuperLU_5.2.0/SRC/zlangs.c | 129 +
SuperLU_5.2.0/SRC/zlaqgs.c | 157 +
SuperLU_5.2.0/SRC/zldperm.c | 178 +
SuperLU_5.2.0/SRC/zmemory.c | 710 +++
SuperLU_5.2.0/SRC/zmyblas2.c | 198 +
SuperLU_5.2.0/SRC/zpanel_bmod.c | 494 ++
SuperLU_5.2.0/SRC/zpanel_dfs.c | 264 +
SuperLU_5.2.0/SRC/zpivotL.c | 195 +
SuperLU_5.2.0/SRC/zpivotgrowth.c | 124 +
SuperLU_5.2.0/SRC/zpruneL.c | 164 +
SuperLU_5.2.0/SRC/zreadhb.c | 379 ++
SuperLU_5.2.0/SRC/zreadrb.c | 365 ++
SuperLU_5.2.0/SRC/zreadtriple.c | 150 +
SuperLU_5.2.0/SRC/zsnode_bmod.c | 130 +
SuperLU_5.2.0/SRC/zsnode_dfs.c | 122 +
SuperLU_5.2.0/SRC/zsp_blas2.c | 608 ++
SuperLU_5.2.0/SRC/zsp_blas3.c | 137 +
SuperLU_5.2.0/SRC/zutil.c | 485 ++
SuperLU_5.2.0/TESTING/._CMakeLists.txt | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._MATGEN | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._Makefile | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._cdrive.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._cgst01.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._cgst02.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._cgst04.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._cgst07.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._ctest.csh | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._ddrive.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._dgst01.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._dgst02.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._dgst04.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._dgst07.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._dtest.csh | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._runtest.cmake | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sdrive.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sgst01.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sgst02.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sgst04.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sgst07.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sp_cconvert.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sp_dconvert.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sp_ienv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sp_sconvert.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._sp_zconvert.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._stest.csh | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._zdrive.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._zgst01.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._zgst02.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._zgst04.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._zgst07.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/._ztest.csh | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/CMakeLists.txt | 101 +
SuperLU_5.2.0/TESTING/MATGEN/._CMakeLists.txt | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._Cnames.h.bak | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._Makefile | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._cdotc.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clacgv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clagge.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._claghe.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clagsy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clarge.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clarnd.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clarnv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._claror.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clarot.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clartg.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._claset.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clatb4.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clatm2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clatm3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clatme.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._clatms.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._csymv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._d_lg10.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._d_sign.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlabad.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlagge.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlagsy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlaran.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlarge.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlarnd.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlarnv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlaror.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlarot.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlartg.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlaruv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlaset.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlatb4.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlatm1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlatm2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlatm3.c | Bin 0 -> 238 bytes
SuperLU_5.2.0/TESTING/MATGEN/._dlatms.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._f2c.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._pow_dd.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._pow_di.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._pow_ri.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._r_lg10.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._r_sign.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slabad.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slagge.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slagsy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slaran.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slarge.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slarnd.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slarnv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slaror.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slarot.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slartg.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slaruv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slaset.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slatb4.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slatm1.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slatm2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slatm3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slatms.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._slu_Cnames.h | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zdotc.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlacgv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlagge.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlaghe.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlagsy.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlarge.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlarnd.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlarnv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlaror.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlarot.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlartg.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlaset.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlatb4.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlatm2.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlatm3.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zlatms.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/._zsymv.c | Bin 0 -> 239 bytes
SuperLU_5.2.0/TESTING/MATGEN/CMakeLists.txt | 99 +
.../TESTING}/MATGEN/Cnames.h.bak | 0
SuperLU_5.2.0/TESTING/MATGEN/Makefile | 78 +
{TESTING => SuperLU_5.2.0/TESTING}/MATGEN/cdotc.c | 0
SuperLU_5.2.0/TESTING/MATGEN/clacgv.c | 76 +
SuperLU_5.2.0/TESTING/MATGEN/clagge.c | 464 ++
SuperLU_5.2.0/TESTING/MATGEN/claghe.c | 309 +
SuperLU_5.2.0/TESTING/MATGEN/clagsy.c | 363 ++
SuperLU_5.2.0/TESTING/MATGEN/clarge.c | 160 +
SuperLU_5.2.0/TESTING/MATGEN/clarnd.c | 125 +
SuperLU_5.2.0/TESTING/MATGEN/clarnv.c | 172 +
SuperLU_5.2.0/TESTING/MATGEN/claror.c | 351 ++
SuperLU_5.2.0/TESTING/MATGEN/clarot.c | 365 ++
SuperLU_5.2.0/TESTING/MATGEN/clartg.c | 147 +
SuperLU_5.2.0/TESTING/MATGEN/claset.c | 143 +
SuperLU_5.2.0/TESTING/MATGEN/clatb4.c | 466 ++
SuperLU_5.2.0/TESTING/MATGEN/clatm2.c | 283 +
SuperLU_5.2.0/TESTING/MATGEN/clatm3.c | 295 +
SuperLU_5.2.0/TESTING/MATGEN/clatme.c | 623 ++
SuperLU_5.2.0/TESTING/MATGEN/clatms.c | 1650 +++++
SuperLU_5.2.0/TESTING/MATGEN/csymv.c | 407 ++
{TESTING => SuperLU_5.2.0/TESTING}/MATGEN/d_lg10.c | 0
{TESTING => SuperLU_5.2.0/TESTING}/MATGEN/d_sign.c | 0
SuperLU_5.2.0/TESTING/MATGEN/dlabad.c | 60 +
SuperLU_5.2.0/TESTING/MATGEN/dlagge.c | 402 ++
SuperLU_5.2.0/TESTING/MATGEN/dlagsy.c | 276 +
SuperLU_5.2.0/TESTING/MATGEN/dlaran.c | 92 +
SuperLU_5.2.0/TESTING/MATGEN/dlarge.c | 154 +
SuperLU_5.2.0/TESTING/MATGEN/dlarnd.c | 94 +
SuperLU_5.2.0/TESTING/MATGEN/dlarnv.c | 126 +
SuperLU_5.2.0/TESTING/MATGEN/dlaror.c | 290 +
SuperLU_5.2.0/TESTING/MATGEN/dlarot.c | 299 +
SuperLU_5.2.0/TESTING/MATGEN/dlartg.c | 158 +
SuperLU_5.2.0/TESTING/MATGEN/dlaruv.c | 152 +
SuperLU_5.2.0/TESTING/MATGEN/dlaset.c | 131 +
SuperLU_5.2.0/TESTING/MATGEN/dlatb4.c | 458 ++
SuperLU_5.2.0/TESTING/MATGEN/dlatm1.c | 266 +
SuperLU_5.2.0/TESTING/MATGEN/dlatm2.c | 241 +
SuperLU_5.2.0/TESTING/MATGEN/dlatm3.c | 252 +
SuperLU_5.2.0/TESTING/MATGEN/dlatms.c | 1340 +++++
{TESTING => SuperLU_5.2.0/TESTING}/MATGEN/f2c.h | 0
{TESTING => SuperLU_5.2.0/TESTING}/MATGEN/pow_dd.c | 0
SuperLU_5.2.0/TESTING/MATGEN/pow_di.c | 22 +
SuperLU_5.2.0/TESTING/MATGEN/pow_ri.c | 25 +
{TESTING => SuperLU_5.2.0/TESTING}/MATGEN/r_lg10.c | 0
{TESTING => SuperLU_5.2.0/TESTING}/MATGEN/r_sign.c | 0
SuperLU_5.2.0/TESTING/MATGEN/slabad.c | 60 +
SuperLU_5.2.0/TESTING/MATGEN/slagge.c | 400 ++
SuperLU_5.2.0/TESTING/MATGEN/slagsy.c | 272 +
SuperLU_5.2.0/TESTING/MATGEN/slaran.c | 92 +
SuperLU_5.2.0/TESTING/MATGEN/slarge.c | 152 +
SuperLU_5.2.0/TESTING/MATGEN/slarnd.c | 94 +
SuperLU_5.2.0/TESTING/MATGEN/slarnv.c | 124 +
SuperLU_5.2.0/TESTING/MATGEN/slaror.c | 286 +
SuperLU_5.2.0/TESTING/MATGEN/slarot.c | 299 +
SuperLU_5.2.0/TESTING/MATGEN/slartg.c | 156 +
SuperLU_5.2.0/TESTING/MATGEN/slaruv.c | 152 +
SuperLU_5.2.0/TESTING/MATGEN/slaset.c | 135 +
SuperLU_5.2.0/TESTING/MATGEN/slatb4.c | 462 ++
SuperLU_5.2.0/TESTING/MATGEN/slatm1.c | 267 +
SuperLU_5.2.0/TESTING/MATGEN/slatm2.c | 241 +
SuperLU_5.2.0/TESTING/MATGEN/slatm3.c | 252 +
SuperLU_5.2.0/TESTING/MATGEN/slatms.c | 1336 +++++
SuperLU_5.2.0/TESTING/MATGEN/slu_Cnames.h | 444 ++
{TESTING => SuperLU_5.2.0/TESTING}/MATGEN/zdotc.c | 0
SuperLU_5.2.0/TESTING/MATGEN/zlacgv.c | 76 +
SuperLU_5.2.0/TESTING/MATGEN/zlagge.c | 465 ++
SuperLU_5.2.0/TESTING/MATGEN/zlaghe.c | 314 +
SuperLU_5.2.0/TESTING/MATGEN/zlagsy.c | 365 ++
SuperLU_5.2.0/TESTING/MATGEN/zlarge.c | 161 +
SuperLU_5.2.0/TESTING/MATGEN/zlarnd.c | 126 +
SuperLU_5.2.0/TESTING/MATGEN/zlarnv.c | 173 +
SuperLU_5.2.0/TESTING/MATGEN/zlaror.c | 355 ++
SuperLU_5.2.0/TESTING/MATGEN/zlarot.c | 365 ++
SuperLU_5.2.0/TESTING/MATGEN/zlartg.c | 146 +
SuperLU_5.2.0/TESTING/MATGEN/zlaset.c | 144 +
SuperLU_5.2.0/TESTING/MATGEN/zlatb4.c | 460 ++
SuperLU_5.2.0/TESTING/MATGEN/zlatm2.c | 286 +
SuperLU_5.2.0/TESTING/MATGEN/zlatm3.c | 297 +
SuperLU_5.2.0/TESTING/MATGEN/zlatms.c | 1648 +++++
SuperLU_5.2.0/TESTING/MATGEN/zsymv.c | 407 ++
{TESTING => SuperLU_5.2.0/TESTING}/Makefile | 0
SuperLU_5.2.0/TESTING/cdrive.c | 571 ++
SuperLU_5.2.0/TESTING/cgst01.c | 182 +
SuperLU_5.2.0/TESTING/cgst02.c | 146 +
SuperLU_5.2.0/TESTING/cgst04.c | 131 +
SuperLU_5.2.0/TESTING/cgst07.c | 237 +
SuperLU_5.2.0/TESTING/ctest.csh | 50 +
SuperLU_5.2.0/TESTING/ddrive.c | 571 ++
SuperLU_5.2.0/TESTING/dgst01.c | 177 +
SuperLU_5.2.0/TESTING/dgst02.c | 146 +
SuperLU_5.2.0/TESTING/dgst04.c | 129 +
SuperLU_5.2.0/TESTING/dgst07.c | 227 +
SuperLU_5.2.0/TESTING/dtest.csh | 49 +
SuperLU_5.2.0/TESTING/runtest.cmake | 9 +
SuperLU_5.2.0/TESTING/sdrive.c | 571 ++
SuperLU_5.2.0/TESTING/sgst01.c | 177 +
SuperLU_5.2.0/TESTING/sgst02.c | 146 +
SuperLU_5.2.0/TESTING/sgst04.c | 129 +
SuperLU_5.2.0/TESTING/sgst07.c | 227 +
SuperLU_5.2.0/TESTING/sp_cconvert.c | 52 +
SuperLU_5.2.0/TESTING/sp_dconvert.c | 52 +
SuperLU_5.2.0/TESTING/sp_ienv.c | 69 +
SuperLU_5.2.0/TESTING/sp_sconvert.c | 52 +
SuperLU_5.2.0/TESTING/sp_zconvert.c | 52 +
SuperLU_5.2.0/TESTING/stest.csh | 50 +
SuperLU_5.2.0/TESTING/zdrive.c | 571 ++
SuperLU_5.2.0/TESTING/zgst01.c | 182 +
SuperLU_5.2.0/TESTING/zgst02.c | 146 +
SuperLU_5.2.0/TESTING/zgst04.c | 131 +
SuperLU_5.2.0/TESTING/zgst07.c | 237 +
SuperLU_5.2.0/TESTING/ztest.csh | 49 +
SuperLU_5.2.0/cmake/._XSDKDefaults.cmake | Bin 0 -> 239 bytes
SuperLU_5.2.0/cmake/XSDKDefaults.cmake | 182 +
SuperLU_5.2.0/make.inc.in | 49 +
TESTING/MATGEN/Makefile | 81 -
TESTING/MATGEN/clacgv.c | 76 -
TESTING/MATGEN/clagge.c | 464 --
TESTING/MATGEN/claghe.c | 309 -
TESTING/MATGEN/clagsy.c | 363 --
TESTING/MATGEN/clarge.c | 160 -
TESTING/MATGEN/clarnd.c | 125 -
TESTING/MATGEN/clarnv.c | 172 -
TESTING/MATGEN/claror.c | 351 --
TESTING/MATGEN/clarot.c | 365 --
TESTING/MATGEN/clartg.c | 147 -
TESTING/MATGEN/claset.c | 144 -
TESTING/MATGEN/clatb4.c | 467 --
TESTING/MATGEN/clatm2.c | 283 -
TESTING/MATGEN/clatm3.c | 295 -
TESTING/MATGEN/clatme.c | 623 --
TESTING/MATGEN/clatmr.c | 1507 -----
TESTING/MATGEN/clatms.c | 1650 -----
TESTING/MATGEN/csymv.c | 408 --
TESTING/MATGEN/dlabad.c | 60 -
TESTING/MATGEN/dlagge.c | 402 --
TESTING/MATGEN/dlagsy.c | 276 -
TESTING/MATGEN/dlaran.c | 92 -
TESTING/MATGEN/dlarge.c | 154 -
TESTING/MATGEN/dlarnd.c | 94 -
TESTING/MATGEN/dlarnv.c | 126 -
TESTING/MATGEN/dlaror.c | 291 -
TESTING/MATGEN/dlarot.c | 299 -
TESTING/MATGEN/dlartg.c | 158 -
TESTING/MATGEN/dlaruv.c | 152 -
TESTING/MATGEN/dlaset.c | 131 -
TESTING/MATGEN/dlatb4.c | 464 --
TESTING/MATGEN/dlatm1.c | 266 -
TESTING/MATGEN/dlatm2.c | 241 -
TESTING/MATGEN/dlatm3.c | 252 -
TESTING/MATGEN/dlatme.c | 682 ---
TESTING/MATGEN/dlatmr.c | 1288 ----
TESTING/MATGEN/dlatms.c | 1341 -----
TESTING/MATGEN/lsamen.c | 70 -
TESTING/MATGEN/slabad.c | 60 -
TESTING/MATGEN/slagge.c | 400 --
TESTING/MATGEN/slagsy.c | 272 -
TESTING/MATGEN/slaran.c | 92 -
TESTING/MATGEN/slarge.c | 152 -
TESTING/MATGEN/slarnd.c | 94 -
TESTING/MATGEN/slarnv.c | 124 -
TESTING/MATGEN/slaror.c | 287 -
TESTING/MATGEN/slarot.c | 299 -
TESTING/MATGEN/slartg.c | 156 -
TESTING/MATGEN/slaruv.c | 152 -
TESTING/MATGEN/slaset.c | 136 -
TESTING/MATGEN/slatb4.c | 466 --
TESTING/MATGEN/slatm1.c | 267 -
TESTING/MATGEN/slatm2.c | 241 -
TESTING/MATGEN/slatm3.c | 252 -
TESTING/MATGEN/slatme.c | 676 ---
TESTING/MATGEN/slatmr.c | 1289 ----
TESTING/MATGEN/slatms.c | 1337 -----
TESTING/MATGEN/slu_Cnames.h | 1 -
TESTING/MATGEN/zlacgv.c | 76 -
TESTING/MATGEN/zlagge.c | 465 --
TESTING/MATGEN/zlaghe.c | 314 -
TESTING/MATGEN/zlagsy.c | 365 --
TESTING/MATGEN/zlarge.c | 161 -
TESTING/MATGEN/zlarnd.c | 126 -
TESTING/MATGEN/zlarnv.c | 173 -
TESTING/MATGEN/zlaror.c | 356 --
TESTING/MATGEN/zlarot.c | 365 --
TESTING/MATGEN/zlartg.c | 146 -
TESTING/MATGEN/zlaset.c | 145 -
TESTING/MATGEN/zlatb4.c | 468 --
TESTING/MATGEN/zlatm2.c | 286 -
TESTING/MATGEN/zlatm3.c | 297 -
TESTING/MATGEN/zlatme.c | 627 --
TESTING/MATGEN/zlatmr.c | 1510 -----
TESTING/MATGEN/zlatms.c | 1648 -----
TESTING/MATGEN/zsymv.c | 408 --
TESTING/cdrive.c | 544 --
TESTING/cgst01.c | 171 -
TESTING/cgst02.c | 138 -
TESTING/cgst04.c | 122 -
TESTING/cgst07.c | 228 -
TESTING/ctest.csh | 50 -
TESTING/ddrive.c | 544 --
TESTING/dgst01.c | 166 -
TESTING/dgst02.c | 138 -
TESTING/dgst04.c | 120 -
TESTING/dgst07.c | 218 -
TESTING/dtest.csh | 49 -
TESTING/sdrive.c | 544 --
TESTING/sgst01.c | 166 -
TESTING/sgst02.c | 138 -
TESTING/sgst04.c | 120 -
TESTING/sgst07.c | 218 -
TESTING/sp_cconvert.c | 42 -
TESTING/sp_dconvert.c | 42 -
TESTING/sp_ienv.c | 59 -
TESTING/sp_sconvert.c | 42 -
TESTING/sp_zconvert.c | 42 -
TESTING/stest.csh | 50 -
TESTING/zdrive.c | 544 --
TESTING/zgst01.c | 171 -
TESTING/zgst02.c | 138 -
TESTING/zgst04.c | 122 -
TESTING/zgst07.c | 228 -
TESTING/ztest.csh | 49 -
make.inc | 65 -
2222 files changed, 210968 insertions(+), 216317 deletions(-)
diff --git a/._SuperLU_5.2.0 b/._SuperLU_5.2.0
new file mode 100755
index 0000000..eca5165
Binary files /dev/null and b/._SuperLU_5.2.0 differ
diff --git a/CBLAS/Makefile b/CBLAS/Makefile
deleted file mode 100644
index 7435fe4..0000000
--- a/CBLAS/Makefile
+++ /dev/null
@@ -1,86 +0,0 @@
-include ../make.inc
-HEADER = ../SRC
-
-#######################################################################
-# This is the makefile to create a library for C-BLAS.
-# The files are organized as follows:
-#
-# SBLAS1 -- Single precision real BLAS routines
-# CBLAS1 -- Single precision complex BLAS routines
-# DBLAS1 -- Double precision real BLAS routines
-# ZBLAS1 -- Double precision complex BLAS routines
-#
-# CB1AUX -- Real BLAS routines called by complex routines
-# ZB1AUX -- D.P. real BLAS routines called by d.p. complex
-# routines
-#
-# ALLBLAS -- Auxiliary routines for Level 2 and 3 BLAS
-#
-# SBLAS2 -- Single precision real BLAS2 routines
-# CBLAS2 -- Single precision complex BLAS2 routines
-# DBLAS2 -- Double precision real BLAS2 routines
-# ZBLAS2 -- Double precision complex BLAS2 routines
-#
-# SBLAS3 -- Single precision real BLAS3 routines
-# CBLAS3 -- Single precision complex BLAS3 routines
-# DBLAS3 -- Double precision real BLAS3 routines
-# ZBLAS3 -- Double precision complex BLAS3 routines
-#
-# The library can be set up to include routines for any combination
-# of the four precisions. To create or add to the library, enter make
-# followed by one or more of the precisions desired. Some examples:
-# make single
-# make single complex
-# make single double complex complex16
-# Alternatively, the command
-# make
-# without any arguments creates a library of all four precisions.
-# The library is called
-# blas.a
-# and is created at the next higher directory level.
-#
-# To remove the object files after the library is created, enter
-# make clean
-#
-#######################################################################
-
-SBLAS1 = isamax.o sasum.o saxpy.o scopy.o sdot.o snrm2.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 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 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 zswap.o
-ZBLAS2 = zgemv.o zhemv.o ztrsv.o zgerc.o zher2.o
-
-
-all: single double complex complex16
-
-single: $(SBLAS1) $(SBLAS2) $(SBLAS3)
- $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(SBLAS1) $(ALLBLAS) $(SBLAS2) $(SBLAS3)
- $(RANLIB) $(BLASLIB)
-
-double: $(DBLAS1) $(DBLAS2) $(DBLAS3)
- $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(DBLAS1) $(ALLBLAS) $(DBLAS2) $(DBLAS3)
- $(RANLIB) $(BLASLIB)
-
-complex: $(CBLAS1) $(CBLAS2) $(CBLAS3)
- $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(CBLAS1) $(ALLBLAS) $(CBLAS2) $(CBLAS3)
- $(RANLIB) $(BLASLIB)
-
-complex16: $(ZBLAS1) $(ZBLAS2) $(ZBLAS3)
- $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(ZBLAS1) $(ALLBLAS) $(ZBLAS2) $(ZBLAS3)
- $(RANLIB) $(BLASLIB)
-
-.c.o:
- $(CC) $(CFLAGS) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
-
-clean:
- rm -f *.o ../lib/libblas.a
diff --git a/CBLAS/cgemv.c b/CBLAS/cgemv.c
deleted file mode 100644
index 086228f..0000000
--- a/CBLAS/cgemv.c
+++ /dev/null
@@ -1,399 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int cgemv_(char *trans, integer *m, integer *n, complex *
- alpha, complex *a, integer *lda, complex *x, integer *incx, complex *
- beta, complex *y, integer *incy)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- complex q__1, q__2, q__3;
-
- /* Builtin functions */
- void r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer info;
- static complex temp;
- static integer lenx, leny, i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical noconj;
-
-
-/* Purpose
- =======
-
- CGEMV performs one of the matrix-vector operations
-
- y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y, or
-
- y := alpha*conjg( A' )*x + beta*y,
-
- where alpha and beta are scalars, x and y are vectors and A is an
- m by n matrix.
-
- Parameters
- ==========
-
- TRANS - CHARACTER*1.
- 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*conjg( A' )*x + beta*y.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
-
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, m ).
- Unchanged on exit.
-
- X - 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.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - 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 - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(trans, "N") && ! lsame_(trans, "T") && !
- lsame_(trans, "C")) {
- info = 1;
- } else if (*m < 0) {
- info = 2;
- } else if (*n < 0) {
- info = 3;
- } else if (*lda < max(1,*m)) {
- info = 6;
- } else if (*incx == 0) {
- info = 8;
- } else if (*incy == 0) {
- info = 11;
- }
- if (info != 0) {
- xerbla_("CGEMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*m == 0 || *n == 0 || alpha->r == 0.f && alpha->i == 0.f && (beta->r
- == 1.f && beta->i == 0.f)) {
- return 0;
- }
-
- noconj = lsame_(trans, "T");
-
-/* Set LENX and LENY, the lengths of the vectors x and y, and set
-
- up the start points in X and Y. */
-
- if (lsame_(trans, "N")) {
- lenx = *n;
- leny = *m;
- } else {
- lenx = *m;
- leny = *n;
- }
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (lenx - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (leny - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A.
-
- First form y := beta*y. */
-
- if (beta->r != 1.f || beta->i != 0.f) {
- if (*incy == 1) {
- if (beta->r == 0.f && beta->i == 0.f) {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- i__2 = i;
- Y(i).r = 0.f, Y(i).i = 0.f;
-/* L10: */
- }
- } else {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- i__2 = i;
- i__3 = i;
- q__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
- q__1.i = beta->r * Y(i).i + beta->i * Y(i)
- .r;
- Y(i).r = q__1.r, Y(i).i = q__1.i;
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (beta->r == 0.f && beta->i == 0.f) {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- i__2 = iy;
- Y(iy).r = 0.f, Y(iy).i = 0.f;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- i__2 = iy;
- i__3 = iy;
- q__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
- q__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
- .r;
- Y(iy).r = q__1.r, Y(iy).i = q__1.i;
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (alpha->r == 0.f && alpha->i == 0.f) {
- return 0;
- }
- if (lsame_(trans, "N")) {
-
-/* Form y := alpha*A*x + y. */
-
- jx = kx;
- if (*incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- if (X(jx).r != 0.f || X(jx).i != 0.f) {
- i__2 = jx;
- q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
- q__1.i = alpha->r * X(jx).i + alpha->i * X(jx)
- .r;
- temp.r = q__1.r, temp.i = q__1.i;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- q__2.i = temp.r * A(i,j).i + temp.i * A(i,j)
- .r;
- q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i +
- q__2.i;
- Y(i).r = q__1.r, Y(i).i = q__1.i;
-/* L50: */
- }
- }
- jx += *incx;
-/* L60: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- if (X(jx).r != 0.f || X(jx).i != 0.f) {
- i__2 = jx;
- q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
- q__1.i = alpha->r * X(jx).i + alpha->i * X(jx)
- .r;
- temp.r = q__1.r, temp.i = q__1.i;
- iy = ky;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- q__2.i = temp.r * A(i,j).i + temp.i * A(i,j)
- .r;
- q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i +
- q__2.i;
- Y(iy).r = q__1.r, Y(iy).i = q__1.i;
- iy += *incy;
-/* L70: */
- }
- }
- jx += *incx;
-/* L80: */
- }
- }
- } else {
-
-/* Form y := alpha*A'*x + y or y := alpha*conjg( A' )*x + y.
- */
-
- jy = ky;
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp.r = 0.f, temp.i = 0.f;
- if (noconj) {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i;
- q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i)
- .i, q__2.i = A(i,j).r * X(i).i + A(i,j)
- .i * X(i).r;
- q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
-/* L90: */
- }
- } else {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- r_cnjg(&q__3, &A(i,j));
- i__3 = i;
- q__2.r = q__3.r * X(i).r - q__3.i * X(i).i,
- q__2.i = q__3.r * X(i).i + q__3.i * X(i)
- .r;
- q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
-/* L100: */
- }
- }
- i__2 = jy;
- i__3 = jy;
- q__2.r = alpha->r * temp.r - alpha->i * temp.i, q__2.i =
- alpha->r * temp.i + alpha->i * temp.r;
- q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
- Y(jy).r = q__1.r, Y(jy).i = q__1.i;
- jy += *incy;
-/* L110: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp.r = 0.f, temp.i = 0.f;
- ix = kx;
- if (noconj) {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = ix;
- q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix)
- .i, q__2.i = A(i,j).r * X(ix).i + A(i,j)
- .i * X(ix).r;
- q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
- ix += *incx;
-/* L120: */
- }
- } else {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- r_cnjg(&q__3, &A(i,j));
- i__3 = ix;
- q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i,
- q__2.i = q__3.r * X(ix).i + q__3.i * X(ix)
- .r;
- q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
- ix += *incx;
-/* L130: */
- }
- }
- i__2 = jy;
- i__3 = jy;
- q__2.r = alpha->r * temp.r - alpha->i * temp.i, q__2.i =
- alpha->r * temp.i + alpha->i * temp.r;
- q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
- Y(jy).r = q__1.r, Y(jy).i = q__1.i;
- jy += *incy;
-/* L140: */
- }
- }
- }
-
- return 0;
-
-/* End of CGEMV . */
-
-} /* cgemv_ */
-
diff --git a/CBLAS/cgerc.c b/CBLAS/cgerc.c
deleted file mode 100644
index 6c317b2..0000000
--- a/CBLAS/cgerc.c
+++ /dev/null
@@ -1,205 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int cgerc_(integer *m, integer *n, complex *alpha, complex *
- x, integer *incx, complex *y, integer *incy, complex *a, integer *lda)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- complex q__1, q__2;
-
- /* Builtin functions */
- void r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer info;
- static complex temp;
- static integer i, j, ix, jy, kx;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- CGERC performs the rank 1 operation
-
- A := alpha*x*conjg( y' ) + A,
-
- where alpha is a scalar, x is an m element vector, y is an n element
-
- vector and A is an m by n matrix.
-
- Parameters
- ==========
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
-
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( m - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the m
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients. On exit, A is
- overwritten by the updated matrix.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (*m < 0) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*incx == 0) {
- info = 5;
- } else if (*incy == 0) {
- info = 7;
- } else if (*lda < max(1,*m)) {
- info = 9;
- }
- if (info != 0) {
- xerbla_("CGERC ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*m == 0 || *n == 0 || alpha->r == 0.f && alpha->i == 0.f) {
- return 0;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
-
- if (*incy > 0) {
- jy = 1;
- } else {
- jy = 1 - (*n - 1) * *incy;
- }
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jy;
- if (Y(jy).r != 0.f || Y(jy).i != 0.f) {
- r_cnjg(&q__2, &Y(jy));
- q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
- alpha->r * q__2.i + alpha->i * q__2.r;
- temp.r = q__1.r, temp.i = q__1.i;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = i;
- q__2.r = X(i).r * temp.r - X(i).i * temp.i, q__2.i =
- X(i).r * temp.i + X(i).i * temp.r;
- q__1.r = A(i,j).r + q__2.r, q__1.i = A(i,j).i + q__2.i;
- A(i,j).r = q__1.r, A(i,j).i = q__1.i;
-/* L10: */
- }
- }
- jy += *incy;
-/* L20: */
- }
- } else {
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*m - 1) * *incx;
- }
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jy;
- if (Y(jy).r != 0.f || Y(jy).i != 0.f) {
- r_cnjg(&q__2, &Y(jy));
- q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
- alpha->r * q__2.i + alpha->i * q__2.r;
- temp.r = q__1.r, temp.i = q__1.i;
- ix = kx;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = ix;
- q__2.r = X(ix).r * temp.r - X(ix).i * temp.i, q__2.i =
- X(ix).r * temp.i + X(ix).i * temp.r;
- q__1.r = A(i,j).r + q__2.r, q__1.i = A(i,j).i + q__2.i;
- A(i,j).r = q__1.r, A(i,j).i = q__1.i;
- ix += *incx;
-/* L30: */
- }
- }
- jy += *incy;
-/* L40: */
- }
- }
-
- return 0;
-
-/* End of CGERC . */
-
-} /* cgerc_ */
-
diff --git a/CBLAS/chemv.c b/CBLAS/chemv.c
deleted file mode 100644
index 2299694..0000000
--- a/CBLAS/chemv.c
+++ /dev/null
@@ -1,421 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int chemv_(char *uplo, integer *n, complex *alpha, complex *
- a, integer *lda, complex *x, integer *incx, complex *beta, complex *y,
- integer *incy)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- doublereal d__1;
- complex q__1, q__2, q__3, q__4;
-
- /* Builtin functions */
- void r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer info;
- static complex temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- CHEMV performs the matrix-vector operation
-
- y := alpha*A*x + beta*y,
-
- where alpha and beta are scalars, x and y are n element vectors and
- A is an n by n hermitian matrix.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the hermitian matrix and the strictly
- lower triangular part of A is not referenced.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the hermitian matrix and the strictly
- upper triangular part of A is not referenced.
- Note that the imaginary parts of the diagonal elements need
-
- not be set and are assumed to be zero.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y. On exit, Y is overwritten by the updated
- vector y.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*lda < max(1,*n)) {
- info = 5;
- } else if (*incx == 0) {
- info = 7;
- } else if (*incy == 0) {
- info = 10;
- }
- if (info != 0) {
- xerbla_("CHEMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || alpha->r == 0.f && alpha->i == 0.f && (beta->r == 1.f &&
- beta->i == 0.f)) {
- return 0;
- }
-
-/* Set up the start points in X and Y. */
-
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A.
-
- First form y := beta*y. */
-
- if (beta->r != 1.f || beta->i != 0.f) {
- if (*incy == 1) {
- if (beta->r == 0.f && beta->i == 0.f) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- Y(i).r = 0.f, Y(i).i = 0.f;
-/* L10: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- i__3 = i;
- q__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
- q__1.i = beta->r * Y(i).i + beta->i * Y(i)
- .r;
- Y(i).r = q__1.r, Y(i).i = q__1.i;
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (beta->r == 0.f && beta->i == 0.f) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = iy;
- Y(iy).r = 0.f, Y(iy).i = 0.f;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = iy;
- i__3 = iy;
- q__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
- q__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
- .r;
- Y(iy).r = q__1.r, Y(iy).i = q__1.i;
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (alpha->r == 0.f && alpha->i == 0.f) {
- return 0;
- }
- if (lsame_(uplo, "U")) {
-
-/* Form y when A is stored in upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- q__1.r = alpha->r * X(j).r - alpha->i * X(j).i, q__1.i =
- alpha->r * X(j).i + alpha->i * X(j).r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- temp2.r = 0.f, temp2.i = 0.f;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i + q__2.i;
- Y(i).r = q__1.r, Y(i).i = q__1.i;
- r_cnjg(&q__3, &A(i,j));
- i__3 = i;
- q__2.r = q__3.r * X(i).r - q__3.i * X(i).i, q__2.i =
- q__3.r * X(i).i + q__3.i * X(i).r;
- q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
- temp2.r = q__1.r, temp2.i = q__1.i;
-/* L50: */
- }
- i__2 = j;
- i__3 = j;
- i__4 = j + j * a_dim1;
- d__1 = A(j,j).r;
- q__3.r = d__1 * temp1.r, q__3.i = d__1 * temp1.i;
- q__2.r = Y(j).r + q__3.r, q__2.i = Y(j).i + q__3.i;
- q__4.r = alpha->r * temp2.r - alpha->i * temp2.i, q__4.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
- Y(j).r = q__1.r, Y(j).i = q__1.i;
-/* L60: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, q__1.i =
- alpha->r * X(jx).i + alpha->i * X(jx).r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- temp2.r = 0.f, temp2.i = 0.f;
- ix = kx;
- iy = ky;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i + q__2.i;
- Y(iy).r = q__1.r, Y(iy).i = q__1.i;
- r_cnjg(&q__3, &A(i,j));
- i__3 = ix;
- q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i, q__2.i =
- q__3.r * X(ix).i + q__3.i * X(ix).r;
- q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
- temp2.r = q__1.r, temp2.i = q__1.i;
- ix += *incx;
- iy += *incy;
-/* L70: */
- }
- i__2 = jy;
- i__3 = jy;
- i__4 = j + j * a_dim1;
- d__1 = A(j,j).r;
- q__3.r = d__1 * temp1.r, q__3.i = d__1 * temp1.i;
- q__2.r = Y(jy).r + q__3.r, q__2.i = Y(jy).i + q__3.i;
- q__4.r = alpha->r * temp2.r - alpha->i * temp2.i, q__4.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
- Y(jy).r = q__1.r, Y(jy).i = q__1.i;
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- } else {
-
-/* Form y when A is stored in lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- q__1.r = alpha->r * X(j).r - alpha->i * X(j).i, q__1.i =
- alpha->r * X(j).i + alpha->i * X(j).r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- temp2.r = 0.f, temp2.i = 0.f;
- i__2 = j;
- i__3 = j;
- i__4 = j + j * a_dim1;
- d__1 = A(j,j).r;
- q__2.r = d__1 * temp1.r, q__2.i = d__1 * temp1.i;
- q__1.r = Y(j).r + q__2.r, q__1.i = Y(j).i + q__2.i;
- Y(j).r = q__1.r, Y(j).i = q__1.i;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i + q__2.i;
- Y(i).r = q__1.r, Y(i).i = q__1.i;
- r_cnjg(&q__3, &A(i,j));
- i__3 = i;
- q__2.r = q__3.r * X(i).r - q__3.i * X(i).i, q__2.i =
- q__3.r * X(i).i + q__3.i * X(i).r;
- q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
- temp2.r = q__1.r, temp2.i = q__1.i;
-/* L90: */
- }
- i__2 = j;
- i__3 = j;
- q__2.r = alpha->r * temp2.r - alpha->i * temp2.i, q__2.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- q__1.r = Y(j).r + q__2.r, q__1.i = Y(j).i + q__2.i;
- Y(j).r = q__1.r, Y(j).i = q__1.i;
-/* L100: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, q__1.i =
- alpha->r * X(jx).i + alpha->i * X(jx).r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- temp2.r = 0.f, temp2.i = 0.f;
- i__2 = jy;
- i__3 = jy;
- i__4 = j + j * a_dim1;
- d__1 = A(j,j).r;
- q__2.r = d__1 * temp1.r, q__2.i = d__1 * temp1.i;
- q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
- Y(jy).r = q__1.r, Y(jy).i = q__1.i;
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- iy += *incy;
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i + q__2.i;
- Y(iy).r = q__1.r, Y(iy).i = q__1.i;
- r_cnjg(&q__3, &A(i,j));
- i__3 = ix;
- q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i, q__2.i =
- q__3.r * X(ix).i + q__3.i * X(ix).r;
- q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
- temp2.r = q__1.r, temp2.i = q__1.i;
-/* L110: */
- }
- i__2 = jy;
- i__3 = jy;
- q__2.r = alpha->r * temp2.r - alpha->i * temp2.i, q__2.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
- Y(jy).r = q__1.r, Y(jy).i = q__1.i;
- jx += *incx;
- jy += *incy;
-/* L120: */
- }
- }
- }
-
- return 0;
-
-/* End of CHEMV . */
-
-} /* chemv_ */
-
diff --git a/CBLAS/cher2.c b/CBLAS/cher2.c
deleted file mode 100644
index 0b52d2e..0000000
--- a/CBLAS/cher2.c
+++ /dev/null
@@ -1,436 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int cher2_(char *uplo, integer *n, complex *alpha, complex *
- x, integer *incx, complex *y, integer *incy, complex *a, integer *lda)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
- doublereal d__1;
- complex q__1, q__2, q__3, q__4;
-
- /* Builtin functions */
- void r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer info;
- static complex temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- CHER2 performs the hermitian rank 2 operation
-
- A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + A,
-
- where alpha is a scalar, x and y are n element vectors and A is an n
-
- by n hermitian matrix.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the hermitian matrix and the strictly
- lower triangular part of A is not referenced. On exit, the
- upper triangular part of the array A is overwritten by the
- upper triangular part of the updated matrix.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the hermitian matrix and the strictly
- upper triangular part of A is not referenced. On exit, the
- lower triangular part of the array A is overwritten by the
- lower triangular part of the updated matrix.
- Note that the imaginary parts of the diagonal elements need
-
- not be set, they are assumed to be zero, and on exit they
- are set to zero.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*incx == 0) {
- info = 5;
- } else if (*incy == 0) {
- info = 7;
- } else if (*lda < max(1,*n)) {
- info = 9;
- }
- if (info != 0) {
- xerbla_("CHER2 ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || alpha->r == 0.f && alpha->i == 0.f) {
- return 0;
- }
-
-/* Set up the start points in X and Y if the increments are not both
-
- unity. */
-
- if (*incx != 1 || *incy != 1) {
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
- jx = kx;
- jy = ky;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A. */
-
- if (lsame_(uplo, "U")) {
-
-/* Form A when A is stored in the upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- i__3 = j;
- if (X(j).r != 0.f || X(j).i != 0.f || (Y(j).r != 0.f
- || Y(j).i != 0.f)) {
- r_cnjg(&q__2, &Y(j));
- q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
- alpha->r * q__2.i + alpha->i * q__2.r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- i__2 = j;
- q__2.r = alpha->r * X(j).r - alpha->i * X(j).i,
- q__2.i = alpha->r * X(j).i + alpha->i * X(j)
- .r;
- r_cnjg(&q__1, &q__2);
- temp2.r = q__1.r, temp2.i = q__1.i;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = i;
- q__3.r = X(i).r * temp1.r - X(i).i * temp1.i,
- q__3.i = X(i).r * temp1.i + X(i).i *
- temp1.r;
- q__2.r = A(i,j).r + q__3.r, q__2.i = A(i,j).i +
- q__3.i;
- i__6 = i;
- q__4.r = Y(i).r * temp2.r - Y(i).i * temp2.i,
- q__4.i = Y(i).r * temp2.i + Y(i).i *
- temp2.r;
- q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
- A(i,j).r = q__1.r, A(i,j).i = q__1.i;
-/* L10: */
- }
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- i__4 = j;
- q__2.r = X(j).r * temp1.r - X(j).i * temp1.i,
- q__2.i = X(j).r * temp1.i + X(j).i *
- temp1.r;
- i__5 = j;
- q__3.r = Y(j).r * temp2.r - Y(j).i * temp2.i,
- q__3.i = Y(j).r * temp2.i + Y(j).i *
- temp2.r;
- q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
- d__1 = A(j,j).r + q__1.r;
- A(j,j).r = d__1, A(j,j).i = 0.f;
- } else {
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- d__1 = A(j,j).r;
- A(j,j).r = d__1, A(j,j).i = 0.f;
- }
-/* L20: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- i__3 = jy;
- if (X(jx).r != 0.f || X(jx).i != 0.f || (Y(jy).r != 0.f
- || Y(jy).i != 0.f)) {
- r_cnjg(&q__2, &Y(jy));
- q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
- alpha->r * q__2.i + alpha->i * q__2.r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- i__2 = jx;
- q__2.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
- q__2.i = alpha->r * X(jx).i + alpha->i * X(jx)
- .r;
- r_cnjg(&q__1, &q__2);
- temp2.r = q__1.r, temp2.i = q__1.i;
- ix = kx;
- iy = ky;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = ix;
- q__3.r = X(ix).r * temp1.r - X(ix).i * temp1.i,
- q__3.i = X(ix).r * temp1.i + X(ix).i *
- temp1.r;
- q__2.r = A(i,j).r + q__3.r, q__2.i = A(i,j).i +
- q__3.i;
- i__6 = iy;
- q__4.r = Y(iy).r * temp2.r - Y(iy).i * temp2.i,
- q__4.i = Y(iy).r * temp2.i + Y(iy).i *
- temp2.r;
- q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
- A(i,j).r = q__1.r, A(i,j).i = q__1.i;
- ix += *incx;
- iy += *incy;
-/* L30: */
- }
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- i__4 = jx;
- q__2.r = X(jx).r * temp1.r - X(jx).i * temp1.i,
- q__2.i = X(jx).r * temp1.i + X(jx).i *
- temp1.r;
- i__5 = jy;
- q__3.r = Y(jy).r * temp2.r - Y(jy).i * temp2.i,
- q__3.i = Y(jy).r * temp2.i + Y(jy).i *
- temp2.r;
- q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
- d__1 = A(j,j).r + q__1.r;
- A(j,j).r = d__1, A(j,j).i = 0.f;
- } else {
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- d__1 = A(j,j).r;
- A(j,j).r = d__1, A(j,j).i = 0.f;
- }
- jx += *incx;
- jy += *incy;
-/* L40: */
- }
- }
- } else {
-
-/* Form A when A is stored in the lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- i__3 = j;
- if (X(j).r != 0.f || X(j).i != 0.f || (Y(j).r != 0.f
- || Y(j).i != 0.f)) {
- r_cnjg(&q__2, &Y(j));
- q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
- alpha->r * q__2.i + alpha->i * q__2.r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- i__2 = j;
- q__2.r = alpha->r * X(j).r - alpha->i * X(j).i,
- q__2.i = alpha->r * X(j).i + alpha->i * X(j)
- .r;
- r_cnjg(&q__1, &q__2);
- temp2.r = q__1.r, temp2.i = q__1.i;
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- i__4 = j;
- q__2.r = X(j).r * temp1.r - X(j).i * temp1.i,
- q__2.i = X(j).r * temp1.i + X(j).i *
- temp1.r;
- i__5 = j;
- q__3.r = Y(j).r * temp2.r - Y(j).i * temp2.i,
- q__3.i = Y(j).r * temp2.i + Y(j).i *
- temp2.r;
- q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
- d__1 = A(j,j).r + q__1.r;
- A(j,j).r = d__1, A(j,j).i = 0.f;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = i;
- q__3.r = X(i).r * temp1.r - X(i).i * temp1.i,
- q__3.i = X(i).r * temp1.i + X(i).i *
- temp1.r;
- q__2.r = A(i,j).r + q__3.r, q__2.i = A(i,j).i +
- q__3.i;
- i__6 = i;
- q__4.r = Y(i).r * temp2.r - Y(i).i * temp2.i,
- q__4.i = Y(i).r * temp2.i + Y(i).i *
- temp2.r;
- q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
- A(i,j).r = q__1.r, A(i,j).i = q__1.i;
-/* L50: */
- }
- } else {
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- d__1 = A(j,j).r;
- A(j,j).r = d__1, A(j,j).i = 0.f;
- }
-/* L60: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- i__3 = jy;
- if (X(jx).r != 0.f || X(jx).i != 0.f || (Y(jy).r != 0.f
- || Y(jy).i != 0.f)) {
- r_cnjg(&q__2, &Y(jy));
- q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
- alpha->r * q__2.i + alpha->i * q__2.r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- i__2 = jx;
- q__2.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
- q__2.i = alpha->r * X(jx).i + alpha->i * X(jx)
- .r;
- r_cnjg(&q__1, &q__2);
- temp2.r = q__1.r, temp2.i = q__1.i;
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- i__4 = jx;
- q__2.r = X(jx).r * temp1.r - X(jx).i * temp1.i,
- q__2.i = X(jx).r * temp1.i + X(jx).i *
- temp1.r;
- i__5 = jy;
- q__3.r = Y(jy).r * temp2.r - Y(jy).i * temp2.i,
- q__3.i = Y(jy).r * temp2.i + Y(jy).i *
- temp2.r;
- q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
- d__1 = A(j,j).r + q__1.r;
- A(j,j).r = d__1, A(j,j).i = 0.f;
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- iy += *incy;
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = ix;
- q__3.r = X(ix).r * temp1.r - X(ix).i * temp1.i,
- q__3.i = X(ix).r * temp1.i + X(ix).i *
- temp1.r;
- q__2.r = A(i,j).r + q__3.r, q__2.i = A(i,j).i +
- q__3.i;
- i__6 = iy;
- q__4.r = Y(iy).r * temp2.r - Y(iy).i * temp2.i,
- q__4.i = Y(iy).r * temp2.i + Y(iy).i *
- temp2.r;
- q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
- A(i,j).r = q__1.r, A(i,j).i = q__1.i;
-/* L70: */
- }
- } else {
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- d__1 = A(j,j).r;
- A(j,j).r = d__1, A(j,j).i = 0.f;
- }
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- }
-
- return 0;
-
-/* End of CHER2 . */
-
-} /* cher2_ */
-
diff --git a/CBLAS/ctrsv.c b/CBLAS/ctrsv.c
deleted file mode 100644
index 9280ec9..0000000
--- a/CBLAS/ctrsv.c
+++ /dev/null
@@ -1,509 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int ctrsv_(char *uplo, char *trans, char *diag, integer *n,
- complex *a, integer *lda, complex *x, integer *incx)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- complex q__1, q__2, q__3;
-
- /* Builtin functions */
- void c_div(complex *, complex *, complex *), r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer info;
- static complex temp;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, jx, kx;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical noconj, nounit;
-
-
-/* Purpose
- =======
-
- CTRSV solves one of the systems of equations
-
- A*x = b, or A'*x = b, or conjg( A' )*x = b,
-
- where b and x are n element vectors and A is an n by n 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.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- 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' conjg( A' )*x = b.
-
- Unchanged on exit.
-
- DIAG - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- A - COMPLEX array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular matrix and the strictly lower triangular part of
-
- A is not referenced.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular matrix and the strictly upper triangular part of
-
- A is not referenced.
- Note that when DIAG = 'U' or 'u', the diagonal elements of
-
- A are not referenced either, but are assumed to be unity.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
- X - COMPLEX array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- 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.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (! lsame_(trans, "N") && ! lsame_(trans, "T") &&
- ! lsame_(trans, "C")) {
- info = 2;
- } else if (! lsame_(diag, "U") && ! lsame_(diag, "N")) {
- info = 3;
- } else if (*n < 0) {
- info = 4;
- } else if (*lda < max(1,*n)) {
- info = 6;
- } else if (*incx == 0) {
- info = 8;
- }
- if (info != 0) {
- xerbla_("CTRSV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0) {
- return 0;
- }
-
- noconj = lsame_(trans, "T");
- nounit = lsame_(diag, "N");
-
-/* Set up the start point in X if the increment is not unity. This
- will be ( N - 1 )*INCX too small for descending loops. */
-
- if (*incx <= 0) {
- kx = 1 - (*n - 1) * *incx;
- } else if (*incx != 1) {
- kx = 1;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
-
- if (lsame_(trans, "N")) {
-
-/* Form x := inv( A )*x. */
-
- if (lsame_(uplo, "U")) {
- if (*incx == 1) {
- for (j = *n; j >= 1; --j) {
- i__1 = j;
- if (X(j).r != 0.f || X(j).i != 0.f) {
- if (nounit) {
- i__1 = j;
- c_div(&q__1, &X(j), &A(j,j));
- X(j).r = q__1.r, X(j).i = q__1.i;
- }
- i__1 = j;
- temp.r = X(j).r, temp.i = X(j).i;
- for (i = j - 1; i >= 1; --i) {
- i__1 = i;
- i__2 = i;
- i__3 = i + j * a_dim1;
- q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- q__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
- q__1.r = X(i).r - q__2.r, q__1.i = X(i).i -
- q__2.i;
- X(i).r = q__1.r, X(i).i = q__1.i;
-/* L10: */
- }
- }
-/* L20: */
- }
- } else {
- jx = kx + (*n - 1) * *incx;
- for (j = *n; j >= 1; --j) {
- i__1 = jx;
- if (X(jx).r != 0.f || X(jx).i != 0.f) {
- if (nounit) {
- i__1 = jx;
- c_div(&q__1, &X(jx), &A(j,j));
- X(jx).r = q__1.r, X(jx).i = q__1.i;
- }
- i__1 = jx;
- temp.r = X(jx).r, temp.i = X(jx).i;
- ix = jx;
- for (i = j - 1; i >= 1; --i) {
- ix -= *incx;
- i__1 = ix;
- i__2 = ix;
- i__3 = i + j * a_dim1;
- q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- q__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
- q__1.r = X(ix).r - q__2.r, q__1.i = X(ix).i -
- q__2.i;
- X(ix).r = q__1.r, X(ix).i = q__1.i;
-/* L30: */
- }
- }
- jx -= *incx;
-/* L40: */
- }
- }
- } else {
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- if (X(j).r != 0.f || X(j).i != 0.f) {
- if (nounit) {
- i__2 = j;
- c_div(&q__1, &X(j), &A(j,j));
- X(j).r = q__1.r, X(j).i = q__1.i;
- }
- i__2 = j;
- temp.r = X(j).r, temp.i = X(j).i;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- q__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
- q__1.r = X(i).r - q__2.r, q__1.i = X(i).i -
- q__2.i;
- X(i).r = q__1.r, X(i).i = q__1.i;
-/* L50: */
- }
- }
-/* L60: */
- }
- } else {
- jx = kx;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- if (X(jx).r != 0.f || X(jx).i != 0.f) {
- if (nounit) {
- i__2 = jx;
- c_div(&q__1, &X(jx), &A(j,j));
- X(jx).r = q__1.r, X(jx).i = q__1.i;
- }
- i__2 = jx;
- temp.r = X(jx).r, temp.i = X(jx).i;
- ix = jx;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- i__3 = ix;
- i__4 = ix;
- i__5 = i + j * a_dim1;
- q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- q__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
- q__1.r = X(ix).r - q__2.r, q__1.i = X(ix).i -
- q__2.i;
- X(ix).r = q__1.r, X(ix).i = q__1.i;
-/* L70: */
- }
- }
- jx += *incx;
-/* L80: */
- }
- }
- }
- } else {
-
-/* Form x := inv( A' )*x or x := inv( conjg( A' ) )*x. */
-
- if (lsame_(uplo, "U")) {
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- temp.r = X(j).r, temp.i = X(j).i;
- if (noconj) {
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i;
- q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(
- i).i, q__2.i = A(i,j).r * X(i).i +
- A(i,j).i * X(i).r;
- q__1.r = temp.r - q__2.r, q__1.i = temp.i -
- q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
-/* L90: */
- }
- if (nounit) {
- c_div(&q__1, &temp, &A(j,j));
- temp.r = q__1.r, temp.i = q__1.i;
- }
- } else {
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- r_cnjg(&q__3, &A(i,j));
- i__3 = i;
- q__2.r = q__3.r * X(i).r - q__3.i * X(i).i,
- q__2.i = q__3.r * X(i).i + q__3.i * X(
- i).r;
- q__1.r = temp.r - q__2.r, q__1.i = temp.i -
- q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
-/* L100: */
- }
- if (nounit) {
- r_cnjg(&q__2, &A(j,j));
- c_div(&q__1, &temp, &q__2);
- temp.r = q__1.r, temp.i = q__1.i;
- }
- }
- i__2 = j;
- X(j).r = temp.r, X(j).i = temp.i;
-/* L110: */
- }
- } else {
- jx = kx;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- ix = kx;
- i__2 = jx;
- temp.r = X(jx).r, temp.i = X(jx).i;
- if (noconj) {
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = ix;
- q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(
- ix).i, q__2.i = A(i,j).r * X(ix).i +
- A(i,j).i * X(ix).r;
- q__1.r = temp.r - q__2.r, q__1.i = temp.i -
- q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
- ix += *incx;
-/* L120: */
- }
- if (nounit) {
- c_div(&q__1, &temp, &A(j,j));
- temp.r = q__1.r, temp.i = q__1.i;
- }
- } else {
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- r_cnjg(&q__3, &A(i,j));
- i__3 = ix;
- q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i,
- q__2.i = q__3.r * X(ix).i + q__3.i * X(
- ix).r;
- q__1.r = temp.r - q__2.r, q__1.i = temp.i -
- q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
- ix += *incx;
-/* L130: */
- }
- if (nounit) {
- r_cnjg(&q__2, &A(j,j));
- c_div(&q__1, &temp, &q__2);
- temp.r = q__1.r, temp.i = q__1.i;
- }
- }
- i__2 = jx;
- X(jx).r = temp.r, X(jx).i = temp.i;
- jx += *incx;
-/* L140: */
- }
- }
- } else {
- if (*incx == 1) {
- for (j = *n; j >= 1; --j) {
- i__1 = j;
- temp.r = X(j).r, temp.i = X(j).i;
- if (noconj) {
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- i__2 = i + j * a_dim1;
- i__3 = i;
- q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(
- i).i, q__2.i = A(i,j).r * X(i).i +
- A(i,j).i * X(i).r;
- q__1.r = temp.r - q__2.r, q__1.i = temp.i -
- q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
-/* L150: */
- }
- if (nounit) {
- c_div(&q__1, &temp, &A(j,j));
- temp.r = q__1.r, temp.i = q__1.i;
- }
- } else {
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- r_cnjg(&q__3, &A(i,j));
- i__2 = i;
- q__2.r = q__3.r * X(i).r - q__3.i * X(i).i,
- q__2.i = q__3.r * X(i).i + q__3.i * X(
- i).r;
- q__1.r = temp.r - q__2.r, q__1.i = temp.i -
- q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
-/* L160: */
- }
- if (nounit) {
- r_cnjg(&q__2, &A(j,j));
- c_div(&q__1, &temp, &q__2);
- temp.r = q__1.r, temp.i = q__1.i;
- }
- }
- i__1 = j;
- X(j).r = temp.r, X(j).i = temp.i;
-/* L170: */
- }
- } else {
- kx += (*n - 1) * *incx;
- jx = kx;
- for (j = *n; j >= 1; --j) {
- ix = kx;
- i__1 = jx;
- temp.r = X(jx).r, temp.i = X(jx).i;
- if (noconj) {
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- i__2 = i + j * a_dim1;
- i__3 = ix;
- q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(
- ix).i, q__2.i = A(i,j).r * X(ix).i +
- A(i,j).i * X(ix).r;
- q__1.r = temp.r - q__2.r, q__1.i = temp.i -
- q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
- ix -= *incx;
-/* L180: */
- }
- if (nounit) {
- c_div(&q__1, &temp, &A(j,j));
- temp.r = q__1.r, temp.i = q__1.i;
- }
- } else {
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- r_cnjg(&q__3, &A(i,j));
- i__2 = ix;
- q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i,
- q__2.i = q__3.r * X(ix).i + q__3.i * X(
- ix).r;
- q__1.r = temp.r - q__2.r, q__1.i = temp.i -
- q__2.i;
- temp.r = q__1.r, temp.i = q__1.i;
- ix -= *incx;
-/* L190: */
- }
- if (nounit) {
- r_cnjg(&q__2, &A(j,j));
- c_div(&q__1, &temp, &q__2);
- temp.r = q__1.r, temp.i = q__1.i;
- }
- }
- i__1 = jx;
- X(jx).r = temp.r, X(jx).i = temp.i;
- jx -= *incx;
-/* L200: */
- }
- }
- }
- }
-
- return 0;
-
-/* End of CTRSV . */
-
-} /* ctrsv_ */
-
diff --git a/CBLAS/dgemv.c b/CBLAS/dgemv.c
deleted file mode 100644
index e82bb65..0000000
--- a/CBLAS/dgemv.c
+++ /dev/null
@@ -1,299 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int dgemv_(char *trans, integer *m, integer *n, doublereal *
- alpha, doublereal *a, integer *lda, doublereal *x, integer *incx,
- doublereal *beta, doublereal *y, integer *incy)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static doublereal temp;
- static integer lenx, leny, i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- 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 an
- m by n matrix.
-
- Parameters
- ==========
-
- TRANS - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
-
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - DOUBLE PRECISION.
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, m ).
- Unchanged on exit.
-
- X - DOUBLE PRECISION 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.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - DOUBLE PRECISION.
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - DOUBLE PRECISION 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 - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(trans, "N") && ! lsame_(trans, "T") && !
- lsame_(trans, "C")) {
- info = 1;
- } else if (*m < 0) {
- info = 2;
- } else if (*n < 0) {
- info = 3;
- } else if (*lda < max(1,*m)) {
- info = 6;
- } else if (*incx == 0) {
- info = 8;
- } else if (*incy == 0) {
- info = 11;
- }
- if (info != 0) {
- xerbla_("DGEMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*m == 0 || *n == 0 || *alpha == 0. && *beta == 1.) {
- return 0;
- }
-
-/* Set LENX and LENY, the lengths of the vectors x and y, and set
-
- up the start points in X and Y. */
-
- if (lsame_(trans, "N")) {
- lenx = *n;
- leny = *m;
- } else {
- lenx = *m;
- leny = *n;
- }
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (lenx - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (leny - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A.
-
- First form y := beta*y. */
-
- if (*beta != 1.) {
- if (*incy == 1) {
- if (*beta == 0.) {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- Y(i) = 0.;
-/* L10: */
- }
- } else {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- Y(i) = *beta * Y(i);
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (*beta == 0.) {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- Y(iy) = 0.;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- Y(iy) = *beta * Y(iy);
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (*alpha == 0.) {
- return 0;
- }
- if (lsame_(trans, "N")) {
-
-/* Form y := alpha*A*x + y. */
-
- jx = kx;
- if (*incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0.) {
- temp = *alpha * X(jx);
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- Y(i) += temp * A(i,j);
-/* L50: */
- }
- }
- jx += *incx;
-/* L60: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0.) {
- temp = *alpha * X(jx);
- iy = ky;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- Y(iy) += temp * A(i,j);
- iy += *incy;
-/* L70: */
- }
- }
- jx += *incx;
-/* L80: */
- }
- }
- } else {
-
-/* Form y := alpha*A'*x + y. */
-
- jy = ky;
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp = 0.;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- temp += A(i,j) * X(i);
-/* L90: */
- }
- Y(jy) += *alpha * temp;
- jy += *incy;
-/* L100: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp = 0.;
- ix = kx;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- temp += A(i,j) * X(ix);
- ix += *incx;
-/* L110: */
- }
- Y(jy) += *alpha * temp;
- jy += *incy;
-/* L120: */
- }
- }
- }
-
- return 0;
-
-/* End of DGEMV . */
-
-} /* dgemv_ */
-
diff --git a/CBLAS/dger.c b/CBLAS/dger.c
deleted file mode 100644
index 1e85eb0..0000000
--- a/CBLAS/dger.c
+++ /dev/null
@@ -1,182 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int dger_(integer *m, integer *n, doublereal *alpha,
- doublereal *x, integer *incx, doublereal *y, integer *incy,
- doublereal *a, integer *lda)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static doublereal temp;
- static integer i, j, ix, jy, kx;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- DGER performs the rank 1 operation
-
- A := alpha*x*y' + A,
-
- where alpha is a scalar, x is an m element vector, y is an n element
-
- vector and A is an m by n matrix.
-
- Parameters
- ==========
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
-
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - DOUBLE PRECISION.
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - DOUBLE PRECISION array of dimension at least
- ( 1 + ( m - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the m
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - DOUBLE PRECISION array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients. On exit, A is
- overwritten by the updated matrix.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (*m < 0) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*incx == 0) {
- info = 5;
- } else if (*incy == 0) {
- info = 7;
- } else if (*lda < max(1,*m)) {
- info = 9;
- }
- if (info != 0) {
- xerbla_("DGER ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*m == 0 || *n == 0 || *alpha == 0.) {
- return 0;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
-
- if (*incy > 0) {
- jy = 1;
- } else {
- jy = 1 - (*n - 1) * *incy;
- }
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (Y(jy) != 0.) {
- temp = *alpha * Y(jy);
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- A(i,j) += X(i) * temp;
-/* L10: */
- }
- }
- jy += *incy;
-/* L20: */
- }
- } else {
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*m - 1) * *incx;
- }
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (Y(jy) != 0.) {
- temp = *alpha * Y(jy);
- ix = kx;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- A(i,j) += X(ix) * temp;
- ix += *incx;
-/* L30: */
- }
- }
- jy += *incy;
-/* L40: */
- }
- }
-
- return 0;
-
-/* End of DGER . */
-
-} /* dger_ */
-
diff --git a/CBLAS/dsymv.c b/CBLAS/dsymv.c
deleted file mode 100644
index e7416b5..0000000
--- a/CBLAS/dsymv.c
+++ /dev/null
@@ -1,300 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int dsymv_(char *uplo, integer *n, doublereal *alpha,
- doublereal *a, integer *lda, doublereal *x, integer *incx, doublereal
- *beta, doublereal *y, integer *incy)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static doublereal temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- DSYMV performs the matrix-vector operation
-
- y := alpha*A*x + beta*y,
-
- where alpha and beta are scalars, x and y are n element vectors and
- A is an n by n symmetric matrix.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - DOUBLE PRECISION.
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the symmetric matrix and the strictly
- lower triangular part of A is not referenced.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the symmetric matrix and the strictly
- upper triangular part of A is not referenced.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
- X - DOUBLE PRECISION array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - DOUBLE PRECISION.
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - DOUBLE PRECISION array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y. On exit, Y is overwritten by the updated
- vector y.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*lda < max(1,*n)) {
- info = 5;
- } else if (*incx == 0) {
- info = 7;
- } else if (*incy == 0) {
- info = 10;
- }
- if (info != 0) {
- xerbla_("DSYMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || *alpha == 0. && *beta == 1.) {
- return 0;
- }
-
-/* Set up the start points in X and Y. */
-
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A.
-
- First form y := beta*y. */
-
- if (*beta != 1.) {
- if (*incy == 1) {
- if (*beta == 0.) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- Y(i) = 0.;
-/* L10: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- Y(i) = *beta * Y(i);
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (*beta == 0.) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- Y(iy) = 0.;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- Y(iy) = *beta * Y(iy);
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (*alpha == 0.) {
- return 0;
- }
- if (lsame_(uplo, "U")) {
-
-/* Form y when A is stored in upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp1 = *alpha * X(j);
- temp2 = 0.;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- Y(i) += temp1 * A(i,j);
- temp2 += A(i,j) * X(i);
-/* L50: */
- }
- Y(j) = Y(j) + temp1 * A(j,j) + *alpha * temp2;
-/* L60: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp1 = *alpha * X(jx);
- temp2 = 0.;
- ix = kx;
- iy = ky;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- Y(iy) += temp1 * A(i,j);
- temp2 += A(i,j) * X(ix);
- ix += *incx;
- iy += *incy;
-/* L70: */
- }
- Y(jy) = Y(jy) + temp1 * A(j,j) + *alpha * temp2;
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- } else {
-
-/* Form y when A is stored in lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp1 = *alpha * X(j);
- temp2 = 0.;
- Y(j) += temp1 * A(j,j);
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- Y(i) += temp1 * A(i,j);
- temp2 += A(i,j) * X(i);
-/* L90: */
- }
- Y(j) += *alpha * temp2;
-/* L100: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp1 = *alpha * X(jx);
- temp2 = 0.;
- Y(jy) += temp1 * A(j,j);
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- iy += *incy;
- Y(iy) += temp1 * A(i,j);
- temp2 += A(i,j) * X(ix);
-/* L110: */
- }
- Y(jy) += *alpha * temp2;
- jx += *incx;
- jy += *incy;
-/* L120: */
- }
- }
- }
-
- return 0;
-
-/* End of DSYMV . */
-
-} /* dsymv_ */
-
diff --git a/CBLAS/dsyr2.c b/CBLAS/dsyr2.c
deleted file mode 100644
index 8e6fabe..0000000
--- a/CBLAS/dsyr2.c
+++ /dev/null
@@ -1,264 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int dsyr2_(char *uplo, integer *n, doublereal *alpha,
- doublereal *x, integer *incx, doublereal *y, integer *incy,
- doublereal *a, integer *lda)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static doublereal temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- DSYR2 performs the symmetric rank 2 operation
-
- A := alpha*x*y' + alpha*y*x' + A,
-
- where alpha is a scalar, x and y are n element vectors and A is an n
-
- by n symmetric matrix.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - DOUBLE PRECISION.
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - DOUBLE PRECISION array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - DOUBLE PRECISION array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the symmetric matrix and the strictly
- lower triangular part of A is not referenced. On exit, the
- upper triangular part of the array A is overwritten by the
- upper triangular part of the updated matrix.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the symmetric matrix and the strictly
- upper triangular part of A is not referenced. On exit, the
- lower triangular part of the array A is overwritten by the
- lower triangular part of the updated matrix.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*incx == 0) {
- info = 5;
- } else if (*incy == 0) {
- info = 7;
- } else if (*lda < max(1,*n)) {
- info = 9;
- }
- if (info != 0) {
- xerbla_("DSYR2 ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || *alpha == 0.) {
- return 0;
- }
-
-/* Set up the start points in X and Y if the increments are not both
-
- unity. */
-
- if (*incx != 1 || *incy != 1) {
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
- jx = kx;
- jy = ky;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A. */
-
- if (lsame_(uplo, "U")) {
-
-/* Form A when A is stored in the upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(j) != 0. || Y(j) != 0.) {
- temp1 = *alpha * Y(j);
- temp2 = *alpha * X(j);
- i__2 = j;
- for (i = 1; i <= j; ++i) {
- A(i,j) = A(i,j) + X(i) * temp1
- + Y(i) * temp2;
-/* L10: */
- }
- }
-/* L20: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0. || Y(jy) != 0.) {
- temp1 = *alpha * Y(jy);
- temp2 = *alpha * X(jx);
- ix = kx;
- iy = ky;
- i__2 = j;
- for (i = 1; i <= j; ++i) {
- A(i,j) = A(i,j) + X(ix) * temp1
- + Y(iy) * temp2;
- ix += *incx;
- iy += *incy;
-/* L30: */
- }
- }
- jx += *incx;
- jy += *incy;
-/* L40: */
- }
- }
- } else {
-
-/* Form A when A is stored in the lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(j) != 0. || Y(j) != 0.) {
- temp1 = *alpha * Y(j);
- temp2 = *alpha * X(j);
- i__2 = *n;
- for (i = j; i <= *n; ++i) {
- A(i,j) = A(i,j) + X(i) * temp1
- + Y(i) * temp2;
-/* L50: */
- }
- }
-/* L60: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0. || Y(jy) != 0.) {
- temp1 = *alpha * Y(jy);
- temp2 = *alpha * X(jx);
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j; i <= *n; ++i) {
- A(i,j) = A(i,j) + X(ix) * temp1
- + Y(iy) * temp2;
- ix += *incx;
- iy += *incy;
-/* L70: */
- }
- }
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- }
-
- return 0;
-
-/* End of DSYR2 . */
-
-} /* dsyr2_ */
-
diff --git a/CBLAS/dtrsv.c b/CBLAS/dtrsv.c
deleted file mode 100644
index b0b8bb3..0000000
--- a/CBLAS/dtrsv.c
+++ /dev/null
@@ -1,338 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int dtrsv_(char *uplo, char *trans, char *diag, integer *n,
- doublereal *a, integer *lda, doublereal *x, integer *incx)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static doublereal temp;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, jx, kx;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical nounit;
-
-
-/* Purpose
- =======
-
- DTRSV 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 an n by n 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.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- DIAG - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular matrix and the strictly lower triangular part of
-
- A is not referenced.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular matrix and the strictly upper triangular part of
-
- A is not referenced.
- Note that when DIAG = 'U' or 'u', the diagonal elements of
-
- A are not referenced either, but are assumed to be unity.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
- X - DOUBLE PRECISION array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- 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.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (! lsame_(trans, "N") && ! lsame_(trans, "T") &&
- ! lsame_(trans, "C")) {
- info = 2;
- } else if (! lsame_(diag, "U") && ! lsame_(diag, "N")) {
- info = 3;
- } else if (*n < 0) {
- info = 4;
- } else if (*lda < max(1,*n)) {
- info = 6;
- } else if (*incx == 0) {
- info = 8;
- }
- if (info != 0) {
- xerbla_("DTRSV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0) {
- return 0;
- }
-
- nounit = lsame_(diag, "N");
-
-/* Set up the start point in X if the increment is not unity. This
- will be ( N - 1 )*INCX too small for descending loops. */
-
- if (*incx <= 0) {
- kx = 1 - (*n - 1) * *incx;
- } else if (*incx != 1) {
- kx = 1;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
-
- if (lsame_(trans, "N")) {
-
-/* Form x := inv( A )*x. */
-
- if (lsame_(uplo, "U")) {
- if (*incx == 1) {
- for (j = *n; j >= 1; --j) {
- if (X(j) != 0.) {
- if (nounit) {
- X(j) /= A(j,j);
- }
- temp = X(j);
- for (i = j - 1; i >= 1; --i) {
- X(i) -= temp * A(i,j);
-/* L10: */
- }
- }
-/* L20: */
- }
- } else {
- jx = kx + (*n - 1) * *incx;
- for (j = *n; j >= 1; --j) {
- if (X(jx) != 0.) {
- if (nounit) {
- X(jx) /= A(j,j);
- }
- temp = X(jx);
- ix = jx;
- for (i = j - 1; i >= 1; --i) {
- ix -= *incx;
- X(ix) -= temp * A(i,j);
-/* L30: */
- }
- }
- jx -= *incx;
-/* L40: */
- }
- }
- } else {
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(j) != 0.) {
- if (nounit) {
- X(j) /= A(j,j);
- }
- temp = X(j);
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- X(i) -= temp * A(i,j);
-/* L50: */
- }
- }
-/* L60: */
- }
- } else {
- jx = kx;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0.) {
- if (nounit) {
- X(jx) /= A(j,j);
- }
- temp = X(jx);
- ix = jx;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- X(ix) -= temp * A(i,j);
-/* L70: */
- }
- }
- jx += *incx;
-/* L80: */
- }
- }
- }
- } else {
-
-/* Form x := inv( A' )*x. */
-
- if (lsame_(uplo, "U")) {
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp = X(j);
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- temp -= A(i,j) * X(i);
-/* L90: */
- }
- if (nounit) {
- temp /= A(j,j);
- }
- X(j) = temp;
-/* L100: */
- }
- } else {
- jx = kx;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp = X(jx);
- ix = kx;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- temp -= A(i,j) * X(ix);
- ix += *incx;
-/* L110: */
- }
- if (nounit) {
- temp /= A(j,j);
- }
- X(jx) = temp;
- jx += *incx;
-/* L120: */
- }
- }
- } else {
- if (*incx == 1) {
- for (j = *n; j >= 1; --j) {
- temp = X(j);
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- temp -= A(i,j) * X(i);
-/* L130: */
- }
- if (nounit) {
- temp /= A(j,j);
- }
- X(j) = temp;
-/* L140: */
- }
- } else {
- kx += (*n - 1) * *incx;
- jx = kx;
- for (j = *n; j >= 1; --j) {
- temp = X(jx);
- ix = kx;
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- temp -= A(i,j) * X(ix);
- ix -= *incx;
-/* L150: */
- }
- if (nounit) {
- temp /= A(j,j);
- }
- X(jx) = temp;
- jx -= *incx;
-/* L160: */
- }
- }
- }
- }
-
- return 0;
-
-/* End of DTRSV . */
-
-} /* dtrsv_ */
-
diff --git a/CBLAS/sgemv.c b/CBLAS/sgemv.c
deleted file mode 100644
index 9910c18..0000000
--- a/CBLAS/sgemv.c
+++ /dev/null
@@ -1,299 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int sgemv_(char *trans, integer *m, integer *n, real *alpha,
- real *a, integer *lda, real *x, integer *incx, real *beta, real *y,
- integer *incy)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static real temp;
- static integer lenx, leny, i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- 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 an
- m by n matrix.
-
- Parameters
- ==========
-
- TRANS - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
-
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, m ).
- Unchanged on exit.
-
- X - REAL 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.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - REAL 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 - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(trans, "N") && ! lsame_(trans, "T") && !
- lsame_(trans, "C")) {
- info = 1;
- } else if (*m < 0) {
- info = 2;
- } else if (*n < 0) {
- info = 3;
- } else if (*lda < max(1,*m)) {
- info = 6;
- } else if (*incx == 0) {
- info = 8;
- } else if (*incy == 0) {
- info = 11;
- }
- if (info != 0) {
- xerbla_("SGEMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*m == 0 || *n == 0 || *alpha == 0.f && *beta == 1.f) {
- return 0;
- }
-
-/* Set LENX and LENY, the lengths of the vectors x and y, and set
-
- up the start points in X and Y. */
-
- if (lsame_(trans, "N")) {
- lenx = *n;
- leny = *m;
- } else {
- lenx = *m;
- leny = *n;
- }
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (lenx - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (leny - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A.
-
- First form y := beta*y. */
-
- if (*beta != 1.f) {
- if (*incy == 1) {
- if (*beta == 0.f) {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- Y(i) = 0.f;
-/* L10: */
- }
- } else {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- Y(i) = *beta * Y(i);
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (*beta == 0.f) {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- Y(iy) = 0.f;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- Y(iy) = *beta * Y(iy);
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (*alpha == 0.f) {
- return 0;
- }
- if (lsame_(trans, "N")) {
-
-/* Form y := alpha*A*x + y. */
-
- jx = kx;
- if (*incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0.f) {
- temp = *alpha * X(jx);
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- Y(i) += temp * A(i,j);
-/* L50: */
- }
- }
- jx += *incx;
-/* L60: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0.f) {
- temp = *alpha * X(jx);
- iy = ky;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- Y(iy) += temp * A(i,j);
- iy += *incy;
-/* L70: */
- }
- }
- jx += *incx;
-/* L80: */
- }
- }
- } else {
-
-/* Form y := alpha*A'*x + y. */
-
- jy = ky;
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp = 0.f;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- temp += A(i,j) * X(i);
-/* L90: */
- }
- Y(jy) += *alpha * temp;
- jy += *incy;
-/* L100: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp = 0.f;
- ix = kx;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- temp += A(i,j) * X(ix);
- ix += *incx;
-/* L110: */
- }
- Y(jy) += *alpha * temp;
- jy += *incy;
-/* L120: */
- }
- }
- }
-
- return 0;
-
-/* End of SGEMV . */
-
-} /* sgemv_ */
-
diff --git a/CBLAS/sger.c b/CBLAS/sger.c
deleted file mode 100644
index d73fd6c..0000000
--- a/CBLAS/sger.c
+++ /dev/null
@@ -1,181 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int sger_(integer *m, integer *n, real *alpha, real *x,
- integer *incx, real *y, integer *incy, real *a, integer *lda)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static real temp;
- static integer i, j, ix, jy, kx;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- SGER performs the rank 1 operation
-
- A := alpha*x*y' + A,
-
- where alpha is a scalar, x is an m element vector, y is an n element
-
- vector and A is an m by n matrix.
-
- Parameters
- ==========
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
-
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( m - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the m
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients. On exit, A is
- overwritten by the updated matrix.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (*m < 0) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*incx == 0) {
- info = 5;
- } else if (*incy == 0) {
- info = 7;
- } else if (*lda < max(1,*m)) {
- info = 9;
- }
- if (info != 0) {
- xerbla_("SGER ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*m == 0 || *n == 0 || *alpha == 0.f) {
- return 0;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
-
- if (*incy > 0) {
- jy = 1;
- } else {
- jy = 1 - (*n - 1) * *incy;
- }
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (Y(jy) != 0.f) {
- temp = *alpha * Y(jy);
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- A(i,j) += X(i) * temp;
-/* L10: */
- }
- }
- jy += *incy;
-/* L20: */
- }
- } else {
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*m - 1) * *incx;
- }
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (Y(jy) != 0.f) {
- temp = *alpha * Y(jy);
- ix = kx;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- A(i,j) += X(ix) * temp;
- ix += *incx;
-/* L30: */
- }
- }
- jy += *incy;
-/* L40: */
- }
- }
-
- return 0;
-
-/* End of SGER . */
-
-} /* sger_ */
-
diff --git a/CBLAS/slu_Cnames.h b/CBLAS/slu_Cnames.h
deleted file mode 120000
index 62b2820..0000000
--- a/CBLAS/slu_Cnames.h
+++ /dev/null
@@ -1 +0,0 @@
-../SRC/slu_Cnames.h
\ No newline at end of file
diff --git a/CBLAS/ssymv.c b/CBLAS/ssymv.c
deleted file mode 100644
index 1f7418b..0000000
--- a/CBLAS/ssymv.c
+++ /dev/null
@@ -1,300 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int ssymv_(char *uplo, integer *n, real *alpha, real *a,
- integer *lda, real *x, integer *incx, real *beta, real *y, integer *
- incy)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static real temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- SSYMV performs the matrix-vector operation
-
- y := alpha*A*x + beta*y,
-
- where alpha and beta are scalars, x and y are n element vectors and
- A is an n by n symmetric matrix.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the symmetric matrix and the strictly
- lower triangular part of A is not referenced.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the symmetric matrix and the strictly
- upper triangular part of A is not referenced.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - REAL .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y. On exit, Y is overwritten by the updated
- vector y.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*lda < max(1,*n)) {
- info = 5;
- } else if (*incx == 0) {
- info = 7;
- } else if (*incy == 0) {
- info = 10;
- }
- if (info != 0) {
- xerbla_("SSYMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || *alpha == 0.f && *beta == 1.f) {
- return 0;
- }
-
-/* Set up the start points in X and Y. */
-
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A.
-
- First form y := beta*y. */
-
- if (*beta != 1.f) {
- if (*incy == 1) {
- if (*beta == 0.f) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- Y(i) = 0.f;
-/* L10: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- Y(i) = *beta * Y(i);
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (*beta == 0.f) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- Y(iy) = 0.f;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- Y(iy) = *beta * Y(iy);
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (*alpha == 0.f) {
- return 0;
- }
- if (lsame_(uplo, "U")) {
-
-/* Form y when A is stored in upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp1 = *alpha * X(j);
- temp2 = 0.f;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- Y(i) += temp1 * A(i,j);
- temp2 += A(i,j) * X(i);
-/* L50: */
- }
- Y(j) = Y(j) + temp1 * A(j,j) + *alpha * temp2;
-/* L60: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp1 = *alpha * X(jx);
- temp2 = 0.f;
- ix = kx;
- iy = ky;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- Y(iy) += temp1 * A(i,j);
- temp2 += A(i,j) * X(ix);
- ix += *incx;
- iy += *incy;
-/* L70: */
- }
- Y(jy) = Y(jy) + temp1 * A(j,j) + *alpha * temp2;
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- } else {
-
-/* Form y when A is stored in lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp1 = *alpha * X(j);
- temp2 = 0.f;
- Y(j) += temp1 * A(j,j);
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- Y(i) += temp1 * A(i,j);
- temp2 += A(i,j) * X(i);
-/* L90: */
- }
- Y(j) += *alpha * temp2;
-/* L100: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp1 = *alpha * X(jx);
- temp2 = 0.f;
- Y(jy) += temp1 * A(j,j);
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- iy += *incy;
- Y(iy) += temp1 * A(i,j);
- temp2 += A(i,j) * X(ix);
-/* L110: */
- }
- Y(jy) += *alpha * temp2;
- jx += *incx;
- jy += *incy;
-/* L120: */
- }
- }
- }
-
- return 0;
-
-/* End of SSYMV . */
-
-} /* ssymv_ */
-
diff --git a/CBLAS/ssyr2.c b/CBLAS/ssyr2.c
deleted file mode 100644
index be43dfa..0000000
--- a/CBLAS/ssyr2.c
+++ /dev/null
@@ -1,263 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int ssyr2_(char *uplo, integer *n, real *alpha, real *x,
- integer *incx, real *y, integer *incy, real *a, integer *lda)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static real temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- SSYR2 performs the symmetric rank 2 operation
-
- A := alpha*x*y' + alpha*y*x' + A,
-
- where alpha is a scalar, x and y are n element vectors and A is an n
-
- by n symmetric matrix.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - REAL .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the symmetric matrix and the strictly
- lower triangular part of A is not referenced. On exit, the
- upper triangular part of the array A is overwritten by the
- upper triangular part of the updated matrix.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the symmetric matrix and the strictly
- upper triangular part of A is not referenced. On exit, the
- lower triangular part of the array A is overwritten by the
- lower triangular part of the updated matrix.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*incx == 0) {
- info = 5;
- } else if (*incy == 0) {
- info = 7;
- } else if (*lda < max(1,*n)) {
- info = 9;
- }
- if (info != 0) {
- xerbla_("SSYR2 ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || *alpha == 0.f) {
- return 0;
- }
-
-/* Set up the start points in X and Y if the increments are not both
-
- unity. */
-
- if (*incx != 1 || *incy != 1) {
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
- jx = kx;
- jy = ky;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A. */
-
- if (lsame_(uplo, "U")) {
-
-/* Form A when A is stored in the upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(j) != 0.f || Y(j) != 0.f) {
- temp1 = *alpha * Y(j);
- temp2 = *alpha * X(j);
- i__2 = j;
- for (i = 1; i <= j; ++i) {
- A(i,j) = A(i,j) + X(i) * temp1
- + Y(i) * temp2;
-/* L10: */
- }
- }
-/* L20: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0.f || Y(jy) != 0.f) {
- temp1 = *alpha * Y(jy);
- temp2 = *alpha * X(jx);
- ix = kx;
- iy = ky;
- i__2 = j;
- for (i = 1; i <= j; ++i) {
- A(i,j) = A(i,j) + X(ix) * temp1
- + Y(iy) * temp2;
- ix += *incx;
- iy += *incy;
-/* L30: */
- }
- }
- jx += *incx;
- jy += *incy;
-/* L40: */
- }
- }
- } else {
-
-/* Form A when A is stored in the lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(j) != 0.f || Y(j) != 0.f) {
- temp1 = *alpha * Y(j);
- temp2 = *alpha * X(j);
- i__2 = *n;
- for (i = j; i <= *n; ++i) {
- A(i,j) = A(i,j) + X(i) * temp1
- + Y(i) * temp2;
-/* L50: */
- }
- }
-/* L60: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0.f || Y(jy) != 0.f) {
- temp1 = *alpha * Y(jy);
- temp2 = *alpha * X(jx);
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j; i <= *n; ++i) {
- A(i,j) = A(i,j) + X(ix) * temp1
- + Y(iy) * temp2;
- ix += *incx;
- iy += *incy;
-/* L70: */
- }
- }
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- }
-
- return 0;
-
-/* End of SSYR2 . */
-
-} /* ssyr2_ */
-
diff --git a/CBLAS/strsv.c b/CBLAS/strsv.c
deleted file mode 100644
index 39da363..0000000
--- a/CBLAS/strsv.c
+++ /dev/null
@@ -1,338 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int strsv_(char *uplo, char *trans, char *diag, integer *n,
- real *a, integer *lda, real *x, integer *incx)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
-
- /* Local variables */
- static integer info;
- static real temp;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, jx, kx;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical nounit;
-
-
-/* Purpose
- =======
-
- STRSV 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 an n by n 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.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- DIAG - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- A - REAL array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular matrix and the strictly lower triangular part of
-
- A is not referenced.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular matrix and the strictly upper triangular part of
-
- A is not referenced.
- Note that when DIAG = 'U' or 'u', the diagonal elements of
-
- A are not referenced either, but are assumed to be unity.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
- X - REAL array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- 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.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (! lsame_(trans, "N") && ! lsame_(trans, "T") &&
- ! lsame_(trans, "C")) {
- info = 2;
- } else if (! lsame_(diag, "U") && ! lsame_(diag, "N")) {
- info = 3;
- } else if (*n < 0) {
- info = 4;
- } else if (*lda < max(1,*n)) {
- info = 6;
- } else if (*incx == 0) {
- info = 8;
- }
- if (info != 0) {
- xerbla_("STRSV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0) {
- return 0;
- }
-
- nounit = lsame_(diag, "N");
-
-/* Set up the start point in X if the increment is not unity. This
- will be ( N - 1 )*INCX too small for descending loops. */
-
- if (*incx <= 0) {
- kx = 1 - (*n - 1) * *incx;
- } else if (*incx != 1) {
- kx = 1;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
-
- if (lsame_(trans, "N")) {
-
-/* Form x := inv( A )*x. */
-
- if (lsame_(uplo, "U")) {
- if (*incx == 1) {
- for (j = *n; j >= 1; --j) {
- if (X(j) != 0.f) {
- if (nounit) {
- X(j) /= A(j,j);
- }
- temp = X(j);
- for (i = j - 1; i >= 1; --i) {
- X(i) -= temp * A(i,j);
-/* L10: */
- }
- }
-/* L20: */
- }
- } else {
- jx = kx + (*n - 1) * *incx;
- for (j = *n; j >= 1; --j) {
- if (X(jx) != 0.f) {
- if (nounit) {
- X(jx) /= A(j,j);
- }
- temp = X(jx);
- ix = jx;
- for (i = j - 1; i >= 1; --i) {
- ix -= *incx;
- X(ix) -= temp * A(i,j);
-/* L30: */
- }
- }
- jx -= *incx;
-/* L40: */
- }
- }
- } else {
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(j) != 0.f) {
- if (nounit) {
- X(j) /= A(j,j);
- }
- temp = X(j);
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- X(i) -= temp * A(i,j);
-/* L50: */
- }
- }
-/* L60: */
- }
- } else {
- jx = kx;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- if (X(jx) != 0.f) {
- if (nounit) {
- X(jx) /= A(j,j);
- }
- temp = X(jx);
- ix = jx;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- X(ix) -= temp * A(i,j);
-/* L70: */
- }
- }
- jx += *incx;
-/* L80: */
- }
- }
- }
- } else {
-
-/* Form x := inv( A' )*x. */
-
- if (lsame_(uplo, "U")) {
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp = X(j);
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- temp -= A(i,j) * X(i);
-/* L90: */
- }
- if (nounit) {
- temp /= A(j,j);
- }
- X(j) = temp;
-/* L100: */
- }
- } else {
- jx = kx;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp = X(jx);
- ix = kx;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- temp -= A(i,j) * X(ix);
- ix += *incx;
-/* L110: */
- }
- if (nounit) {
- temp /= A(j,j);
- }
- X(jx) = temp;
- jx += *incx;
-/* L120: */
- }
- }
- } else {
- if (*incx == 1) {
- for (j = *n; j >= 1; --j) {
- temp = X(j);
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- temp -= A(i,j) * X(i);
-/* L130: */
- }
- if (nounit) {
- temp /= A(j,j);
- }
- X(j) = temp;
-/* L140: */
- }
- } else {
- kx += (*n - 1) * *incx;
- jx = kx;
- for (j = *n; j >= 1; --j) {
- temp = X(jx);
- ix = kx;
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- temp -= A(i,j) * X(ix);
- ix -= *incx;
-/* L150: */
- }
- if (nounit) {
- temp /= A(j,j);
- }
- X(jx) = temp;
- jx -= *incx;
-/* L160: */
- }
- }
- }
- }
-
- return 0;
-
-/* End of STRSV . */
-
-} /* strsv_ */
-
diff --git a/CBLAS/zgemv.c b/CBLAS/zgemv.c
deleted file mode 100644
index 18e12bf..0000000
--- a/CBLAS/zgemv.c
+++ /dev/null
@@ -1,400 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int zgemv_(char *trans, integer *m, integer *n,
- doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *
- x, integer *incx, doublecomplex *beta, doublecomplex *y, integer *
- incy)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- doublecomplex z__1, z__2, z__3;
-
- /* Builtin functions */
- void d_cnjg(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer info;
- static doublecomplex temp;
- static integer lenx, leny, i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical noconj;
-
-
-/* Purpose
- =======
-
- ZGEMV performs one of the matrix-vector operations
-
- y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y, or
-
- y := alpha*conjg( A' )*x + beta*y,
-
- where alpha and beta are scalars, x and y are vectors and A is an
- m by n matrix.
-
- Parameters
- ==========
-
- TRANS - CHARACTER*1.
- 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*conjg( A' )*x + beta*y.
-
- Unchanged on exit.
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
-
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX*16 .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX*16 array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, m ).
- Unchanged on exit.
-
- X - COMPLEX*16 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.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX*16 .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - COMPLEX*16 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 - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(trans, "N") && ! lsame_(trans, "T") && !
- lsame_(trans, "C")) {
- info = 1;
- } else if (*m < 0) {
- info = 2;
- } else if (*n < 0) {
- info = 3;
- } else if (*lda < max(1,*m)) {
- info = 6;
- } else if (*incx == 0) {
- info = 8;
- } else if (*incy == 0) {
- info = 11;
- }
- if (info != 0) {
- xerbla_("ZGEMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*m == 0 || *n == 0 || alpha->r == 0. && alpha->i == 0. && (beta->r ==
- 1. && beta->i == 0.)) {
- return 0;
- }
-
- noconj = lsame_(trans, "T");
-
-/* Set LENX and LENY, the lengths of the vectors x and y, and set
-
- up the start points in X and Y. */
-
- if (lsame_(trans, "N")) {
- lenx = *n;
- leny = *m;
- } else {
- lenx = *m;
- leny = *n;
- }
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (lenx - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (leny - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A.
-
- First form y := beta*y. */
-
- if (beta->r != 1. || beta->i != 0.) {
- if (*incy == 1) {
- if (beta->r == 0. && beta->i == 0.) {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- i__2 = i;
- Y(i).r = 0., Y(i).i = 0.;
-/* L10: */
- }
- } else {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- i__2 = i;
- i__3 = i;
- z__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
- z__1.i = beta->r * Y(i).i + beta->i * Y(i)
- .r;
- Y(i).r = z__1.r, Y(i).i = z__1.i;
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (beta->r == 0. && beta->i == 0.) {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- i__2 = iy;
- Y(iy).r = 0., Y(iy).i = 0.;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = leny;
- for (i = 1; i <= leny; ++i) {
- i__2 = iy;
- i__3 = iy;
- z__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
- z__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
- .r;
- Y(iy).r = z__1.r, Y(iy).i = z__1.i;
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (alpha->r == 0. && alpha->i == 0.) {
- return 0;
- }
- if (lsame_(trans, "N")) {
-
-/* Form y := alpha*A*x + y. */
-
- jx = kx;
- if (*incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- if (X(jx).r != 0. || X(jx).i != 0.) {
- i__2 = jx;
- z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
- z__1.i = alpha->r * X(jx).i + alpha->i * X(jx)
- .r;
- temp.r = z__1.r, temp.i = z__1.i;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- z__2.i = temp.r * A(i,j).i + temp.i * A(i,j)
- .r;
- z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i +
- z__2.i;
- Y(i).r = z__1.r, Y(i).i = z__1.i;
-/* L50: */
- }
- }
- jx += *incx;
-/* L60: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- if (X(jx).r != 0. || X(jx).i != 0.) {
- i__2 = jx;
- z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
- z__1.i = alpha->r * X(jx).i + alpha->i * X(jx)
- .r;
- temp.r = z__1.r, temp.i = z__1.i;
- iy = ky;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- z__2.i = temp.r * A(i,j).i + temp.i * A(i,j)
- .r;
- z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i +
- z__2.i;
- Y(iy).r = z__1.r, Y(iy).i = z__1.i;
- iy += *incy;
-/* L70: */
- }
- }
- jx += *incx;
-/* L80: */
- }
- }
- } else {
-
-/* Form y := alpha*A'*x + y or y := alpha*conjg( A' )*x + y.
- */
-
- jy = ky;
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp.r = 0., temp.i = 0.;
- if (noconj) {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i;
- z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i)
- .i, z__2.i = A(i,j).r * X(i).i + A(i,j)
- .i * X(i).r;
- z__1.r = temp.r + z__2.r, z__1.i = temp.i + z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
-/* L90: */
- }
- } else {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- d_cnjg(&z__3, &A(i,j));
- i__3 = i;
- z__2.r = z__3.r * X(i).r - z__3.i * X(i).i,
- z__2.i = z__3.r * X(i).i + z__3.i * X(i)
- .r;
- z__1.r = temp.r + z__2.r, z__1.i = temp.i + z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
-/* L100: */
- }
- }
- i__2 = jy;
- i__3 = jy;
- z__2.r = alpha->r * temp.r - alpha->i * temp.i, z__2.i =
- alpha->r * temp.i + alpha->i * temp.r;
- z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
- Y(jy).r = z__1.r, Y(jy).i = z__1.i;
- jy += *incy;
-/* L110: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- temp.r = 0., temp.i = 0.;
- ix = kx;
- if (noconj) {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = ix;
- z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix)
- .i, z__2.i = A(i,j).r * X(ix).i + A(i,j)
- .i * X(ix).r;
- z__1.r = temp.r + z__2.r, z__1.i = temp.i + z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
- ix += *incx;
-/* L120: */
- }
- } else {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- d_cnjg(&z__3, &A(i,j));
- i__3 = ix;
- z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i,
- z__2.i = z__3.r * X(ix).i + z__3.i * X(ix)
- .r;
- z__1.r = temp.r + z__2.r, z__1.i = temp.i + z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
- ix += *incx;
-/* L130: */
- }
- }
- i__2 = jy;
- i__3 = jy;
- z__2.r = alpha->r * temp.r - alpha->i * temp.i, z__2.i =
- alpha->r * temp.i + alpha->i * temp.r;
- z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
- Y(jy).r = z__1.r, Y(jy).i = z__1.i;
- jy += *incy;
-/* L140: */
- }
- }
- }
-
- return 0;
-
-/* End of ZGEMV . */
-
-} /* zgemv_ */
-
diff --git a/CBLAS/zgerc.c b/CBLAS/zgerc.c
deleted file mode 100644
index 2fcd218..0000000
--- a/CBLAS/zgerc.c
+++ /dev/null
@@ -1,206 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int zgerc_(integer *m, integer *n, doublecomplex *alpha,
- doublecomplex *x, integer *incx, doublecomplex *y, integer *incy,
- doublecomplex *a, integer *lda)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- doublecomplex z__1, z__2;
-
- /* Builtin functions */
- void d_cnjg(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer info;
- static doublecomplex temp;
- static integer i, j, ix, jy, kx;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- ZGERC performs the rank 1 operation
-
- A := alpha*x*conjg( y' ) + A,
-
- where alpha is a scalar, x is an m element vector, y is an n element
-
- vector and A is an m by n matrix.
-
- Parameters
- ==========
-
- M - INTEGER.
- On entry, M specifies the number of rows of the matrix A.
- M must be at least zero.
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the number of columns of the matrix A.
-
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX*16 .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX*16 array of dimension at least
- ( 1 + ( m - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the m
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - COMPLEX*16 array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - COMPLEX*16 array of DIMENSION ( LDA, n ).
- Before entry, the leading m by n part of the array A must
- contain the matrix of coefficients. On exit, A is
- overwritten by the updated matrix.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, m ).
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (*m < 0) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*incx == 0) {
- info = 5;
- } else if (*incy == 0) {
- info = 7;
- } else if (*lda < max(1,*m)) {
- info = 9;
- }
- if (info != 0) {
- xerbla_("ZGERC ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*m == 0 || *n == 0 || alpha->r == 0. && alpha->i == 0.) {
- return 0;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
-
- if (*incy > 0) {
- jy = 1;
- } else {
- jy = 1 - (*n - 1) * *incy;
- }
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jy;
- if (Y(jy).r != 0. || Y(jy).i != 0.) {
- d_cnjg(&z__2, &Y(jy));
- z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
- alpha->r * z__2.i + alpha->i * z__2.r;
- temp.r = z__1.r, temp.i = z__1.i;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = i;
- z__2.r = X(i).r * temp.r - X(i).i * temp.i, z__2.i =
- X(i).r * temp.i + X(i).i * temp.r;
- z__1.r = A(i,j).r + z__2.r, z__1.i = A(i,j).i + z__2.i;
- A(i,j).r = z__1.r, A(i,j).i = z__1.i;
-/* L10: */
- }
- }
- jy += *incy;
-/* L20: */
- }
- } else {
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*m - 1) * *incx;
- }
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jy;
- if (Y(jy).r != 0. || Y(jy).i != 0.) {
- d_cnjg(&z__2, &Y(jy));
- z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
- alpha->r * z__2.i + alpha->i * z__2.r;
- temp.r = z__1.r, temp.i = z__1.i;
- ix = kx;
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = ix;
- z__2.r = X(ix).r * temp.r - X(ix).i * temp.i, z__2.i =
- X(ix).r * temp.i + X(ix).i * temp.r;
- z__1.r = A(i,j).r + z__2.r, z__1.i = A(i,j).i + z__2.i;
- A(i,j).r = z__1.r, A(i,j).i = z__1.i;
- ix += *incx;
-/* L30: */
- }
- }
- jy += *incy;
-/* L40: */
- }
- }
-
- return 0;
-
-/* End of ZGERC . */
-
-} /* zgerc_ */
-
diff --git a/CBLAS/zhemv.c b/CBLAS/zhemv.c
deleted file mode 100644
index 848f9db..0000000
--- a/CBLAS/zhemv.c
+++ /dev/null
@@ -1,421 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int zhemv_(char *uplo, integer *n, doublecomplex *alpha,
- doublecomplex *a, integer *lda, doublecomplex *x, integer *incx,
- doublecomplex *beta, doublecomplex *y, integer *incy)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- doublereal d__1;
- doublecomplex z__1, z__2, z__3, z__4;
-
- /* Builtin functions */
- void d_cnjg(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer info;
- static doublecomplex temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- ZHEMV performs the matrix-vector operation
-
- y := alpha*A*x + beta*y,
-
- where alpha and beta are scalars, x and y are n element vectors and
- A is an n by n hermitian matrix.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX*16 .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX*16 array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the hermitian matrix and the strictly
- lower triangular part of A is not referenced.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the hermitian matrix and the strictly
- upper triangular part of A is not referenced.
- Note that the imaginary parts of the diagonal elements need
-
- not be set and are assumed to be zero.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
- X - COMPLEX*16 array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX*16 .
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - COMPLEX*16 array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y. On exit, Y is overwritten by the updated
- vector y.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*lda < max(1,*n)) {
- info = 5;
- } else if (*incx == 0) {
- info = 7;
- } else if (*incy == 0) {
- info = 10;
- }
- if (info != 0) {
- xerbla_("ZHEMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || alpha->r == 0. && alpha->i == 0. && (beta->r == 1. &&
- beta->i == 0.)) {
- return 0;
- }
-
-/* Set up the start points in X and Y. */
-
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A.
-
- First form y := beta*y. */
-
- if (beta->r != 1. || beta->i != 0.) {
- if (*incy == 1) {
- if (beta->r == 0. && beta->i == 0.) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- Y(i).r = 0., Y(i).i = 0.;
-/* L10: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- i__3 = i;
- z__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
- z__1.i = beta->r * Y(i).i + beta->i * Y(i)
- .r;
- Y(i).r = z__1.r, Y(i).i = z__1.i;
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (beta->r == 0. && beta->i == 0.) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = iy;
- Y(iy).r = 0., Y(iy).i = 0.;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = iy;
- i__3 = iy;
- z__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
- z__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
- .r;
- Y(iy).r = z__1.r, Y(iy).i = z__1.i;
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (alpha->r == 0. && alpha->i == 0.) {
- return 0;
- }
- if (lsame_(uplo, "U")) {
-
-/* Form y when A is stored in upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- z__1.r = alpha->r * X(j).r - alpha->i * X(j).i, z__1.i =
- alpha->r * X(j).i + alpha->i * X(j).r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- temp2.r = 0., temp2.i = 0.;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i + z__2.i;
- Y(i).r = z__1.r, Y(i).i = z__1.i;
- d_cnjg(&z__3, &A(i,j));
- i__3 = i;
- z__2.r = z__3.r * X(i).r - z__3.i * X(i).i, z__2.i =
- z__3.r * X(i).i + z__3.i * X(i).r;
- z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
- temp2.r = z__1.r, temp2.i = z__1.i;
-/* L50: */
- }
- i__2 = j;
- i__3 = j;
- i__4 = j + j * a_dim1;
- d__1 = A(j,j).r;
- z__3.r = d__1 * temp1.r, z__3.i = d__1 * temp1.i;
- z__2.r = Y(j).r + z__3.r, z__2.i = Y(j).i + z__3.i;
- z__4.r = alpha->r * temp2.r - alpha->i * temp2.i, z__4.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
- Y(j).r = z__1.r, Y(j).i = z__1.i;
-/* L60: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, z__1.i =
- alpha->r * X(jx).i + alpha->i * X(jx).r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- temp2.r = 0., temp2.i = 0.;
- ix = kx;
- iy = ky;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i + z__2.i;
- Y(iy).r = z__1.r, Y(iy).i = z__1.i;
- d_cnjg(&z__3, &A(i,j));
- i__3 = ix;
- z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i, z__2.i =
- z__3.r * X(ix).i + z__3.i * X(ix).r;
- z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
- temp2.r = z__1.r, temp2.i = z__1.i;
- ix += *incx;
- iy += *incy;
-/* L70: */
- }
- i__2 = jy;
- i__3 = jy;
- i__4 = j + j * a_dim1;
- d__1 = A(j,j).r;
- z__3.r = d__1 * temp1.r, z__3.i = d__1 * temp1.i;
- z__2.r = Y(jy).r + z__3.r, z__2.i = Y(jy).i + z__3.i;
- z__4.r = alpha->r * temp2.r - alpha->i * temp2.i, z__4.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
- Y(jy).r = z__1.r, Y(jy).i = z__1.i;
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- } else {
-
-/* Form y when A is stored in lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- z__1.r = alpha->r * X(j).r - alpha->i * X(j).i, z__1.i =
- alpha->r * X(j).i + alpha->i * X(j).r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- temp2.r = 0., temp2.i = 0.;
- i__2 = j;
- i__3 = j;
- i__4 = j + j * a_dim1;
- d__1 = A(j,j).r;
- z__2.r = d__1 * temp1.r, z__2.i = d__1 * temp1.i;
- z__1.r = Y(j).r + z__2.r, z__1.i = Y(j).i + z__2.i;
- Y(j).r = z__1.r, Y(j).i = z__1.i;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i + z__2.i;
- Y(i).r = z__1.r, Y(i).i = z__1.i;
- d_cnjg(&z__3, &A(i,j));
- i__3 = i;
- z__2.r = z__3.r * X(i).r - z__3.i * X(i).i, z__2.i =
- z__3.r * X(i).i + z__3.i * X(i).r;
- z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
- temp2.r = z__1.r, temp2.i = z__1.i;
-/* L90: */
- }
- i__2 = j;
- i__3 = j;
- z__2.r = alpha->r * temp2.r - alpha->i * temp2.i, z__2.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- z__1.r = Y(j).r + z__2.r, z__1.i = Y(j).i + z__2.i;
- Y(j).r = z__1.r, Y(j).i = z__1.i;
-/* L100: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, z__1.i =
- alpha->r * X(jx).i + alpha->i * X(jx).r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- temp2.r = 0., temp2.i = 0.;
- i__2 = jy;
- i__3 = jy;
- i__4 = j + j * a_dim1;
- d__1 = A(j,j).r;
- z__2.r = d__1 * temp1.r, z__2.i = d__1 * temp1.i;
- z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
- Y(jy).r = z__1.r, Y(jy).i = z__1.i;
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- iy += *incy;
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i + z__2.i;
- Y(iy).r = z__1.r, Y(iy).i = z__1.i;
- d_cnjg(&z__3, &A(i,j));
- i__3 = ix;
- z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i, z__2.i =
- z__3.r * X(ix).i + z__3.i * X(ix).r;
- z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
- temp2.r = z__1.r, temp2.i = z__1.i;
-/* L110: */
- }
- i__2 = jy;
- i__3 = jy;
- z__2.r = alpha->r * temp2.r - alpha->i * temp2.i, z__2.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
- Y(jy).r = z__1.r, Y(jy).i = z__1.i;
- jx += *incx;
- jy += *incy;
-/* L120: */
- }
- }
- }
-
- return 0;
-
-/* End of ZHEMV . */
-
-} /* zhemv_ */
-
diff --git a/CBLAS/zher2.c b/CBLAS/zher2.c
deleted file mode 100644
index ab1ceb7..0000000
--- a/CBLAS/zher2.c
+++ /dev/null
@@ -1,437 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int zher2_(char *uplo, integer *n, doublecomplex *alpha,
- doublecomplex *x, integer *incx, doublecomplex *y, integer *incy,
- doublecomplex *a, integer *lda)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
- doublereal d__1;
- doublecomplex z__1, z__2, z__3, z__4;
-
- /* Builtin functions */
- void d_cnjg(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer info;
- static doublecomplex temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-/* Purpose
- =======
-
- ZHER2 performs the hermitian rank 2 operation
-
- A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + A,
-
- where alpha is a scalar, x and y are n element vectors and A is an n
-
- by n hermitian matrix.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX*16 .
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- X - COMPLEX*16 array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the n
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- Y - COMPLEX*16 array of dimension at least
- ( 1 + ( n - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y.
- Unchanged on exit.
-
- INCY - INTEGER.
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- A - COMPLEX*16 array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the hermitian matrix and the strictly
- lower triangular part of A is not referenced. On exit, the
- upper triangular part of the array A is overwritten by the
- upper triangular part of the updated matrix.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the hermitian matrix and the strictly
- upper triangular part of A is not referenced. On exit, the
- lower triangular part of the array A is overwritten by the
- lower triangular part of the updated matrix.
- Note that the imaginary parts of the diagonal elements need
-
- not be set, they are assumed to be zero, and on exit they
- are set to zero.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*incx == 0) {
- info = 5;
- } else if (*incy == 0) {
- info = 7;
- } else if (*lda < max(1,*n)) {
- info = 9;
- }
- if (info != 0) {
- xerbla_("ZHER2 ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || alpha->r == 0. && alpha->i == 0.) {
- return 0;
- }
-
-/* Set up the start points in X and Y if the increments are not both
-
- unity. */
-
- if (*incx != 1 || *incy != 1) {
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
- jx = kx;
- jy = ky;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A. */
-
- if (lsame_(uplo, "U")) {
-
-/* Form A when A is stored in the upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- i__3 = j;
- if (X(j).r != 0. || X(j).i != 0. || (Y(j).r != 0. ||
- Y(j).i != 0.)) {
- d_cnjg(&z__2, &Y(j));
- z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
- alpha->r * z__2.i + alpha->i * z__2.r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- i__2 = j;
- z__2.r = alpha->r * X(j).r - alpha->i * X(j).i,
- z__2.i = alpha->r * X(j).i + alpha->i * X(j)
- .r;
- d_cnjg(&z__1, &z__2);
- temp2.r = z__1.r, temp2.i = z__1.i;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = i;
- z__3.r = X(i).r * temp1.r - X(i).i * temp1.i,
- z__3.i = X(i).r * temp1.i + X(i).i *
- temp1.r;
- z__2.r = A(i,j).r + z__3.r, z__2.i = A(i,j).i +
- z__3.i;
- i__6 = i;
- z__4.r = Y(i).r * temp2.r - Y(i).i * temp2.i,
- z__4.i = Y(i).r * temp2.i + Y(i).i *
- temp2.r;
- z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
- A(i,j).r = z__1.r, A(i,j).i = z__1.i;
-/* L10: */
- }
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- i__4 = j;
- z__2.r = X(j).r * temp1.r - X(j).i * temp1.i,
- z__2.i = X(j).r * temp1.i + X(j).i *
- temp1.r;
- i__5 = j;
- z__3.r = Y(j).r * temp2.r - Y(j).i * temp2.i,
- z__3.i = Y(j).r * temp2.i + Y(j).i *
- temp2.r;
- z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
- d__1 = A(j,j).r + z__1.r;
- A(j,j).r = d__1, A(j,j).i = 0.;
- } else {
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- d__1 = A(j,j).r;
- A(j,j).r = d__1, A(j,j).i = 0.;
- }
-/* L20: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- i__3 = jy;
- if (X(jx).r != 0. || X(jx).i != 0. || (Y(jy).r != 0. ||
- Y(jy).i != 0.)) {
- d_cnjg(&z__2, &Y(jy));
- z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
- alpha->r * z__2.i + alpha->i * z__2.r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- i__2 = jx;
- z__2.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
- z__2.i = alpha->r * X(jx).i + alpha->i * X(jx)
- .r;
- d_cnjg(&z__1, &z__2);
- temp2.r = z__1.r, temp2.i = z__1.i;
- ix = kx;
- iy = ky;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = ix;
- z__3.r = X(ix).r * temp1.r - X(ix).i * temp1.i,
- z__3.i = X(ix).r * temp1.i + X(ix).i *
- temp1.r;
- z__2.r = A(i,j).r + z__3.r, z__2.i = A(i,j).i +
- z__3.i;
- i__6 = iy;
- z__4.r = Y(iy).r * temp2.r - Y(iy).i * temp2.i,
- z__4.i = Y(iy).r * temp2.i + Y(iy).i *
- temp2.r;
- z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
- A(i,j).r = z__1.r, A(i,j).i = z__1.i;
- ix += *incx;
- iy += *incy;
-/* L30: */
- }
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- i__4 = jx;
- z__2.r = X(jx).r * temp1.r - X(jx).i * temp1.i,
- z__2.i = X(jx).r * temp1.i + X(jx).i *
- temp1.r;
- i__5 = jy;
- z__3.r = Y(jy).r * temp2.r - Y(jy).i * temp2.i,
- z__3.i = Y(jy).r * temp2.i + Y(jy).i *
- temp2.r;
- z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
- d__1 = A(j,j).r + z__1.r;
- A(j,j).r = d__1, A(j,j).i = 0.;
- } else {
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- d__1 = A(j,j).r;
- A(j,j).r = d__1, A(j,j).i = 0.;
- }
- jx += *incx;
- jy += *incy;
-/* L40: */
- }
- }
- } else {
-
-/* Form A when A is stored in the lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- i__3 = j;
- if (X(j).r != 0. || X(j).i != 0. || (Y(j).r != 0. ||
- Y(j).i != 0.)) {
- d_cnjg(&z__2, &Y(j));
- z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
- alpha->r * z__2.i + alpha->i * z__2.r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- i__2 = j;
- z__2.r = alpha->r * X(j).r - alpha->i * X(j).i,
- z__2.i = alpha->r * X(j).i + alpha->i * X(j)
- .r;
- d_cnjg(&z__1, &z__2);
- temp2.r = z__1.r, temp2.i = z__1.i;
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- i__4 = j;
- z__2.r = X(j).r * temp1.r - X(j).i * temp1.i,
- z__2.i = X(j).r * temp1.i + X(j).i *
- temp1.r;
- i__5 = j;
- z__3.r = Y(j).r * temp2.r - Y(j).i * temp2.i,
- z__3.i = Y(j).r * temp2.i + Y(j).i *
- temp2.r;
- z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
- d__1 = A(j,j).r + z__1.r;
- A(j,j).r = d__1, A(j,j).i = 0.;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = i;
- z__3.r = X(i).r * temp1.r - X(i).i * temp1.i,
- z__3.i = X(i).r * temp1.i + X(i).i *
- temp1.r;
- z__2.r = A(i,j).r + z__3.r, z__2.i = A(i,j).i +
- z__3.i;
- i__6 = i;
- z__4.r = Y(i).r * temp2.r - Y(i).i * temp2.i,
- z__4.i = Y(i).r * temp2.i + Y(i).i *
- temp2.r;
- z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
- A(i,j).r = z__1.r, A(i,j).i = z__1.i;
-/* L50: */
- }
- } else {
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- d__1 = A(j,j).r;
- A(j,j).r = d__1, A(j,j).i = 0.;
- }
-/* L60: */
- }
- } else {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- i__3 = jy;
- if (X(jx).r != 0. || X(jx).i != 0. || (Y(jy).r != 0. ||
- Y(jy).i != 0.)) {
- d_cnjg(&z__2, &Y(jy));
- z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
- alpha->r * z__2.i + alpha->i * z__2.r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- i__2 = jx;
- z__2.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
- z__2.i = alpha->r * X(jx).i + alpha->i * X(jx)
- .r;
- d_cnjg(&z__1, &z__2);
- temp2.r = z__1.r, temp2.i = z__1.i;
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- i__4 = jx;
- z__2.r = X(jx).r * temp1.r - X(jx).i * temp1.i,
- z__2.i = X(jx).r * temp1.i + X(jx).i *
- temp1.r;
- i__5 = jy;
- z__3.r = Y(jy).r * temp2.r - Y(jy).i * temp2.i,
- z__3.i = Y(jy).r * temp2.i + Y(jy).i *
- temp2.r;
- z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
- d__1 = A(j,j).r + z__1.r;
- A(j,j).r = d__1, A(j,j).i = 0.;
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- iy += *incy;
- i__3 = i + j * a_dim1;
- i__4 = i + j * a_dim1;
- i__5 = ix;
- z__3.r = X(ix).r * temp1.r - X(ix).i * temp1.i,
- z__3.i = X(ix).r * temp1.i + X(ix).i *
- temp1.r;
- z__2.r = A(i,j).r + z__3.r, z__2.i = A(i,j).i +
- z__3.i;
- i__6 = iy;
- z__4.r = Y(iy).r * temp2.r - Y(iy).i * temp2.i,
- z__4.i = Y(iy).r * temp2.i + Y(iy).i *
- temp2.r;
- z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
- A(i,j).r = z__1.r, A(i,j).i = z__1.i;
-/* L70: */
- }
- } else {
- i__2 = j + j * a_dim1;
- i__3 = j + j * a_dim1;
- d__1 = A(j,j).r;
- A(j,j).r = d__1, A(j,j).i = 0.;
- }
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- }
-
- return 0;
-
-/* End of ZHER2 . */
-
-} /* zher2_ */
-
diff --git a/CBLAS/ztrsv.c b/CBLAS/ztrsv.c
deleted file mode 100644
index 97b9d41..0000000
--- a/CBLAS/ztrsv.c
+++ /dev/null
@@ -1,510 +0,0 @@
-
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int ztrsv_(char *uplo, char *trans, char *diag, integer *n,
- doublecomplex *a, integer *lda, doublecomplex *x, integer *incx)
-{
-
-
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- doublecomplex z__1, z__2, z__3;
-
- /* Builtin functions */
- void z_div(doublecomplex *, doublecomplex *, doublecomplex *), d_cnjg(
- doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer info;
- static doublecomplex temp;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, jx, kx;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical noconj, nounit;
-
-
-/* Purpose
- =======
-
- ZTRSV solves one of the systems of equations
-
- A*x = b, or A'*x = b, or conjg( A' )*x = b,
-
- where b and x are n element vectors and A is an n by n 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.
-
- Parameters
- ==========
-
- UPLO - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- TRANS - CHARACTER*1.
- 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' conjg( A' )*x = b.
-
- Unchanged on exit.
-
- DIAG - CHARACTER*1.
- 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.
-
- Unchanged on exit.
-
- N - INTEGER.
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- A - COMPLEX*16 array of DIMENSION ( LDA, n ).
- Before entry with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular matrix and the strictly lower triangular part of
-
- A is not referenced.
- Before entry with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular matrix and the strictly upper triangular part of
-
- A is not referenced.
- Note that when DIAG = 'U' or 'u', the diagonal elements of
-
- A are not referenced either, but are assumed to be unity.
- Unchanged on exit.
-
- LDA - INTEGER.
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, n ).
- Unchanged on exit.
-
- X - COMPLEX*16 array of dimension at least
- ( 1 + ( n - 1 )*abs( INCX ) ).
- 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.
-
- INCX - INTEGER.
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
-
- Level 2 Blas routine.
-
- -- Written on 22-October-1986.
- Jack Dongarra, Argonne National Lab.
- Jeremy Du Croz, Nag Central Office.
- Sven Hammarling, Nag Central Office.
- Richard Hanson, Sandia National Labs.
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
-#define X(I) x[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (! lsame_(trans, "N") && ! lsame_(trans, "T") &&
- ! lsame_(trans, "C")) {
- info = 2;
- } else if (! lsame_(diag, "U") && ! lsame_(diag, "N")) {
- info = 3;
- } else if (*n < 0) {
- info = 4;
- } else if (*lda < max(1,*n)) {
- info = 6;
- } else if (*incx == 0) {
- info = 8;
- }
- if (info != 0) {
- xerbla_("ZTRSV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0) {
- return 0;
- }
-
- noconj = lsame_(trans, "T");
- nounit = lsame_(diag, "N");
-
-/* Set up the start point in X if the increment is not unity. This
- will be ( N - 1 )*INCX too small for descending loops. */
-
- if (*incx <= 0) {
- kx = 1 - (*n - 1) * *incx;
- } else if (*incx != 1) {
- kx = 1;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
-
- if (lsame_(trans, "N")) {
-
-/* Form x := inv( A )*x. */
-
- if (lsame_(uplo, "U")) {
- if (*incx == 1) {
- for (j = *n; j >= 1; --j) {
- i__1 = j;
- if (X(j).r != 0. || X(j).i != 0.) {
- if (nounit) {
- i__1 = j;
- z_div(&z__1, &X(j), &A(j,j));
- X(j).r = z__1.r, X(j).i = z__1.i;
- }
- i__1 = j;
- temp.r = X(j).r, temp.i = X(j).i;
- for (i = j - 1; i >= 1; --i) {
- i__1 = i;
- i__2 = i;
- i__3 = i + j * a_dim1;
- z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- z__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
- z__1.r = X(i).r - z__2.r, z__1.i = X(i).i -
- z__2.i;
- X(i).r = z__1.r, X(i).i = z__1.i;
-/* L10: */
- }
- }
-/* L20: */
- }
- } else {
- jx = kx + (*n - 1) * *incx;
- for (j = *n; j >= 1; --j) {
- i__1 = jx;
- if (X(jx).r != 0. || X(jx).i != 0.) {
- if (nounit) {
- i__1 = jx;
- z_div(&z__1, &X(jx), &A(j,j));
- X(jx).r = z__1.r, X(jx).i = z__1.i;
- }
- i__1 = jx;
- temp.r = X(jx).r, temp.i = X(jx).i;
- ix = jx;
- for (i = j - 1; i >= 1; --i) {
- ix -= *incx;
- i__1 = ix;
- i__2 = ix;
- i__3 = i + j * a_dim1;
- z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- z__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
- z__1.r = X(ix).r - z__2.r, z__1.i = X(ix).i -
- z__2.i;
- X(ix).r = z__1.r, X(ix).i = z__1.i;
-/* L30: */
- }
- }
- jx -= *incx;
-/* L40: */
- }
- }
- } else {
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- if (X(j).r != 0. || X(j).i != 0.) {
- if (nounit) {
- i__2 = j;
- z_div(&z__1, &X(j), &A(j,j));
- X(j).r = z__1.r, X(j).i = z__1.i;
- }
- i__2 = j;
- temp.r = X(j).r, temp.i = X(j).i;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- z__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
- z__1.r = X(i).r - z__2.r, z__1.i = X(i).i -
- z__2.i;
- X(i).r = z__1.r, X(i).i = z__1.i;
-/* L50: */
- }
- }
-/* L60: */
- }
- } else {
- jx = kx;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- if (X(jx).r != 0. || X(jx).i != 0.) {
- if (nounit) {
- i__2 = jx;
- z_div(&z__1, &X(jx), &A(j,j));
- X(jx).r = z__1.r, X(jx).i = z__1.i;
- }
- i__2 = jx;
- temp.r = X(jx).r, temp.i = X(jx).i;
- ix = jx;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- i__3 = ix;
- i__4 = ix;
- i__5 = i + j * a_dim1;
- z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
- z__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
- z__1.r = X(ix).r - z__2.r, z__1.i = X(ix).i -
- z__2.i;
- X(ix).r = z__1.r, X(ix).i = z__1.i;
-/* L70: */
- }
- }
- jx += *incx;
-/* L80: */
- }
- }
- }
- } else {
-
-/* Form x := inv( A' )*x or x := inv( conjg( A' ) )*x. */
-
- if (lsame_(uplo, "U")) {
- if (*incx == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- temp.r = X(j).r, temp.i = X(j).i;
- if (noconj) {
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = i;
- z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(
- i).i, z__2.i = A(i,j).r * X(i).i +
- A(i,j).i * X(i).r;
- z__1.r = temp.r - z__2.r, z__1.i = temp.i -
- z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
-/* L90: */
- }
- if (nounit) {
- z_div(&z__1, &temp, &A(j,j));
- temp.r = z__1.r, temp.i = z__1.i;
- }
- } else {
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- d_cnjg(&z__3, &A(i,j));
- i__3 = i;
- z__2.r = z__3.r * X(i).r - z__3.i * X(i).i,
- z__2.i = z__3.r * X(i).i + z__3.i * X(
- i).r;
- z__1.r = temp.r - z__2.r, z__1.i = temp.i -
- z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
-/* L100: */
- }
- if (nounit) {
- d_cnjg(&z__2, &A(j,j));
- z_div(&z__1, &temp, &z__2);
- temp.r = z__1.r, temp.i = z__1.i;
- }
- }
- i__2 = j;
- X(j).r = temp.r, X(j).i = temp.i;
-/* L110: */
- }
- } else {
- jx = kx;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- ix = kx;
- i__2 = jx;
- temp.r = X(jx).r, temp.i = X(jx).i;
- if (noconj) {
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i + j * a_dim1;
- i__4 = ix;
- z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(
- ix).i, z__2.i = A(i,j).r * X(ix).i +
- A(i,j).i * X(ix).r;
- z__1.r = temp.r - z__2.r, z__1.i = temp.i -
- z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
- ix += *incx;
-/* L120: */
- }
- if (nounit) {
- z_div(&z__1, &temp, &A(j,j));
- temp.r = z__1.r, temp.i = z__1.i;
- }
- } else {
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- d_cnjg(&z__3, &A(i,j));
- i__3 = ix;
- z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i,
- z__2.i = z__3.r * X(ix).i + z__3.i * X(
- ix).r;
- z__1.r = temp.r - z__2.r, z__1.i = temp.i -
- z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
- ix += *incx;
-/* L130: */
- }
- if (nounit) {
- d_cnjg(&z__2, &A(j,j));
- z_div(&z__1, &temp, &z__2);
- temp.r = z__1.r, temp.i = z__1.i;
- }
- }
- i__2 = jx;
- X(jx).r = temp.r, X(jx).i = temp.i;
- jx += *incx;
-/* L140: */
- }
- }
- } else {
- if (*incx == 1) {
- for (j = *n; j >= 1; --j) {
- i__1 = j;
- temp.r = X(j).r, temp.i = X(j).i;
- if (noconj) {
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- i__2 = i + j * a_dim1;
- i__3 = i;
- z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(
- i).i, z__2.i = A(i,j).r * X(i).i +
- A(i,j).i * X(i).r;
- z__1.r = temp.r - z__2.r, z__1.i = temp.i -
- z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
-/* L150: */
- }
- if (nounit) {
- z_div(&z__1, &temp, &A(j,j));
- temp.r = z__1.r, temp.i = z__1.i;
- }
- } else {
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- d_cnjg(&z__3, &A(i,j));
- i__2 = i;
- z__2.r = z__3.r * X(i).r - z__3.i * X(i).i,
- z__2.i = z__3.r * X(i).i + z__3.i * X(
- i).r;
- z__1.r = temp.r - z__2.r, z__1.i = temp.i -
- z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
-/* L160: */
- }
- if (nounit) {
- d_cnjg(&z__2, &A(j,j));
- z_div(&z__1, &temp, &z__2);
- temp.r = z__1.r, temp.i = z__1.i;
- }
- }
- i__1 = j;
- X(j).r = temp.r, X(j).i = temp.i;
-/* L170: */
- }
- } else {
- kx += (*n - 1) * *incx;
- jx = kx;
- for (j = *n; j >= 1; --j) {
- ix = kx;
- i__1 = jx;
- temp.r = X(jx).r, temp.i = X(jx).i;
- if (noconj) {
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- i__2 = i + j * a_dim1;
- i__3 = ix;
- z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(
- ix).i, z__2.i = A(i,j).r * X(ix).i +
- A(i,j).i * X(ix).r;
- z__1.r = temp.r - z__2.r, z__1.i = temp.i -
- z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
- ix -= *incx;
-/* L180: */
- }
- if (nounit) {
- z_div(&z__1, &temp, &A(j,j));
- temp.r = z__1.r, temp.i = z__1.i;
- }
- } else {
- i__1 = j + 1;
- for (i = *n; i >= j+1; --i) {
- d_cnjg(&z__3, &A(i,j));
- i__2 = ix;
- z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i,
- z__2.i = z__3.r * X(ix).i + z__3.i * X(
- ix).r;
- z__1.r = temp.r - z__2.r, z__1.i = temp.i -
- z__2.i;
- temp.r = z__1.r, temp.i = z__1.i;
- ix -= *incx;
-/* L190: */
- }
- if (nounit) {
- d_cnjg(&z__2, &A(j,j));
- z_div(&z__1, &temp, &z__2);
- temp.r = z__1.r, temp.i = z__1.i;
- }
- }
- i__1 = jx;
- X(jx).r = temp.r, X(jx).i = temp.i;
- jx -= *incx;
-/* L200: */
- }
- }
- }
- }
-
- return 0;
-
-/* End of ZTRSV . */
-
-} /* ztrsv_ */
-
diff --git a/DOC/html/EXAMPLE_2sp__ienv_8c.html b/DOC/html/EXAMPLE_2sp__ienv_8c.html
deleted file mode 100644
index f096a95..0000000
--- a/DOC/html/EXAMPLE_2sp__ienv_8c.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3264638..0000000
--- a/DOC/html/SRC_2sp__ienv_8c.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 73d8e67..0000000
--- a/DOC/html/annotated.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 85ec4a5..0000000
--- a/DOC/html/ccolumn__bmod_8c.html
+++ /dev/null
@@ -1,272 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index dc2e549..0000000
--- a/DOC/html/ccolumn__dfs_8c.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0af6a3d..0000000
--- a/DOC/html/ccopy__to__ucol_8c.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 31550e0..0000000
--- a/DOC/html/cdiagonal_8c.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 31ba4b8..0000000
--- a/DOC/html/cfgmr_8c.html
+++ /dev/null
@@ -1,216 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 84b7cea..0000000
--- a/DOC/html/cgscon_8c.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 292bdbe..0000000
--- a/DOC/html/cgsequ_8c.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3b7bd14..0000000
--- a/DOC/html/cgsisx_8c.html
+++ /dev/null
@@ -1,495 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 1307f4b..0000000
--- a/DOC/html/cgsitrf_8c.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3a22f21..0000000
--- a/DOC/html/cgsrfs_8c.html
+++ /dev/null
@@ -1,249 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f5ba3ef..0000000
--- a/DOC/html/cgssv_8c.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 348da81..0000000
--- a/DOC/html/cgssvx_8c.html
+++ /dev/null
@@ -1,450 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3401e50..0000000
--- a/DOC/html/cgstrf_8c.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f61feba..0000000
--- a/DOC/html/cgstrs_8c.html
+++ /dev/null
@@ -1,332 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 95ea65f..0000000
--- a/DOC/html/citersol1_8c.html
+++ /dev/null
@@ -1,367 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 19f6a80..0000000
--- a/DOC/html/citersol_8c.html
+++ /dev/null
@@ -1,333 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4c7b287..0000000
--- a/DOC/html/clacon_8c.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index d20edec..0000000
--- a/DOC/html/clangs_8c.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4fbcf2f..0000000
--- a/DOC/html/claqgs_8c.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index a1222ba..0000000
--- a/DOC/html/cldperm_8c.html
+++ /dev/null
@@ -1,283 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 9232de1..0000000
--- a/DOC/html/clinsol1_8c.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index eec3747..0000000
--- a/DOC/html/clinsol_8c.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 56ec189..0000000
--- a/DOC/html/clinsolx1_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c4f468a..0000000
--- a/DOC/html/clinsolx2_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 6f7d9c8..0000000
--- a/DOC/html/clinsolx_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4e2153a..0000000
--- a/DOC/html/cmemory_8c.html
+++ /dev/null
@@ -1,976 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 9c38990..0000000
--- a/DOC/html/cmyblas2_8c.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 2b8f399..0000000
--- a/DOC/html/colamd_8c.html
+++ /dev/null
@@ -1,1681 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index b38e837..0000000
--- a/DOC/html/colamd_8h-source.html
+++ /dev/null
@@ -1,217 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 02f1860..0000000
--- a/DOC/html/colamd_8h.html
+++ /dev/null
@@ -1,794 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 29d943b..0000000
--- a/DOC/html/cpanel__bmod_8c.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 9a2beef..0000000
--- a/DOC/html/cpanel__dfs_8c.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0ba5df4..0000000
--- a/DOC/html/cpivotL_8c.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 77b1284..0000000
--- a/DOC/html/cpivotgrowth_8c.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7fa457b..0000000
--- a/DOC/html/cpruneL_8c.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 329088d..0000000
--- a/DOC/html/creadhb_8c.html
+++ /dev/null
@@ -1,345 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 84876f4..0000000
--- a/DOC/html/creadrb_8c.html
+++ /dev/null
@@ -1,297 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 26e3f42..0000000
--- a/DOC/html/creadtriple_8c.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 89f3723..0000000
--- a/DOC/html/csnode__bmod_8c.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4177d8c..0000000
--- a/DOC/html/csnode__dfs_8c.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c888ed4..0000000
--- a/DOC/html/csp__blas2_8c.html
+++ /dev/null
@@ -1,401 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 372e77e..0000000
--- a/DOC/html/csp__blas3_8c.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7314760..0000000
--- a/DOC/html/cutil_8c.html
+++ /dev/null
@@ -1,994 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 2fd32ac..0000000
--- a/DOC/html/dcolumn__bmod_8c.html
+++ /dev/null
@@ -1,272 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 87015ce..0000000
--- a/DOC/html/dcolumn__dfs_8c.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 9e3b413..0000000
--- a/DOC/html/dcomplex_8c.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c10c9f7..0000000
--- a/DOC/html/dcopy__to__ucol_8c.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 03921fe..0000000
--- a/DOC/html/ddiagonal_8c.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 30c5386..0000000
--- a/DOC/html/dfgmr_8c.html
+++ /dev/null
@@ -1,210 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index aa2043a..0000000
--- a/DOC/html/dgscon_8c.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 897e653..0000000
--- a/DOC/html/dgsequ_8c.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 16ca5d7..0000000
--- a/DOC/html/dgsisx_8c.html
+++ /dev/null
@@ -1,495 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 084f9e1..0000000
--- a/DOC/html/dgsitrf_8c.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5c193cb..0000000
--- a/DOC/html/dgsrfs_8c.html
+++ /dev/null
@@ -1,249 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e0ee1dd..0000000
--- a/DOC/html/dgssv_8c.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 09ae810..0000000
--- a/DOC/html/dgssvx_8c.html
+++ /dev/null
@@ -1,450 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 9fc00eb..0000000
--- a/DOC/html/dgstrf_8c.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 70b8258..0000000
--- a/DOC/html/dgstrs_8c.html
+++ /dev/null
@@ -1,332 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 9a22b9e..0000000
--- a/DOC/html/ditersol1_8c.html
+++ /dev/null
@@ -1,367 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 210e6c7..0000000
--- a/DOC/html/ditersol_8c.html
+++ /dev/null
@@ -1,333 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5118d4c..0000000
--- a/DOC/html/dlacon_8c.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index a19d87c..0000000
--- a/DOC/html/dlamch_8c.html
+++ /dev/null
@@ -1,584 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 83017a3..0000000
--- a/DOC/html/dlangs_8c.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 12c36a0..0000000
--- a/DOC/html/dlaqgs_8c.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 37ae551..0000000
--- a/DOC/html/dldperm_8c.html
+++ /dev/null
@@ -1,283 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 36287f0..0000000
--- a/DOC/html/dlinsol1_8c.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e148226..0000000
--- a/DOC/html/dlinsol_8c.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index b391290..0000000
--- a/DOC/html/dlinsolx1_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3f22242..0000000
--- a/DOC/html/dlinsolx2_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7b7fe6b..0000000
--- a/DOC/html/dlinsolx_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4a4df2f..0000000
--- a/DOC/html/dmemory_8c.html
+++ /dev/null
@@ -1,976 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index eaae450..0000000
--- a/DOC/html/dmyblas2_8c.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 74c22a2..0000000
--- a/DOC/html/doxygen.css
+++ /dev/null
@@ -1,433 +0,0 @@
-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
deleted file mode 100644
index f0a274b..0000000
Binary files a/DOC/html/doxygen.png and /dev/null differ
diff --git a/DOC/html/dpanel__bmod_8c.html b/DOC/html/dpanel__bmod_8c.html
deleted file mode 100644
index 1a777d1..0000000
--- a/DOC/html/dpanel__bmod_8c.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index a59850d..0000000
--- a/DOC/html/dpanel__dfs_8c.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 66b92f3..0000000
--- a/DOC/html/dpivotL_8c.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 04e6b5f..0000000
--- a/DOC/html/dpivotgrowth_8c.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ee82497..0000000
--- a/DOC/html/dpruneL_8c.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 6522ce1..0000000
--- a/DOC/html/dreadhb_8c.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 43901ca..0000000
--- a/DOC/html/dreadrb_8c.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f5d3928..0000000
--- a/DOC/html/dreadtriple_8c.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 2ef638d..0000000
--- a/DOC/html/dsnode__bmod_8c.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 02f061f..0000000
--- a/DOC/html/dsnode__dfs_8c.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0fc7ff8..0000000
--- a/DOC/html/dsp__blas2_8c.html
+++ /dev/null
@@ -1,403 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 1fcb330..0000000
--- a/DOC/html/dsp__blas3_8c.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index d8af18c..0000000
--- a/DOC/html/dutil_8c.html
+++ /dev/null
@@ -1,994 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f5001c0..0000000
--- a/DOC/html/dzsum1_8c.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 753d547..0000000
--- a/DOC/html/fgmr_8c.html
+++ /dev/null
@@ -1,315 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 143ba46..0000000
--- a/DOC/html/files.html
+++ /dev/null
@@ -1,256 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 057f48b..0000000
--- a/DOC/html/functions.html
+++ /dev/null
@@ -1,324 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5991ce4..0000000
--- a/DOC/html/functions_vars.html
+++ /dev/null
@@ -1,324 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index aec8634..0000000
--- a/DOC/html/get__perm__c_8c.html
+++ /dev/null
@@ -1,395 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index dd3c80c..0000000
--- a/DOC/html/globals.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 1c120ea..0000000
--- a/DOC/html/globals_0x61.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 75aaebb..0000000
--- a/DOC/html/globals_0x62.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index b24ee76..0000000
--- a/DOC/html/globals_0x63.html
+++ /dev/null
@@ -1,455 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4897179..0000000
--- a/DOC/html/globals_0x64.html
+++ /dev/null
@@ -1,419 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 68f6575..0000000
--- a/DOC/html/globals_0x65.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index b9e36fd..0000000
--- a/DOC/html/globals_0x66.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 07426a4..0000000
--- a/DOC/html/globals_0x67.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index b2c2bf5..0000000
--- a/DOC/html/globals_0x68.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 79228c7..0000000
--- a/DOC/html/globals_0x69.html
+++ /dev/null
@@ -1,218 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 75e03df..0000000
--- a/DOC/html/globals_0x6b.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0a05f18..0000000
--- a/DOC/html/globals_0x6c.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 18a9804..0000000
--- a/DOC/html/globals_0x6d.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 94d6cb4..0000000
--- a/DOC/html/globals_0x6e.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8cd0bd1..0000000
--- a/DOC/html/globals_0x6f.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4f1c9de..0000000
--- a/DOC/html/globals_0x70.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ce8c3b0..0000000
--- a/DOC/html/globals_0x72.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4173e97..0000000
--- a/DOC/html/globals_0x73.html
+++ /dev/null
@@ -1,501 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0ba808c..0000000
--- a/DOC/html/globals_0x74.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 746da26..0000000
--- a/DOC/html/globals_0x75.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 922848b..0000000
--- a/DOC/html/globals_0x78.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 12bfa06..0000000
--- a/DOC/html/globals_0x79.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c70a9cb..0000000
--- a/DOC/html/globals_0x7a.html
+++ /dev/null
@@ -1,322 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index bfdef6d..0000000
--- a/DOC/html/globals_defs.html
+++ /dev/null
@@ -1,393 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0862469..0000000
--- a/DOC/html/globals_enum.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 83412a1..0000000
--- a/DOC/html/globals_eval.html
+++ /dev/null
@@ -1,273 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index dbec1e4..0000000
--- a/DOC/html/globals_func.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4344454..0000000
--- a/DOC/html/globals_func_0x61.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5f55eb3..0000000
--- a/DOC/html/globals_func_0x63.html
+++ /dev/null
@@ -1,355 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f0ab71e..0000000
--- a/DOC/html/globals_func_0x64.html
+++ /dev/null
@@ -1,366 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e63c452..0000000
--- a/DOC/html/globals_func_0x65.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5410fbc..0000000
--- a/DOC/html/globals_func_0x66.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index aad02d7..0000000
--- a/DOC/html/globals_func_0x67.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3e45b06..0000000
--- a/DOC/html/globals_func_0x68.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index aee51f6..0000000
--- a/DOC/html/globals_func_0x69.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5c95540..0000000
--- a/DOC/html/globals_func_0x6c.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 512c92c..0000000
--- a/DOC/html/globals_func_0x6d.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index fc3dba5..0000000
--- a/DOC/html/globals_func_0x6e.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e8b686b..0000000
--- a/DOC/html/globals_func_0x6f.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7c4d49f..0000000
--- a/DOC/html/globals_func_0x70.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8341842..0000000
--- a/DOC/html/globals_func_0x72.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3a7a477..0000000
--- a/DOC/html/globals_func_0x73.html
+++ /dev/null
@@ -1,410 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 97c8076..0000000
--- a/DOC/html/globals_func_0x74.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3de514b..0000000
--- a/DOC/html/globals_func_0x75.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 028b4fe..0000000
--- a/DOC/html/globals_func_0x78.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 206a45e..0000000
--- a/DOC/html/globals_func_0x7a.html
+++ /dev/null
@@ -1,305 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 657b6e4..0000000
--- a/DOC/html/globals_type.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4c37bfb..0000000
--- a/DOC/html/globals_vars.html
+++ /dev/null
@@ -1,171 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ffa65a4..0000000
--- a/DOC/html/heap__relax__snode_8c.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0e33806..0000000
--- a/DOC/html/html__mainpage_8h-source.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 75a1a09..0000000
--- a/DOC/html/html__mainpage_8h.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e13ec05..0000000
--- a/DOC/html/icmax1_8c.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0f610b7..0000000
--- a/DOC/html/ilu__ccolumn__dfs_8c.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0c171a3..0000000
--- a/DOC/html/ilu__ccopy__to__ucol_8c.html
+++ /dev/null
@@ -1,188 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e8b4dc9..0000000
--- a/DOC/html/ilu__cdrop__row_8c.html
+++ /dev/null
@@ -1,479 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 30445f6..0000000
--- a/DOC/html/ilu__cpanel__dfs_8c.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4322d4e..0000000
--- a/DOC/html/ilu__cpivotL_8c.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 70629e6..0000000
--- a/DOC/html/ilu__csnode__dfs_8c.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f2e52db..0000000
--- a/DOC/html/ilu__dcolumn__dfs_8c.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 78c71a3..0000000
--- a/DOC/html/ilu__dcopy__to__ucol_8c.html
+++ /dev/null
@@ -1,188 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 99ead5b..0000000
--- a/DOC/html/ilu__ddrop__row_8c.html
+++ /dev/null
@@ -1,479 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ab61789..0000000
--- a/DOC/html/ilu__dpanel__dfs_8c.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index eda8279..0000000
--- a/DOC/html/ilu__dpivotL_8c.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 374c780..0000000
--- a/DOC/html/ilu__dsnode__dfs_8c.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 19b2ab9..0000000
--- a/DOC/html/ilu__heap__relax__snode_8c.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 261fd67..0000000
--- a/DOC/html/ilu__relax__snode_8c.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 6134edc..0000000
--- a/DOC/html/ilu__scolumn__dfs_8c.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index d5d3f91..0000000
--- a/DOC/html/ilu__scopy__to__ucol_8c.html
+++ /dev/null
@@ -1,188 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ab1e7f7..0000000
--- a/DOC/html/ilu__sdrop__row_8c.html
+++ /dev/null
@@ -1,479 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 742c37d..0000000
--- a/DOC/html/ilu__spanel__dfs_8c.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 852c319..0000000
--- a/DOC/html/ilu__spivotL_8c.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8b4b280..0000000
--- a/DOC/html/ilu__ssnode__dfs_8c.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 35f0578..0000000
--- a/DOC/html/ilu__zcolumn__dfs_8c.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index a97c744..0000000
--- a/DOC/html/ilu__zcopy__to__ucol_8c.html
+++ /dev/null
@@ -1,188 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 782669e..0000000
--- a/DOC/html/ilu__zdrop__row_8c.html
+++ /dev/null
@@ -1,479 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 468ae85..0000000
--- a/DOC/html/ilu__zpanel__dfs_8c.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 6860565..0000000
--- a/DOC/html/ilu__zpivotL_8c.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 458890e..0000000
--- a/DOC/html/ilu__zsnode__dfs_8c.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index d53b4fe..0000000
--- a/DOC/html/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 1620e2e..0000000
--- a/DOC/html/izmax1_8c.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 2737622..0000000
--- a/DOC/html/lsame_8c.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 89acd7a..0000000
--- a/DOC/html/mark__relax_8c.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 6498d41..0000000
--- a/DOC/html/mc64ad_8c.html
+++ /dev/null
@@ -1,932 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 77529fd..0000000
--- a/DOC/html/memory_8c.html
+++ /dev/null
@@ -1,285 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 84d5ca2..0000000
--- a/DOC/html/mmd_8c.html
+++ /dev/null
@@ -1,442 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index d879f5d..0000000
--- a/DOC/html/qselect_8c.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index fffed11..0000000
--- a/DOC/html/relax__snode_8c.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c47230e..0000000
--- a/DOC/html/scolumn__bmod_8c.html
+++ /dev/null
@@ -1,272 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5357c73..0000000
--- a/DOC/html/scolumn__dfs_8c.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 50e7d23..0000000
--- a/DOC/html/scomplex_8c.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 381ffe8..0000000
--- a/DOC/html/scopy__to__ucol_8c.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8e0fdbd..0000000
--- a/DOC/html/scsum1_8c.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7faf78c..0000000
--- a/DOC/html/sdiagonal_8c.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3e25310..0000000
--- a/DOC/html/sfgmr_8c.html
+++ /dev/null
@@ -1,210 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5f235a3..0000000
--- a/DOC/html/sgscon_8c.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 1cf7707..0000000
--- a/DOC/html/sgsequ_8c.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index eb5e2a7..0000000
--- a/DOC/html/sgsisx_8c.html
+++ /dev/null
@@ -1,495 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7917188..0000000
--- a/DOC/html/sgsitrf_8c.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 98f9f38..0000000
--- a/DOC/html/sgsrfs_8c.html
+++ /dev/null
@@ -1,249 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 31e9f3b..0000000
--- a/DOC/html/sgssv_8c.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7353ab1..0000000
--- a/DOC/html/sgssvx_8c.html
+++ /dev/null
@@ -1,450 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c9c19d8..0000000
--- a/DOC/html/sgstrf_8c.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 723de05..0000000
--- a/DOC/html/sgstrs_8c.html
+++ /dev/null
@@ -1,332 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8c36d8c..0000000
--- a/DOC/html/sitersol1_8c.html
+++ /dev/null
@@ -1,367 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 296f697..0000000
--- a/DOC/html/sitersol_8c.html
+++ /dev/null
@@ -1,333 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 96daaca..0000000
--- a/DOC/html/slacon_8c.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 764b8bd..0000000
--- a/DOC/html/slamch_8c.html
+++ /dev/null
@@ -1,606 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 17ff75c..0000000
--- a/DOC/html/slangs_8c.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ead2a17..0000000
--- a/DOC/html/slaqgs_8c.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 490cdb6..0000000
--- a/DOC/html/sldperm_8c.html
+++ /dev/null
@@ -1,283 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index fef024f..0000000
--- a/DOC/html/slinsol1_8c.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f0c28d1..0000000
--- a/DOC/html/slinsol_8c.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f5eb63b..0000000
--- a/DOC/html/slinsolx1_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index d753429..0000000
--- a/DOC/html/slinsolx2_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e8edc38..0000000
--- a/DOC/html/slinsolx_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7ae996e..0000000
--- a/DOC/html/slu__Cnames_8h-source.html
+++ /dev/null
@@ -1,462 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0baf415..0000000
--- a/DOC/html/slu__Cnames_8h.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 68d09dc..0000000
--- a/DOC/html/slu__cdefs_8h-source.html
+++ /dev/null
@@ -1,237 +0,0 @@
-<!DOCTYPE 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'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'*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'*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 "jcol" 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
deleted file mode 100644
index 17b62e4..0000000
--- a/DOC/html/slu__cdefs_8h.html
+++ /dev/null
@@ -1,6070 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e5801c2..0000000
--- a/DOC/html/slu__dcomplex_8h-source.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 71a37ed..0000000
--- a/DOC/html/slu__dcomplex_8h.html
+++ /dev/null
@@ -1,446 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0eb297d..0000000
--- a/DOC/html/slu__ddefs_8h-source.html
+++ /dev/null
@@ -1,234 +0,0 @@
-<!DOCTYPE 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'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'*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'*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 "jcol" 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
deleted file mode 100644
index b76e2f1..0000000
--- a/DOC/html/slu__ddefs_8h.html
+++ /dev/null
@@ -1,6027 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 9a34f88..0000000
--- a/DOC/html/slu__scomplex_8h-source.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 6c48c1f..0000000
--- a/DOC/html/slu__scomplex_8h.html
+++ /dev/null
@@ -1,446 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 00dd5f4..0000000
--- a/DOC/html/slu__sdefs_8h-source.html
+++ /dev/null
@@ -1,234 +0,0 @@
-<!DOCTYPE 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'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'*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'*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 "jcol" 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
deleted file mode 100644
index 2af03eb..0000000
--- a/DOC/html/slu__sdefs_8h.html
+++ /dev/null
@@ -1,6027 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0e50654..0000000
--- a/DOC/html/slu__util_8h-source.html
+++ /dev/null
@@ -1,373 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3391c2c..0000000
--- a/DOC/html/slu__util_8h.html
+++ /dev/null
@@ -1,2296 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4d45c37..0000000
--- a/DOC/html/slu__zdefs_8h-source.html
+++ /dev/null
@@ -1,237 +0,0 @@
-<!DOCTYPE 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'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'*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'*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 "jcol" 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
deleted file mode 100644
index 0cd1ff1..0000000
--- a/DOC/html/slu__zdefs_8h.html
+++ /dev/null
@@ -1,6070 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 749b726..0000000
--- a/DOC/html/smemory_8c.html
+++ /dev/null
@@ -1,976 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7fdf26f..0000000
--- a/DOC/html/smyblas2_8c.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8aaade5..0000000
--- a/DOC/html/sp__coletree_8c.html
+++ /dev/null
@@ -1,460 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 2fd57e1..0000000
--- a/DOC/html/sp__ienv_8c.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0382aad..0000000
--- a/DOC/html/sp__preorder_8c.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3315f11..0000000
--- a/DOC/html/spanel__bmod_8c.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7f3335a..0000000
--- a/DOC/html/spanel__dfs_8c.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 29ce26c..0000000
--- a/DOC/html/spivotL_8c.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index a920adb..0000000
--- a/DOC/html/spivotgrowth_8c.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ca249bf..0000000
--- a/DOC/html/spruneL_8c.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f00b264..0000000
--- a/DOC/html/sreadhb_8c.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3653273..0000000
--- a/DOC/html/sreadrb_8c.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 75817c5..0000000
--- a/DOC/html/sreadtriple_8c.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5e4a9d1..0000000
--- a/DOC/html/ssnode__bmod_8c.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 731882a..0000000
--- a/DOC/html/ssnode__dfs_8c.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 1fdc120..0000000
--- a/DOC/html/ssp__blas2_8c.html
+++ /dev/null
@@ -1,403 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index bcdb3a8..0000000
--- a/DOC/html/ssp__blas3_8c.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 7e763ca..0000000
--- a/DOC/html/structColamd__Col__struct.html
+++ /dev/null
@@ -1,301 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ba533f5..0000000
--- a/DOC/html/structColamd__Row__struct.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index add774d..0000000
--- a/DOC/html/structDNformat.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index a24d1ea..0000000
--- a/DOC/html/structGlobalLU__t.html
+++ /dev/null
@@ -1,837 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c150cca..0000000
--- a/DOC/html/structLU__stack__t.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ae2d448..0000000
--- a/DOC/html/structNCPformat.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 128a678..0000000
--- a/DOC/html/structNCformat.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index d8cd753..0000000
--- a/DOC/html/structNRformat.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c83203c..0000000
--- a/DOC/html/structNRformat__loc.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 1bd5291..0000000
--- a/DOC/html/structSCPformat.html
+++ /dev/null
@@ -1,225 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e18d7ca..0000000
--- a/DOC/html/structSCformat.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e0b6e24..0000000
--- a/DOC/html/structSuperLUStat__t.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index aa66e19..0000000
--- a/DOC/html/structSuperMatrix.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0f09b88..0000000
--- a/DOC/html/structcomplex.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e3908e3..0000000
--- a/DOC/html/structdoublecomplex.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index b0ff553..0000000
--- a/DOC/html/structe__node.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 68c9709..0000000
--- a/DOC/html/structmem__usage__t.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8446a7b..0000000
--- a/DOC/html/structsuperlu__options__t.html
+++ /dev/null
@@ -1,412 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index e5d77b4..0000000
--- a/DOC/html/superlu_8c.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c71865a..0000000
--- a/DOC/html/superlu__enum__consts_8h-source.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 1c77bba..0000000
--- a/DOC/html/superlu__enum__consts_8h.html
+++ /dev/null
@@ -1,507 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ec96ce1..0000000
--- a/DOC/html/superlu__timer_8c.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8658e58..0000000
--- a/DOC/html/supermatrix_8h-source.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 2936a96..0000000
--- a/DOC/html/supermatrix_8h.html
+++ /dev/null
@@ -1,183 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3ad08c7..0000000
--- a/DOC/html/sutil_8c.html
+++ /dev/null
@@ -1,994 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0d62348..0000000
Binary files a/DOC/html/tab_b.gif and /dev/null differ
diff --git a/DOC/html/tab_l.gif b/DOC/html/tab_l.gif
deleted file mode 100644
index 9b1e633..0000000
Binary files a/DOC/html/tab_l.gif and /dev/null differ
diff --git a/DOC/html/tab_r.gif b/DOC/html/tab_r.gif
deleted file mode 100644
index ce9dd9f..0000000
Binary files a/DOC/html/tab_r.gif and /dev/null differ
diff --git a/DOC/html/tabs.css b/DOC/html/tabs.css
deleted file mode 100644
index 95f00a9..0000000
--- a/DOC/html/tabs.css
+++ /dev/null
@@ -1,102 +0,0 @@
-/* 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
deleted file mode 100644
index 6182cad..0000000
--- a/DOC/html/util_8c.html
+++ /dev/null
@@ -1,970 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index af10a12..0000000
--- a/DOC/html/xerbla_8c.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ee1c107..0000000
--- a/DOC/html/zcolumn__bmod_8c.html
+++ /dev/null
@@ -1,272 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index af519f5..0000000
--- a/DOC/html/zcolumn__dfs_8c.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 494b3a0..0000000
--- a/DOC/html/zcopy__to__ucol_8c.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c0ca8cf..0000000
--- a/DOC/html/zdiagonal_8c.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4e7f9dc..0000000
--- a/DOC/html/zfgmr_8c.html
+++ /dev/null
@@ -1,216 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c58b4dd..0000000
--- a/DOC/html/zgscon_8c.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index b9d31f1..0000000
--- a/DOC/html/zgsequ_8c.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f062576..0000000
--- a/DOC/html/zgsisx_8c.html
+++ /dev/null
@@ -1,495 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 528fbea..0000000
--- a/DOC/html/zgsitrf_8c.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 63bc7a5..0000000
--- a/DOC/html/zgsrfs_8c.html
+++ /dev/null
@@ -1,249 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index da69703..0000000
--- a/DOC/html/zgssv_8c.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 4972025..0000000
--- a/DOC/html/zgssvx_8c.html
+++ /dev/null
@@ -1,450 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8de72cd..0000000
--- a/DOC/html/zgstrf_8c.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 10b97c7..0000000
--- a/DOC/html/zgstrs_8c.html
+++ /dev/null
@@ -1,332 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 62b5716..0000000
--- a/DOC/html/zitersol1_8c.html
+++ /dev/null
@@ -1,367 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index d6ffed7..0000000
--- a/DOC/html/zitersol_8c.html
+++ /dev/null
@@ -1,333 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3d5f87d..0000000
--- a/DOC/html/zlacon_8c.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 0ef23a2..0000000
--- a/DOC/html/zlangs_8c.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index eb1d1c3..0000000
--- a/DOC/html/zlaqgs_8c.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ba9507e..0000000
--- a/DOC/html/zldperm_8c.html
+++ /dev/null
@@ -1,283 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c4269e4..0000000
--- a/DOC/html/zlinsol1_8c.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 56b94e6..0000000
--- a/DOC/html/zlinsol_8c.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 677ae45..0000000
--- a/DOC/html/zlinsolx1_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c48a763..0000000
--- a/DOC/html/zlinsolx2_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 3463316..0000000
--- a/DOC/html/zlinsolx_8c.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index a300f98..0000000
--- a/DOC/html/zmemory_8c.html
+++ /dev/null
@@ -1,976 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 8819205..0000000
--- a/DOC/html/zmyblas2_8c.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 62f4b94..0000000
--- a/DOC/html/zpanel__bmod_8c.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index d02ba36..0000000
--- a/DOC/html/zpanel__dfs_8c.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index eb516e8..0000000
--- a/DOC/html/zpivotL_8c.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index b1f1b4c..0000000
--- a/DOC/html/zpivotgrowth_8c.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 32c4d36..0000000
--- a/DOC/html/zpruneL_8c.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index cb6cd5e..0000000
--- a/DOC/html/zreadhb_8c.html
+++ /dev/null
@@ -1,345 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c9a440b..0000000
--- a/DOC/html/zreadrb_8c.html
+++ /dev/null
@@ -1,297 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index c5c0f17..0000000
--- a/DOC/html/zreadtriple_8c.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index f70584f..0000000
--- a/DOC/html/zsnode__bmod_8c.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 2a72fef..0000000
--- a/DOC/html/zsnode__dfs_8c.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index ebed2df..0000000
--- a/DOC/html/zsp__blas2_8c.html
+++ /dev/null
@@ -1,401 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index a241a71..0000000
--- a/DOC/html/zsp__blas3_8c.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 5a884d9..0000000
--- a/DOC/html/zutil_8c.html
+++ /dev/null
@@ -1,994 +0,0 @@
-<!DOCTYPE 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
deleted file mode 100644
index 071078b..0000000
--- a/DoxyConfig
+++ /dev/null
@@ -1,1357 +0,0 @@
-# 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
deleted file mode 100644
index c286ded..0000000
--- a/EXAMPLE/Makefile
+++ /dev/null
@@ -1,177 +0,0 @@
-include ../make.inc
-
-#######################################################################
-# This makefile creates the example programs for the linear equation
-# routines in SuperLU. The files are grouped as follows:
-#
-# SLINEXM -- Single precision real example routines
-# DLINEXM -- Double precision real example routines
-# CLINEXM -- Double precision complex example routines
-# ZLINEXM -- Double precision complex example routines
-#
-# Example programs can be generated for all or some of the four different
-# precisions. Enter make followed by one or more of the data types
-# desired. Some examples:
-# make single
-# make single double
-# Alternatively, the command
-# make
-# without any arguments creates all four example programs.
-# The executable files are called
-# slinsol slinsolx
-# dlinsol dlinsolx
-# clinsol clinsolx
-# zlinsol zlinsolx
-#
-# To remove the object files after the executable files have been
-# created, enter
-# make clean
-# On some systems, you can force the source files to be recompiled by
-# entering (for example)
-# make single FRC=FRC
-#
-#######################################################################
-
-HEADER = ../SRC
-
-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
-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 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) -lm -o $@
-
-slinsol1: $(SLINEXM1) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(SLINEXM1) $(LIBS) -lm -o $@
-
-slinsolx: $(SLINXEXM) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(SLINXEXM) $(LIBS) -lm -o $@
-
-slinsolx1: $(SLINXEXM1) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(SLINXEXM1) $(LIBS) -lm -o $@
-
-slinsolx2: $(SLINXEXM2) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(SLINXEXM2) $(LIBS) -lm -o $@
-
-sitersol: $(SITSOL) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(SITSOL) $(LIBS) -lm -o $@
-
-sitersol1: $(SITSOL1) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(SITSOL1) $(LIBS) -lm -o $@
-
-dlinsol: $(DLINEXM) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(DLINEXM) $(LIBS) -lm -o $@
-
-dlinsol1: $(DLINEXM1) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(DLINEXM1) $(LIBS) -lm -o $@
-
-dlinsolx: $(DLINXEXM) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(DLINXEXM) $(LIBS) -lm -o $@
-
-dlinsolx1: $(DLINXEXM1) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(DLINXEXM1) $(LIBS) -lm -o $@
-
-dlinsolx2: $(DLINXEXM2) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(DLINXEXM2) $(LIBS) -lm -o $@
-
-superlu: $(SUPERLUEXM) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(SUPERLUEXM) $(LIBS) -lm -o $@
-
-ditersol: $(DITSOL) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(DITSOL) $(LIBS) -lm -o $@
-
-ditersol1: $(DITSOL1) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(DITSOL1) $(LIBS) -lm -o $@
-
-clinsol: $(CLINEXM) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(CLINEXM) $(LIBS) -lm -o $@
-
-clinsol1: $(CLINEXM1) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(CLINEXM1) $(LIBS) -lm -o $@
-
-clinsolx: $(CLINXEXM) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(CLINXEXM) $(LIBS) -lm -o $@
-
-clinsolx1: $(CLINXEXM1) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(CLINXEXM1) $(LIBS) -lm -o $@
-
-clinsolx2: $(CLINXEXM2) $(SUPERLULIB)
- $(LOADER) $(LOADOPTS) $(CLINXEXM2) $(LIBS) -lm -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) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
-
-.f.o:
- $(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
-
-clean:
- rm -f *.o *linsol *linsol1 *linsolx *linsolx1 *linsolx2 \
- superlu *itersol
-
-
-
diff --git a/EXAMPLE/README b/EXAMPLE/README
deleted file mode 100644
index 1198b51..0000000
--- a/EXAMPLE/README
+++ /dev/null
@@ -1,51 +0,0 @@
- SuperLU EXAMPLES
-
-This directory contains sample programs to illustrate how to use
-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
- linear system.
- 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
-
-To run the small 5x5 sample program in Section 1 of the Users' Guide, type:
- % superlu
-
-To run the real version examples, type:
- % 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 < 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
deleted file mode 100644
index 95ffe3a..0000000
--- a/EXAMPLE/cfgmr.c
+++ /dev/null
@@ -1,334 +0,0 @@
-
-/*! @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/citersol.c b/EXAMPLE/citersol.c
deleted file mode 100644
index 07d6fee..0000000
--- a/EXAMPLE/citersol.c
+++ /dev/null
@@ -1,372 +0,0 @@
-
-/*! @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
deleted file mode 100755
index 436af00..0000000
Binary files a/EXAMPLE/citersol1 and /dev/null differ
diff --git a/EXAMPLE/citersol1.c b/EXAMPLE/citersol1.c
deleted file mode 100644
index e44ea35..0000000
--- a/EXAMPLE/citersol1.c
+++ /dev/null
@@ -1,381 +0,0 @@
-
-/*! @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
deleted file mode 100644
index dc37c83..0000000
--- a/EXAMPLE/clinsol.c
+++ /dev/null
@@ -1,115 +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_cdefs.h"
-
-int main(int argc, char *argv[])
-{
- SuperMatrix A;
- NCformat *Astore;
- complex *a;
- int *asub, *xa;
- int *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- SuperMatrix L; /* factor L */
- SCformat *Lstore;
- SuperMatrix U; /* factor U */
- NCformat *Ustore;
- SuperMatrix B;
- int nrhs, ldx, info, m, n, nnz;
- complex *xact, *rhs;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Read the matrix in Harwell-Boeing format. */
- creadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- nrhs = 1;
- if ( !(rhs = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
- cCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_C, SLU_GE);
- xact = complexMalloc(n * nrhs);
- ldx = n;
- cGenXtrue(n, nrhs, xact, ldx);
- cFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- cgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
-
- if ( info == 0 ) {
-
- /* This is how you could access the solution matrix. */
- complex *sol = (complex*) ((DNformat*) B.Store)->nzval;
-
- /* Compute the infinity norm of the error. */
- cinf_norm_error(nrhs, &B, xact);
-
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (rhs);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Exit main()");
-#endif
-}
-
diff --git a/EXAMPLE/clinsol1.c b/EXAMPLE/clinsol1.c
deleted file mode 100644
index a85bb10..0000000
--- a/EXAMPLE/clinsol1.c
+++ /dev/null
@@ -1,120 +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_cdefs.h"
-
-int main(int argc, char *argv[])
-{
- SuperMatrix A;
- NCformat *Astore;
- complex *a;
- int *asub, *xa;
- int *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- SuperMatrix L; /* factor L */
- SCformat *Lstore;
- SuperMatrix U; /* factor U */
- NCformat *Ustore;
- SuperMatrix B;
- int nrhs, ldx, info, m, n, nnz;
- complex *xact, *rhs;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Now we modify the default options to use the symmetric mode. */
- options.SymmetricMode = YES;
- options.ColPerm = MMD_AT_PLUS_A;
- options.DiagPivotThresh = 0.001;
-
- /* Read the matrix in Harwell-Boeing format. */
- creadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- nrhs = 1;
- if ( !(rhs = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
- cCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_C, SLU_GE);
- xact = complexMalloc(n * nrhs);
- ldx = n;
- cGenXtrue(n, nrhs, xact, ldx);
- cFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- cgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
-
- if ( info == 0 ) {
-
- /* This is how you could access the solution matrix. */
- complex *sol = (complex*) ((DNformat*) B.Store)->nzval;
-
- /* Compute the infinity norm of the error. */
- cinf_norm_error(nrhs, &B, xact);
-
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (rhs);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Exit main()");
-#endif
-}
-
diff --git a/EXAMPLE/clinsolx.c b/EXAMPLE/clinsolx.c
deleted file mode 100644
index 92dc9bb..0000000
--- a/EXAMPLE/clinsolx.c
+++ /dev/null
@@ -1,212 +0,0 @@
-
-/*
- * -- SuperLU routine (version 3.1) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * August 1, 2008
- *
- */
-#include "slu_cdefs.h"
-
-int main(int argc, char *argv[])
-{
- char equed[1];
- 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 *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, m, n, nnz;
- complex *rhsb, *rhsx, *xact;
- float *R, *C;
- float *ferr, *berr;
- float u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- /* Add more functionalities that the defaults. */
- options.PivotGrowth = YES; /* Compute reciprocal pivot growth */
- options.ConditionNumber = YES;/* Compute reciprocal condition number */
- options.IterRefine = SLU_SINGLE; /* Perform single-precision refinement */
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("CLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- creadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- 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[].");
- if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Solve the system and compute the condition number
- and error bounds using dgssvx. */
-
- cgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("cgssvx(): info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth == YES )
- printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber == YES )
- printf("Recip. condition number = %e\n", rcond);
- if ( options.IterRefine != NOREFINE ) {
- printf("Iterative Refinement:\n");
- printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- 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);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- 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
-}
-
-
-/*
- * Parse command line inputs.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- float *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:w:r:u:f:t:p:e:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/clinsolx1.c b/EXAMPLE/clinsolx1.c
deleted file mode 100644
index 4d995e2..0000000
--- a/EXAMPLE/clinsolx1.c
+++ /dev/null
@@ -1,241 +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_cdefs.h"
-
-int main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * The driver program CLINSOLX1.
- *
- * This example illustrates how to use CGSSVX to solve systems with the same
- * A but different right-hand side.
- * In this case, we factorize A only once in the first call to DGSSVX,
- * and reuse the following data structures in the subsequent call to CGSSVX:
- * perm_c, perm_r, R, C, L, U.
- *
- */
- char equed[1];
- 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 *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, m, n, nnz;
- complex *rhsb, *rhsx, *xact;
- float *R, *C;
- float *ferr, *berr;
- float u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default values for options argument:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("CLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- creadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- 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[].");
- if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* ONLY PERFORM THE LU DECOMPOSITION */
- B.ncol = 0; /* Indicate not to solve the system */
- cgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("LU factorization: cgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- /* ------------------------------------------------------------
- NOW WE SOLVE THE LINEAR SYSTEM USING THE FACTORED FORM OF A.
- ------------------------------------------------------------*/
- options.Fact = FACTORED; /* Indicate the factored form of A is supplied. */
- B.ncol = nrhs; /* Set the number of right-hand side */
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- cgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("Triangular solve: cgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
-
- if ( options.IterRefine ) {
- printf("Iterative Refinement:\n");
- printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- 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);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- 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
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- float *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/clinsolx2.c b/EXAMPLE/clinsolx2.c
deleted file mode 100644
index 9327bbb..0000000
--- a/EXAMPLE/clinsolx2.c
+++ /dev/null
@@ -1,277 +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_cdefs.h"
-
-int main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * The driver program CLINSOLX2.
- *
- * This example illustrates how to use CGSSVX to solve systems repeatedly
- * with the same sparsity pattern of matrix A.
- * In this case, the column permutation vector perm_c is computed once.
- * The following data structures will be reused in the subsequent call to
- * CGSSVX: perm_c, etree
- *
- */
- char equed[1];
- yes_no_t equil;
- trans_t trans;
- SuperMatrix A, A1, L, U;
- SuperMatrix B, B1, X;
- NCformat *Astore;
- NCformat *Ustore;
- SCformat *Lstore;
- complex *a, *a1;
- int *asub, *xa, *asub1, *xa1;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, j, m, n, nnz;
- complex *rhsb, *rhsb1, *rhsx, *xact;
- float *R, *C;
- float *ferr, *berr;
- float u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("DLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- creadhb(&m, &n, &nnz, &a, &asub, &xa);
- if ( !(a1 = complexMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
- if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
- if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
- for (i = 0; i < nnz; ++i) {
- a1[i] = a[i];
- asub1[i] = asub[i];
- }
- for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
-
- cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- if ( !(rhsb = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
- if ( !(rhsb1 = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
- 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);
- for (j = 0; j < nrhs; ++j)
- for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
- 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[].");
- if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* ------------------------------------------------------------
- WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
- ------------------------------------------------------------*/
- cgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("First system: cgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
-
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
- Destroy_CompCol_Matrix(&A);
- Destroy_Dense_Matrix(&B);
- if ( lwork >= 0 ) { /* Deallocate storage associated with L and U. */
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
-
- /* ------------------------------------------------------------
- NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
- ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
- ------------------------------------------------------------*/
- options.Fact = SamePattern;
- StatInit(&stat); /* Initialize the statistics variables. */
-
- cCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
- SLU_NC, SLU_C, SLU_GE);
- cCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_C, SLU_GE);
-
- cgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("\nSecond system: cgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (xact);
- SUPERLU_FREE (etree);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- SUPERLU_FREE (R);
- SUPERLU_FREE (C);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A1);
- Destroy_Dense_Matrix(&B1);
- Destroy_Dense_Matrix(&X);
- 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
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- double *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/dfgmr.c b/EXAMPLE/dfgmr.c
deleted file mode 100644
index dd7adff..0000000
--- a/EXAMPLE/dfgmr.c
+++ /dev/null
@@ -1,298 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 607a59d..0000000
--- a/EXAMPLE/ditersol.c
+++ /dev/null
@@ -1,370 +0,0 @@
-
-/*! @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
deleted file mode 100755
index ac7c9b7..0000000
Binary files a/EXAMPLE/ditersol1 and /dev/null differ
diff --git a/EXAMPLE/ditersol1.c b/EXAMPLE/ditersol1.c
deleted file mode 100644
index 4cfe642..0000000
--- a/EXAMPLE/ditersol1.c
+++ /dev/null
@@ -1,379 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 473b620..0000000
--- a/EXAMPLE/dlinsol.c
+++ /dev/null
@@ -1,115 +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_ddefs.h"
-
-int main(int argc, char *argv[])
-{
- SuperMatrix A;
- NCformat *Astore;
- double *a;
- int *asub, *xa;
- int *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- SuperMatrix L; /* factor L */
- SCformat *Lstore;
- SuperMatrix U; /* factor U */
- NCformat *Ustore;
- SuperMatrix B;
- int nrhs, ldx, info, m, n, nnz;
- double *xact, *rhs;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Read the matrix in Harwell-Boeing format. */
- dreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- nrhs = 1;
- if ( !(rhs = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
- dCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_D, SLU_GE);
- xact = doubleMalloc(n * nrhs);
- ldx = n;
- dGenXtrue(n, nrhs, xact, ldx);
- dFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- dgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
-
- if ( info == 0 ) {
-
- /* This is how you could access the solution matrix. */
- double *sol = (double*) ((DNformat*) B.Store)->nzval;
-
- /* Compute the infinity norm of the error. */
- dinf_norm_error(nrhs, &B, xact);
-
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (rhs);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Exit main()");
-#endif
-}
-
diff --git a/EXAMPLE/dlinsol1.c b/EXAMPLE/dlinsol1.c
deleted file mode 100644
index 87c8435..0000000
--- a/EXAMPLE/dlinsol1.c
+++ /dev/null
@@ -1,120 +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_ddefs.h"
-
-int main(int argc, char *argv[])
-{
- SuperMatrix A;
- NCformat *Astore;
- double *a;
- int *asub, *xa;
- int *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- SuperMatrix L; /* factor L */
- SCformat *Lstore;
- SuperMatrix U; /* factor U */
- NCformat *Ustore;
- SuperMatrix B;
- int nrhs, ldx, info, m, n, nnz;
- double *xact, *rhs;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Now we modify the default options to use the symmetric mode. */
- options.SymmetricMode = YES;
- options.ColPerm = MMD_AT_PLUS_A;
- options.DiagPivotThresh = 0.001;
-
- /* Read the matrix in Harwell-Boeing format. */
- dreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- nrhs = 1;
- if ( !(rhs = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
- dCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_D, SLU_GE);
- xact = doubleMalloc(n * nrhs);
- ldx = n;
- dGenXtrue(n, nrhs, xact, ldx);
- dFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- dgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
-
- if ( info == 0 ) {
-
- /* This is how you could access the solution matrix. */
- double *sol = (double*) ((DNformat*) B.Store)->nzval;
-
- /* Compute the infinity norm of the error. */
- dinf_norm_error(nrhs, &B, xact);
-
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (rhs);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Exit main()");
-#endif
-}
-
diff --git a/EXAMPLE/dlinsolx.c b/EXAMPLE/dlinsolx.c
deleted file mode 100644
index c0472ca..0000000
--- a/EXAMPLE/dlinsolx.c
+++ /dev/null
@@ -1,212 +0,0 @@
-
-/*
- * -- SuperLU routine (version 3.1) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * August 1, 2008
- *
- */
-#include "slu_ddefs.h"
-
-int main(int argc, char *argv[])
-{
- char equed[1];
- 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 *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, m, n, nnz;
- double *rhsb, *rhsx, *xact;
- double *R, *C;
- double *ferr, *berr;
- double u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- /* Add more functionalities that the defaults. */
- options.PivotGrowth = YES; /* Compute reciprocal pivot growth */
- options.ConditionNumber = YES;/* Compute reciprocal condition number */
- options.IterRefine = SLU_DOUBLE; /* Perform double-precision refinement */
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("DLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- dreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- 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[].");
- if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Solve the system and compute the condition number
- and error bounds using dgssvx. */
-
- dgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("dgssvx(): info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- double *sol = (double*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth == YES )
- printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber == YES )
- printf("Recip. condition number = %e\n", rcond);
- if ( options.IterRefine != NOREFINE ) {
- printf("Iterative Refinement:\n");
- printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- 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);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- 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
-}
-
-
-/*
- * Parse command line inputs.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- double *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:w:r:u:f:t:p:e:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/dlinsolx1.c b/EXAMPLE/dlinsolx1.c
deleted file mode 100644
index 79d6790..0000000
--- a/EXAMPLE/dlinsolx1.c
+++ /dev/null
@@ -1,241 +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_ddefs.h"
-
-int main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * The driver program DLINSOLX1.
- *
- * This example illustrates how to use DGSSVX to solve systems with the same
- * A but different right-hand side.
- * In this case, we factorize A only once in the first call to DGSSVX,
- * and reuse the following data structures in the subsequent call to DGSSVX:
- * perm_c, perm_r, R, C, L, U.
- *
- */
- char equed[1];
- 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 *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, m, n, nnz;
- double *rhsb, *rhsx, *xact;
- double *R, *C;
- double *ferr, *berr;
- double u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default values for options argument:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("DLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- dreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- 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[].");
- if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* ONLY PERFORM THE LU DECOMPOSITION */
- B.ncol = 0; /* Indicate not to solve the system */
- dgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("LU factorization: dgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- /* ------------------------------------------------------------
- NOW WE SOLVE THE LINEAR SYSTEM USING THE FACTORED FORM OF A.
- ------------------------------------------------------------*/
- options.Fact = FACTORED; /* Indicate the factored form of A is supplied. */
- B.ncol = nrhs; /* Set the number of right-hand side */
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- dgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("Triangular solve: dgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- double *sol = (double*) ((DNformat*) X.Store)->nzval;
-
- if ( options.IterRefine ) {
- printf("Iterative Refinement:\n");
- printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- 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);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- 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
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- double *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/dlinsolx2.c b/EXAMPLE/dlinsolx2.c
deleted file mode 100644
index d8ff0ab..0000000
--- a/EXAMPLE/dlinsolx2.c
+++ /dev/null
@@ -1,277 +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_ddefs.h"
-
-int main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * The driver program DLINSOLX2.
- *
- * This example illustrates how to use DGSSVX to solve systems repeatedly
- * with the same sparsity pattern of matrix A.
- * In this case, the column permutation vector perm_c is computed once.
- * The following data structures will be reused in the subsequent call to
- * DGSSVX: perm_c, etree
- *
- */
- char equed[1];
- yes_no_t equil;
- trans_t trans;
- SuperMatrix A, A1, L, U;
- SuperMatrix B, B1, X;
- NCformat *Astore;
- NCformat *Ustore;
- SCformat *Lstore;
- double *a, *a1;
- int *asub, *xa, *asub1, *xa1;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, j, m, n, nnz;
- double *rhsb, *rhsb1, *rhsx, *xact;
- double *R, *C;
- double *ferr, *berr;
- double u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("DLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- dreadhb(&m, &n, &nnz, &a, &asub, &xa);
- if ( !(a1 = doubleMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
- if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
- if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
- for (i = 0; i < nnz; ++i) {
- a1[i] = a[i];
- asub1[i] = asub[i];
- }
- for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
-
- dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- if ( !(rhsb = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
- if ( !(rhsb1 = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
- 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);
- for (j = 0; j < nrhs; ++j)
- for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
- 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[].");
- if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* ------------------------------------------------------------
- WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
- ------------------------------------------------------------*/
- dgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("First system: dgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- double *sol = (double*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
-
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
- Destroy_CompCol_Matrix(&A);
- Destroy_Dense_Matrix(&B);
- if ( lwork >= 0 ) { /* Deallocate storage associated with L and U. */
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
-
- /* ------------------------------------------------------------
- NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
- ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
- ------------------------------------------------------------*/
- options.Fact = SamePattern;
- StatInit(&stat); /* Initialize the statistics variables. */
-
- dCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
- SLU_NC, SLU_D, SLU_GE);
- dCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_D, SLU_GE);
-
- dgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("\nSecond system: dgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- double *sol = (double*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (xact);
- SUPERLU_FREE (etree);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- SUPERLU_FREE (R);
- SUPERLU_FREE (C);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A1);
- Destroy_Dense_Matrix(&B1);
- Destroy_Dense_Matrix(&X);
- 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
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- double *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/fgmr.c b/EXAMPLE/fgmr.c
deleted file mode 100644
index e9b7a45..0000000
--- a/EXAMPLE/fgmr.c
+++ /dev/null
@@ -1,263 +0,0 @@
-#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/sfgmr.c b/EXAMPLE/sfgmr.c
deleted file mode 100644
index 66d2ff8..0000000
--- a/EXAMPLE/sfgmr.c
+++ /dev/null
@@ -1,298 +0,0 @@
-
-/*! @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
deleted file mode 100644
index e54f9e1..0000000
--- a/EXAMPLE/sitersol.c
+++ /dev/null
@@ -1,370 +0,0 @@
-
-/*! @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
deleted file mode 100755
index 4d3b482..0000000
Binary files a/EXAMPLE/sitersol1 and /dev/null differ
diff --git a/EXAMPLE/sitersol1.c b/EXAMPLE/sitersol1.c
deleted file mode 100644
index 242ec85..0000000
--- a/EXAMPLE/sitersol1.c
+++ /dev/null
@@ -1,379 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 40db184..0000000
--- a/EXAMPLE/slinsol.c
+++ /dev/null
@@ -1,115 +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_sdefs.h"
-
-int main(int argc, char *argv[])
-{
- SuperMatrix A;
- NCformat *Astore;
- float *a;
- int *asub, *xa;
- int *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- SuperMatrix L; /* factor L */
- SCformat *Lstore;
- SuperMatrix U; /* factor U */
- NCformat *Ustore;
- SuperMatrix B;
- int nrhs, ldx, info, m, n, nnz;
- float *xact, *rhs;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Read the matrix in Harwell-Boeing format. */
- sreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- nrhs = 1;
- if ( !(rhs = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
- sCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_S, SLU_GE);
- xact = floatMalloc(n * nrhs);
- ldx = n;
- sGenXtrue(n, nrhs, xact, ldx);
- sFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- sgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
-
- if ( info == 0 ) {
-
- /* This is how you could access the solution matrix. */
- float *sol = (float*) ((DNformat*) B.Store)->nzval;
-
- /* Compute the infinity norm of the error. */
- sinf_norm_error(nrhs, &B, xact);
-
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (rhs);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Exit main()");
-#endif
-}
-
diff --git a/EXAMPLE/slinsol1.c b/EXAMPLE/slinsol1.c
deleted file mode 100644
index 22d9c01..0000000
--- a/EXAMPLE/slinsol1.c
+++ /dev/null
@@ -1,120 +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_sdefs.h"
-
-int main(int argc, char *argv[])
-{
- SuperMatrix A;
- NCformat *Astore;
- float *a;
- int *asub, *xa;
- int *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- SuperMatrix L; /* factor L */
- SCformat *Lstore;
- SuperMatrix U; /* factor U */
- NCformat *Ustore;
- SuperMatrix B;
- int nrhs, ldx, info, m, n, nnz;
- float *xact, *rhs;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Now we modify the default options to use the symmetric mode. */
- options.SymmetricMode = YES;
- options.ColPerm = MMD_AT_PLUS_A;
- options.DiagPivotThresh = 0.001;
-
- /* Read the matrix in Harwell-Boeing format. */
- sreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- nrhs = 1;
- if ( !(rhs = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
- sCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_S, SLU_GE);
- xact = floatMalloc(n * nrhs);
- ldx = n;
- sGenXtrue(n, nrhs, xact, ldx);
- sFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- sgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
-
- if ( info == 0 ) {
-
- /* This is how you could access the solution matrix. */
- float *sol = (float*) ((DNformat*) B.Store)->nzval;
-
- /* Compute the infinity norm of the error. */
- sinf_norm_error(nrhs, &B, xact);
-
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (rhs);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Exit main()");
-#endif
-}
-
diff --git a/EXAMPLE/slinsolx.c b/EXAMPLE/slinsolx.c
deleted file mode 100644
index b0f68d4..0000000
--- a/EXAMPLE/slinsolx.c
+++ /dev/null
@@ -1,212 +0,0 @@
-
-/*
- * -- SuperLU routine (version 3.1) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * August 1, 2008
- *
- */
-#include "slu_sdefs.h"
-
-int main(int argc, char *argv[])
-{
- char equed[1];
- 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 *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, m, n, nnz;
- float *rhsb, *rhsx, *xact;
- float *R, *C;
- float *ferr, *berr;
- float u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- /* Add more functionalities that the defaults. */
- options.PivotGrowth = YES; /* Compute reciprocal pivot growth */
- options.ConditionNumber = YES;/* Compute reciprocal condition number */
- options.IterRefine = SLU_SINGLE; /* Perform single-precision refinement */
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("SLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- sreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- 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[].");
- if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Solve the system and compute the condition number
- and error bounds using dgssvx. */
-
- sgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("sgssvx(): info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- float *sol = (float*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth == YES )
- printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber == YES )
- printf("Recip. condition number = %e\n", rcond);
- if ( options.IterRefine != NOREFINE ) {
- printf("Iterative Refinement:\n");
- printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- 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);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- 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
-}
-
-
-/*
- * Parse command line inputs.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- float *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:w:r:u:f:t:p:e:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/slinsolx1.c b/EXAMPLE/slinsolx1.c
deleted file mode 100644
index 0c93def..0000000
--- a/EXAMPLE/slinsolx1.c
+++ /dev/null
@@ -1,241 +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_sdefs.h"
-
-int main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * The driver program SLINSOLX1.
- *
- * This example illustrates how to use SGSSVX to solve systems with the same
- * A but different right-hand side.
- * In this case, we factorize A only once in the first call to DGSSVX,
- * and reuse the following data structures in the subsequent call to SGSSVX:
- * perm_c, perm_r, R, C, L, U.
- *
- */
- char equed[1];
- 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 *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, m, n, nnz;
- float *rhsb, *rhsx, *xact;
- float *R, *C;
- float *ferr, *berr;
- float u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default values for options argument:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("SLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- sreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- 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[].");
- if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* ONLY PERFORM THE LU DECOMPOSITION */
- B.ncol = 0; /* Indicate not to solve the system */
- sgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("LU factorization: sgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- /* ------------------------------------------------------------
- NOW WE SOLVE THE LINEAR SYSTEM USING THE FACTORED FORM OF A.
- ------------------------------------------------------------*/
- options.Fact = FACTORED; /* Indicate the factored form of A is supplied. */
- B.ncol = nrhs; /* Set the number of right-hand side */
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- sgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("Triangular solve: sgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- float *sol = (float*) ((DNformat*) X.Store)->nzval;
-
- if ( options.IterRefine ) {
- printf("Iterative Refinement:\n");
- printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- 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);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- 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
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- float *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/slinsolx2.c b/EXAMPLE/slinsolx2.c
deleted file mode 100644
index 8962881..0000000
--- a/EXAMPLE/slinsolx2.c
+++ /dev/null
@@ -1,277 +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_sdefs.h"
-
-int main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * The driver program SLINSOLX2.
- *
- * This example illustrates how to use SGSSVX to solve systems repeatedly
- * with the same sparsity pattern of matrix A.
- * In this case, the column permutation vector perm_c is computed once.
- * The following data structures will be reused in the subsequent call to
- * SGSSVX: perm_c, etree
- *
- */
- char equed[1];
- yes_no_t equil;
- trans_t trans;
- SuperMatrix A, A1, L, U;
- SuperMatrix B, B1, X;
- NCformat *Astore;
- NCformat *Ustore;
- SCformat *Lstore;
- float *a, *a1;
- int *asub, *xa, *asub1, *xa1;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, j, m, n, nnz;
- float *rhsb, *rhsb1, *rhsx, *xact;
- float *R, *C;
- float *ferr, *berr;
- float u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("DLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- sreadhb(&m, &n, &nnz, &a, &asub, &xa);
- if ( !(a1 = floatMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
- if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
- if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
- for (i = 0; i < nnz; ++i) {
- a1[i] = a[i];
- asub1[i] = asub[i];
- }
- for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
-
- sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- if ( !(rhsb = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
- if ( !(rhsb1 = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
- 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);
- for (j = 0; j < nrhs; ++j)
- for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
- 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[].");
- if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* ------------------------------------------------------------
- WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
- ------------------------------------------------------------*/
- sgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("First system: sgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- float *sol = (float*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
-
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
- Destroy_CompCol_Matrix(&A);
- Destroy_Dense_Matrix(&B);
- if ( lwork >= 0 ) { /* Deallocate storage associated with L and U. */
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
-
- /* ------------------------------------------------------------
- NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
- ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
- ------------------------------------------------------------*/
- options.Fact = SamePattern;
- StatInit(&stat); /* Initialize the statistics variables. */
-
- sCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
- SLU_NC, SLU_S, SLU_GE);
- sCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_S, SLU_GE);
-
- sgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("\nSecond system: sgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- float *sol = (float*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (xact);
- SUPERLU_FREE (etree);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- SUPERLU_FREE (R);
- SUPERLU_FREE (C);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A1);
- Destroy_Dense_Matrix(&B1);
- Destroy_Dense_Matrix(&X);
- 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
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- double *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/sp_ienv.c b/EXAMPLE/sp_ienv.c
deleted file mode 100644
index d1ed662..0000000
--- a/EXAMPLE/sp_ienv.c
+++ /dev/null
@@ -1,79 +0,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, 2010
- *
-*/
-
-/*
- * File name: sp_ienv.c
- * History: Modified from lapack routine ILAENV
- */
-#include "slu_Cnames.h"
-
-/*! \brief
-
- <pre>
- Purpose
- =======
-
- sp_ienv() is inquired to choose machine-dependent parameters for the
- local environment. See ISPEC for a description of the parameters.
-
- 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.
-
- Arguments
- =========
-
- 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.
-
- (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 (12);
- case 2: return (1);
- case 3: return (100);
- case 4: return (200);
- case 5: return (60);
- case 6: return (20);
- case 7: return (10);
- }
-
- /* Invalid value for ISPEC */
- i = 1;
- xerbla_("sp_ienv", &i);
- return 0;
-
-} /* sp_ienv_ */
-
diff --git a/EXAMPLE/superlu.c b/EXAMPLE/superlu.c
deleted file mode 100644
index f109e1a..0000000
--- a/EXAMPLE/superlu.c
+++ /dev/null
@@ -1,84 +0,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"
-
-main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * 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.
- *
- */
- SuperMatrix A, L, U, B;
- double *a, *rhs;
- double s, u, p, e, r, l;
- int *asub, *xa;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int nrhs, info, i, m, n, nnz, permc_spec;
- superlu_options_t options;
- SuperLUStat_t stat;
-
- /* Initialize matrix A. */
- m = n = 5;
- nnz = 12;
- if ( !(a = doubleMalloc(nnz)) ) ABORT("Malloc fails for a[].");
- if ( !(asub = intMalloc(nnz)) ) ABORT("Malloc fails for asub[].");
- if ( !(xa = intMalloc(n+1)) ) ABORT("Malloc fails for xa[].");
- s = 19.0; u = 21.0; p = 16.0; e = 5.0; r = 18.0; l = 12.0;
- a[0] = s; a[1] = l; a[2] = l; a[3] = u; a[4] = l; a[5] = l;
- a[6] = u; a[7] = p; a[8] = u; a[9] = e; a[10]= u; a[11]= r;
- asub[0] = 0; asub[1] = 1; asub[2] = 4; asub[3] = 1;
- asub[4] = 2; asub[5] = 4; asub[6] = 0; asub[7] = 2;
- asub[8] = 0; asub[9] = 3; asub[10]= 3; asub[11]= 4;
- xa[0] = 0; xa[1] = 3; xa[2] = 6; xa[3] = 8; xa[4] = 10; xa[5] = 12;
-
- /* Create matrix A in the format expected by SuperLU. */
- dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
-
- /* Create right-hand side matrix B. */
- nrhs = 1;
- if ( !(rhs = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
- for (i = 0; i < m; ++i) rhs[i] = 1.0;
- dCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_D, SLU_GE);
-
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
-
- /* Set the default input options. */
- set_default_options(&options);
- options.ColPerm = NATURAL;
-
- /* 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);
- dPrint_CompCol_Matrix("U", &U);
- dPrint_SuperNode_Matrix("L", &L);
- print_int_vec("\nperm_r", m, perm_r);
-
- /* De-allocate storage */
- SUPERLU_FREE (rhs);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- StatFree(&stat);
-}
diff --git a/EXAMPLE/zfgmr.c b/EXAMPLE/zfgmr.c
deleted file mode 100644
index c1f0479..0000000
--- a/EXAMPLE/zfgmr.c
+++ /dev/null
@@ -1,334 +0,0 @@
-
-/*! @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
deleted file mode 100644
index e7d7f24..0000000
--- a/EXAMPLE/zitersol.c
+++ /dev/null
@@ -1,372 +0,0 @@
-
-/*! @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
deleted file mode 100755
index c62788b..0000000
Binary files a/EXAMPLE/zitersol1 and /dev/null differ
diff --git a/EXAMPLE/zitersol1.c b/EXAMPLE/zitersol1.c
deleted file mode 100644
index 3a9b0bd..0000000
--- a/EXAMPLE/zitersol1.c
+++ /dev/null
@@ -1,381 +0,0 @@
-
-/*! @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
deleted file mode 100644
index d4f83b1..0000000
--- a/EXAMPLE/zlinsol.c
+++ /dev/null
@@ -1,115 +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"
-
-int main(int argc, char *argv[])
-{
- SuperMatrix A;
- NCformat *Astore;
- doublecomplex *a;
- int *asub, *xa;
- int *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- SuperMatrix L; /* factor L */
- SCformat *Lstore;
- SuperMatrix U; /* factor U */
- NCformat *Ustore;
- SuperMatrix B;
- int nrhs, ldx, info, m, n, nnz;
- doublecomplex *xact, *rhs;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Read the matrix in Harwell-Boeing format. */
- zreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- nrhs = 1;
- if ( !(rhs = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
- zCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_Z, SLU_GE);
- xact = doublecomplexMalloc(n * nrhs);
- ldx = n;
- zGenXtrue(n, nrhs, xact, ldx);
- zFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- zgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
-
- if ( info == 0 ) {
-
- /* This is how you could access the solution matrix. */
- doublecomplex *sol = (doublecomplex*) ((DNformat*) B.Store)->nzval;
-
- /* Compute the infinity norm of the error. */
- zinf_norm_error(nrhs, &B, xact);
-
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (rhs);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Exit main()");
-#endif
-}
-
diff --git a/EXAMPLE/zlinsol1.c b/EXAMPLE/zlinsol1.c
deleted file mode 100644
index 5caf1af..0000000
--- a/EXAMPLE/zlinsol1.c
+++ /dev/null
@@ -1,120 +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"
-
-int main(int argc, char *argv[])
-{
- SuperMatrix A;
- NCformat *Astore;
- doublecomplex *a;
- int *asub, *xa;
- int *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- SuperMatrix L; /* factor L */
- SCformat *Lstore;
- SuperMatrix U; /* factor U */
- NCformat *Ustore;
- SuperMatrix B;
- int nrhs, ldx, info, m, n, nnz;
- doublecomplex *xact, *rhs;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Now we modify the default options to use the symmetric mode. */
- options.SymmetricMode = YES;
- options.ColPerm = MMD_AT_PLUS_A;
- options.DiagPivotThresh = 0.001;
-
- /* Read the matrix in Harwell-Boeing format. */
- zreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- nrhs = 1;
- if ( !(rhs = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
- zCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_Z, SLU_GE);
- xact = doublecomplexMalloc(n * nrhs);
- ldx = n;
- zGenXtrue(n, nrhs, xact, ldx);
- zFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- zgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
-
- if ( info == 0 ) {
-
- /* This is how you could access the solution matrix. */
- doublecomplex *sol = (doublecomplex*) ((DNformat*) B.Store)->nzval;
-
- /* Compute the infinity norm of the error. */
- zinf_norm_error(nrhs, &B, xact);
-
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (rhs);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Exit main()");
-#endif
-}
-
diff --git a/EXAMPLE/zlinsolx.c b/EXAMPLE/zlinsolx.c
deleted file mode 100644
index c8b8edb..0000000
--- a/EXAMPLE/zlinsolx.c
+++ /dev/null
@@ -1,212 +0,0 @@
-
-/*
- * -- SuperLU routine (version 3.1) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * August 1, 2008
- *
- */
-#include "slu_zdefs.h"
-
-int main(int argc, char *argv[])
-{
- char equed[1];
- 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 *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, m, n, nnz;
- doublecomplex *rhsb, *rhsx, *xact;
- double *R, *C;
- double *ferr, *berr;
- double u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- /* Add more functionalities that the defaults. */
- options.PivotGrowth = YES; /* Compute reciprocal pivot growth */
- options.ConditionNumber = YES;/* Compute reciprocal condition number */
- options.IterRefine = SLU_DOUBLE; /* Perform double-precision refinement */
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("ZLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- zreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- 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[].");
- if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Solve the system and compute the condition number
- and error bounds using dgssvx. */
-
- zgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("zgssvx(): info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth == YES )
- printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber == YES )
- printf("Recip. condition number = %e\n", rcond);
- if ( options.IterRefine != NOREFINE ) {
- printf("Iterative Refinement:\n");
- printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- 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);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- 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
-}
-
-
-/*
- * Parse command line inputs.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- double *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:w:r:u:f:t:p:e:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/zlinsolx1.c b/EXAMPLE/zlinsolx1.c
deleted file mode 100644
index 75b2117..0000000
--- a/EXAMPLE/zlinsolx1.c
+++ /dev/null
@@ -1,241 +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"
-
-int main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * The driver program ZLINSOLX1.
- *
- * This example illustrates how to use ZGSSVX to solve systems with the same
- * A but different right-hand side.
- * In this case, we factorize A only once in the first call to DGSSVX,
- * and reuse the following data structures in the subsequent call to ZGSSVX:
- * perm_c, perm_r, R, C, L, U.
- *
- */
- char equed[1];
- 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 *perm_c; /* column permutation vector */
- int *perm_r; /* row permutations from partial pivoting */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, m, n, nnz;
- doublecomplex *rhsb, *rhsx, *xact;
- double *R, *C;
- double *ferr, *berr;
- double u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default values for options argument:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("ZLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- zreadhb(&m, &n, &nnz, &a, &asub, &xa);
-
- zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- 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[].");
- if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* ONLY PERFORM THE LU DECOMPOSITION */
- B.ncol = 0; /* Indicate not to solve the system */
- zgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("LU factorization: zgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- /* ------------------------------------------------------------
- NOW WE SOLVE THE LINEAR SYSTEM USING THE FACTORED FORM OF A.
- ------------------------------------------------------------*/
- options.Fact = FACTORED; /* Indicate the factored form of A is supplied. */
- B.ncol = nrhs; /* Set the number of right-hand side */
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- zgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("Triangular solve: zgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
-
- if ( options.IterRefine ) {
- printf("Iterative Refinement:\n");
- printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- 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);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- 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
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- double *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/EXAMPLE/zlinsolx2.c b/EXAMPLE/zlinsolx2.c
deleted file mode 100644
index 7c1b650..0000000
--- a/EXAMPLE/zlinsolx2.c
+++ /dev/null
@@ -1,277 +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"
-
-int main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * The driver program ZLINSOLX2.
- *
- * This example illustrates how to use ZGSSVX to solve systems repeatedly
- * with the same sparsity pattern of matrix A.
- * In this case, the column permutation vector perm_c is computed once.
- * The following data structures will be reused in the subsequent call to
- * ZGSSVX: perm_c, etree
- *
- */
- char equed[1];
- yes_no_t equil;
- trans_t trans;
- SuperMatrix A, A1, L, U;
- SuperMatrix B, B1, X;
- NCformat *Astore;
- NCformat *Ustore;
- SCformat *Lstore;
- doublecomplex *a, *a1;
- int *asub, *xa, *asub1, *xa1;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree;
- void *work;
- int info, lwork, nrhs, ldx;
- int i, j, m, n, nnz;
- doublecomplex *rhsb, *rhsb1, *rhsx, *xact;
- double *R, *C;
- double *ferr, *berr;
- double u, rpg, rcond;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- extern void parse_command_line();
-
-#if ( DEBUGlevel>=1 )
- CHECK_MALLOC("Enter main()");
-#endif
-
- /* Defaults */
- lwork = 0;
- nrhs = 1;
- equil = YES;
- u = 1.0;
- trans = NOTRANS;
-
- /* Set the default input options:
- options.Fact = DOFACT;
- options.Equil = YES;
- options.ColPerm = COLAMD;
- options.DiagPivotThresh = 1.0;
- options.Trans = NOTRANS;
- options.IterRefine = NOREFINE;
- options.SymmetricMode = NO;
- options.PivotGrowth = NO;
- options.ConditionNumber = NO;
- options.PrintStat = YES;
- */
- set_default_options(&options);
-
- /* Can use command line input to modify the defaults. */
- parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
- options.Equil = equil;
- options.DiagPivotThresh = u;
- options.Trans = trans;
-
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- ABORT("DLINSOLX: cannot allocate work[]");
- }
- }
-
- /* Read matrix A from a file in Harwell-Boeing format.*/
- zreadhb(&m, &n, &nnz, &a, &asub, &xa);
- if ( !(a1 = doublecomplexMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
- if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
- if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
- for (i = 0; i < nnz; ++i) {
- a1[i] = a[i];
- asub1[i] = asub[i];
- }
- for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
-
- zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
- Astore = A.Store;
- printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
-
- if ( !(rhsb = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
- if ( !(rhsb1 = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
- 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);
- for (j = 0; j < nrhs; ++j)
- for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
-
- if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
- 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[].");
- if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for ferr[].");
- if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for berr[].");
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* ------------------------------------------------------------
- WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
- ------------------------------------------------------------*/
- zgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("First system: zgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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);
-
- 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");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
-
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
- Destroy_CompCol_Matrix(&A);
- Destroy_Dense_Matrix(&B);
- if ( lwork >= 0 ) { /* Deallocate storage associated with L and U. */
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
-
- /* ------------------------------------------------------------
- NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
- ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
- ------------------------------------------------------------*/
- options.Fact = SamePattern;
- StatInit(&stat); /* Initialize the statistics variables. */
-
- zCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
- SLU_NC, SLU_Z, SLU_GE);
- zCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_Z, SLU_GE);
-
- zgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
- &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
- &mem_usage, &stat, &info);
-
- printf("\nSecond system: zgssvx() returns info %d\n", info);
-
- if ( info == 0 || info == n+1 ) {
-
- /* This is how you could access the solution matrix. */
- doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
-
- if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
- if ( options.ConditionNumber )
- printf("Recip. condition number = %e\n", rcond);
- Lstore = (SCformat *) L.Store;
- Ustore = (NCformat *) U.Store;
- 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\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");
- for (i = 0; i < nrhs; ++i)
- printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
- }
- fflush(stdout);
- } else if ( info > 0 && lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n", info - n);
- }
-
- if ( options.PrintStat ) StatPrint(&stat);
- StatFree(&stat);
-
- SUPERLU_FREE (xact);
- SUPERLU_FREE (etree);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- SUPERLU_FREE (R);
- SUPERLU_FREE (C);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- Destroy_CompCol_Matrix(&A1);
- Destroy_Dense_Matrix(&B1);
- Destroy_Dense_Matrix(&X);
- 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
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-void
-parse_command_line(int argc, char *argv[], int *lwork,
- double *u, yes_no_t *equil, trans_t *trans )
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-l <int> - length of work[*] array\n");
- printf("\t-u <int> - pivoting threshold\n");
- printf("\t-e <0 or 1> - equilibrate or not\n");
- printf("\t-t <0 or 1> - solve transposed system or not\n");
- exit(1);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- case 'e': *equil = atoi(optarg);
- break;
- case 't': *trans = atoi(optarg);
- break;
- }
- }
-}
diff --git a/FORTRAN/Makefile b/FORTRAN/Makefile
deleted file mode 100644
index 23671a7..0000000
--- a/FORTRAN/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-include ../make.inc
-
-#######################################################################
-# This makefile creates the Fortran example interface to use the
-# C routines in SuperLU.
-#######################################################################
-
-HEADER = ../SRC
-LIBS = $(SUPERLULIB) $(BLASLIB) -lm
-
-# double real
-F77EXM = f77_main.o hbcode1.o c_fortran_dgssv.o
-
-# double complex
-ZF77EXM = z_f77_main.o zhbcode1.o c_fortran_zgssv.o
-
-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)
-
-.c.o:
- $(CC) $(CFLAGS) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
-
-.f.o:
- $(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
-
-clean:
- rm -f *.o f77exm zf77exm
-
diff --git a/FORTRAN/README b/FORTRAN/README
deleted file mode 100644
index c51a527..0000000
--- a/FORTRAN/README
+++ /dev/null
@@ -1,10 +0,0 @@
- FORTRAN INTERFACE
-
-This directory contains the Fortran example interface to use the
-C routines in SuperLU.
-
-To compile the examples, type:
- % make
-
-To run the examples, type:
- % f77exm < ../EXAMPLE/g10
diff --git a/FORTRAN/c_fortran_cgssv.c b/FORTRAN/c_fortran_cgssv.c
deleted file mode 100644
index 550f3e7..0000000
--- a/FORTRAN/c_fortran_cgssv.c
+++ /dev/null
@@ -1,174 +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_cdefs.h"
-
-#define HANDLE_SIZE 8
-/* 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;
- SuperMatrix *U;
- int *perm_c;
- int *perm_r;
-} factors_t;
-
-void
-c_fortran_cgssv_(int *iopt, int *n, int *nnz, int *nrhs,
- complex *values, int *rowind, int *colptr,
- complex *b, int *ldb,
- fptr *f_factors, /* a handle containing the address
- pointing to the factored matrices */
- int *info)
-
-{
-/*
- * This routine can be called from Fortran.
- *
- * iopt (input) int
- * Specifies the operation:
- * = 1, performs LU decomposition for the first time
- * = 2, performs triangular solve
- * = 3, free all the storage in the end
- *
- * f_factors (input/output) fptr*
- * If iopt == 1, it is an output and contains the pointer pointing to
- * the structure of the factored matrices.
- * Otherwise, it it an input.
- *
- */
-
- SuperMatrix A, AC, B;
- SuperMatrix *L, *U;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree; /* column elimination tree */
- SCformat *Lstore;
- NCformat *Ustore;
- int i, panel_size, permc_spec, relax;
- trans_t trans;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- factors_t *LUfactors;
-
- trans = NOTRANS;
-
- if ( *iopt == 1 ) { /* LU decomposition */
-
- /* Set the default input options. */
- set_default_options(&options);
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Adjust to 0-based indexing */
- for (i = 0; i < *nnz; ++i) --rowind[i];
- for (i = 0; i <= *n; ++i) --colptr[i];
-
- cCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind, colptr,
- SLU_NC, SLU_C, SLU_GE);
- L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
-
- /*
- * Get column permutation vector perm_c[], according to permc_spec:
- * permc_spec = 0: natural ordering
- * permc_spec = 1: minimum degree on structure of A'*A
- * permc_spec = 2: minimum degree on structure of A'+A
- * permc_spec = 3: approximate minimum degree for unsymmetric matrices
- */
- permc_spec = options.ColPerm;
- get_perm_c(permc_spec, &A, perm_c);
-
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
-
- cgstrf(&options, &AC, relax, panel_size, etree,
- NULL, 0, perm_c, perm_r, L, U, &stat, info);
-
- if ( *info == 0 ) {
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- 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);
- cQuerySpace(L, U, &mem_usage);
- 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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- /* Restore to 1-based indexing */
- for (i = 0; i < *nnz; ++i) ++rowind[i];
- for (i = 0; i <= *n; ++i) ++colptr[i];
-
- /* Save the LU factors in the factors handle */
- LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
- LUfactors->L = L;
- LUfactors->U = U;
- LUfactors->perm_c = perm_c;
- LUfactors->perm_r = perm_r;
- *f_factors = (fptr) LUfactors;
-
- /* Free un-wanted storage */
- SUPERLU_FREE(etree);
- Destroy_SuperMatrix_Store(&A);
- Destroy_CompCol_Permuted(&AC);
- StatFree(&stat);
-
- } else if ( *iopt == 2 ) { /* Triangular solve */
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Extract the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- L = LUfactors->L;
- U = LUfactors->U;
- perm_c = LUfactors->perm_c;
- perm_r = LUfactors->perm_r;
-
- cCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_C, SLU_GE);
-
- /* Solve the system A*X=B, overwriting B with X. */
- cgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
-
- Destroy_SuperMatrix_Store(&B);
- StatFree(&stat);
-
- } else if ( *iopt == 3 ) { /* Free storage */
- /* Free the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- SUPERLU_FREE (LUfactors->perm_r);
- SUPERLU_FREE (LUfactors->perm_c);
- Destroy_SuperNode_Matrix(LUfactors->L);
- Destroy_CompCol_Matrix(LUfactors->U);
- SUPERLU_FREE (LUfactors->L);
- SUPERLU_FREE (LUfactors->U);
- SUPERLU_FREE (LUfactors);
- } else {
- fprintf(stderr,"Invalid iopt=%d passed to c_fortran_cgssv()\n",*iopt);
- exit(-1);
- }
-}
-
-
diff --git a/FORTRAN/c_fortran_dgssv.c b/FORTRAN/c_fortran_dgssv.c
deleted file mode 100644
index 0373ad4..0000000
--- a/FORTRAN/c_fortran_dgssv.c
+++ /dev/null
@@ -1,174 +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_ddefs.h"
-
-#define HANDLE_SIZE 8
-/* 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;
- SuperMatrix *U;
- int *perm_c;
- int *perm_r;
-} factors_t;
-
-void
-c_fortran_dgssv_(int *iopt, int *n, int *nnz, int *nrhs,
- double *values, int *rowind, int *colptr,
- double *b, int *ldb,
- fptr *f_factors, /* a handle containing the address
- pointing to the factored matrices */
- int *info)
-
-{
-/*
- * This routine can be called from Fortran.
- *
- * iopt (input) int
- * Specifies the operation:
- * = 1, performs LU decomposition for the first time
- * = 2, performs triangular solve
- * = 3, free all the storage in the end
- *
- * f_factors (input/output) fptr*
- * If iopt == 1, it is an output and contains the pointer pointing to
- * the structure of the factored matrices.
- * Otherwise, it it an input.
- *
- */
-
- SuperMatrix A, AC, B;
- SuperMatrix *L, *U;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree; /* column elimination tree */
- SCformat *Lstore;
- NCformat *Ustore;
- int i, panel_size, permc_spec, relax;
- trans_t trans;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- factors_t *LUfactors;
-
- trans = NOTRANS;
-
- if ( *iopt == 1 ) { /* LU decomposition */
-
- /* Set the default input options. */
- set_default_options(&options);
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Adjust to 0-based indexing */
- for (i = 0; i < *nnz; ++i) --rowind[i];
- for (i = 0; i <= *n; ++i) --colptr[i];
-
- dCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind, colptr,
- SLU_NC, SLU_D, SLU_GE);
- L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
-
- /*
- * Get column permutation vector perm_c[], according to permc_spec:
- * permc_spec = 0: natural ordering
- * permc_spec = 1: minimum degree on structure of A'*A
- * permc_spec = 2: minimum degree on structure of A'+A
- * permc_spec = 3: approximate minimum degree for unsymmetric matrices
- */
- permc_spec = options.ColPerm;
- get_perm_c(permc_spec, &A, perm_c);
-
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
-
- dgstrf(&options, &AC, relax, panel_size, etree,
- NULL, 0, perm_c, perm_r, L, U, &stat, info);
-
- if ( *info == 0 ) {
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- 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);
- dQuerySpace(L, U, &mem_usage);
- 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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- /* Restore to 1-based indexing */
- for (i = 0; i < *nnz; ++i) ++rowind[i];
- for (i = 0; i <= *n; ++i) ++colptr[i];
-
- /* Save the LU factors in the factors handle */
- LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
- LUfactors->L = L;
- LUfactors->U = U;
- LUfactors->perm_c = perm_c;
- LUfactors->perm_r = perm_r;
- *f_factors = (fptr) LUfactors;
-
- /* Free un-wanted storage */
- SUPERLU_FREE(etree);
- Destroy_SuperMatrix_Store(&A);
- Destroy_CompCol_Permuted(&AC);
- StatFree(&stat);
-
- } else if ( *iopt == 2 ) { /* Triangular solve */
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Extract the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- L = LUfactors->L;
- U = LUfactors->U;
- perm_c = LUfactors->perm_c;
- perm_r = LUfactors->perm_r;
-
- dCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_D, SLU_GE);
-
- /* Solve the system A*X=B, overwriting B with X. */
- dgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
-
- Destroy_SuperMatrix_Store(&B);
- StatFree(&stat);
-
- } else if ( *iopt == 3 ) { /* Free storage */
- /* Free the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- SUPERLU_FREE (LUfactors->perm_r);
- SUPERLU_FREE (LUfactors->perm_c);
- Destroy_SuperNode_Matrix(LUfactors->L);
- Destroy_CompCol_Matrix(LUfactors->U);
- SUPERLU_FREE (LUfactors->L);
- SUPERLU_FREE (LUfactors->U);
- SUPERLU_FREE (LUfactors);
- } else {
- fprintf(stderr,"Invalid iopt=%d passed to c_fortran_dgssv()\n",*iopt);
- exit(-1);
- }
-}
-
-
diff --git a/FORTRAN/c_fortran_dgssv.c.bak b/FORTRAN/c_fortran_dgssv.c.bak
deleted file mode 100644
index 284abef..0000000
--- a/FORTRAN/c_fortran_dgssv.c.bak
+++ /dev/null
@@ -1,175 +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 "dsp_defs.h"
-
-#define HANDLE_SIZE 8
-/* 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;
- SuperMatrix *U;
- int *perm_c;
- int *perm_r;
-} factors_t;
-
-void
-c_fortran_dgssv_(int *iopt, int *n, int *nnz, int *nrhs, double *values,
- int *rowind, int *colptr, double *b, int *ldb,
- fptr *f_factors, /* a handle containing the address
- pointing to the factored matrices */
- int *info)
-
-{
-/*
- * This routine can be called from Fortran.
- *
- * iopt (input) int
- * Specifies the operation:
- * = 1, performs LU decomposition for the first time
- * = 2, performs triangular solve
- * = 3, free all the storage in the end
- *
- * f_factors (input/output) fptr*
- * If iopt == 1, it is an output and contains the pointer pointing to
- * the structure of the factored matrices.
- * Otherwise, it it an input.
- *
- */
-
- SuperMatrix A, AC, B;
- SuperMatrix *L, *U;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree; /* column elimination tree */
- SCformat *Lstore;
- 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;
- factors_t *LUfactors;
-
- trans = NOTRANS;
-
- if ( *iopt == 1 ) { /* LU decomposition */
-
- /* Set the default input options. */
- set_default_options(&options);
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Adjust to 0-based indexing */
- for (i = 0; i < *nnz; ++i) --rowind[i];
- for (i = 0; i <= *n; ++i) --colptr[i];
-
- dCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind, colptr,
- SLU_NC, SLU_D, SLU_GE);
- L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
-
- /*
- * Get column permutation vector perm_c[], according to permc_spec:
- * permc_spec = 0: natural ordering
- * permc_spec = 1: minimum degree on structure of A'*A
- * permc_spec = 2: minimum degree on structure of A'+A
- * permc_spec = 3: approximate minimum degree for unsymmetric matrices
- */
- permc_spec = options.ColPerm;
- get_perm_c(permc_spec, &A, perm_c);
-
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- 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);
-
- if ( *info == 0 ) {
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- 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);
- 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);
- } 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);
- }
- }
-
- /* Restore to 1-based indexing */
- for (i = 0; i < *nnz; ++i) ++rowind[i];
- for (i = 0; i <= *n; ++i) ++colptr[i];
-
- /* Save the LU factors in the factors handle */
- LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
- LUfactors->L = L;
- LUfactors->U = U;
- LUfactors->perm_c = perm_c;
- LUfactors->perm_r = perm_r;
- *f_factors = (fptr) LUfactors;
-
- /* Free un-wanted storage */
- SUPERLU_FREE(etree);
- Destroy_SuperMatrix_Store(&A);
- Destroy_CompCol_Permuted(&AC);
- StatFree(&stat);
-
- } else if ( *iopt == 2 ) { /* Triangular solve */
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Extract the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- L = LUfactors->L;
- U = LUfactors->U;
- perm_c = LUfactors->perm_c;
- perm_r = LUfactors->perm_r;
-
- dCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_D, SLU_GE);
-
- /* Solve the system A*X=B, overwriting B with X. */
- dgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
-
- Destroy_SuperMatrix_Store(&B);
- StatFree(&stat);
-
- } else if ( *iopt == 3 ) { /* Free storage */
- /* Free the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- SUPERLU_FREE (LUfactors->perm_r);
- SUPERLU_FREE (LUfactors->perm_c);
- Destroy_SuperNode_Matrix(LUfactors->L);
- Destroy_CompCol_Matrix(LUfactors->U);
- SUPERLU_FREE (LUfactors->L);
- SUPERLU_FREE (LUfactors->U);
- SUPERLU_FREE (LUfactors);
- } else {
- fprintf(stderr,"Invalid iopt=%d passed to c_fortran_dgssv()\n",*iopt);
- exit(-1);
- }
-}
-
-
diff --git a/FORTRAN/c_fortran_dgssv.c.old b/FORTRAN/c_fortran_dgssv.c.old
deleted file mode 100644
index 7eb3fc6..0000000
--- a/FORTRAN/c_fortran_dgssv.c.old
+++ /dev/null
@@ -1,175 +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 "dsp_defs.h"
-
-#define HANDLE_SIZE 8
-/* 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;
- SuperMatrix *U;
- int *perm_c;
- int *perm_r;
-} factors_t;
-
-void
-c_fortran_dgssv_(int *iopt, int *n, int *nnz, int *nrhs, double *values,
- int *rowind, int *colptr, double *b, int *ldb,
- int factors[HANDLE_SIZE], /* a handle containing the pointer
- to the factored matrices */
- int *info)
-
-{
-/*
- * This routine can be called from Fortran.
- *
- * iopt (input) int
- * Specifies the operation:
- * = 1, performs LU decomposition for the first time
- * = 2, performs triangular solve
- * = 3, free all the storage in the end
- *
- * factors (input/output) int array of size 8
- * If iopt == 1, it is an output and contains the pointer pointing to
- * the structure of the factored matrices.
- * Otherwise, it it an input.
- *
- */
-
- SuperMatrix A, AC, B;
- SuperMatrix *L, *U;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree; /* column elimination tree */
- SCformat *Lstore;
- 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;
- factors_t *LUfactors;
-
- trans = NOTRANS;
-
- if ( *iopt == 1 ) { /* LU decomposition */
-
- /* Set the default input options. */
- set_default_options(&options);
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Adjust to 0-based indexing */
- for (i = 0; i < *nnz; ++i) --rowind[i];
- for (i = 0; i <= *n; ++i) --colptr[i];
-
- dCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind, colptr,
- SLU_NC, SLU_D, SLU_GE);
- L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
-
- /*
- * Get column permutation vector perm_c[], according to permc_spec:
- * permc_spec = 0: natural ordering
- * permc_spec = 1: minimum degree on structure of A'*A
- * permc_spec = 2: minimum degree on structure of A'+A
- * permc_spec = 3: approximate minimum degree for unsymmetric matrices
- */
- permc_spec = 3;
- get_perm_c(permc_spec, &A, perm_c);
-
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- 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);
-
- if ( *info == 0 ) {
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- 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);
- 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);
- } 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);
- }
- }
-
- /* Restore to 1-based indexing */
- for (i = 0; i < *nnz; ++i) ++rowind[i];
- for (i = 0; i <= *n; ++i) ++colptr[i];
-
- /* Save the LU factors in the factors handle */
- LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
- LUfactors->L = L;
- LUfactors->U = U;
- LUfactors->perm_c = perm_c;
- LUfactors->perm_r = perm_r;
- factors[0] = (int) LUfactors;
-
- /* Free un-wanted storage */
- SUPERLU_FREE(etree);
- Destroy_SuperMatrix_Store(&A);
- Destroy_CompCol_Permuted(&AC);
- StatFree(&stat);
-
- } else if ( *iopt == 2 ) { /* Triangular solve */
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Extract the LU factors in the factors handle */
- LUfactors = (factors_t*) factors[0];
- L = LUfactors->L;
- U = LUfactors->U;
- perm_c = LUfactors->perm_c;
- perm_r = LUfactors->perm_r;
-
- dCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_D, SLU_GE);
-
- /* Solve the system A*X=B, overwriting B with X. */
- dgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
-
- Destroy_SuperMatrix_Store(&B);
- StatFree(&stat);
-
- } else if ( *iopt == 3 ) { /* Free storage */
- /* Free the LU factors in the factors handle */
- LUfactors = (factors_t*) factors[0];
- SUPERLU_FREE (LUfactors->perm_r);
- SUPERLU_FREE (LUfactors->perm_c);
- Destroy_SuperNode_Matrix(LUfactors->L);
- Destroy_CompCol_Matrix(LUfactors->U);
- SUPERLU_FREE (LUfactors->L);
- SUPERLU_FREE (LUfactors->U);
- SUPERLU_FREE (LUfactors);
- } else {
- fprintf(stderr,"Invalid iopt=%d passed to c_fortran_dgssv()\n",*iopt);
- exit(-1);
- }
-}
-
-
diff --git a/FORTRAN/c_fortran_sgssv.c b/FORTRAN/c_fortran_sgssv.c
deleted file mode 100644
index 873833c..0000000
--- a/FORTRAN/c_fortran_sgssv.c
+++ /dev/null
@@ -1,174 +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_sdefs.h"
-
-#define HANDLE_SIZE 8
-/* 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;
- SuperMatrix *U;
- int *perm_c;
- int *perm_r;
-} factors_t;
-
-void
-c_fortran_sgssv_(int *iopt, int *n, int *nnz, int *nrhs,
- float *values, int *rowind, int *colptr,
- float *b, int *ldb,
- fptr *f_factors, /* a handle containing the address
- pointing to the factored matrices */
- int *info)
-
-{
-/*
- * This routine can be called from Fortran.
- *
- * iopt (input) int
- * Specifies the operation:
- * = 1, performs LU decomposition for the first time
- * = 2, performs triangular solve
- * = 3, free all the storage in the end
- *
- * f_factors (input/output) fptr*
- * If iopt == 1, it is an output and contains the pointer pointing to
- * the structure of the factored matrices.
- * Otherwise, it it an input.
- *
- */
-
- SuperMatrix A, AC, B;
- SuperMatrix *L, *U;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree; /* column elimination tree */
- SCformat *Lstore;
- NCformat *Ustore;
- int i, panel_size, permc_spec, relax;
- trans_t trans;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- factors_t *LUfactors;
-
- trans = NOTRANS;
-
- if ( *iopt == 1 ) { /* LU decomposition */
-
- /* Set the default input options. */
- set_default_options(&options);
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Adjust to 0-based indexing */
- for (i = 0; i < *nnz; ++i) --rowind[i];
- for (i = 0; i <= *n; ++i) --colptr[i];
-
- sCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind, colptr,
- SLU_NC, SLU_S, SLU_GE);
- L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
-
- /*
- * Get column permutation vector perm_c[], according to permc_spec:
- * permc_spec = 0: natural ordering
- * permc_spec = 1: minimum degree on structure of A'*A
- * permc_spec = 2: minimum degree on structure of A'+A
- * permc_spec = 3: approximate minimum degree for unsymmetric matrices
- */
- permc_spec = options.ColPerm;
- get_perm_c(permc_spec, &A, perm_c);
-
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
-
- sgstrf(&options, &AC, relax, panel_size, etree,
- NULL, 0, perm_c, perm_r, L, U, &stat, info);
-
- if ( *info == 0 ) {
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- 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);
- sQuerySpace(L, U, &mem_usage);
- 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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- /* Restore to 1-based indexing */
- for (i = 0; i < *nnz; ++i) ++rowind[i];
- for (i = 0; i <= *n; ++i) ++colptr[i];
-
- /* Save the LU factors in the factors handle */
- LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
- LUfactors->L = L;
- LUfactors->U = U;
- LUfactors->perm_c = perm_c;
- LUfactors->perm_r = perm_r;
- *f_factors = (fptr) LUfactors;
-
- /* Free un-wanted storage */
- SUPERLU_FREE(etree);
- Destroy_SuperMatrix_Store(&A);
- Destroy_CompCol_Permuted(&AC);
- StatFree(&stat);
-
- } else if ( *iopt == 2 ) { /* Triangular solve */
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Extract the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- L = LUfactors->L;
- U = LUfactors->U;
- perm_c = LUfactors->perm_c;
- perm_r = LUfactors->perm_r;
-
- sCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_S, SLU_GE);
-
- /* Solve the system A*X=B, overwriting B with X. */
- sgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
-
- Destroy_SuperMatrix_Store(&B);
- StatFree(&stat);
-
- } else if ( *iopt == 3 ) { /* Free storage */
- /* Free the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- SUPERLU_FREE (LUfactors->perm_r);
- SUPERLU_FREE (LUfactors->perm_c);
- Destroy_SuperNode_Matrix(LUfactors->L);
- Destroy_CompCol_Matrix(LUfactors->U);
- SUPERLU_FREE (LUfactors->L);
- SUPERLU_FREE (LUfactors->U);
- SUPERLU_FREE (LUfactors);
- } else {
- fprintf(stderr,"Invalid iopt=%d passed to c_fortran_sgssv()\n",*iopt);
- exit(-1);
- }
-}
-
-
diff --git a/FORTRAN/c_fortran_zgssv.c b/FORTRAN/c_fortran_zgssv.c
deleted file mode 100644
index ce43570..0000000
--- a/FORTRAN/c_fortran_zgssv.c
+++ /dev/null
@@ -1,174 +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"
-
-#define HANDLE_SIZE 8
-/* 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;
- SuperMatrix *U;
- int *perm_c;
- int *perm_r;
-} factors_t;
-
-void
-c_fortran_zgssv_(int *iopt, int *n, int *nnz, int *nrhs,
- doublecomplex *values, int *rowind, int *colptr,
- doublecomplex *b, int *ldb,
- fptr *f_factors, /* a handle containing the address
- pointing to the factored matrices */
- int *info)
-
-{
-/*
- * This routine can be called from Fortran.
- *
- * iopt (input) int
- * Specifies the operation:
- * = 1, performs LU decomposition for the first time
- * = 2, performs triangular solve
- * = 3, free all the storage in the end
- *
- * f_factors (input/output) fptr*
- * If iopt == 1, it is an output and contains the pointer pointing to
- * the structure of the factored matrices.
- * Otherwise, it it an input.
- *
- */
-
- SuperMatrix A, AC, B;
- SuperMatrix *L, *U;
- int *perm_r; /* row permutations from partial pivoting */
- int *perm_c; /* column permutation vector */
- int *etree; /* column elimination tree */
- SCformat *Lstore;
- NCformat *Ustore;
- int i, panel_size, permc_spec, relax;
- trans_t trans;
- mem_usage_t mem_usage;
- superlu_options_t options;
- SuperLUStat_t stat;
- factors_t *LUfactors;
-
- trans = NOTRANS;
-
- if ( *iopt == 1 ) { /* LU decomposition */
-
- /* Set the default input options. */
- set_default_options(&options);
-
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Adjust to 0-based indexing */
- for (i = 0; i < *nnz; ++i) --rowind[i];
- for (i = 0; i <= *n; ++i) --colptr[i];
-
- zCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind, colptr,
- SLU_NC, SLU_Z, SLU_GE);
- L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
- if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
- if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
- if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
-
- /*
- * Get column permutation vector perm_c[], according to permc_spec:
- * permc_spec = 0: natural ordering
- * permc_spec = 1: minimum degree on structure of A'*A
- * permc_spec = 2: minimum degree on structure of A'+A
- * permc_spec = 3: approximate minimum degree for unsymmetric matrices
- */
- permc_spec = options.ColPerm;
- get_perm_c(permc_spec, &A, perm_c);
-
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
-
- zgstrf(&options, &AC, relax, panel_size, etree,
- NULL, 0, perm_c, perm_r, L, U, &stat, info);
-
- if ( *info == 0 ) {
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- 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);
- zQuerySpace(L, U, &mem_usage);
- 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\n",
- mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
- }
- }
-
- /* Restore to 1-based indexing */
- for (i = 0; i < *nnz; ++i) ++rowind[i];
- for (i = 0; i <= *n; ++i) ++colptr[i];
-
- /* Save the LU factors in the factors handle */
- LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
- LUfactors->L = L;
- LUfactors->U = U;
- LUfactors->perm_c = perm_c;
- LUfactors->perm_r = perm_r;
- *f_factors = (fptr) LUfactors;
-
- /* Free un-wanted storage */
- SUPERLU_FREE(etree);
- Destroy_SuperMatrix_Store(&A);
- Destroy_CompCol_Permuted(&AC);
- StatFree(&stat);
-
- } else if ( *iopt == 2 ) { /* Triangular solve */
- /* Initialize the statistics variables. */
- StatInit(&stat);
-
- /* Extract the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- L = LUfactors->L;
- U = LUfactors->U;
- perm_c = LUfactors->perm_c;
- perm_r = LUfactors->perm_r;
-
- zCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_Z, SLU_GE);
-
- /* Solve the system A*X=B, overwriting B with X. */
- zgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
-
- Destroy_SuperMatrix_Store(&B);
- StatFree(&stat);
-
- } else if ( *iopt == 3 ) { /* Free storage */
- /* Free the LU factors in the factors handle */
- LUfactors = (factors_t*) *f_factors;
- SUPERLU_FREE (LUfactors->perm_r);
- SUPERLU_FREE (LUfactors->perm_c);
- Destroy_SuperNode_Matrix(LUfactors->L);
- Destroy_CompCol_Matrix(LUfactors->U);
- SUPERLU_FREE (LUfactors->L);
- SUPERLU_FREE (LUfactors->U);
- SUPERLU_FREE (LUfactors);
- } else {
- fprintf(stderr,"Invalid iopt=%d passed to c_fortran_zgssv()\n",*iopt);
- exit(-1);
- }
-}
-
-
diff --git a/FORTRAN/f77_main.f b/FORTRAN/f77_main.f
deleted file mode 100644
index 997f88e..0000000
--- a/FORTRAN/f77_main.f
+++ /dev/null
@@ -1,48 +0,0 @@
- program f77_main
- integer maxn, maxnz
- parameter ( maxn = 10000, maxnz = 100000 )
- integer rowind(maxnz), colptr(maxn)
- real*8 values(maxnz), b(maxn)
- integer n, nnz, nrhs, ldb, info, iopt
- integer*8 factors
-*
- call hbcode1(n, n, nnz, values, rowind, colptr)
-*
- nrhs = 1
- ldb = n
- do i = 1, n
- b(i) = 1
- enddo
-*
-* First, factorize the matrix. The factors are stored in *factors* handle.
- iopt = 1
- call c_fortran_dgssv( 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_dgssv( 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_dgssv( iopt, n, nnz, nrhs, values, rowind, colptr,
- $ b, ldb, factors, info )
-*
- stop
- end
-
-
diff --git a/FORTRAN/f77_main.f.old b/FORTRAN/f77_main.f.old
deleted file mode 100644
index aa7e429..0000000
--- a/FORTRAN/f77_main.f.old
+++ /dev/null
@@ -1,48 +0,0 @@
- program f77_main
- integer maxn, maxnz
- parameter ( maxn = 10000, maxnz = 100000 )
- integer rowind(maxnz), colptr(maxn)
- real*8 values(maxnz), b(maxn)
- integer n, nnz, nrhs, ldb, info
- integer factors(8), iopt
-*
- call hbcode1(n, n, nnz, values, rowind, colptr)
-*
- nrhs = 1
- ldb = n
- do i = 1, n
- b(i) = 1
- enddo
-*
-* First, factorize the matrix. The factors are stored in factor() handle.
- iopt = 1
- call c_fortran_dgssv( 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_dgssv( 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_dgssv( iopt, n, nnz, nrhs, values, rowind, colptr,
- $ b, ldb, factors, info )
-*
- stop
- end
-
-
diff --git a/FORTRAN/z_f77_main.f b/FORTRAN/z_f77_main.f
deleted file mode 100644
index aced69e..0000000
--- a/FORTRAN/z_f77_main.f
+++ /dev/null
@@ -1,50 +0,0 @@
- 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/INSTALL/Makefile b/INSTALL/Makefile
deleted file mode 100644
index a75e370..0000000
--- a/INSTALL/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-include ../make.inc
-
-all: testdlamch testslamch testtimer install.out
-
-testdlamch: dlamch.o lsame.o dlamchtst.o
- $(LOADER) $(LOADOPTS) -o testdlamch dlamch.o lsame.o dlamchtst.o
-
-testslamch: slamch.o lsame.o slamchtst.o
- $(LOADER) $(LOADOPTS) -o testslamch slamch.o lsame.o slamchtst.o
-
-testtimer: superlu_timer.o timertst.o
- $(LOADER) $(LOADOPTS) -o testtimer superlu_timer.o timertst.o
-
-install.out: install.csh
- @echo Testing machines parameters and timer
- csh install.csh
-
-slamch.o: slamch.c ; $(CC) -c $(NOOPTS) $<
-dlamch.o: dlamch.c ; $(CC) -c $(NOOPTS) $<
-superlu_timer.o: superlu_timer.c; $(CC) -c $(NOOPTS) $<
-
-.c.o:
- $(CC) $(CFLAGS) -c $<
-
-clean:
- rm -f *.o test* *.out
diff --git a/INSTALL/dlamchtst.c b/INSTALL/dlamchtst.c
deleted file mode 100644
index e589d23..0000000
--- a/INSTALL/dlamchtst.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <stdio.h>
-
-
-main()
-{
- /* Local variables */
- double base, emin, prec, emax, rmin, rmax, t, sfmin;
- extern double dlamch_(char *);
- double rnd, eps;
-
- eps = dlamch_("Epsilon");
- sfmin = dlamch_("Safe minimum");
- base = dlamch_("Base");
- prec = dlamch_("Precision");
- t = dlamch_("Number of digits in mantissa");
- rnd = dlamch_("Rounding mode");
- emin = dlamch_("Minnimum exponent");
- rmin = dlamch_("Underflow threshold");
- emax = dlamch_("Largest exponent");
- rmax = dlamch_("Overflow threshold");
-
- printf(" Epsilon = %e\n", eps);
- printf(" Safe minimum = %e\n", sfmin);
- printf(" Base = %.0f\n", base);
- printf(" Precision = %e\n", prec);
- printf(" Number of digits in mantissa = %.0f\n", t);
- printf(" Rounding mode = %.0f\n", rnd);
- printf(" Minimum exponent = %.0f\n", emin);
- printf(" Underflow threshold = %e\n", rmin);
- printf(" Largest exponent = %.0f\n", emax);
- printf(" Overflow threshold = %e\n", rmax);
- printf(" Reciprocal of safe minimum = %e\n", 1./sfmin);
- return 0;
-}
diff --git a/INSTALL/install.csh b/INSTALL/install.csh
deleted file mode 100755
index 57e9e74..0000000
--- a/INSTALL/install.csh
+++ /dev/null
@@ -1,14 +0,0 @@
-#! /bin/csh
-
-set ofile = install.out # output file
-
-echo '---- SINGLE PRECISION' >! $ofile
-./testslamch >> $ofile
-echo '' >> $ofile
-echo ---- DOUBLE PRECISION >> $ofile
-./testdlamch >> $ofile
-echo '' >> $ofile
-echo ---- TIMER >> $ofile
-./testtimer >> $ofile
-
-
diff --git a/MAKE_INC/make.alpha b/MAKE_INC/make.alpha
deleted file mode 100644
index 18edf24..0000000
--- a/MAKE_INC/make.alpha
+++ /dev/null
@@ -1,49 +0,0 @@
-############################################################################
-#
-# 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 = _alpha
-
-#
-# The name of the libraries to be created/linked to
-#
-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)
-# If your system has no ranlib, set RANLIB = echo.
-#
-ARCH = ar
-ARCHFLAGS = cr
-RANLIB = ranlib
-
-CC = cc
-CFLAGS = -O2
-NOOPTS =
-FORTRAN = f77
-FFLAGS = -O
-LOADER = ${CC}
-LOADOPTS = -O2
-#
-# The directory in which Matlab is installed
-#
-MATLAB = /usr/sww/matlab
diff --git a/MAKE_INC/make.altix b/MAKE_INC/make.altix
deleted file mode 100644
index 3c38206..0000000
--- a/MAKE_INC/make.altix
+++ /dev/null
@@ -1,58 +0,0 @@
-############################################################################
-#
-# 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 = _Altix
-
-#
-# The name of the libraries to be created/linked to
-#
-SuperLUroot = $(HOME)/Codes/SuperLU_4.3
-SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_4.3.a
-
-BLASDEF = -DUSE_VENDOR_BLAS
-#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)
-# If your system has no ranlib, set RANLIB = echo.
-#
-ARCH = ar
-ARCHFLAGS = cr
-RANLIB = ranlib
-
-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 (-DNoChange, -DAdd_, or -DUpCase)
-#
-CDEFS = -DAdd_
-#
-# The directory in which Matlab is installed
-#
-MATLAB = /usr/common/usg/matlab/7.1.0.R14
diff --git a/MAKE_INC/make.cray b/MAKE_INC/make.cray
deleted file mode 100644
index 1e1cc03..0000000
--- a/MAKE_INC/make.cray
+++ /dev/null
@@ -1,56 +0,0 @@
-############################################################################
-#
-# Program: SuperLU
-#
-# Module: make.inc
-#
-# Purpose: Top-level Definitions
-#
-# Creation date: November 15, 1997 Version 1.1
-#
-# Modified: September 1, 1999 Version 2.0
-#
-############################################################################
-#
-# The machine (platform) identifier to append to the library names
-#
-PLAT = _cray
-
-#
-# The name of the libraries to be created/linked to
-#
-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)
-# If your system has no ranlib, set RANLIB = echo.
-#
-ARCH = ar
-ARCHFLAGS = cr
-RANLIB = ranlib
-
-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}
-LOADOPTS =
-#
-# C preprocessor defs for compilation for the Fortran interface
-# (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
-#
-CDEFS = -DUpCase
-#
-# The directory in which Matlab is installed
-#
-MATLAB = /usr/local/matlab
diff --git a/MAKE_INC/make.hppa b/MAKE_INC/make.hppa
deleted file mode 100644
index cb6a9a2..0000000
--- a/MAKE_INC/make.hppa
+++ /dev/null
@@ -1,58 +0,0 @@
-############################################################################
-#
-# 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 = _hppa
-
-#
-# The name of the libraries to be created/linked to
-#
-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)
-# If your system has no ranlib, set RANLIB = echo.
-#
-ARCH = ar
-ARCHFLAGS = cr
-RANLIB = echo
-#
-# Compiler and optimization
-#
-CC = gcc
-CFLAGS = -O3
-NOOPTS =
-FORTRAN = f77
-FFLAGS = -O
-LOADER = ${CC}
-LOADOPTS = -O3
-#
-# C preprocessor defs for compilation for the Fortran interface
-# (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
-#
-CDEFS = -DNoChange
-#
-# The directory in which Matlab is installed
-#
-MATLAB = /usr/sww/matlab
-
diff --git a/MAKE_INC/make.linux b/MAKE_INC/make.linux
deleted file mode 100644
index bdebc3f..0000000
--- a/MAKE_INC/make.linux
+++ /dev/null
@@ -1,65 +0,0 @@
-############################################################################
-#
-# 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
-#
-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)
-# If your system has no ranlib, set RANLIB = echo.
-#
-ARCH = ar
-ARCHFLAGS = cr
-RANLIB = ranlib
-
-CC = gcc
-CFLAGS = -O3
-NOOPTS =
-FORTRAN = g77
-FFLAGS = -O2
-LOADER = $(CC)
-LOADOPTS =
-
-#
-# 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/matlab
-
diff --git a/MAKE_INC/make.mac-x b/MAKE_INC/make.mac-x
deleted file mode 100644
index 69bc7ce..0000000
--- a/MAKE_INC/make.mac-x
+++ /dev/null
@@ -1,55 +0,0 @@
-############################################################################
-#
-# 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
deleted file mode 100644
index e1d0009..0000000
--- a/MAKE_INC/make.rs6k
+++ /dev/null
@@ -1,61 +0,0 @@
-############################################################################
-#
-# 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 = _rs6k
-
-#
-# The name of the libraries to be created/linked to
-#
-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
-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 = xlc
-CFLAGS = -O3
-NOOPTS =
-FORTRAN = xlf
-FFLAGS = -O3
-LOADER = $(CC)
-LOADOPTS = -bmaxdata:0x80000000
-#
-# C preprocessor defs for compilation for the Fortran interface
-# (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
-#
-CDEFS = -DNoChange
-#
-# The directory in which Matlab is installed
-#
-MATLAB = /usr/local/matlab
-
-
diff --git a/MAKE_INC/make.sgi b/MAKE_INC/make.sgi
deleted file mode 100644
index eaaec2c..0000000
--- a/MAKE_INC/make.sgi
+++ /dev/null
@@ -1,53 +0,0 @@
-############################################################################
-#
-# 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 = _sgi
-
-#
-# 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 = echo
-
-CC = cc
-CFLAGS = -O2
-NOOPTS =
-FORTRAN = f77
-FFLAGS = -O
-LOADER = $(CC)
-LOADOPTS =
-#
-# 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/local/matlab
diff --git a/MAKE_INC/make.solaris b/MAKE_INC/make.solaris
deleted file mode 100644
index 44873ea..0000000
--- a/MAKE_INC/make.solaris
+++ /dev/null
@@ -1,54 +0,0 @@
-############################################################################
-#
-# 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 = _solaris
-
-#
-# 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 = cc
-CFLAGS = -xO3 -xcg92
-NOOPTS =
-FORTRAN = f77
-FFLAGS = -O
-LOADER = $(CC)
-LOADOPTS = -xO3
-
-#
-# 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
diff --git a/MAKE_INC/make.sp b/MAKE_INC/make.sp
deleted file mode 100644
index d37076a..0000000
--- a/MAKE_INC/make.sp
+++ /dev/null
@@ -1,62 +0,0 @@
-############################################################################
-#
-# 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 = _sp
-
-#
-# The name of the libraries to be created/linked to
-#
-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
-
-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 = xlc
-CFLAGS = -O3 -qarch=pwr3 -qalias=allptrs
-NOOPTS =
-FORTRAN = xlf
-FFLAGS = -O3 -qarch=pwr3
-LOADER = $(CC)
-LOADOPTS = -bmaxdata:0x80000000
-#
-# C preprocessor defs for compilation for the Fortran interface
-# (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
-#
-CDEFS = -DNoChange
-#
-# The directory in which Matlab is installed
-#
-MATLAB = /usr/local/matlab
-
-
diff --git a/MAKE_INC/make.sun4 b/MAKE_INC/make.sun4
deleted file mode 100644
index bebbcca..0000000
--- a/MAKE_INC/make.sun4
+++ /dev/null
@@ -1,59 +0,0 @@
-############################################################################
-#
-# 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 = _sun4
-
-#
-# 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
-#
-# Compiler and optimization
-#
-CC = gcc
-CFLAGS = -O3
-NOOPTS =
-FORTRAN = f77
-FFLAGS = -O
-LOADER = $(CC)
-LOADOPTS = -O3
-
-#
-# 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
-
-
-
diff --git a/MATLAB/mexlusolve.c b/MATLAB/mexlusolve.c
deleted file mode 100644
index b0be6f6..0000000
--- a/MATLAB/mexlusolve.c
+++ /dev/null
@@ -1,153 +0,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"
-
-#define MatlabMatrix mxArray
-
-#if 0 /* V4 */
-#define MatlabMatrix Matrix
-#endif
-
-
-/* Aliases for input and output arguments */
-#define A_in prhs[0]
-#define b_in prhs[1]
-#define Pc_in prhs[2]
-#define x_out plhs[0]
-
-#define verbose (SPUMONI>0)
-#define babble (SPUMONI>1)
-#define burble (SPUMONI>2)
-
-void mexFunction(
- int nlhs, /* number of expected outputs */
- MatlabMatrix *plhs[], /* matrix pointer array returning outputs */
- int nrhs, /* number of inputs */
- const MatlabMatrix *prhs[] /* matrix pointer array for inputs. */
-#if 0 /* V4 */
- MatlabMatrix *prhs[] /* matrix pointer array for inputs */
-#endif
- )
-{
- int SPUMONI; /* ... as should the sparse monitor flag */
- double FlopsInSuperLU; /* ... as should the flop counter. */
- extern flops_t LUFactFlops(SuperLUStat_t*);
- extern flops_t LUSolveFlops(SuperLUStat_t*);
-
- /* Arguments to dgssv(). */
- SuperMatrix A;
- SuperMatrix B;
- SuperMatrix L, U;
- int m, n, nnz;
- int numrhs;
- double *vb, *x;
- double *val;
- 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;
- superlu_options_t options;
- SuperLUStat_t stat;
-
- /* Check number of arguments passed from Matlab. */
- if (nrhs != 3) {
- mexErrMsgTxt("LUSOLVE requires 3 input arguments.");
- } else if (nlhs != 1) {
- mexErrMsgTxt("LUSOLVE requires 1 output argument.");
- }
-
- /* Read the Sparse Monitor Flag */
- X = mxCreateString("spumoni");
- mexerr = mexCallMATLAB(1, &Y, 1, &X, "sparsfun");
- SPUMONI = mxGetScalar(Y);
- mxDestroyArray(Y);
- mxDestroyArray(X);
-#if 0 /* V4 */
- mxFreeMatrix(Y);
- mxFreeMatrix(X);
-#endif
-
- m = mxGetM(A_in);
- n = mxGetN(A_in);
- numrhs = mxGetN(b_in);
- if ( babble ) printf("m=%d, n=%d, numrhs=%d\n", m, n, numrhs);
- vb = mxGetPr(b_in);
- x_out = mxCreateDoubleMatrix(m, numrhs, mxREAL);
-
- 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 = (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);
- dCopy_Dense_Matrix(m, numrhs, vb, m, x, m);
- dCreate_Dense_Matrix(&B, m, numrhs, x, m, SLU_DN, SLU_D, SLU_GE);
-
- FlopsInSuperLU = 0;
-
- set_default_options(&options);
- options.ColPerm = MY_PERMC;
- StatInit(&stat);
-
- /* Call simple driver */
- if ( verbose )
- mexPrintf("Call LUSOLVE, use SUPERLU to factor first ...\n");
- dgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
-
-#if 0 /* FLOPS is not available in the new Matlab. */
- /* Tell Matlab how many flops we did. */
- FlopsInSuperLU += LUFactFlops(&stat) + LUSolveFlops(&stat);
- if ( verbose ) mexPrintf("LUSOLVE flops: %.f\n", FlopsInSuperLU);
- mexerr = mexCallMATLAB(1, &X, 0, NULL, "flops");
- *(mxGetPr(X)) += FlopsInSuperLU;
- mexerr = mexCallMATLAB(1, &Y, 1, &X, "flops");
- mxDestroyArray(Y);
- mxDestroyArray(X);
-#endif
-
- /* Construct Matlab solution matrix. */
- if ( !info ) {
- Destroy_SuperNode_Matrix(&L);
- 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
deleted file mode 100644
index 08fe3fd..0000000
--- a/MATLAB/mexsuperlu.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * -- SuperLU routine (version 4.2) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * June 30, 2009
- *
- * Modified: September 25, 2011, compatible with 64-bit integer in R2006b
- */
-#include <stdio.h>
-#include "mex.h"
-#include "matrix.h"
-
-#include "slu_ddefs.h"
-
-#define MatlabMatrix mxArray
-
-
-/* Aliases for input and output arguments */
-#define A_in prhs[0]
-#define Pc_in prhs[1]
-#define L_out plhs[0]
-#define U_out plhs[1]
-#define Pr_out plhs[2]
-#define Pc_out plhs[3]
-
-void LUextract(SuperMatrix *, SuperMatrix *, double *, mwIndex *, mwIndex *,
- double *, mwIndex *, mwIndex *, int *, int*);
-
-#define verbose (SPUMONI>0)
-#define babble (SPUMONI>1)
-#define burble (SPUMONI>2)
-
-void mexFunction(
- int nlhs, /* number of expected outputs */
- MatlabMatrix *plhs[], /* matrix pointer array returning outputs */
- int nrhs, /* number of inputs */
- const MatlabMatrix *prhs[] /* matrix pointer array for inputs */
- )
-{
- int SPUMONI; /* ... as should the sparse monitor flag */
- double FlopsInSuperLU; /* ... as should the flop counter */
- extern flops_t LUFactFlops(SuperLUStat_t *);
-
- /* Arguments to C dgstrf(). */
- SuperMatrix A;
- SuperMatrix Ac; /* Matrix postmultiplied by Pc */
- SuperMatrix L, U;
- int m, n, nnz;
- double *val;
- 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 */
- int info;
- MatlabMatrix *X, *Y; /* args to calls back to Matlab */
- int i, mexerr;
- double *dp;
- 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;
-
- /* Check number of arguments passed from Matlab. */
- if (nrhs != 2) {
- mexErrMsgTxt("SUPERLU requires 2 input arguments.");
- } else if (nlhs != 4) {
- mexErrMsgTxt("SUPERLU requires 4 output arguments.");
- }
-
- /* Read the Sparse Monitor Flag */
- X = mxCreateString("spumoni");
- mexerr = mexCallMATLAB(1, &Y, 1, &X, "sparsfun");
- SPUMONI = mxGetScalar(Y);
- mxDestroyArray(Y);
- mxDestroyArray(X);
-
- 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 = (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;
- FlopsInSuperLU = 0;
-
- set_default_options(&options);
- StatInit(&stat);
-
- if ( verbose ) mexPrintf("Apply column perm to A and compute etree...\n");
- sp_preorder(&options, &A, perm_c, etree, &Ac);
-
- if ( verbose ) {
- mexPrintf("LU factorization...\n");
- mexPrintf("\tpanel_size %d, relax %d, diag_pivot_thresh %.2g\n",
- panel_size, relax, thresh);
- }
-
- 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);
-
-#if 0 /* FLOPS is not available in the new Matlab. */
- /* Tell Matlab how many flops we did. */
- FlopsInSuperLU += LUFactFlops(&stat);
- if (verbose) mexPrintf("SUPERLU flops: %.f\n", FlopsInSuperLU);
- mexerr = mexCallMATLAB(1, &X, 0, NULL, "flops");
- *(mxGetPr(X)) += FlopsInSuperLU;
- mexerr = mexCallMATLAB(1, &Y, 1, &X, "flops");
- mxDestroyArray(Y);
- mxDestroyArray(X);
-#endif
-
- /* Construct output arguments for Matlab. */
- if ( info >= 0 && info <= n ) {
- Pr_out = mxCreateDoubleMatrix(m, 1, mxREAL); /* output row perm */
- dp = mxGetPr(Pr_out);
- for (i = 0; i < m; *dp++ = (double) perm_r[i++]+1);
-
- Pc_out = mxCreateDoubleMatrix(n, 1, mxREAL); /* output col perm */
- dp = mxGetPr(Pc_out);
- 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;
- L_out = mxCreateSparse(m, n, nnzL, mxREAL);
- Lval = mxGetPr(L_out);
- Lrow_64 = mxGetIr(L_out);
- Lcol_64 = mxGetJc(L_out);
- U_out = mxCreateSparse(m, n, nnzU, mxREAL);
- Uval = mxGetPr(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]);
- }
-
- Destroy_CompCol_Permuted(&Ac);
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
-
- if (verbose) mexPrintf("factor nonzeros: %d unsqueezed, %d squeezed.\n",
- nnzL + nnzU, snnzL + snnzU);
- } else {
- mexErrMsgTxt("Error returned from C dgstrf().");
- }
-
- mxFree(etree);
- mxFree(perm_r);
- mxFree(perm_c);
- mxFree(rowind);
- mxFree(colptr);
-
- StatFree(&stat);
-
- return;
-}
-
-void
-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;
- int fsupc, istart, nsupr;
- int lastl = 0, lastu = 0;
- SCformat *Lstore;
- NCformat *Ustore;
- double *SNptr;
-
- Lstore = L->Store;
- Ustore = U->Store;
- Lcol[0] = 0;
- Ucol[0] = 0;
-
- /* for each supernode */
- for (k = 0; k <= Lstore->nsuper; ++k) {
-
- fsupc = L_FST_SUPC(k);
- istart = L_SUB_START(fsupc);
- nsupr = L_SUB_START(fsupc+1) - istart;
- upper = 1;
-
- /* for each column in the supernode */
- for (j = fsupc; j < L_FST_SUPC(k+1); ++j) {
- SNptr = &((double*)Lstore->nzval)[L_NZ_START(j)];
-
- /* Extract U */
- 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++] = (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++] = (mwIndex)L_SUB(istart+i);
- }
- Ucol[j+1] = lastu;
-
- /* Extract L */
- Lval[lastl] = 1.0; /* unit diagonal */
- Lrow[lastl++] = L_SUB(istart + upper - 1);
- for (i = upper; i < nsupr; ++i) {
- Lval[lastl] = SNptr[i];
- /* Matlab doesn't like explicit zero. */
- if (Lval[lastl] != 0.0) Lrow[lastl++] = (mwIndex)L_SUB(istart+i);
- }
- Lcol[j+1] = lastl;
-
- ++upper;
-
- } /* for j ... */
-
- } /* for k ... */
-
- *snnzL = lastl;
- *snnzU = lastu;
-}
diff --git a/README b/README
deleted file mode 100644
index e99e99a..0000000
--- a/README
+++ /dev/null
@@ -1,159 +0,0 @@
- SuperLU (Version 4.1)
- =====================
-
-Copyright (c) 2003, The Regents of the University of California, through
-Lawrence Berkeley National Laboratory (subject to receipt of any required
-approvals from U.S. Dept. of Energy)
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-(1) Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-(2) Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-(3) Neither the name of Lawrence Berkeley National Laboratory, U.S. Dept. of
-Energy nor the names of its contributors may be used to endorse or promote
-products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-SuperLU contains a set of subroutines to solve a sparse linear system
-A*X=B. It uses Gaussian elimination with partial pivoting (GEPP).
-The columns of A may be preordered before factorization; the
-preordering for sparsity is completely separate from the factorization.
-
-SuperLU is implemented in ANSI C, and must be compiled with standard
-ANSI C compilers. It provides functionality for both real and complex
-matrices, in both single and double precision. The file names for the
-single-precision real version start with letter "s" (such as sgstrf.c);
-the file names for the double-precision real version start with letter "d"
-(such as dgstrf.c); the file names for the single-precision complex
-version start with letter "c" (such as cgstrf.c); the file names
-for the double-precision complex version start with letter "z"
-(such as zgstrf.c).
-
-
-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.
- SuperLU/MAKE_INC/ sample machine-specific make.inc files
- SuperLU/MATLAB/ Matlab mex-file interface
- SuperLU/SRC/ C source code, to be compiled into the superlu.a library
- SuperLU/TESTING/ driver routines to test correctness
- SuperLU/Makefile top level Makefile that does installation and testing
- SuperLU/make.inc compiler, compile flags, library definitions and C
- preprocessor definitions, included in all Makefiles.
- (You may need to edit it to be suitable for your system
- before compiling the whole package.)
-
-
-Before installing the package, please examine the three things dependent
-on your system setup:
-
-1. Edit the make.inc include file.
- This make include file is referenced inside each of the Makefiles
- in the various subdirectories. As a result, there is no need to
- edit the Makefiles in the subdirectories. All information that is
- 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 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 linux, you can do
-
- 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.
-
-2. The BLAS library.
- If there is BLAS library available on your machine, you may define
- the following in the file SuperLU/make.inc:
- BLASDEF = -DUSE_VENDOR_BLAS
- BLASLIB = <BLAS library you wish to link with>
-
- The CBLAS/ subdirectory contains the part of the C BLAS needed by
- SuperLU package. However, these codes are intended for use only if there
- is no faster implementation of the BLAS already available on your machine.
- In this case, you should do the following:
-
- 1) In SuperLU/make.inc, undefine (comment out) BLASDEF, and define:
- BLASLIB = ../lib/blas$(PLAT).a
-
- 2) Go to the SuperLU/ directory, type:
- make blaslib
- to make the BLAS library from the routines in the CBLAS/ subdirectory.
-
-3. C preprocessor definition CDEFS.
- In the header file SRC/slu_Cnames.h, we use macros to determine how
- C routines should be named so that they are callable by Fortran.
- (Some vendor-supplied BLAS libraries do not have C interface. So the
- re-naming is needed in order for the SuperLU BLAS calls (in C) to
- interface with the Fortran-style BLAS.)
- The possible options for CDEFS are:
-
- o -DAdd_: Fortran expects a C routine to have an underscore
- postfixed to the name;
- o -DNoChange: Fortran expects a C routine name to be identical to
- that compiled by C;
- o -DUpCase: Fortran expects a C routine name to be all uppercase.
-
-4. The Matlab MEX-file interface.
- The MATLAB/ subdirectory includes Matlab C MEX-files, so that
- our factor and solve routines can be called as alternatives to those
- built into Matlab. In the file SuperLU/make.inc, define MATLAB to be the
- directory in which Matlab is installed on your system, for example:
-
- MATLAB = /usr/local/matlab
-
- At the SuperLU/ directory, type "make matlabmex" to build the MEX-file
- interface. After you have built the interface, you may go to the MATLAB/
- directory to test the correctness by typing (in Matlab):
- trysuperlu
- trylusolve
-
-A Makefile is provided in each subdirectory. The installation can be done
-completely automatically by simply typing "make" at the top level.
-The test results are in the files below:
- INSTALL/install.out
- TESTING/stest.out
- TESTING/dtest.out
- TESTING/ctest.out
- TESTING/ztest.out
-
-
---------------------
-| 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
deleted file mode 100644
index 9f8f550..0000000
--- a/SRC/Makefile
+++ /dev/null
@@ -1,152 +0,0 @@
-# makefile for sparse supernodal LU, implemented in ANSI C
-include ../make.inc
-
-#######################################################################
-# This is the makefile to create a library for SuperLU.
-# The files are organized as follows:
-#
-# ALLAUX -- Auxiliary routines called from all precisions of SuperLU
-# LAAUX -- LAPACK auxiliary routines called from all precisions
-# SLASRC -- LAPACK single precision real routines
-# DLASRC -- LAPACK double precision real routines
-# CLASRC -- LAPACK single precision complex routines
-# ZLASRC -- LAPACK double precision complex routines
-# SCLAUX -- LAPACK Auxiliary routines called from both real and complex
-# DZLAUX -- LAPACK Auxiliary routines called from both double precision
-# and complex*16
-# SLUSRC -- Single precision real SuperLU routines
-# DLUSRC -- Double precision real SuperLU routines
-# CLUSRC -- Single precision complex SuperLU routines
-# ZLUSRC -- Double precision complex SuperLU routines
-#
-# The library can be set up to include routines for any combination
-# of the four precisions. To create or add to the library, enter make
-# followed by one or more of the precisions desired. Some examples:
-# make single
-# make single double
-# make single double complex complex16
-# Alternatively, the command
-# make
-# without any arguments creates a library of all four precisions.
-# The library is called
-# superlu.a
-# and is created at the next higher directory level.
-#
-# To remove the object files after the library is created, enter
-# make clean
-#
-#######################################################################
-
-### LAPACK
-LAAUX = lsame.o xerbla.o
-SLASRC = slacon.o
-DLASRC = dlacon.o
-CLASRC = clacon.o scsum1.o icmax1.o
-ZLASRC = zlacon.o dzsum1.o izmax1.o
-SCLAUX = slamch.o
-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 \
- ilu_relax_snode.o ilu_heap_relax_snode.o mark_relax.o \
- mc64ad.o qselect.o
-
-SLUSRC = \
- sgssv.o sgssvx.o \
- ssp_blas2.o ssp_blas3.o sgscon.o \
- 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 sreadrb.o sreadtriple.o \
- scolumn_dfs.o scolumn_bmod.o spivotL.o spruneL.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 dreadrb.o dreadtriple.o \
- dcolumn_dfs.o dcolumn_bmod.o dpivotL.o dpruneL.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 creadrb.o creadtriple.o \
- ccolumn_dfs.o ccolumn_bmod.o cpivotL.o cpruneL.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 zreadrb.o zreadtriple.o \
- zcolumn_dfs.o zcolumn_bmod.o zpivotL.o zpruneL.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) \
- $(SLUSRC) $(ALLAUX) $(LAAUX) $(SLASRC) $(SCLAUX)
- $(RANLIB) $(SUPERLULIB)
-
-double: $(DLUSRC) $(ALLAUX) $(LAAUX) $(DLASRC) $(DZLAUX)
- $(ARCH) $(ARCHFLAGS) $(SUPERLULIB) \
- $(DLUSRC) $(ALLAUX) $(LAAUX) $(DLASRC) $(DZLAUX)
- $(RANLIB) $(SUPERLULIB)
-
-complex: $(CLUSRC) $(ALLAUX) $(LAAUX) $(CLASRC) $(SCLAUX)
- $(ARCH) $(ARCHFLAGS) $(SUPERLULIB) \
- $(CLUSRC) $(ALLAUX) $(LAAUX) $(CLASRC) $(SCLAUX)
- $(RANLIB) $(SUPERLULIB)
-
-complex16: $(ZLUSRC) $(ALLAUX) $(LAAUX) $(ZLASRC) $(DZLAUX)
- $(ARCH) $(ARCHFLAGS) $(SUPERLULIB) \
- $(ZLUSRC) $(ALLAUX) $(LAAUX) $(ZLASRC) $(DZLAUX)
- $(RANLIB) $(SUPERLULIB)
-
-
-##################################
-# Do not optimize these routines #
-##################################
-slamch.o: slamch.c ; $(CC) -c $(NOOPTS) $(CDEFS) $<
-dlamch.o: dlamch.c ; $(CC) -c $(NOOPTS) $(CDEFS) $<
-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 $(SUPERLULIB)
diff --git a/SRC/ccolumn_bmod.c b/SRC/ccolumn_bmod.c
deleted file mode 100644
index d20e95c..0000000
--- a/SRC/ccolumn_bmod.c
+++ /dev/null
@@ -1,365 +0,0 @@
-
-/*! @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.
- * </pre>
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "slu_cdefs.h"
-
-/*
- * Function prototypes
- */
-void cusolve(int, int, complex*, complex*);
-void clsolve(int, int, complex*, complex*);
-void cmatvec(int, int, int, complex*, complex*, complex*);
-
-
-
-/*! \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 (
- const int jcol, /* in */
- const int nseg, /* in */
- complex *dense, /* in */
- complex *tempv, /* working array */
- int *segrep, /* in */
- int *repfnz, /* in */
- int fpanelc, /* in -- first column in the current panel */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- complex alpha, beta;
-
- /* krep = representative of current k-th supernode
- * fsupc = first supernodal column
- * nsupc = no of columns in supernode
- * nsupr = no of rows in supernode (used as leading dimension)
- * luptr = location of supernodal LU-block in storage
- * kfnz = first nonz in the k-th supernodal segment
- * no_zeros = no of leading zeros in a supernodal U-segment
- */
- complex ukj, ukj1, ukj2;
- int luptr, luptr1, luptr2;
- int fsupc, nsupc, nsupr, segsze;
- int nrow; /* No of rows in the matrix of matrix-vector */
- int jcolp1, jsupno, k, ksub, krep, krep_ind, ksupno;
- register int lptr, kfnz, isub, irow, i;
- register int no_zeros, new_next;
- int ufirst, nextlu;
- int fst_col; /* First column within small LU update */
- int d_fsupc; /* Distance between the first column of the current
- panel and the first column of the current snode. */
- int *xsup, *supno;
- int *lsub, *xlsub;
- complex *lusup;
- int *xlusup;
- int nzlumax;
- complex *tempv1;
- complex zero = {0.0, 0.0};
- complex one = {1.0, 0.0};
- complex none = {-1.0, 0.0};
- complex comp_temp, comp_temp1;
- int mem_error;
- flops_t *ops = stat->ops;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
- nzlumax = Glu->nzlumax;
- jcolp1 = jcol + 1;
- jsupno = supno[jcol];
-
- /*
- * For each nonz supernode segment of U[*,j] in topological order
- */
- k = nseg - 1;
- for (ksub = 0; ksub < nseg; ksub++) {
-
- krep = segrep[k];
- k--;
- ksupno = supno[krep];
- if ( jsupno != ksupno ) { /* Outside the rectangular supernode */
-
- fsupc = xsup[ksupno];
- fst_col = SUPERLU_MAX ( fsupc, fpanelc );
-
- /* Distance from the current supernode to the current panel;
- d_fsupc=0 if fsupc > fpanelc. */
- d_fsupc = fst_col - fsupc;
-
- luptr = xlusup[fst_col] + d_fsupc;
- lptr = xlsub[fsupc] + d_fsupc;
-
- kfnz = repfnz[krep];
- kfnz = SUPERLU_MAX ( kfnz, fpanelc );
-
- segsze = krep - kfnz + 1;
- nsupc = krep - fst_col + 1;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
- nrow = nsupr - d_fsupc - nsupc;
- krep_ind = lptr + nsupc - 1;
-
-
-
-
- /*
- * Case 1: Update U-segment of size 1 -- col-col update
- */
- if ( segsze == 1 ) {
- ukj = dense[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- cc_mult(&comp_temp, &ukj, &lusup[luptr]);
- c_sub(&dense[irow], &dense[irow], &comp_temp);
- luptr++;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- ukj1 = dense[lsub[krep_ind - 1]];
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) { /* Case 2: 2cols-col update */
- cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- c_sub(&ukj, &ukj, &comp_temp);
- dense[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++;
- luptr1++;
- cc_mult(&comp_temp, &ukj, &lusup[luptr]);
- cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- c_sub(&dense[irow], &dense[irow], &comp_temp);
- }
- } else { /* Case 3: 3cols-col update */
- ukj2 = dense[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- cc_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
- c_sub(&ukj1, &ukj1, &comp_temp);
-
- cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- c_sub(&ukj, &ukj, &comp_temp);
-
- dense[lsub[krep_ind]] = ukj;
- dense[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++;
- luptr1++;
- luptr2++;
- cc_mult(&comp_temp, &ukj, &lusup[luptr]);
- cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- c_sub(&dense[irow], &dense[irow], &comp_temp);
- }
- }
-
-
- } else {
- /*
- * Case: sup-col update
- * Perform a triangular solve and block update,
- * then scatter the result of sup-col update to dense
- */
-
- no_zeros = kfnz - fst_col;
-
- /* Copy U[*,j] segment from dense[*] to tempv[*] */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- tempv[i] = dense[irow];
- ++isub;
- }
-
- /* Dense triangular solve -- start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#else
- ctrsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#endif
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- CGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#else
- cgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#endif
-#else
- clsolve ( nsupr, segsze, &lusup[luptr], tempv );
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- cmatvec (nsupr, nrow , segsze, &lusup[luptr], tempv, tempv1);
-#endif
-
-
- /* Scatter tempv[] into SPA dense[] as a temporary storage */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense[irow] = tempv[i];
- tempv[i] = zero;
- ++isub;
- }
-
- /* Scatter tempv1[] into SPA dense[] */
- for (i = 0; i < nrow; i++) {
- irow = lsub[isub];
- c_sub(&dense[irow], &dense[irow], &tempv1[i]);
- tempv1[i] = zero;
- ++isub;
- }
- }
-
- } /* if jsupno ... */
-
- } /* for each segment... */
-
- /*
- * Process the supernodal portion of L\U[*,j]
- */
- nextlu = xlusup[jcol];
- fsupc = xsup[jsupno];
-
- /* Copy the SPA dense into L\U[*,j] */
- new_next = nextlu + xlsub[fsupc+1] - xlsub[fsupc];
- while ( new_next > nzlumax ) {
- if (mem_error = cLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, Glu))
- return (mem_error);
- lusup = Glu->lusup;
- lsub = Glu->lsub;
- }
-
- for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
- irow = lsub[isub];
- lusup[nextlu] = dense[irow];
- dense[irow] = zero;
- ++nextlu;
- }
-
- xlusup[jcolp1] = nextlu; /* Close L\U[*,jcol] */
-
- /* For more updates within the panel (also within the current supernode),
- * should start from the first column of the panel, or the first column
- * of the supernode, whichever is bigger. There are 2 cases:
- * 1) fsupc < fpanelc, then fst_col := fpanelc
- * 2) fsupc >= fpanelc, then fst_col := fsupc
- */
- fst_col = SUPERLU_MAX ( fsupc, fpanelc );
-
- if ( fst_col < jcol ) {
-
- /* Distance between the current supernode and the current panel.
- d_fsupc=0 if fsupc >= fpanelc. */
- d_fsupc = fst_col - fsupc;
-
- lptr = xlsub[fsupc] + d_fsupc;
- luptr = xlusup[fst_col] + d_fsupc;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
- nsupc = jcol - fst_col; /* Excluding jcol */
- nrow = nsupr - d_fsupc - nsupc;
-
- /* Points to the beginning of jcol in snode L\U(jsupno) */
- ufirst = xlusup[jcol] + d_fsupc;
-
- ops[TRSV] += 4 * nsupc * (nsupc - 1);
- ops[GEMV] += 8 * nrow * nsupc;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr],
- &nsupr, &lusup[ufirst], &incx );
-#else
- ctrsv_( "L", "N", "U", &nsupc, &lusup[luptr],
- &nsupr, &lusup[ufirst], &incx );
-#endif
-
- alpha = none; beta = one; /* y := beta*y + alpha*A*x */
-
-#ifdef _CRAY
- CGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#else
- cgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#endif
-#else
- clsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
-
- cmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
- &lusup[ufirst], tempv );
-
- /* Copy updates from tempv[*] into lusup[*] */
- isub = ufirst + nsupc;
- for (i = 0; i < nrow; i++) {
- c_sub(&lusup[isub], &lusup[isub], &tempv[i]);
- tempv[i] = zero;
- ++isub;
- }
-
-#endif
-
-
- } /* if fst_col < jcol ... */
-
- return 0;
-}
diff --git a/SRC/ccolumn_dfs.c b/SRC/ccolumn_dfs.c
deleted file mode 100644
index 58940ef..0000000
--- a/SRC/ccolumn_dfs.c
+++ /dev/null
@@ -1,275 +0,0 @@
-
-/*! @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.
- * </pre>
-*/
-
-#include "slu_cdefs.h"
-
-/*! \brief What type of supernodes we want */
-#define T2_SUPER
-
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- * 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
- * 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 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.
- *
- * 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.
- *
- * 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
- *
- * Return value
- * ============
- * 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 */
- int fsupc; /* First column of a snode */
- int myfnz; /* First nonz column of a U-segment */
- int chperm, chmark, chrep, kchild;
- int xdfs, maxdfs, kpar, oldrep;
- int jptr, jm1ptr;
- int ito, ifrom, istop; /* 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;
- xlsub = Glu->xlsub;
- nzlmax = Glu->nzlmax;
-
- if ( first ) {
- maxsuper = sp_ienv(3);
- first = 0;
- }
- jcolp1 = jcol + 1;
- jcolm1 = jcol - 1;
- nsuper = supno[jcol];
- jsuper = nsuper;
- nextl = xlsub[jcol];
- marker2 = &marker[2*m];
-
-
- /* For each nonzero in A[*,jcol] do dfs */
- for (k = 0; lsub_col[k] != EMPTY; k++) {
-
- krow = lsub_col[k];
- lsub_col[k] = EMPTY;
- kmark = marker2[krow];
-
- /* krow was visited before, go to the next nonz */
- if ( kmark == jcol ) continue;
-
- /* For each unmarked nbr krow of jcol
- * krow is in L: place it in structure of L[*,jcol]
- */
- marker2[krow] = jcol;
- kperm = perm_r[krow];
-
- if ( kperm == EMPTY ) {
- lsub[nextl++] = krow; /* krow is indexed into A */
- if ( nextl >= nzlmax ) {
- 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 {
- /* krow is in U: if its supernode-rep krep
- * has been explored, update repfnz[*]
- */
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz[krep];
-
- if ( myfnz != EMPTY ) { /* Visited before */
- 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];
-
- do {
- /*
- * For each unmarked kchild of krep
- */
- while ( xdfs < maxdfs ) {
-
- kchild = lsub[xdfs];
- xdfs++;
- chmark = marker2[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;
- if ( nextl >= nzlmax ) {
- 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 */
- if ( myfnz > 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) */
- parent[krep] = oldrep;
- repfnz[krep] = chperm;
- xdfs = xlsub[krep];
- maxdfs = xprune[krep];
- } /* else */
-
- } /* else */
-
- } /* if */
-
- } /* while */
-
- /* krow has no more unexplored nbrs;
- * place supernode-rep krep in postorder DFS.
- * backtrack dfs to its parent
- */
- segrep[*nseg] = krep;
- ++(*nseg);
- kpar = parent[krep]; /* Pop from stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- maxdfs = xprune[krep];
-
- } while ( kpar != EMPTY ); /* Until empty stack */
-
- } /* else */
-
- } /* else */
-
- } /* for each nonzero ... */
-
- /* Check to see if j belongs in the same supernode as j-1 */
- if ( jcol == 0 ) { /* Do nothing for column 0 */
- nsuper = supno[0] = 0;
- } else {
- fsupc = xsup[nsuper];
- jptr = xlsub[jcol]; /* Not compressed yet */
- jm1ptr = xlsub[jcolm1];
-
-#ifdef T2_SUPER
- if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-#endif
- /* 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)
- */
- if ( jsuper == EMPTY ) { /* starts a new supernode */
- if ( (fsupc < jcolm1-1) ) { /* >= 3 columns in nsuper */
-#ifdef CHK_COMPRESS
- printf(" Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
-#endif
- 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)
- lsub[ito] = lsub[ifrom];
- nextl = ito; /* = istop + length(jcol) */
- }
- nsuper++;
- supno[jcol] = nsuper;
- } /* if a new supernode */
-
- } /* 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/ccopy_to_ucol.c b/SRC/ccopy_to_ucol.c
deleted file mode 100644
index 3e4b396..0000000
--- a/SRC/ccopy_to_ucol.c
+++ /dev/null
@@ -1,103 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_cdefs.h"
-
-int
-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 */
- GlobalLU_t *Glu /* modified */
- )
-{
-/*
- * 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;
- 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;
-
- 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))
- return (mem_error);
- ucol = Glu->ucol;
- if (mem_error = cLUMemXpand(jcol, nextu, USUB, &nzumax, Glu))
- return (mem_error);
- usub = Glu->usub;
- lsub = Glu->lsub;
- }
-
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- usub[nextu] = perm_r[irow];
- ucol[nextu] = dense[irow];
- dense[irow] = zero;
- nextu++;
- isub++;
- }
-
- }
-
- }
-
- } /* for each segment... */
-
- xusub[jcol + 1] = nextu; /* Close U[*,jcol] */
- return 0;
-}
diff --git a/SRC/cdiagonal.c b/SRC/cdiagonal.c
deleted file mode 100644
index 7384da1..0000000
--- a/SRC/cdiagonal.c
+++ /dev/null
@@ -1,133 +0,0 @@
-
-/*! @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
deleted file mode 100644
index e17532d..0000000
--- a/SRC/cgscon.c
+++ /dev/null
@@ -1,154 +0,0 @@
-
-/*! @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.
- */
-#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)
-{
-
-
- /* Local variables */
- int kase, kase1, onenrm, i;
- float ainvnm;
- complex *work;
- extern int crscl_(int *, complex *, complex *, int *);
-
- extern int clacon_(int *, complex *, complex *, float *, int *);
-
-
- /* Test the input parameters. */
- *info = 0;
- onenrm = *(unsigned char *)norm == '1' || lsame_(norm, "O");
- if (! onenrm && ! lsame_(norm, "I")) *info = -1;
- else if (L->nrow < 0 || L->nrow != L->ncol ||
- L->Stype != SLU_SC || L->Dtype != SLU_C || L->Mtype != SLU_TRLU)
- *info = -2;
- else if (U->nrow < 0 || U->nrow != U->ncol ||
- U->Stype != SLU_NC || U->Dtype != SLU_C || U->Mtype != SLU_TRU)
- *info = -3;
- if (*info != 0) {
- i = -(*info);
- xerbla_("cgscon", &i);
- return;
- }
-
- /* Quick return if possible */
- *rcond = 0.;
- if ( L->nrow == 0 || U->nrow == 0) {
- *rcond = 1.;
- return;
- }
-
- work = complexCalloc( 3*L->nrow );
-
-
- if ( !work )
- ABORT("Malloc fails for work arrays in cgscon.");
-
- /* Estimate the norm of inv(A). */
- ainvnm = 0.;
- if ( onenrm ) kase1 = 1;
- else kase1 = 2;
- kase = 0;
-
- do {
- clacon_(&L->nrow, &work[L->nrow], &work[0], &ainvnm, &kase);
-
- if (kase == 0) break;
-
- if (kase == kase1) {
- /* Multiply by inv(L). */
- sp_ctrsv("L", "No trans", "Unit", L, U, &work[0], stat, info);
-
- /* Multiply by inv(U). */
- sp_ctrsv("U", "No trans", "Non-unit", L, U, &work[0], stat, info);
-
- } else {
-
- /* Multiply by inv(U'). */
- sp_ctrsv("U", "Transpose", "Non-unit", L, U, &work[0], stat, info);
-
- /* Multiply by inv(L'). */
- sp_ctrsv("L", "Transpose", "Unit", L, U, &work[0], stat, info);
-
- }
-
- } while ( kase != 0 );
-
- /* Compute the estimate of the reciprocal condition number. */
- if (ainvnm != 0.) *rcond = (1. / ainvnm) / anorm;
-
- SUPERLU_FREE (work);
- return;
-
-} /* cgscon */
-
diff --git a/SRC/cgsequ.c b/SRC/cgsequ.c
deleted file mode 100644
index db31e35..0000000
--- a/SRC/cgsequ.c
+++ /dev/null
@@ -1,195 +0,0 @@
-
-/*! @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
- * History: Modified from LAPACK routine CGEEQU
- */
-#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)
-{
-
-
- /* Local variables */
- NCformat *Astore;
- complex *Aval;
- int i, j, irow;
- float rcmin, rcmax;
- float bignum, smlnum;
- extern float slamch_(char *);
-
- /* Test the input parameters. */
- *info = 0;
- if ( A->nrow < 0 || A->ncol < 0 ||
- A->Stype != SLU_NC || A->Dtype != SLU_C || A->Mtype != SLU_GE )
- *info = -1;
- if (*info != 0) {
- i = -(*info);
- xerbla_("cgsequ", &i);
- return;
- }
-
- /* Quick return if possible */
- if ( A->nrow == 0 || A->ncol == 0 ) {
- *rowcnd = 1.;
- *colcnd = 1.;
- *amax = 0.;
- return;
- }
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Get machine constants. */
- smlnum = slamch_("S");
- bignum = 1. / smlnum;
-
- /* Compute row scale factors. */
- for (i = 0; i < A->nrow; ++i) r[i] = 0.;
-
- /* Find the maximum element in each row. */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- r[irow] = SUPERLU_MAX( r[irow], c_abs1(&Aval[i]) );
- }
-
- /* Find the maximum and minimum scale factors. */
- rcmin = bignum;
- rcmax = 0.;
- for (i = 0; i < A->nrow; ++i) {
- rcmax = SUPERLU_MAX(rcmax, r[i]);
- rcmin = SUPERLU_MIN(rcmin, r[i]);
- }
- *amax = rcmax;
-
- if (rcmin == 0.) {
- /* Find the first zero scale factor and return an error code. */
- for (i = 0; i < A->nrow; ++i)
- if (r[i] == 0.) {
- *info = i + 1;
- return;
- }
- } else {
- /* Invert the scale factors. */
- for (i = 0; i < A->nrow; ++i)
- r[i] = 1. / SUPERLU_MIN( SUPERLU_MAX( r[i], smlnum ), bignum );
- /* Compute ROWCND = min(R(I)) / max(R(I)) */
- *rowcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
- }
-
- /* Compute column scale factors */
- for (j = 0; j < A->ncol; ++j) c[j] = 0.;
-
- /* Find the maximum element in each column, assuming the row
- scalings computed above. */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- c[j] = SUPERLU_MAX( c[j], c_abs1(&Aval[i]) * r[irow] );
- }
-
- /* Find the maximum and minimum scale factors. */
- rcmin = bignum;
- rcmax = 0.;
- for (j = 0; j < A->ncol; ++j) {
- rcmax = SUPERLU_MAX(rcmax, c[j]);
- rcmin = SUPERLU_MIN(rcmin, c[j]);
- }
-
- if (rcmin == 0.) {
- /* Find the first zero scale factor and return an error code. */
- for (j = 0; j < A->ncol; ++j)
- if ( c[j] == 0. ) {
- *info = A->nrow + j + 1;
- return;
- }
- } else {
- /* Invert the scale factors. */
- for (j = 0; j < A->ncol; ++j)
- c[j] = 1. / SUPERLU_MIN( SUPERLU_MAX( c[j], smlnum ), bignum);
- /* Compute COLCND = min(C(J)) / max(C(J)) */
- *colcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
- }
-
- return;
-
-} /* cgsequ */
-
-
diff --git a/SRC/cgsisx.c b/SRC/cgsisx.c
deleted file mode 100644
index 9b3634c..0000000
--- a/SRC/cgsisx.c
+++ /dev/null
@@ -1,727 +0,0 @@
-
-/*! @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
deleted file mode 100644
index f6af8a6..0000000
--- a/SRC/cgsisx.c.bak
+++ /dev/null
@@ -1,723 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 717bc38..0000000
--- a/SRC/cgsitrf.c
+++ /dev/null
@@ -1,637 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 03474b1..0000000
--- a/SRC/cgsitrf.c.bak
+++ /dev/null
@@ -1,629 +0,0 @@
-
-/*! @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
deleted file mode 100644
index e7c2bc7..0000000
--- a/SRC/cgsrfs.c
+++ /dev/null
@@ -1,460 +0,0 @@
-
-/*! @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
- * History: Modified from lapack routine CGERFS
- */
-#include <math.h>
-#include "slu_cdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * CGSRFS improves the computed solution to a system of linear
- * equations and provides error bounds and backward error estimates for
- * the solution.
- *
- * If equilibration was performed, the system becomes:
- * (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.
- *
- * See supermatrix.h for the definition of 'SuperMatrix' structure.
- *
- * Arguments
- * =========
- *
- * 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)
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * 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 cgstrs().
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See 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
- *
- * Internal Parameters
- * ===================
- *
- * 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
-
- /* Table of constant values */
- int ione = 1;
- complex ndone = {-1., 0.};
- complex done = {1., 0.};
-
- /* Local variables */
- NCformat *Astore;
- complex *Aval;
- SuperMatrix Bjcol;
- DNformat *Bstore, *Xstore, *Bjcol_store;
- complex *Bmat, *Xmat, *Bptr, *Xptr;
- int kase;
- float safe1, safe2;
- int i, j, k, irow, nz, count, notran, rowequ, colequ;
- int ldb, ldx, nrhs;
- float s, xk, lstres, eps, safmin;
- char transc[1];
- trans_t transt;
- complex *work;
- float *rwork;
- int *iwork;
-
- extern int clacon_(int *, complex *, complex *, float *, int *);
-#ifdef _CRAY
- extern int CCOPY(int *, complex *, int *, complex *, int *);
- extern int CSAXPY(int *, complex *, complex *, int *, complex *, int *);
-#else
- extern int ccopy_(int *, complex *, int *, complex *, int *);
- extern int caxpy_(int *, complex *, complex *, int *, complex *, int *);
-#endif
-
- Astore = A->Store;
- Aval = Astore->nzval;
- Bstore = B->Store;
- Xstore = X->Store;
- Bmat = Bstore->nzval;
- Xmat = Xstore->nzval;
- ldb = Bstore->lda;
- ldx = Xstore->lda;
- nrhs = B->ncol;
-
- /* Test the input parameters */
- *info = 0;
- notran = (trans == NOTRANS);
- if ( !notran && trans != TRANS && trans != CONJ ) *info = -1;
- else if ( A->nrow != A->ncol || A->nrow < 0 ||
- A->Stype != SLU_NC || A->Dtype != SLU_C || A->Mtype != SLU_GE )
- *info = -2;
- else if ( L->nrow != L->ncol || L->nrow < 0 ||
- L->Stype != SLU_SC || L->Dtype != SLU_C || L->Mtype != SLU_TRLU )
- *info = -3;
- else if ( U->nrow != U->ncol || U->nrow < 0 ||
- U->Stype != SLU_NC || U->Dtype != SLU_C || U->Mtype != SLU_TRU )
- *info = -4;
- else if ( ldb < SUPERLU_MAX(0, A->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_C || B->Mtype != SLU_GE )
- *info = -10;
- else if ( ldx < SUPERLU_MAX(0, A->nrow) ||
- X->Stype != SLU_DN || X->Dtype != SLU_C || X->Mtype != SLU_GE )
- *info = -11;
- if (*info != 0) {
- i = -(*info);
- xerbla_("cgsrfs", &i);
- return;
- }
-
- /* Quick return if possible */
- if ( A->nrow == 0 || nrhs == 0) {
- for (j = 0; j < nrhs; ++j) {
- ferr[j] = 0.;
- berr[j] = 0.;
- }
- return;
- }
-
- rowequ = lsame_(equed, "R") || lsame_(equed, "B");
- colequ = lsame_(equed, "C") || lsame_(equed, "B");
-
- /* Allocate working space */
- work = complexMalloc(2*A->nrow);
- rwork = (float *) SUPERLU_MALLOC( A->nrow * sizeof(float) );
- iwork = intMalloc(A->nrow);
- if ( !work || !rwork || !iwork )
- ABORT("Malloc fails for work/rwork/iwork.");
-
- if ( notran ) {
- *(unsigned char *)transc = 'N';
- transt = TRANS;
- } else {
- *(unsigned char *)transc = 'T';
- transt = NOTRANS;
- }
-
- /* NZ = maximum number of nonzero elements in each row of A, plus 1 */
- 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;
-
- /* Compute the number of nonzeros in each row (or column) of A */
- for (i = 0; i < A->nrow; ++i) iwork[i] = 0;
- if ( notran ) {
- for (k = 0; k < A->ncol; ++k)
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- ++iwork[Astore->rowind[i]];
- } else {
- for (k = 0; k < A->ncol; ++k)
- iwork[k] = Astore->colptr[k+1] - Astore->colptr[k];
- }
-
- /* Copy one column of RHS B into Bjcol. */
- Bjcol.Stype = B->Stype;
- Bjcol.Dtype = B->Dtype;
- Bjcol.Mtype = B->Mtype;
- Bjcol.nrow = B->nrow;
- Bjcol.ncol = 1;
- Bjcol.Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
- if ( !Bjcol.Store ) ABORT("SUPERLU_MALLOC fails for Bjcol.Store");
- Bjcol_store = Bjcol.Store;
- Bjcol_store->lda = ldb;
- Bjcol_store->nzval = work; /* address aliasing */
-
- /* Do for each right hand side ... */
- for (j = 0; j < nrhs; ++j) {
- count = 0;
- lstres = 3.;
- Bptr = &Bmat[j*ldb];
- Xptr = &Xmat[j*ldx];
-
- while (1) { /* Loop until stopping criterion is satisfied. */
-
- /* Compute residual R = B - op(A) * X,
- where op(A) = A, A**T, or A**H, depending on TRANS. */
-
-#ifdef _CRAY
- CCOPY(&A->nrow, Bptr, &ione, work, &ione);
-#else
- ccopy_(&A->nrow, Bptr, &ione, work, &ione);
-#endif
- sp_cgemv(transc, ndone, A, Xptr, ione, done, work, ione);
-
- /* Compute componentwise relative backward error from formula
- max(i) ( abs(R(i)) / ( abs(op(A))*abs(X) + abs(B) )(i) )
- 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 before dividing. */
-
- for (i = 0; i < A->nrow; ++i) rwork[i] = c_abs1( &Bptr[i] );
-
- /* Compute abs(op(A))*abs(X) + abs(B). */
- if (notran) {
- for (k = 0; k < A->ncol; ++k) {
- xk = c_abs1( &Xptr[k] );
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- rwork[Astore->rowind[i]] += c_abs1(&Aval[i]) * xk;
- }
- } else {
- for (k = 0; k < A->ncol; ++k) {
- s = 0.;
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
- irow = Astore->rowind[i];
- s += c_abs1(&Aval[i]) * c_abs1(&Xptr[irow]);
- }
- rwork[k] += s;
- }
- }
- s = 0.;
- for (i = 0; i < A->nrow; ++i) {
- if (rwork[i] > safe2) {
- s = SUPERLU_MAX( s, c_abs1(&work[i]) / rwork[i] );
- } 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;
-
- /* Test stopping criterion. Continue iterating if
- 1) The residual BERR(J) is larger than machine epsilon, and
- 2) BERR(J) decreased by at least a factor of 2 during the
- last iteration, and
- 3) At most ITMAX iterations tried. */
-
- if (berr[j] > eps && berr[j] * 2. <= lstres && count < ITMAX) {
- /* Update solution and try again. */
- cgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
-#ifdef _CRAY
- CAXPY(&A->nrow, &done, work, &ione,
- &Xmat[j*ldx], &ione);
-#else
- caxpy_(&A->nrow, &done, work, &ione,
- &Xmat[j*ldx], &ione);
-#endif
- lstres = berr[j];
- ++count;
- } else {
- break;
- }
-
- } /* end while */
-
- stat->RefineSteps = count;
-
- /* Bound error from formula:
- norm(X - XTRUE) / norm(X) .le. FERR = norm( abs(inv(op(A)))*
- ( abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) / norm(X)
- where
- norm(Z) is the magnitude of the largest component of Z
- inv(op(A)) is the inverse of op(A)
- abs(Z) is the componentwise absolute value of the matrix or
- vector Z
- NZ is the maximum number of nonzeros in any row of A, plus 1
- EPS is machine epsilon
-
- The i-th component of abs(R)+NZ*EPS*(abs(op(A))*abs(X)+abs(B))
- is incremented by SAFE1 if the i-th component of
- abs(op(A))*abs(X) + abs(B) is less than SAFE2.
-
- Use CLACON to estimate the infinity-norm of the matrix
- inv(op(A)) * diag(W),
- where W = abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) */
-
- for (i = 0; i < A->nrow; ++i) rwork[i] = c_abs1( &Bptr[i] );
-
- /* Compute abs(op(A))*abs(X) + abs(B). */
- if ( notran ) {
- for (k = 0; k < A->ncol; ++k) {
- xk = c_abs1( &Xptr[k] );
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- rwork[Astore->rowind[i]] += c_abs1(&Aval[i]) * xk;
- }
- } else {
- for (k = 0; k < A->ncol; ++k) {
- s = 0.;
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
- irow = Astore->rowind[i];
- xk = c_abs1( &Xptr[irow] );
- s += c_abs1(&Aval[i]) * xk;
- }
- rwork[k] += s;
- }
- }
-
- for (i = 0; i < A->nrow; ++i)
- if (rwork[i] > safe2)
- rwork[i] = c_abs(&work[i]) + (iwork[i]+1)*eps*rwork[i];
- else
- rwork[i] = c_abs(&work[i])+(iwork[i]+1)*eps*rwork[i]+safe1;
- kase = 0;
-
- do {
- clacon_(&A->nrow, &work[A->nrow], work,
- &ferr[j], &kase);
- if (kase == 0) break;
-
- if (kase == 1) {
- /* Multiply by diag(W)*inv(op(A)**T)*(diag(C) or diag(R)). */
- if ( notran && colequ )
- for (i = 0; i < A->ncol; ++i) {
- cs_mult(&work[i], &work[i], C[i]);
- }
- else if ( !notran && rowequ )
- for (i = 0; i < A->nrow; ++i) {
- cs_mult(&work[i], &work[i], R[i]);
- }
-
- cgstrs (transt, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
- for (i = 0; i < A->nrow; ++i) {
- cs_mult(&work[i], &work[i], rwork[i]);
- }
- } else {
- /* Multiply by (diag(C) or diag(R))*inv(op(A))*diag(W). */
- for (i = 0; i < A->nrow; ++i) {
- cs_mult(&work[i], &work[i], rwork[i]);
- }
-
- cgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
- if ( notran && colequ )
- for (i = 0; i < A->ncol; ++i) {
- cs_mult(&work[i], &work[i], C[i]);
- }
- else if ( !notran && rowequ )
- for (i = 0; i < A->ncol; ++i) {
- cs_mult(&work[i], &work[i], R[i]);
- }
- }
-
- } while ( kase != 0 );
-
- /* Normalize error. */
- lstres = 0.;
- if ( notran && colequ ) {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, C[i] * c_abs1( &Xptr[i]) );
- } else if ( !notran && rowequ ) {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, R[i] * c_abs1( &Xptr[i]) );
- } else {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, c_abs1( &Xptr[i]) );
- }
- if ( lstres != 0. )
- ferr[j] /= lstres;
-
- } /* for each RHS j ... */
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(rwork);
- SUPERLU_FREE(iwork);
- SUPERLU_FREE(Bjcol.Store);
-
- return;
-
-} /* cgsrfs */
diff --git a/SRC/cgssv.c b/SRC/cgssv.c
deleted file mode 100644
index 07f4784..0000000
--- a/SRC/cgssv.c
+++ /dev/null
@@ -1,227 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * CGSSV solves the system of linear equations A*X=B, using the
- * LU factorization from CGSTRF. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 1.1. Permute the columns of A, forming A*Pc, where Pc
- * is a permutation matrix. For more details of this step,
- * see sp_preorder.c.
- *
- * 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.
- *
- * 1.3. Solve the system of equations A*X=B using the factored
- * form of A.
- *
- * 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
- * above algorithm to the transpose of A:
- *
- * 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 sp_preorder.c.
- *
- * 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.
- *
- * 2.3. Solve the system of equations A*X=B using the factored
- * form of A.
- *
- * 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) 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.
- *
- * 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.
- *
- * 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.
- *
- * 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->RowPerm = MY_PERMR or
- * options->Fact = SamePattern_SameRowPerm, perm_r is an
- * input argument.
- * otherwise it is an output argument.
- *
- * 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.
- *
- * 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;
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See util.h for the definition of 'SuperLUStat_t'.
- *
- * 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>
- */
-
-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 */
- int panel_size; /* panel size */
- int relax; /* no of columns in a relaxed snodes */
- int permc_spec;
- trans_t trans = NOTRANS;
- double *utime;
- double t; /* Temporary time */
-
- /* Test the input parameters ... */
- *info = 0;
- Bstore = B->Store;
- if ( options->Fact != DOFACT ) *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 ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_C || B->Mtype != SLU_GE )
- *info = -7;
- if ( *info != 0 ) {
- i = -(*info);
- xerbla_("cgssv", &i);
- return;
- }
-
- 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);
- trans = TRANS;
- } else {
- if ( A->Stype == SLU_NC ) AA = A;
- }
-
- t = SuperLU_timer_();
- /*
- * Get 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_() - t;
-
- etree = intMalloc(A->ncol);
-
- t = SuperLU_timer_();
- sp_preorder(options, AA, perm_c, etree, &AC);
- utime[ETREE] = SuperLU_timer_() - t;
-
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
-
- /*printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));*/
- t = SuperLU_timer_();
- /* Compute the LU factorization of A. */
- 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_();
- if ( *info == 0 ) {
- /* Solve the system A*X=B, overwriting B with X. */
- cgstrs (trans, L, U, perm_c, perm_r, B, stat, info);
- }
- utime[SOLVE] = SuperLU_timer_() - t;
-
- SUPERLU_FREE (etree);
- Destroy_CompCol_Permuted(&AC);
- if ( A->Stype == SLU_NR ) {
- Destroy_SuperMatrix_Store(AA);
- SUPERLU_FREE(AA);
- }
-
-}
diff --git a/SRC/cgssvx.c b/SRC/cgssvx.c
deleted file mode 100644
index 0056025..0000000
--- a/SRC/cgssvx.c
+++ /dev/null
@@ -1,622 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * CGSSVX solves the system of linear equations A*X=B or A'*X=B, using
- * the LU factorization from cgstrf(). Error bounds on the solution and
- * a condition estimate are also provided. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 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).
- *
- * 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 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.
- *
- * 1.6. The system of equations is solved for X using the factored form
- * of A.
- *
- * 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.
- *
- * 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.
- *
- * 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, 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 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.
- *
- * 2.6. The system of equations is solved for X using the factored form
- * of transpose(A).
- *
- * 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.
- *
- * 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.
- * 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).
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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: 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>
- */
-
-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;
- 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;
- 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;
-
- /* 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);
- 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;
- }
-
-#if 0
-printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
- options->Fact, options->Trans, *equed);
-#endif
-
- /* 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 ) *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;
- }
- 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) {
- i = -(*info);
- xerbla_("cgssvx", &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 && 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;
-
-/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));
- fflush(stdout); */
-
- /* Compute the LU factorization of A*Pc. */
- t0 = SuperLU_timer_();
- 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 ) {
- mem_usage->total_needed = *info - A->ncol;
- return;
- }
- }
-
- if ( options->PivotGrowth ) {
- if ( *info > 0 ) {
- if ( *info <= A->ncol ) {
- /* Compute the reciprocal pivot growth factor of the leading
- rank-deficient *info columns of A. */
- *recip_pivot_growth = cPivotGrowth(*info, AA, perm_c, L, U);
- }
- 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, info);
- utime[RCOND] = 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]);
- }
-
- /* 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, info);
- utime[SOLVE] = SuperLU_timer_() - t0;
-
- /* Use iterative refinement to improve the computed solution and compute
- error bounds and backward error estimates for it. */
- t0 = SuperLU_timer_();
- if ( options->IterRefine != NOREFINE ) {
- cgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
- X, ferr, berr, stat, info);
- } else {
- for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
- }
- utime[REFINE] = 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 < 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)
- cs_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
- }
- } /* 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 = A->ncol + 1;
- }
-
- if ( nofact ) {
- 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/cgssvx.c.bak b/SRC/cgssvx.c.bak
deleted file mode 100644
index 428ecb0..0000000
--- a/SRC/cgssvx.c.bak
+++ /dev/null
@@ -1,619 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * CGSSVX solves the system of linear equations A*X=B or A'*X=B, using
- * the LU factorization from cgstrf(). Error bounds on the solution and
- * a condition estimate are also provided. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 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).
- *
- * 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 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.
- *
- * 1.6. The system of equations is solved for X using the factored form
- * of A.
- *
- * 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.
- *
- * 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.
- *
- * 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, 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 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.
- *
- * 2.6. The system of equations is solved for X using the factored form
- * of transpose(A).
- *
- * 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.
- *
- * 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.
- * 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).
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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: 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>
- */
-
-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;
- 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;
- 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;
-
- /* 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);
- 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;
- }
-
-#if 0
-printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
- options->Fact, options->Trans, *equed);
-#endif
-
- /* 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_("cgssvx", &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 && 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 ( 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 ) {
-
- 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;
-
-/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));
- fflush(stdout); */
-
- /* Compute the LU factorization of A*Pc. */
- t0 = SuperLU_timer_();
- 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 ) {
- mem_usage->total_needed = *info - A->ncol;
- return;
- }
- }
-
- if ( options->PivotGrowth ) {
- if ( *info > 0 ) {
- if ( *info <= A->ncol ) {
- /* Compute the reciprocal pivot growth factor of the leading
- rank-deficient *info columns of A. */
- *recip_pivot_growth = cPivotGrowth(*info, AA, perm_c, L, U);
- }
- 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, info);
- utime[RCOND] = SuperLU_timer_() - t0;
- }
-
- if ( nrhs > 0 ) {
- /* 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, info);
- utime[SOLVE] = SuperLU_timer_() - t0;
-
- /* Use iterative refinement to improve the computed solution and compute
- error bounds and backward error estimates for it. */
- t0 = SuperLU_timer_();
- if ( options->IterRefine != NOREFINE ) {
- cgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
- X, ferr, berr, stat, info);
- } else {
- for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
- }
- utime[REFINE] = 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 < 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) {
- cs_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
- }
- }
- } /* 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 = A->ncol + 1;
- }
-
- if ( nofact ) {
- 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/cgstrf.c b/SRC/cgstrf.c
deleted file mode 100644
index d3c23da..0000000
--- a/SRC/cgstrf.c
+++ /dev/null
@@ -1,436 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_cdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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).
- *
- * 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.
- *
- * 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: 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.
- *
- * ======================================================================
- *
- * Local Working Arrays:
- * ======================
- * m = number of rows in the matrix
- * n = number of columns in the matrix
- *
- * 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.
- *
- * 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 cpanel_dfs.c; marker2 is used for inner-factorization,
- * see ccolumn_dfs.c.
- *
- * 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 cpanel_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_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
- options->Fact == SamePattern_SameRowPerm */
- int *iperm_c; /* inverse of perm_c */
- int *iwork;
- complex *cwork;
- int *segrep, *repfnz, *parent, *xplore;
- int *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
- int *xprune;
- int *marker;
- complex *dense, *tempv;
- int *relax_end;
- complex *a;
- int *asub;
- int *xa_begin, *xa_end;
- int *xsup, *supno;
- int *xlsub, *xlusup, *xusub;
- int nzlumax;
- 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;
- double diag_pivot_thresh = options->DiagPivotThresh;
- 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;
-
- 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, fill_ratio, 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, &xprune, &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;
-
- /* Identify relaxed snodes */
- relax_end = (int *) intMalloc(n);
- if ( options->SymmetricMode == YES ) {
- heap_relax_snode(n, etree, relax, marker, relax_end);
- } else {
- relax_snode(n, etree, relax, marker, relax_end);
- }
-
- 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;
-
- /*
- * 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]++;
-
- /* --------------------------------------
- * Factorize the relaxed supernode(jcol:kcol)
- * -------------------------------------- */
- /* Determine the union of the row structure of the snode */
- if ( (*info = csnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
- xprune, 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;
-
- /* Scatter into SPA dense[*] */
- for (k = xa_begin[icol]; k < xa_end[icol]; k++)
- dense[asub[k]] = a[k];
-
- /* Numeric update within the snode */
- csnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
-
- if ( (*info = cpivotL(icol, diag_pivot_thresh, &usepr, perm_r,
- iperm_r, iperm_c, &pivrow, &Glu, stat)) )
- if ( iinfo == 0 ) iinfo = *info;
-
-#ifdef DEBUG
- cprint_lu_col("[1]: ", icol, pivrow, xprune, &Glu);
-#endif
-
- }
-
- jcol = icol;
-
- } 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 */
- cpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
- dense, panel_lsub, segrep, repfnz, xprune,
- 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 */
-
- if ((*info = ccolumn_dfs(m, jj, perm_r, &nseg, &panel_lsub[k],
- segrep, &repfnz[k], xprune, marker,
- parent, xplore, &Glu)) != 0) return;
-
- /* Numeric updates */
- if ((*info = ccolumn_bmod(jj, (nseg - nseg1), &dense[k],
- tempv, &segrep[nseg1], &repfnz[k],
- jcol, &Glu, stat)) != 0) return;
-
- /* Copy the U-segments to ucol[*] */
- if ((*info = ccopy_to_ucol(jj, nseg, segrep, &repfnz[k],
- perm_r, &dense[k], &Glu)) != 0)
- return;
-
- if ( (*info = cpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
- iperm_r, iperm_c, &pivrow, &Glu, stat)) )
- if ( iinfo == 0 ) iinfo = *info;
-
- /* Prune columns (0:jj-1) using column jj */
- cpruneL(jj, perm_r, pivrow, nseg, segrep,
- &repfnz[k], xprune, &Glu);
-
- /* Reset repfnz[] for this column */
- resetrep_col (nseg, segrep, &repfnz[k]);
-
-#ifdef DEBUG
- cprint_lu_col("[2]: ", jj, pivrow, xprune, &Glu);
-#endif
-
- }
-
- 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;
- }
- }
-
- countnz(min_mn, xprune, &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);
-
-}
diff --git a/SRC/cgstrs.c b/SRC/cgstrs.c
deleted file mode 100644
index d7f5a3f..0000000
--- a/SRC/cgstrs.c
+++ /dev/null
@@ -1,350 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_cdefs.h"
-
-
-/*
- * Function prototypes
- */
-void cusolve(int, int, complex*, complex*);
-void clsolve(int, int, complex*, complex*);
-void cmatvec(int, int, int, complex*, complex*, complex*);
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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.
- *
- * See supermatrix.h for the definition of 'SuperMatrix' structure.
- *
- * Arguments
- * =========
- *
- * 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)
- *
- * 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.
- *
- * 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.
- *
- * 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_C, Mtype = SLU_GE.
- * On entry, the right hand side matrix.
- * On exit, the solution matrix if info = 0;
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See 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
- * </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
- int incx = 1, incy = 1;
-#ifdef USE_VENDOR_BLAS
- complex alpha = {1.0, 0.0}, beta = {1.0, 0.0};
- complex *work_col;
-#endif
- complex temp_comp;
- DNformat *Bstore;
- complex *Bmat;
- SCformat *Lstore;
- NCformat *Ustore;
- complex *Lval, *Uval;
- int fsupc, nrow, nsupr, nsupc, luptr, istart, irow;
- int i, j, k, iptr, jcol, n, ldb, nrhs;
- complex *work, *rhs_work, *soln;
- flops_t solve_ops;
- void cprint_soln();
-
- /* Test input parameters ... */
- *info = 0;
- Bstore = B->Store;
- ldb = Bstore->lda;
- nrhs = B->ncol;
- if ( trans != NOTRANS && trans != TRANS && trans != CONJ ) *info = -1;
- else if ( L->nrow != L->ncol || L->nrow < 0 ||
- L->Stype != SLU_SC || L->Dtype != SLU_C || L->Mtype != SLU_TRLU )
- *info = -2;
- else if ( U->nrow != U->ncol || U->nrow < 0 ||
- U->Stype != SLU_NC || U->Dtype != SLU_C || U->Mtype != SLU_TRU )
- *info = -3;
- else if ( ldb < SUPERLU_MAX(0, L->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_C || B->Mtype != SLU_GE )
- *info = -6;
- if ( *info ) {
- i = -(*info);
- xerbla_("cgstrs", &i);
- return;
- }
-
- n = L->nrow;
- work = complexCalloc(n * nrhs);
- if ( !work ) ABORT("Malloc fails for local work[].");
- soln = complexMalloc(n);
- if ( !soln ) ABORT("Malloc fails for local soln[].");
-
- Bmat = Bstore->nzval;
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
- solve_ops = 0;
-
- if ( trans == NOTRANS ) {
- /* 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 += 4 * nsupc * (nsupc - 1) * nrhs;
- solve_ops += 8 * 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;
- cc_mult(&temp_comp, &rhs_work[fsupc], &Lval[luptr]);
- c_sub(&rhs_work[irow], &rhs_work[irow], &temp_comp);
- }
- }
- } 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"));
- CTRSM( ftcs1, ftcs1, ftcs2, ftcs3, &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-
- CGEMM( ftcs2, ftcs2, &nrow, &nrhs, &nsupc, &alpha,
- &Lval[luptr+nsupc], &nsupr, &Bmat[fsupc], &ldb,
- &beta, &work[0], &n );
-#else
- ctrsm_("L", "L", "N", "U", &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-
- cgemm_( "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);
- c_sub(&rhs_work[irow], &rhs_work[irow], &work_col[i]);
- work_col[i].r = 0.0;
- work_col[i].i = 0.0;
- iptr++;
- }
- }
-#else
- for (j = 0; j < nrhs; j++) {
- rhs_work = &Bmat[j*ldb];
- clsolve (nsupr, nsupc, &Lval[luptr], &rhs_work[fsupc]);
- cmatvec (nsupr, nrow, nsupc, &Lval[luptr+nsupc],
- &rhs_work[fsupc], &work[0] );
-
- iptr = istart + nsupc;
- for (i = 0; i < nrow; i++) {
- irow = L_SUB(iptr);
- c_sub(&rhs_work[irow], &rhs_work[irow], &work[i]);
- work[i].r = 0.;
- work[i].i = 0.;
- iptr++;
- }
- }
-#endif
- } /* else ... */
- } /* for L-solve */
-
-#ifdef DEBUG
- printf("After L-solve: y=\n");
- cprint_soln(n, nrhs, Bmat);
-#endif
-
- /*
- * Back solve Ux=y.
- */
- for (k = Lstore->nsuper; k >= 0; 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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += 4 * nsupc * (nsupc + 1) * nrhs;
-
- if ( nsupc == 1 ) {
- rhs_work = &Bmat[0];
- for (j = 0; j < nrhs; j++) {
- c_div(&rhs_work[fsupc], &rhs_work[fsupc], &Lval[luptr]);
- rhs_work += ldb;
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd("U", strlen("U"));
- ftcs3 = _cptofcd("N", strlen("N"));
- CTRSM( ftcs1, ftcs2, ftcs3, ftcs3, &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-#else
- ctrsm_("L", "U", "N", "N", &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-#endif
-#else
- for (j = 0; j < nrhs; j++)
- cusolve ( nsupr, nsupc, &Lval[luptr], &Bmat[fsupc+j*ldb] );
-#endif
- }
-
- for (j = 0; j < nrhs; ++j) {
- rhs_work = &Bmat[j*ldb];
- for (jcol = fsupc; jcol < fsupc + nsupc; jcol++) {
- solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++ ){
- irow = U_SUB(i);
- cc_mult(&temp_comp, &rhs_work[jcol], &Uval[i]);
- c_sub(&rhs_work[irow], &rhs_work[irow], &temp_comp);
- }
- }
- }
-
- } /* for U-solve */
-
-#ifdef DEBUG
- printf("After U-solve: x=\n");
- cprint_soln(n, nrhs, Bmat);
-#endif
-
- /* Compute the final solution X := Pc*X. */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[k] = rhs_work[perm_c[k]];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- stat->ops[SOLVE] = solve_ops;
-
- } else { /* Solve A'*X=B or CONJ(A)*X=B */
- /* Permute right hand sides to form Pc'*B. */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[perm_c[k]] = rhs_work[k];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- stat->ops[SOLVE] = 0;
- if (trans == TRANS) {
- for (k = 0; k < nrhs; ++k) {
- /* Multiply by inv(U'). */
- sp_ctrsv("U", "T", "N", L, U, &Bmat[k*ldb], stat, info);
-
- /* Multiply by inv(L'). */
- sp_ctrsv("L", "T", "U", L, U, &Bmat[k*ldb], stat, info);
- }
- } else { /* trans == CONJ */
- for (k = 0; k < nrhs; ++k) {
- /* Multiply by conj(inv(U')). */
- sp_ctrsv("U", "C", "N", L, U, &Bmat[k*ldb], stat, info);
-
- /* Multiply by conj(inv(L')). */
- sp_ctrsv("L", "C", "U", L, U, &Bmat[k*ldb], stat, info);
- }
- }
- /* Compute the final solution X := Pr'*X (=inv(Pr)*X) */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[k] = rhs_work[perm_r[k]];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- }
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(soln);
-}
-
-/*
- * Diagnostic print of the solution vector
- */
-void
-cprint_soln(int n, int nrhs, complex *soln)
-{
- int i;
-
- for (i = 0; i < n; i++)
- printf("\t%d: %.4f\n", i, soln[i]);
-}
diff --git a/SRC/clacon.c b/SRC/clacon.c
deleted file mode 100644
index d206d5a..0000000
--- a/SRC/clacon.c
+++ /dev/null
@@ -1,221 +0,0 @@
-
-/*! @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)
-
-{
-
-
- /* Table of constant values */
- int c__1 = 1;
- complex zero = {0.0, 0.0};
- complex one = {1.0, 0.0};
-
- /* System generated locals */
- float d__1;
-
- /* Local variables */
- static int iter;
- static int jump, jlast;
- static float altsgn, estold;
- static int i, j;
- float temp;
- float safmin;
- extern float slamch_(char *);
- extern int icmax1_(int *, complex *, int *);
- extern double scsum1_(int *, complex *, int *);
-
- safmin = slamch_("Safe minimum");
- if ( *kase == 0 ) {
- for (i = 0; i < *n; ++i) {
- x[i].r = 1. / (float) (*n);
- x[i].i = 0.;
- }
- *kase = 1;
- jump = 1;
- return 0;
- }
-
- switch (jump) {
- case 1: goto L20;
- case 2: goto L40;
- case 3: goto L70;
- case 4: goto L110;
- case 5: goto L140;
- }
-
- /* ................ ENTRY (JUMP = 1)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
- L20:
- if (*n == 1) {
- v[0] = x[0];
- *est = c_abs(&v[0]);
- /* ... QUIT */
- goto L150;
- }
- *est = scsum1_(n, x, &c__1);
-
- for (i = 0; i < *n; ++i) {
- d__1 = c_abs(&x[i]);
- if (d__1 > safmin) {
- d__1 = 1 / d__1;
- x[i].r *= d__1;
- x[i].i *= d__1;
- } else {
- x[i] = one;
- }
- }
- *kase = 2;
- jump = 2;
- return 0;
-
- /* ................ ENTRY (JUMP = 2)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
-L40:
- j = icmax1_(n, &x[0], &c__1);
- --j;
- iter = 2;
-
- /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
-L50:
- for (i = 0; i < *n; ++i) x[i] = zero;
- x[j] = one;
- *kase = 1;
- jump = 3;
- return 0;
-
- /* ................ ENTRY (JUMP = 3)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L70:
-#ifdef _CRAY
- CCOPY(n, x, &c__1, v, &c__1);
-#else
- ccopy_(n, x, &c__1, v, &c__1);
-#endif
- estold = *est;
- *est = scsum1_(n, v, &c__1);
-
-
-L90:
- /* TEST FOR CYCLING. */
- if (*est <= estold) goto L120;
-
- for (i = 0; i < *n; ++i) {
- d__1 = c_abs(&x[i]);
- if (d__1 > safmin) {
- d__1 = 1 / d__1;
- x[i].r *= d__1;
- x[i].i *= d__1;
- } else {
- x[i] = one;
- }
- }
- *kase = 2;
- jump = 4;
- return 0;
-
- /* ................ ENTRY (JUMP = 4)
- X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
-L110:
- jlast = j;
- j = icmax1_(n, &x[0], &c__1);
- --j;
- if (x[jlast].r != (d__1 = x[j].r, fabs(d__1)) && iter < 5) {
- ++iter;
- goto L50;
- }
-
- /* ITERATION COMPLETE. FINAL STAGE. */
-L120:
- altsgn = 1.;
- for (i = 1; i <= *n; ++i) {
- x[i-1].r = altsgn * ((float)(i - 1) / (float)(*n - 1) + 1.);
- x[i-1].i = 0.;
- altsgn = -altsgn;
- }
- *kase = 1;
- jump = 5;
- return 0;
-
- /* ................ ENTRY (JUMP = 5)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L140:
- temp = scsum1_(n, x, &c__1) / (float)(*n * 3) * 2.;
- if (temp > *est) {
-#ifdef _CRAY
- CCOPY(n, &x[0], &c__1, &v[0], &c__1);
-#else
- ccopy_(n, &x[0], &c__1, &v[0], &c__1);
-#endif
- *est = temp;
- }
-
-L150:
- *kase = 0;
- return 0;
-
-} /* clacon_ */
diff --git a/SRC/clacon.c.bak b/SRC/clacon.c.bak
deleted file mode 100644
index 3b826f5..0000000
--- a/SRC/clacon.c.bak
+++ /dev/null
@@ -1,221 +0,0 @@
-
-/*! @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)
-
-{
-
-
- /* Table of constant values */
- int c__1 = 1;
- complex zero = {0.0, 0.0};
- complex one = {1.0, 0.0};
-
- /* System generated locals */
- float d__1;
-
- /* Local variables */
- static int iter;
- static int jump, jlast;
- static float altsgn, estold;
- static int i, j;
- float temp;
- float safmin;
- extern double slamch_(char *);
- extern int icmax1_(int *, complex *, int *);
- extern double scsum1_(int *, complex *, int *);
-
- safmin = slamch_("Safe minimum");
- if ( *kase == 0 ) {
- for (i = 0; i < *n; ++i) {
- x[i].r = 1. / (float) (*n);
- x[i].i = 0.;
- }
- *kase = 1;
- jump = 1;
- return 0;
- }
-
- switch (jump) {
- case 1: goto L20;
- case 2: goto L40;
- case 3: goto L70;
- case 4: goto L110;
- case 5: goto L140;
- }
-
- /* ................ ENTRY (JUMP = 1)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
- L20:
- if (*n == 1) {
- v[0] = x[0];
- *est = c_abs(&v[0]);
- /* ... QUIT */
- goto L150;
- }
- *est = scsum1_(n, x, &c__1);
-
- for (i = 0; i < *n; ++i) {
- d__1 = c_abs(&x[i]);
- if (d__1 > safmin) {
- d__1 = 1 / d__1;
- x[i].r *= d__1;
- x[i].i *= d__1;
- } else {
- x[i] = one;
- }
- }
- *kase = 2;
- jump = 2;
- return 0;
-
- /* ................ ENTRY (JUMP = 2)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
-L40:
- j = icmax1_(n, &x[0], &c__1);
- --j;
- iter = 2;
-
- /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
-L50:
- for (i = 0; i < *n; ++i) x[i] = zero;
- x[j] = one;
- *kase = 1;
- jump = 3;
- return 0;
-
- /* ................ ENTRY (JUMP = 3)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L70:
-#ifdef _CRAY
- CCOPY(n, x, &c__1, v, &c__1);
-#else
- ccopy_(n, x, &c__1, v, &c__1);
-#endif
- estold = *est;
- *est = scsum1_(n, v, &c__1);
-
-
-L90:
- /* TEST FOR CYCLING. */
- if (*est <= estold) goto L120;
-
- for (i = 0; i < *n; ++i) {
- d__1 = c_abs(&x[i]);
- if (d__1 > safmin) {
- d__1 = 1 / d__1;
- x[i].r *= d__1;
- x[i].i *= d__1;
- } else {
- x[i] = one;
- }
- }
- *kase = 2;
- jump = 4;
- return 0;
-
- /* ................ ENTRY (JUMP = 4)
- X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
-L110:
- jlast = j;
- j = icmax1_(n, &x[0], &c__1);
- --j;
- if (x[jlast].r != (d__1 = x[j].r, fabs(d__1)) && iter < 5) {
- ++iter;
- goto L50;
- }
-
- /* ITERATION COMPLETE. FINAL STAGE. */
-L120:
- altsgn = 1.;
- for (i = 1; i <= *n; ++i) {
- x[i-1].r = altsgn * ((float)(i - 1) / (float)(*n - 1) + 1.);
- x[i-1].i = 0.;
- altsgn = -altsgn;
- }
- *kase = 1;
- jump = 5;
- return 0;
-
- /* ................ ENTRY (JUMP = 5)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L140:
- temp = scsum1_(n, x, &c__1) / (float)(*n * 3) * 2.;
- if (temp > *est) {
-#ifdef _CRAY
- CCOPY(n, &x[0], &c__1, &v[0], &c__1);
-#else
- ccopy_(n, &x[0], &c__1, &v[0], &c__1);
-#endif
- *est = temp;
- }
-
-L150:
- *kase = 0;
- return 0;
-
-} /* clacon_ */
diff --git a/SRC/clangs.c b/SRC/clangs.c
deleted file mode 100644
index f6d8506..0000000
--- a/SRC/clangs.c
+++ /dev/null
@@ -1,119 +0,0 @@
-
-/*! @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
- * History: Modified from lapack routine CLANGE
- */
-#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)
-{
-
- /* Local variables */
- NCformat *Astore;
- complex *Aval;
- int i, j, irow;
- float value, sum;
- float *rwork;
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- if ( SUPERLU_MIN(A->nrow, A->ncol) == 0) {
- value = 0.;
-
- } else if (lsame_(norm, "M")) {
- /* Find max(abs(A(i,j))). */
- value = 0.;
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
- value = SUPERLU_MAX( value, c_abs( &Aval[i]) );
-
- } else if (lsame_(norm, "O") || *(unsigned char *)norm == '1') {
- /* Find norm1(A). */
- value = 0.;
- for (j = 0; j < A->ncol; ++j) {
- sum = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
- sum += c_abs( &Aval[i] );
- value = SUPERLU_MAX(value,sum);
- }
-
- } else if (lsame_(norm, "I")) {
- /* Find normI(A). */
- if ( !(rwork = (float *) SUPERLU_MALLOC(A->nrow * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for rwork.");
- for (i = 0; i < A->nrow; ++i) rwork[i] = 0.;
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++) {
- irow = Astore->rowind[i];
- rwork[irow] += c_abs( &Aval[i] );
- }
- value = 0.;
- for (i = 0; i < A->nrow; ++i)
- value = SUPERLU_MAX(value, rwork[i]);
-
- SUPERLU_FREE (rwork);
-
- } else if (lsame_(norm, "F") || lsame_(norm, "E")) {
- /* Find normF(A). */
- ABORT("Not implemented.");
- } else
- ABORT("Illegal norm specified.");
-
- return (value);
-
-} /* clangs */
-
diff --git a/SRC/claqgs.c b/SRC/claqgs.c
deleted file mode 100644
index 8d469cf..0000000
--- a/SRC/claqgs.c
+++ /dev/null
@@ -1,147 +0,0 @@
-
-/*! @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
- * History: Modified from LAPACK routine CLAQGE
- */
-#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)
-{
-
-
-#define THRESH (0.1)
-
- /* Local variables */
- NCformat *Astore;
- complex *Aval;
- int i, j, irow;
- float large, small, cj;
- float temp;
-
-
- /* Quick return if possible */
- if (A->nrow <= 0 || A->ncol <= 0) {
- *(unsigned char *)equed = 'N';
- return;
- }
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Initialize LARGE and SMALL. */
- small = slamch_("Safe minimum") / slamch_("Precision");
- large = 1. / small;
-
- if (rowcnd >= THRESH && amax >= small && amax <= large) {
- if (colcnd >= THRESH)
- *(unsigned char *)equed = 'N';
- else {
- /* Column scaling */
- for (j = 0; j < A->ncol; ++j) {
- cj = c[j];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- cs_mult(&Aval[i], &Aval[i], cj);
- }
- }
- *(unsigned char *)equed = 'C';
- }
- } else if (colcnd >= THRESH) {
- /* Row scaling, no column scaling */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- cs_mult(&Aval[i], &Aval[i], r[irow]);
- }
- *(unsigned char *)equed = 'R';
- } else {
- /* Row and column scaling */
- for (j = 0; j < A->ncol; ++j) {
- cj = c[j];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- temp = cj * r[irow];
- cs_mult(&Aval[i], &Aval[i], temp);
- }
- }
- *(unsigned char *)equed = 'B';
- }
-
- return;
-
-} /* claqgs */
-
diff --git a/SRC/cldperm.c b/SRC/cldperm.c
deleted file mode 100644
index ed566bb..0000000
--- a/SRC/cldperm.c
+++ /dev/null
@@ -1,168 +0,0 @@
-
-/*! @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
deleted file mode 100644
index ef385c2..0000000
--- a/SRC/cmemory.c
+++ /dev/null
@@ -1,701 +0,0 @@
-
-/*! @file cmemory.c
- * \brief Memory details
- *
- * <pre>
- * -- SuperLU routine (version 4.0) --
- * Lawrence Berkeley National Laboratory.
- * June 30, 2009
- * </pre>
- */
-#include "slu_cdefs.h"
-
-
-/* Internal prototypes */
-void *cexpand (int *, MemType,int, int, GlobalLU_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, GlobalLU_t *);
-void *cuser_malloc (int, int, GlobalLU_t *);
-void cuser_free (int, int, GlobalLU_t *);
-
-/* External prototypes (in memory.c - prec-independent) */
-extern void copy_mem_int (int, void *, void *);
-extern void user_bcopy (char *, char *, int);
-
-
-/* Macros to manipulate stack */
-#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) + \
- (w + 1) * m * sizeof(complex) )
-#define Reduce(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */
-
-
-
-
-/*! \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, GlobalLU_t *Glu)
-{
- if ( lwork == 0 ) {
- Glu->MemModel = SYSTEM; /* malloc/free */
- } else if ( lwork > 0 ) {
- 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, GlobalLU_t *Glu)
-{
- void *buf;
-
- if ( StackFull(bytes) ) return (NULL);
-
- if ( which_end == HEAD ) {
- buf = (char*) Glu->stack.array + Glu->stack.top1;
- Glu->stack.top1 += bytes;
- } else {
- Glu->stack.top2 -= bytes;
- buf = (char*) Glu->stack.array + Glu->stack.top2;
- }
-
- Glu->stack.used += bytes;
- return buf;
-}
-
-
-void cuser_free(int bytes, int which_end, GlobalLU_t *Glu)
-{
- if ( which_end == HEAD ) {
- Glu->stack.top1 -= bytes;
- } else {
- Glu->stack.top2 += 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.
- * </pre>
- */
-int cQuerySpace(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(complex);
-
- /* For LU factors */
- 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.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
- (panel_size + 1.0) * n * dword );
-
- return 0;
-} /* cQuerySpace */
-
-
-/*! \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, float fill_ratio, SuperMatrix *L, SuperMatrix *U,
- GlobalLU_t *Glu, int **iwork, complex **dwork)
-{
- int info, iword, dword;
- SCformat *Lstore;
- NCformat *Ustore;
- int *xsup, *supno;
- int *lsub, *xlsub;
- complex *lusup;
- int *xlusup;
- complex *ucol;
- int *usub, *xusub;
- int nzlmax, nzumax, nzlumax;
-
- iword = sizeof(int);
- dword = sizeof(complex);
- Glu->n = n;
- Glu->num_expansions = 0;
-
- 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_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);
- }
-
-#if ( PRNTlevel >= 1 )
- printf("cLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n",
- fill_ratio, 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 *)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 );
- ucol = (complex *) cexpand( &nzumax, UCOL, 0, 0, Glu );
- lsub = (int *) cexpand( &nzlmax, LSUB, 0, 0, Glu );
- usub = (int *) cexpand( &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 {
- cuser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
- HEAD, Glu);
- }
- nzlumax /= 2;
- nzumax /= 2;
- nzlmax /= 2;
- if ( nzlumax < annz ) {
- printf("Not enough memory to perform factorization.\n");
- return (cmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
- }
-#if ( PRNTlevel >= 1)
- printf("cLUMemInit() reduce size: nzlmax %ld, nzumax %ld\n",
- nzlmax, nzumax);
- fflush(stdout);
-#endif
- lusup = (complex *) cexpand( &nzlumax, LUSUP, 0, 0, Glu );
- ucol = (complex *) cexpand( &nzumax, UCOL, 0, 0, Glu );
- lsub = (int *) cexpand( &nzlmax, LSUB, 0, 0, Glu );
- usub = (int *) cexpand( &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;
- Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
- Glu->stack.size = Glu->stack.top2;
- }
-
- 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;
- 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 = cLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
- if ( info )
- return ( info + cmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
-
- ++Glu->num_expansions;
- return 0;
-
-} /* cLUMemInit */
-
-/*! \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, GlobalLU_t *Glu)
-{
- int isize, dsize, extra;
- complex *old_ptr;
- 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 ( Glu->MemModel == SYSTEM )
- *iworkptr = (int *) intCalloc(isize/sizeof(int));
- else
- *iworkptr = (int *) cuser_malloc(isize, TAIL, Glu);
- if ( ! *iworkptr ) {
- fprintf(stderr, "cLUWorkInit: malloc fails for local iworkptr[]\n");
- return (isize + n);
- }
-
- if ( Glu->MemModel == SYSTEM )
- *dworkptr = (complex *) SUPERLU_MALLOC(dsize);
- else {
- *dworkptr = (complex *) cuser_malloc(dsize, TAIL, Glu);
- if ( NotDoubleAlign(*dworkptr) ) {
- old_ptr = *dworkptr;
- *dworkptr = (complex*) DoubleAlign(*dworkptr);
- *dworkptr = (complex*) ((double*)*dworkptr - 1);
- extra = (char*)old_ptr - (char*)*dworkptr;
-#ifdef DEBUG
- printf("cLUWorkInit: not aligned, extra %d\n", extra);
-#endif
- Glu->stack.top2 -= extra;
- Glu->stack.used += extra;
- }
- }
- if ( ! *dworkptr ) {
- fprintf(stderr, "malloc fails for local dworkptr[].");
- return (isize + dsize + n);
- }
-
- return 0;
-}
-
-
-/*! \brief Set up pointers for real working arrays.
- */
-void
-cSetRWork(int m, int panel_size, complex *dworkptr,
- complex **dense, complex **tempv)
-{
- complex zero = {0.0, 0.0};
-
- int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
- rowblk = sp_ienv(4);
- *dense = dworkptr;
- *tempv = *dense + panel_size*m;
- cfill (*dense, m * panel_size, zero);
- cfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);
-}
-
-/*! \brief Free the working storage used by factor routines.
- */
-void cLUWorkFree(int *iwork, complex *dwork, GlobalLU_t *Glu)
-{
- if ( Glu->MemModel == SYSTEM ) {
- SUPERLU_FREE (iwork);
- SUPERLU_FREE (dwork);
- } else {
- Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
- Glu->stack.top2 = Glu->stack.size;
-/* cStackCompress(Glu); */
- }
-
- SUPERLU_FREE (Glu->expanders);
- Glu->expanders = NULL;
-}
-
-/*! \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,
- 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("cLUMemXpand(): jcol %d, next %d, maxlen %d, MemType %d\n",
- jcol, next, *maxlen, mem_type);
-#endif
-
- if (mem_type == USUB)
- new_mem = cexpand(maxlen, mem_type, next, 1, Glu);
- else
- new_mem = cexpand(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 (cmemory_usage(nzlmax, nzumax, nzlumax, Glu->n) + Glu->n);
- }
-
- switch ( mem_type ) {
- case LUSUP:
- Glu->lusup = (complex *) new_mem;
- Glu->nzlumax = *maxlen;
- break;
- case UCOL:
- Glu->ucol = (complex *) 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_complex(int howmany, void *old, void *new)
-{
- register int i;
- complex *dold = old;
- complex *dnew = new;
- for (i = 0; i < howmany; i++) dnew[i] = dold[i];
-}
-
-/*! \brief Expand the existing storage to accommodate more fill-ins.
- */
-void
-*cexpand (
- 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;
- ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
-
- alpha = EXPAND;
-
- if ( Glu->num_expansions == 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(complex);
-
- if ( Glu->MemModel == SYSTEM ) {
- new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
- if ( Glu->num_expansions != 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((size_t)new_len * lword);
- }
- }
- if ( type == LSUB || type == USUB ) {
- copy_mem_int(len_to_copy, expanders[type].mem, new_mem);
- } else {
- copy_mem_complex(len_to_copy, expanders[type].mem, new_mem);
- }
- SUPERLU_FREE (expanders[type].mem);
- }
- expanders[type].mem = (void *) new_mem;
-
- } else { /* MemModel == USER */
- 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;
- new_mem = (void *)DoubleAlign(new_mem);
- extra = (char*)new_mem - (char*)old_mem;
-#ifdef DEBUG
- printf("expand(): not aligned, extra %d\n", extra);
-#endif
- Glu->stack.top1 += extra;
- Glu->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*)Glu->stack.array + Glu->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);
- }
- Glu->stack.top1 += extra;
- Glu->stack.used += extra;
- if ( type == UCOL ) {
- Glu->stack.top1 += extra; /* Add same amount for USUB */
- Glu->stack.used += extra;
- }
-
- } /* if ... */
-
- } /* else ... */
- }
-
- expanders[type].size = new_len;
- *prev_len = new_len;
- if ( Glu->num_expansions ) ++Glu->num_expansions;
-
- return (void *) expanders[type].mem;
-
-} /* cexpand */
-
-
-/*! \brief Compress the work[] array to remove fragmentation.
- */
-void
-cStackCompress(GlobalLU_t *Glu)
-{
- register int iword, dword, ndim;
- char *last, *fragment;
- int *ifrom, *ito;
- complex *dfrom, *dto;
- int *xlsub, *lsub, *xusub, *usub, *xlusup;
- complex *ucol, *lusup;
-
- iword = sizeof(int);
- dword = sizeof(complex);
- 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 = (complex *)((char*)lusup + xlusup[ndim] * dword);
- copy_mem_complex(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*)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;
- Glu->usub = usub;
-
-#ifdef DEBUG
- printf("cStackCompress: fragment %d\n", fragment);
- /* for (last = 0; last < ndim; ++last)
- print_lu_col("After compress:", last, 0);*/
-#endif
-
-}
-
-/*! \brief Allocate storage for original matrix A
- */
-void
-callocateA(int n, int nnz, complex **a, int **asub, int **xa)
-{
- *a = (complex *) complexMalloc(nnz);
- *asub = (int *) intMalloc(nnz);
- *xa = (int *) intMalloc(n+1);
-}
-
-
-complex *complexMalloc(int n)
-{
- complex *buf;
- buf = (complex *) SUPERLU_MALLOC((size_t)n * sizeof(complex));
- if ( !buf ) {
- ABORT("SUPERLU_MALLOC failed for buf in complexMalloc()\n");
- }
- return (buf);
-}
-
-complex *complexCalloc(int n)
-{
- complex *buf;
- register int i;
- complex zero = {0.0, 0.0};
- buf = (complex *) SUPERLU_MALLOC((size_t)n * sizeof(complex));
- if ( !buf ) {
- ABORT("SUPERLU_MALLOC failed for buf in complexCalloc()\n");
- }
- for (i = 0; i < n; ++i) buf[i] = zero;
- return (buf);
-}
-
-
-int cmemory_usage(const int nzlmax, const int nzumax,
- const int nzlumax, const int n)
-{
- register int iword, dword;
-
- iword = sizeof(int);
- dword = sizeof(complex);
-
- return (10 * n * iword +
- nzlmax * iword + nzumax * (iword + dword) + nzlumax * dword);
-
-}
diff --git a/SRC/cmyblas2.c b/SRC/cmyblas2.c
deleted file mode 100644
index d7cf6fa..0000000
--- a/SRC/cmyblas2.c
+++ /dev/null
@@ -1,188 +0,0 @@
-
-/*! @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
- * </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"
-
-/*! \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.
- */
-void clsolve ( int ldm, int ncol, complex *M, complex *rhs )
-{
- int k;
- complex x0, x1, x2, x3, temp;
- complex *M0;
- complex *Mki0, *Mki1, *Mki2, *Mki3;
- register int firstcol = 0;
-
- M0 = &M[0];
-
-
- while ( firstcol < ncol - 3 ) { /* Do 4 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
- Mki2 = Mki1 + ldm + 1;
- Mki3 = Mki2 + ldm + 1;
-
- x0 = rhs[firstcol];
- cc_mult(&temp, &x0, Mki0); Mki0++;
- c_sub(&x1, &rhs[firstcol+1], &temp);
- cc_mult(&temp, &x0, Mki0); Mki0++;
- c_sub(&x2, &rhs[firstcol+2], &temp);
- cc_mult(&temp, &x1, Mki1); Mki1++;
- c_sub(&x2, &x2, &temp);
- cc_mult(&temp, &x0, Mki0); Mki0++;
- c_sub(&x3, &rhs[firstcol+3], &temp);
- cc_mult(&temp, &x1, Mki1); Mki1++;
- c_sub(&x3, &x3, &temp);
- cc_mult(&temp, &x2, Mki2); Mki2++;
- c_sub(&x3, &x3, &temp);
-
- rhs[++firstcol] = x1;
- rhs[++firstcol] = x2;
- rhs[++firstcol] = x3;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++) {
- cc_mult(&temp, &x0, Mki0); Mki0++;
- c_sub(&rhs[k], &rhs[k], &temp);
- cc_mult(&temp, &x1, Mki1); Mki1++;
- c_sub(&rhs[k], &rhs[k], &temp);
- cc_mult(&temp, &x2, Mki2); Mki2++;
- c_sub(&rhs[k], &rhs[k], &temp);
- cc_mult(&temp, &x3, Mki3); Mki3++;
- c_sub(&rhs[k], &rhs[k], &temp);
- }
-
- M0 += 4 * ldm + 4;
- }
-
- if ( firstcol < ncol - 1 ) { /* Do 2 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
-
- x0 = rhs[firstcol];
- cc_mult(&temp, &x0, Mki0); Mki0++;
- c_sub(&x1, &rhs[firstcol+1], &temp);
-
- rhs[++firstcol] = x1;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++) {
- cc_mult(&temp, &x0, Mki0); Mki0++;
- c_sub(&rhs[k], &rhs[k], &temp);
- cc_mult(&temp, &x1, Mki1); Mki1++;
- c_sub(&rhs[k], &rhs[k], &temp);
- }
- }
-
-}
-
-/*! \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.
- */
-void
-cusolve ( ldm, ncol, M, rhs )
-int ldm; /* in */
-int ncol; /* in */
-complex *M; /* in */
-complex *rhs; /* modified */
-{
- complex xj, temp;
- int jcol, j, irow;
-
- jcol = ncol - 1;
-
- for (j = 0; j < ncol; j++) {
-
- c_div(&xj, &rhs[jcol], &M[jcol + jcol*ldm]); /* M(jcol, jcol) */
- rhs[jcol] = xj;
-
- for (irow = 0; irow < jcol; irow++) {
- cc_mult(&temp, &xj, &M[irow+jcol*ldm]); /* M(irow, jcol) */
- c_sub(&rhs[irow], &rhs[irow], &temp);
- }
-
- jcol--;
-
- }
-}
-
-
-/*! \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 )
-int ldm; /* in -- leading dimension of M */
-int nrow; /* in */
-int ncol; /* in */
-complex *M; /* in */
-complex *vec; /* in */
-complex *Mxvec; /* in/out */
-{
- complex vi0, vi1, vi2, vi3;
- complex *M0, temp;
- complex *Mki0, *Mki1, *Mki2, *Mki3;
- register int firstcol = 0;
- int k;
-
- M0 = &M[0];
-
- while ( firstcol < ncol - 3 ) { /* Do 4 columns */
- Mki0 = M0;
- Mki1 = Mki0 + ldm;
- Mki2 = Mki1 + ldm;
- Mki3 = Mki2 + ldm;
-
- vi0 = vec[firstcol++];
- vi1 = vec[firstcol++];
- vi2 = vec[firstcol++];
- vi3 = vec[firstcol++];
- for (k = 0; k < nrow; k++) {
- cc_mult(&temp, &vi0, Mki0); Mki0++;
- c_add(&Mxvec[k], &Mxvec[k], &temp);
- cc_mult(&temp, &vi1, Mki1); Mki1++;
- c_add(&Mxvec[k], &Mxvec[k], &temp);
- cc_mult(&temp, &vi2, Mki2); Mki2++;
- c_add(&Mxvec[k], &Mxvec[k], &temp);
- cc_mult(&temp, &vi3, Mki3); Mki3++;
- c_add(&Mxvec[k], &Mxvec[k], &temp);
- }
-
- M0 += 4 * ldm;
- }
-
- while ( firstcol < ncol ) { /* Do 1 column */
- Mki0 = M0;
- vi0 = vec[firstcol++];
- for (k = 0; k < nrow; k++) {
- cc_mult(&temp, &vi0, Mki0); Mki0++;
- c_add(&Mxvec[k], &Mxvec[k], &temp);
- }
- M0 += ldm;
- }
-
-}
-
diff --git a/SRC/colamd.c b/SRC/colamd.c
deleted file mode 100644
index 72c4390..0000000
--- a/SRC/colamd.c
+++ /dev/null
@@ -1,3414 +0,0 @@
-/*! @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
- linear programming problems, and other related problems.
-
- symamd: an approximate minimum degree ordering algorithm for Cholesky
- factorization of symmetric matrices.
-
- 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 built-in function in MATLAB Version 6,
- available from MathWorks, Inc. (http://www.mathworks.com). This
- routine can be used in place of colmmd in MATLAB.
-
- 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.
-
- 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:
-
- September 8, 2003. Version 2.3.
-
- Acknowledgements:
-
- This work was supported by the National Science Foundation, under
- grants DMS-9504974 and DMS-9803599.
-
- Copyright and License:
-
- Copyright (c) 1998-2003 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, 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.
-
- Availability:
-
- The colamd/symamd library is available at
-
- http://www.cise.ufl.edu/research/sparse/colamd/
-
- This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.c
- file. It requires the colamd.h file. It is required by the colamdmex.c
- and symamdmex.c files, for the MATLAB interface to colamd and symamd.
-
- See the ChangeLog file for changes since Version 1.0.
-
- ==========================================================================
- === Description of user-callable routines ================================
- ==========================================================================
-
-
- ----------------------------------------------------------------------------
- colamd_recommended:
- ----------------------------------------------------------------------------
-
- C syntax:
-
- #include "colamd.h"
- int colamd_recommended (int nnz, int n_row, int n_col) ;
-
- or as a C macro
-
- #include "colamd.h"
- Alen = COLAMD_RECOMMENDED (int nnz, int n_row, int n_col) ;
-
- Purpose:
-
- 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.
-
- Arguments (all input 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:
- ----------------------------------------------------------------------------
-
- C syntax:
-
- #include "colamd.h"
- colamd_set_defaults (double knobs [COLAMD_KNOBS]) ;
-
- Purpose:
-
- Sets the default parameters. The use of this routine is optional.
-
- Arguments:
-
- double knobs [COLAMD_KNOBS] ; Output only.
-
- 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.
-
- 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.
-
- COLAMD_DENSE_ROW and COLAMD_DENSE_COL are defined as 0 and 1,
- respectively, in colamd.h. 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.
-
- ----------------------------------------------------------------------------
- colamd:
- ----------------------------------------------------------------------------
-
- C syntax:
-
- #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]) ;
-
- 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.
-
- Returns:
-
- TRUE (1) if successful, FALSE (0) otherwise.
-
- Arguments:
-
- int n_row ; Input argument.
-
- Number of rows in the matrix A.
- Restriction: n_row >= 0.
- Colamd returns FALSE if n_row is negative.
-
- int n_col ; Input argument.
-
- Number of columns in the matrix A.
- Restriction: n_col >= 0.
- Colamd returns FALSE if n_col is negative.
-
- int Alen ; Input argument.
-
- 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.
-
- Note: this restriction makes an modest assumption regarding
- the size of the two typedef's structures in colamd.h.
- We do, however, guarantee that
-
- Alen >= colamd_recommended (nnz, n_row, n_col)
-
- or equivalently as a C preprocessor macro:
-
- Alen >= COLAMD_RECOMMENDED (nnz, n_row, n_col)
-
- will be sufficient.
-
- int A [Alen] ; Input argument, undefined 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
- undefined on output.
-
- 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 argument.
-
- See colamd_set_defaults for a description.
-
- int stats [COLAMD_STATS] ; Output argument.
-
- Statistics on the ordering, and error status.
- See colamd.h for related definitions.
- Colamd returns FALSE if stats is not present.
-
- stats [0]: number of dense or empty rows ignored.
-
- 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.
-
- stats [2]: number of garbage collections performed.
- This can be excessively high if Alen is close
- to the minimum required value.
-
- stats [3]: status code. < 0 is an error code.
- > 1 is a warning or notice.
-
- 0 OK. Each column of the input matrix contained
- row indices in increasing order, with no
- duplicates.
-
- 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).
-
- 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.
-
- -1 A is a null pointer
-
- -2 p is a null pointer
-
- -3 n_row is negative
-
- stats [4]: n_row
-
- -4 n_col is negative
-
- stats [4]: n_col
-
- -5 number of nonzeros in matrix is negative
-
- stats [4]: number of nonzeros, p [n_col]
-
- -6 p [0] is nonzero
-
- stats [4]: p [0]
-
- -7 A is too small
-
- stats [4]: required size
- stats [5]: actual size (Alen)
-
- -8 a column has a negative number of entries
-
- stats [4]: column with < 0 entries
- stats [5]: number of entries in col
-
- -9 a row index is out of bounds
-
- stats [4]: column with bad row index
- stats [5]: bad row index
- stats [6]: n_row, # of rows of matrx
-
- -10 (unused; see symamd.c)
-
- -999 (unused; see symamd.c)
-
- Future versions may return more statistics in the stats array.
-
- Example:
-
- See http://www.cise.ufl.edu/research/sparse/colamd/example.c
- for a complete example.
-
- To order the columns of a 5-by-4 matrix with 11 nonzero entries in
- the following nonzero pattern
-
- x 0 x 0
- x 0 x x
- 0 x x 0
- 0 0 x x
- x x 0 0
-
- with default knobs and no output statistics, do the following:
-
- #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) ;
-
- The permutation is returned in the array p, and A is destroyed.
-
- ----------------------------------------------------------------------------
- symamd:
- ----------------------------------------------------------------------------
-
- C syntax:
-
- #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 *)) ;
-
- Purpose:
-
- 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.
-
- Returns:
-
- TRUE (1) if successful, FALSE (0) otherwise.
-
- Arguments:
-
- int n ; Input argument.
-
- Number of rows and columns in the symmetrix matrix A.
- Restriction: n >= 0.
- Symamd returns FALSE if n is negative.
-
- int A [nnz] ; Input argument.
-
- A is an integer array of size nnz, where nnz = p [n].
-
- 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.
-
- 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.
-
- The contents of A are not modified.
-
- int p [n+1] ; Input argument.
-
- 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.
-
- The contents of p are not modified.
-
- int perm [n+1] ; Output argument.
-
- 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.
-
- double knobs [COLAMD_KNOBS] ; Input argument.
-
- See colamd_set_defaults for a description.
-
- int stats [COLAMD_STATS] ; Output argument.
-
- Statistics on the ordering, and error status.
- See colamd.h for related definitions.
- Symamd returns FALSE if stats is not present.
-
- 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.
-
- stats [1]: (same as stats [0])
-
- stats [2]: number of garbage collections performed.
-
- stats [3]: status code. < 0 is an error code.
- > 1 is a warning or notice.
-
- 0 OK. Each column of the input matrix contained
- row indices in increasing order, with no
- duplicates.
-
- 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).
-
- 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.
-
- -1 A is a null pointer
-
- -2 p is a null pointer
-
- -3 (unused, see colamd.c)
-
- -4 n is negative
-
- stats [4]: n
-
- -5 number of nonzeros in matrix is negative
-
- stats [4]: # of nonzeros (p [n]).
-
- -6 p [0] is nonzero
-
- stats [4]: p [0]
-
- -7 (unused)
-
- -8 a column has a negative number of entries
-
- stats [4]: column with < 0 entries
- stats [5]: number of entries in col
-
- -9 a row index is out of bounds
-
- stats [4]: column with bad row index
- stats [5]: bad row index
- stats [6]: n_row, # of rows of matrx
-
- -10 out of memory (unable to allocate temporary
- workspace for M or count arrays using the
- "allocate" routine passed into symamd).
-
- -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.
-
- Future versions may return more statistics in the stats array.
-
- void * (*allocate) (size_t, size_t)
-
- 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.
-
- void (*release) (size_t, size_t)
-
- 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.
-
-
- ----------------------------------------------------------------------------
- colamd_report:
- ----------------------------------------------------------------------------
-
- C syntax:
-
- #include "colamd.h"
- colamd_report (int stats [COLAMD_STATS]) ;
-
- Purpose:
-
- 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).
-
- Arguments:
-
- int stats [COLAMD_STATS] ; Input only. Statistics from colamd.
-
-
- ----------------------------------------------------------------------------
- symamd_report:
- ----------------------------------------------------------------------------
-
- C syntax:
-
- #include "colamd.h"
- symamd_report (int stats [COLAMD_STATS]) ;
-
- Purpose:
-
- 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).
-
- Arguments:
-
- int stats [COLAMD_STATS] ; Input only. Statistics from symamd.
-
- </pre>
-*/
-
-/* ========================================================================== */
-/* === Scaffolding code definitions ======================================== */
-/* ========================================================================== */
-
-/* Ensure that debugging is turned off: */
-#ifndef NDEBUG
-#define NDEBUG
-#endif /* NDEBUG */
-
-/*
- 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. For a MATLAB
- mexFunction, you will also need to modify mexopts.sh to remove the -DNDEBUG
- definition. 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). When debugging,
- you should see the following message on the standard output:
-
- colamd: debug version, D = 1 (THIS WILL BE SLOW!)
-
- or a similar message for symamd. If you don't, then debugging has not
- been enabled.
-
-*/
-
-/* ========================================================================== */
-/* === Include files ======================================================== */
-/* ========================================================================== */
-
-#include "colamd.h"
-#include <limits.h>
-
-#ifdef MATLAB_MEX_FILE
-#include "mex.h"
-#include "matrix.h"
-#else
-#include <stdio.h>
-#include <assert.h>
-#endif /* MATLAB_MEX_FILE */
-
-/* ========================================================================== */
-/* === Definitions ========================================================== */
-/* ========================================================================== */
-
-/* Routines are either PUBLIC (user-callable) or PRIVATE (not user-callable) */
-#define PUBLIC
-#define PRIVATE static
-
-#define MAX(a,b) (((a) > (b)) ? (a) : (b))
-#define MIN(a,b) (((a) < (b)) ? (a) : (b))
-
-#define ONES_COMPLEMENT(r) (-(r)-1)
-
-/* -------------------------------------------------------------------------- */
-/* Change for version 2.1: define TRUE and FALSE only if not yet defined */
-/* -------------------------------------------------------------------------- */
-
-#ifndef TRUE
-#define TRUE (1)
-#endif
-
-#ifndef FALSE
-#define FALSE (0)
-#endif
-
-/* -------------------------------------------------------------------------- */
-
-#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 ; }
-
-/* ========================================================================== */
-/* === Colamd reporting mechanism =========================================== */
-/* ========================================================================== */
-
-#ifdef MATLAB_MEX_FILE
-
-/* use mexPrintf in a MATLAB mexFunction, for debugging and statistics output */
-#define PRINTF mexPrintf
-
-/* In MATLAB, matrices are 1-based to the user, but 0-based internally */
-#define INDEX(i) ((i)+1)
-
-#else
-
-/* Use printf in standard C environment, for debugging and statistics output. */
-/* Output is generated only if debugging is enabled at compile time, or if */
-/* the caller explicitly calls colamd_report or symamd_report. */
-#define PRINTF printf
-
-/* In C, matrices are 0-based and indices are reported as such in *_report */
-#define INDEX(i) (i)
-
-#endif /* MATLAB_MEX_FILE */
-
-/* ========================================================================== */
-/* === Prototypes of PRIVATE routines ======================================= */
-/* ========================================================================== */
-
-PRIVATE int init_rows_cols
-(
- int n_row,
- int n_col,
- Colamd_Row Row [],
- Colamd_Col Col [],
- int A [],
- int p [],
- int stats [COLAMD_STATS]
-) ;
-
-PRIVATE void init_scoring
-(
- 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
-) ;
-
-PRIVATE int find_ordering
-(
- 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
-) ;
-
-PRIVATE void order_children
-(
- int n_col,
- Colamd_Col Col [],
- int p []
-) ;
-
-PRIVATE void detect_super_cols
-(
-
-#ifndef NDEBUG
- int n_col,
- Colamd_Row Row [],
-#endif /* NDEBUG */
-
- Colamd_Col Col [],
- int A [],
- int head [],
- int row_start,
- int row_length
-) ;
-
-PRIVATE int garbage_collection
-(
- int n_row,
- int n_col,
- Colamd_Row Row [],
- Colamd_Col Col [],
- int A [],
- int *pfree
-) ;
-
-PRIVATE int clear_mark
-(
- int n_row,
- Colamd_Row Row []
-) ;
-
-PRIVATE void print_report
-(
- char *method,
- int stats [COLAMD_STATS]
-) ;
-
-/* ========================================================================== */
-/* === Debugging prototypes and definitions ================================= */
-/* ========================================================================== */
-
-#ifndef NDEBUG
-
-/* colamd_debug is the *ONLY* global variable, and is only */
-/* present when debugging */
-
-PRIVATE int colamd_debug ; /* debug print level */
-
-#define DEBUG0(params) { (void) PRINTF params ; }
-#define DEBUG1(params) { if (colamd_debug >= 1) (void) PRINTF params ; }
-#define DEBUG2(params) { if (colamd_debug >= 2) (void) PRINTF params ; }
-#define DEBUG3(params) { if (colamd_debug >= 3) (void) PRINTF params ; }
-#define DEBUG4(params) { if (colamd_debug >= 4) (void) PRINTF params ; }
-
-#ifdef MATLAB_MEX_FILE
-#define ASSERT(expression) (mxAssert ((expression), ""))
-#else
-#define ASSERT(expression) (assert (expression))
-#endif /* MATLAB_MEX_FILE */
-
-PRIVATE void colamd_get_debug /* gets the debug print level from getenv */
-(
- char *method
-) ;
-
-PRIVATE void debug_deg_lists
-(
- int n_row,
- int n_col,
- Colamd_Row Row [],
- Colamd_Col Col [],
- int head [],
- int min_score,
- int should,
- int max_deg
-) ;
-
-PRIVATE void debug_mark
-(
- int n_row,
- Colamd_Row Row [],
- int tag_mark,
- int max_mark
-) ;
-
-PRIVATE void debug_matrix
-(
- int n_row,
- int n_col,
- Colamd_Row Row [],
- Colamd_Col Col [],
- int A []
-) ;
-
-PRIVATE void debug_structures
-(
- int n_row,
- int n_col,
- Colamd_Row Row [],
- Colamd_Col Col [],
- int A [],
- int n_col2
-) ;
-
-#else /* NDEBUG */
-
-/* === No debugging ========================================================= */
-
-#define DEBUG0(params) ;
-#define DEBUG1(params) ;
-#define DEBUG2(params) ;
-#define DEBUG3(params) ;
-#define DEBUG4(params) ;
-
-#define ASSERT(expression) ((void) 0)
-
-#endif /* NDEBUG */
-
-/* ========================================================================== */
-
-
-
-/* ========================================================================== */
-/* === 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. If any
- argument is negative, a -1 is returned as an error condition. This
- function is also available as a macro defined in colamd.h, so that you
- can use it for a statically-allocated array size.
-*/
-
-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 */
-)
-{
- return (COLAMD_RECOMMENDED (nnz, n_row, n_col)) ;
-}
-
-
-/* ========================================================================== */
-/* === 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 in colamd. Rows and columns with
- knobs[0]*n_col entries or more are removed prior to
- ordering in symamd and placed last in the output
- ordering.
-
- knobs [1] columns with knobs[1]*n_row entries or more are removed
- prior to ordering in colamd, and placed last in the
- column permutation. Symamd ignores this knob.
-
- 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 */
-}
-
-
-/* ========================================================================== */
-/* === symamd =============================================================== */
-/* ========================================================================== */
-
-PUBLIC int symamd /* return TRUE if OK, FALSE otherwise */
-(
- /* === Parameters ======================================================= */
-
- int n, /* number of rows and columns of A */
- int A [], /* row indices of A */
- int p [], /* column pointers of A */
- int perm [], /* output permutation, size n+1 */
- double knobs [COLAMD_KNOBS], /* parameters (uses defaults if NULL) */
- int stats [COLAMD_STATS], /* output statistics and error codes */
- void * (*allocate) (size_t, size_t),
- /* pointer to calloc (ANSI C) or */
- /* mxCalloc (for MATLAB mexFunction) */
- void (*release) (void *)
- /* pointer to free (ANSI C) or */
- /* mxFree (for MATLAB mexFunction) */
-)
-{
- /* === Local variables ================================================== */
-
- int *count ; /* length of each column of M, and col pointer*/
- int *mark ; /* mark array for finding duplicate entries */
- int *M ; /* row indices of matrix M */
- int Mlen ; /* length of M */
- int n_row ; /* number of rows in M */
- int nnz ; /* number of entries in A */
- int i ; /* row index of A */
- int j ; /* column index of A */
- int k ; /* row index of M */
- int mnz ; /* number of nonzeros in M */
- int pp ; /* index into a column of A */
- int last_row ; /* last row seen in the current column */
- int length ; /* number of nonzeros in a column */
-
- double cknobs [COLAMD_KNOBS] ; /* knobs for colamd */
- double default_knobs [COLAMD_KNOBS] ; /* default knobs for colamd */
- int cstats [COLAMD_STATS] ; /* colamd stats */
-
-#ifndef NDEBUG
- colamd_get_debug ("symamd") ;
-#endif /* NDEBUG */
-
- /* === Check the input arguments ======================================== */
-
- if (!stats)
- {
- DEBUG0 (("symamd: stats not present\n")) ;
- return (FALSE) ;
- }
- for (i = 0 ; i < COLAMD_STATS ; i++)
- {
- stats [i] = 0 ;
- }
- stats [COLAMD_STATUS] = COLAMD_OK ;
- stats [COLAMD_INFO1] = -1 ;
- stats [COLAMD_INFO2] = -1 ;
-
- if (!A)
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_A_not_present ;
- DEBUG0 (("symamd: A not present\n")) ;
- return (FALSE) ;
- }
-
- if (!p) /* p is not present */
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_p_not_present ;
- DEBUG0 (("symamd: p not present\n")) ;
- return (FALSE) ;
- }
-
- if (n < 0) /* n must be >= 0 */
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_ncol_negative ;
- stats [COLAMD_INFO1] = n ;
- DEBUG0 (("symamd: n negative %d\n", n)) ;
- return (FALSE) ;
- }
-
- nnz = p [n] ;
- if (nnz < 0) /* nnz must be >= 0 */
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_nnz_negative ;
- stats [COLAMD_INFO1] = nnz ;
- DEBUG0 (("symamd: number of entries negative %d\n", nnz)) ;
- return (FALSE) ;
- }
-
- if (p [0] != 0)
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_p0_nonzero ;
- stats [COLAMD_INFO1] = p [0] ;
- DEBUG0 (("symamd: p[0] not zero %d\n", p [0])) ;
- return (FALSE) ;
- }
-
- /* === If no knobs, set default knobs =================================== */
-
- if (!knobs)
- {
- colamd_set_defaults (default_knobs) ;
- knobs = default_knobs ;
- }
-
- /* === Allocate count and mark ========================================== */
-
- count = (int *) ((*allocate) (n+1, sizeof (int))) ;
- if (!count)
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_out_of_memory ;
- DEBUG0 (("symamd: allocate count (size %d) failed\n", n+1)) ;
- return (FALSE) ;
- }
-
- mark = (int *) ((*allocate) (n+1, sizeof (int))) ;
- if (!mark)
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_out_of_memory ;
- (*release) ((void *) count) ;
- DEBUG0 (("symamd: allocate mark (size %d) failed\n", n+1)) ;
- return (FALSE) ;
- }
-
- /* === Compute column counts of M, check if A is valid ================== */
-
- stats [COLAMD_INFO3] = 0 ; /* number of duplicate or unsorted row indices*/
-
- for (i = 0 ; i < n ; i++)
- {
- mark [i] = -1 ;
- }
-
- for (j = 0 ; j < n ; j++)
- {
- last_row = -1 ;
-
- length = p [j+1] - p [j] ;
- if (length < 0)
- {
- /* column pointers must be non-decreasing */
- stats [COLAMD_STATUS] = COLAMD_ERROR_col_length_negative ;
- stats [COLAMD_INFO1] = j ;
- stats [COLAMD_INFO2] = length ;
- (*release) ((void *) count) ;
- (*release) ((void *) mark) ;
- DEBUG0 (("symamd: col %d negative length %d\n", j, length)) ;
- return (FALSE) ;
- }
-
- for (pp = p [j] ; pp < p [j+1] ; pp++)
- {
- i = A [pp] ;
- if (i < 0 || i >= n)
- {
- /* row index i, in column j, is out of bounds */
- stats [COLAMD_STATUS] = COLAMD_ERROR_row_index_out_of_bounds ;
- stats [COLAMD_INFO1] = j ;
- stats [COLAMD_INFO2] = i ;
- stats [COLAMD_INFO3] = n ;
- (*release) ((void *) count) ;
- (*release) ((void *) mark) ;
- DEBUG0 (("symamd: row %d col %d out of bounds\n", i, j)) ;
- return (FALSE) ;
- }
-
- if (i <= last_row || mark [i] == j)
- {
- /* row index is unsorted or repeated (or both), thus col */
- /* is jumbled. This is a notice, not an error condition. */
- stats [COLAMD_STATUS] = COLAMD_OK_BUT_JUMBLED ;
- stats [COLAMD_INFO1] = j ;
- stats [COLAMD_INFO2] = i ;
- (stats [COLAMD_INFO3]) ++ ;
- DEBUG1 (("symamd: row %d col %d unsorted/duplicate\n", i, j)) ;
- }
-
- if (i > j && mark [i] != j)
- {
- /* row k of M will contain column indices i and j */
- count [i]++ ;
- count [j]++ ;
- }
-
- /* mark the row as having been seen in this column */
- mark [i] = j ;
-
- last_row = i ;
- }
- }
-
- if (stats [COLAMD_STATUS] == COLAMD_OK)
- {
- /* if there are no duplicate entries, then mark is no longer needed */
- (*release) ((void *) mark) ;
- }
-
- /* === Compute column pointers of M ===================================== */
-
- /* use output permutation, perm, for column pointers of M */
- perm [0] = 0 ;
- for (j = 1 ; j <= n ; j++)
- {
- perm [j] = perm [j-1] + count [j-1] ;
- }
- for (j = 0 ; j < n ; j++)
- {
- count [j] = perm [j] ;
- }
-
- /* === Construct M ====================================================== */
-
- mnz = perm [n] ;
- n_row = mnz / 2 ;
- Mlen = colamd_recommended (mnz, n_row, n) ;
- M = (int *) ((*allocate) (Mlen, sizeof (int))) ;
- DEBUG0 (("symamd: M is %d-by-%d with %d entries, Mlen = %d\n",
- n_row, n, mnz, Mlen)) ;
-
- if (!M)
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_out_of_memory ;
- (*release) ((void *) count) ;
- (*release) ((void *) mark) ;
- DEBUG0 (("symamd: allocate M (size %d) failed\n", Mlen)) ;
- return (FALSE) ;
- }
-
- k = 0 ;
-
- if (stats [COLAMD_STATUS] == COLAMD_OK)
- {
- /* Matrix is OK */
- for (j = 0 ; j < n ; j++)
- {
- ASSERT (p [j+1] - p [j] >= 0) ;
- for (pp = p [j] ; pp < p [j+1] ; pp++)
- {
- i = A [pp] ;
- ASSERT (i >= 0 && i < n) ;
- if (i > j)
- {
- /* row k of M contains column indices i and j */
- M [count [i]++] = k ;
- M [count [j]++] = k ;
- k++ ;
- }
- }
- }
- }
- else
- {
- /* Matrix is jumbled. Do not add duplicates to M. Unsorted cols OK. */
- DEBUG0 (("symamd: Duplicates in A.\n")) ;
- for (i = 0 ; i < n ; i++)
- {
- mark [i] = -1 ;
- }
- for (j = 0 ; j < n ; j++)
- {
- ASSERT (p [j+1] - p [j] >= 0) ;
- for (pp = p [j] ; pp < p [j+1] ; pp++)
- {
- i = A [pp] ;
- ASSERT (i >= 0 && i < n) ;
- if (i > j && mark [i] != j)
- {
- /* row k of M contains column indices i and j */
- M [count [i]++] = k ;
- M [count [j]++] = k ;
- k++ ;
- mark [i] = j ;
- }
- }
- }
- (*release) ((void *) mark) ;
- }
-
- /* count and mark no longer needed */
- (*release) ((void *) count) ;
- ASSERT (k == n_row) ;
-
- /* === Adjust the knobs for M =========================================== */
-
- for (i = 0 ; i < COLAMD_KNOBS ; i++)
- {
- cknobs [i] = knobs [i] ;
- }
-
- /* there are no dense rows in M */
- cknobs [COLAMD_DENSE_ROW] = 1.0 ;
-
- if (n_row != 0 && n < n_row)
- {
- /* On input, the knob is a fraction of 1..n, the number of rows of A. */
- /* Convert it to a fraction of 1..n_row, of the number of rows of M. */
- cknobs [COLAMD_DENSE_COL] = (knobs [COLAMD_DENSE_ROW] * n) / n_row ;
- }
- else
- {
- /* no dense columns in M */
- cknobs [COLAMD_DENSE_COL] = 1.0 ;
- }
-
- DEBUG0 (("symamd: dense col knob for M: %g\n", cknobs [COLAMD_DENSE_COL])) ;
-
- /* === Order the columns of M =========================================== */
-
- if (!colamd (n_row, n, Mlen, M, perm, cknobs, cstats))
- {
- /* This "cannot" happen, unless there is a bug in the code. */
- stats [COLAMD_STATUS] = COLAMD_ERROR_internal_error ;
- (*release) ((void *) M) ;
- DEBUG0 (("symamd: internal error!\n")) ;
- return (FALSE) ;
- }
-
- /* Note that the output permutation is now in perm */
-
- /* === get the statistics for symamd from colamd ======================== */
-
- /* note that a dense column in colamd means a dense row and col in symamd */
- stats [COLAMD_DENSE_ROW] = cstats [COLAMD_DENSE_COL] ;
- stats [COLAMD_DENSE_COL] = cstats [COLAMD_DENSE_COL] ;
- stats [COLAMD_DEFRAG_COUNT] = cstats [COLAMD_DEFRAG_COUNT] ;
-
- /* === Free M =========================================================== */
-
- (*release) ((void *) M) ;
- DEBUG0 (("symamd: done.\n")) ;
- return (TRUE) ;
-
-}
-
-/* ========================================================================== */
-/* === 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.
-*/
-
-PUBLIC int colamd /* returns TRUE if successful, FALSE otherwise*/
-(
- /* === 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) */
- int stats [COLAMD_STATS] /* output statistics and error codes */
-)
-{
- /* === 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 need ; /* minimum required length of A */
- Colamd_Row *Row ; /* pointer into A of Row [0..n_row] array */
- Colamd_Col *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 array */
-
-#ifndef NDEBUG
- colamd_get_debug ("colamd") ;
-#endif /* NDEBUG */
-
- /* === Check the input arguments ======================================== */
-
- if (!stats)
- {
- DEBUG0 (("colamd: stats not present\n")) ;
- return (FALSE) ;
- }
- for (i = 0 ; i < COLAMD_STATS ; i++)
- {
- stats [i] = 0 ;
- }
- stats [COLAMD_STATUS] = COLAMD_OK ;
- stats [COLAMD_INFO1] = -1 ;
- stats [COLAMD_INFO2] = -1 ;
-
- if (!A) /* A is not present */
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_A_not_present ;
- DEBUG0 (("colamd: A not present\n")) ;
- return (FALSE) ;
- }
-
- if (!p) /* p is not present */
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_p_not_present ;
- DEBUG0 (("colamd: p not present\n")) ;
- return (FALSE) ;
- }
-
- if (n_row < 0) /* n_row must be >= 0 */
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_nrow_negative ;
- stats [COLAMD_INFO1] = n_row ;
- DEBUG0 (("colamd: nrow negative %d\n", n_row)) ;
- return (FALSE) ;
- }
-
- if (n_col < 0) /* n_col must be >= 0 */
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_ncol_negative ;
- stats [COLAMD_INFO1] = n_col ;
- DEBUG0 (("colamd: ncol negative %d\n", n_col)) ;
- return (FALSE) ;
- }
-
- nnz = p [n_col] ;
- if (nnz < 0) /* nnz must be >= 0 */
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_nnz_negative ;
- stats [COLAMD_INFO1] = nnz ;
- DEBUG0 (("colamd: number of entries negative %d\n", nnz)) ;
- return (FALSE) ;
- }
-
- if (p [0] != 0)
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_p0_nonzero ;
- stats [COLAMD_INFO1] = p [0] ;
- DEBUG0 (("colamd: p[0] not zero %d\n", p [0])) ;
- return (FALSE) ;
- }
-
- /* === If no knobs, set default knobs =================================== */
-
- if (!knobs)
- {
- colamd_set_defaults (default_knobs) ;
- knobs = default_knobs ;
- }
-
- /* === Allocate the Row and Col arrays from array A ===================== */
-
- Col_size = COLAMD_C (n_col) ;
- Row_size = COLAMD_R (n_row) ;
- need = 2*nnz + n_col + Col_size + Row_size ;
-
- if (need > Alen)
- {
- /* not enough space in array A to perform the ordering */
- stats [COLAMD_STATUS] = COLAMD_ERROR_A_too_small ;
- stats [COLAMD_INFO1] = need ;
- stats [COLAMD_INFO2] = Alen ;
- DEBUG0 (("colamd: Need Alen >= %d, given only Alen = %d\n", need,Alen));
- return (FALSE) ;
- }
-
- Alen -= Col_size + Row_size ;
- Col = (Colamd_Col *) &A [Alen] ;
- Row = (Colamd_Row *) &A [Alen + Col_size] ;
-
- /* === Construct the row and column data structures ===================== */
-
- if (!init_rows_cols (n_row, n_col, Row, Col, A, p, stats))
- {
- /* input matrix is invalid */
- DEBUG0 (("colamd: 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 stats ======================================= */
-
- stats [COLAMD_DENSE_ROW] = n_row - n_row2 ;
- stats [COLAMD_DENSE_COL] = n_col - n_col2 ;
- stats [COLAMD_DEFRAG_COUNT] = ngarbage ;
- DEBUG0 (("colamd: done.\n")) ;
- return (TRUE) ;
-}
-
-
-/* ========================================================================== */
-/* === colamd_report ======================================================== */
-/* ========================================================================== */
-
-PUBLIC void colamd_report
-(
- int stats [COLAMD_STATS]
-)
-{
- print_report ("colamd", stats) ;
-}
-
-
-/* ========================================================================== */
-/* === symamd_report ======================================================== */
-/* ========================================================================== */
-
-PUBLIC void symamd_report
-(
- int stats [COLAMD_STATS]
-)
-{
- print_report ("symamd", stats) ;
-}
-
-
-
-/* ========================================================================== */
-/* === 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 FALSE if the matrix is invalid,
- TRUE otherwise. Not user-callable.
-*/
-
-PRIVATE int init_rows_cols /* returns TRUE if OK, or FALSE otherwise */
-(
- /* === Parameters ======================================================= */
-
- int n_row, /* number of rows of A */
- int n_col, /* number of columns of A */
- Colamd_Row Row [], /* of size n_row+1 */
- Colamd_Col 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 */
- int stats [COLAMD_STATS] /* colamd statistics */
-)
-{
- /* === 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_row ; /* previous row */
-
- /* === Initialize columns, and check column pointers ==================== */
-
- for (col = 0 ; col < n_col ; col++)
- {
- Col [col].start = p [col] ;
- Col [col].length = p [col+1] - p [col] ;
-
- if (Col [col].length < 0)
- {
- /* column pointers must be non-decreasing */
- stats [COLAMD_STATUS] = COLAMD_ERROR_col_length_negative ;
- stats [COLAMD_INFO1] = col ;
- stats [COLAMD_INFO2] = Col [col].length ;
- DEBUG0 (("colamd: col %d length %d < 0\n", col, Col [col].length)) ;
- return (FALSE) ;
- }
-
- Col [col].shared1.thickness = 1 ;
- Col [col].shared2.score = 0 ;
- Col [col].shared3.prev = EMPTY ;
- Col [col].shared4.degree_next = EMPTY ;
- }
-
- /* p [0..n_col] no longer needed, used as "head" in subsequent routines */
-
- /* === Scan columns, compute row degrees, and check row indices ========= */
-
- stats [COLAMD_INFO3] = 0 ; /* number of duplicate or unsorted row indices*/
-
- 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)
- {
- stats [COLAMD_STATUS] = COLAMD_ERROR_row_index_out_of_bounds ;
- stats [COLAMD_INFO1] = col ;
- stats [COLAMD_INFO2] = row ;
- stats [COLAMD_INFO3] = n_row ;
- DEBUG0 (("colamd: row %d col %d out of bounds\n", row, col)) ;
- return (FALSE) ;
- }
-
- if (row <= last_row || Row [row].shared2.mark == col)
- {
- /* row index are unsorted or repeated (or both), thus col */
- /* is jumbled. This is a notice, not an error condition. */
- stats [COLAMD_STATUS] = COLAMD_OK_BUT_JUMBLED ;
- stats [COLAMD_INFO1] = col ;
- stats [COLAMD_INFO2] = row ;
- (stats [COLAMD_INFO3]) ++ ;
- DEBUG1 (("colamd: row %d col %d unsorted/duplicate\n",row,col));
- }
-
- if (Row [row].shared2.mark != col)
- {
- Row [row].length++ ;
- }
- else
- {
- /* this is a repeated entry in the column, */
- /* it will be removed */
- Col [col].length-- ;
- }
-
- /* mark the row as having been seen in this column */
- Row [row].shared2.mark = col ;
-
- last_row = row ;
- }
- }
-
- /* === 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 (stats [COLAMD_STATUS] == COLAMD_OK_BUT_JUMBLED)
- {
- /* 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 (stats [COLAMD_STATUS] == COLAMD_OK_BUT_JUMBLED)
- {
- DEBUG0 (("colamd: reconstructing column form, matrix jumbled\n")) ;
-
-#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 /* NDEBUG */
-
- /* === 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 ;
- }
- }
- }
-
- /* === Done. Matrix is not (or no longer) jumbled ====================== */
-
- return (TRUE) ;
-}
-
-
-/* ========================================================================== */
-/* === 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 */
- Colamd_Row Row [], /* of size n_row+1 */
- Colamd_Col 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 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 /* NDEBUG */
-
- /* === 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)) ;
- DEBUG1 (("colamd: 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 order, 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) ;
- }
- }
- DEBUG1 (("colamd: 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) ;
- }
- }
- DEBUG1 (("colamd: 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) ;
- }
- }
- DEBUG1 (("colamd: 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) */
- DEBUG2 (("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 ;
- }
- }
- DEBUG1 (("colamd: 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 /* NDEBUG */
-
- /* === Initialize degree lists ========================================== */
-
-#ifndef NDEBUG
- debug_count = 0 ;
-#endif /* NDEBUG */
-
- /* 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 /* NDEBUG */
-
- }
- }
-
-#ifndef NDEBUG
- DEBUG1 (("colamd: 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 /* NDEBUG */
-
- /* === 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 + n_col or larger */
- Colamd_Row Row [], /* of size n_row+1 */
- Colamd_Col 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 ; /* number of columns in pivot row */
- int pivot_row_length ; /* number 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" (no. 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 /* NDEBUG */
-
- /* === 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 ;
- DEBUG1 (("colamd: 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)
- {
- DEBUG2 (("\n... Step k: %d out of n_col2: %d\n", k, n_col2)) ;
- }
- else
- {
- DEBUG3 (("\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 /* NDEBUG */
-
- /* === 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 /* NDEBUG */
-
- /* 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 /* NDEBUG */
- }
-
- /* === 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 /* NDEBUG */
-
- /* === 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++ ;
- DEBUG3 (("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] ;
- DEBUG3 (("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 ====================================== */
-
- DEBUG3 (("** Computing set differences phase. **\n")) ;
-
- /* pivot row is currently dead - it will be revived later. */
-
- DEBUG3 (("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) ;
- DEBUG3 (("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)
- {
- DEBUG3 (("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 /* NDEBUG */
-
- /* === Add up set differences for each column ======================= */
-
- DEBUG3 (("** 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 ;
-
- DEBUG4 (("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)
- {
- DEBUG4 (("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 ==================== */
-
- DEBUG4 (("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 ;
-
- DEBUG4 ((" 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 ======================================== */
-
- DEBUG3 (("** Supercolumn detection phase. **\n")) ;
-
- detect_super_cols (
-
-#ifndef NDEBUG
- n_col, Row,
-#endif /* NDEBUG */
-
- 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)
- {
- DEBUG2 (("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 /* NDEBUG */
-
- /* === Finalize the new pivot row, and column scores ================ */
-
- DEBUG3 (("** 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 /* NDEBUG */
-
- /* === 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 */
- Colamd_Col 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 */
- Colamd_Row Row [], /* of size n_row+1 */
-#endif /* NDEBUG */
-
- Colamd_Col 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 value 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 */
- Colamd_Row Row [], /* row info */
- Colamd_Col 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 ;
- DEBUG2 (("Defrag..\n")) ;
- for (psrc = &A[0] ; psrc < pfree ; psrc++) ASSERT (*psrc >= 0) ;
- debug_rows = 0 ;
-#endif /* NDEBUG */
-
- /* === 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 */
- DEBUG3 (("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 /* NDEBUG */
-
- }
- }
- }
-
- /* === 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 /* NDEBUG */
-
- }
- }
- /* 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 */
- Colamd_Row Row [] /* Row [0 ... n_row-1].shared2.mark is set to zero */
-)
-{
- /* === Local variables ================================================== */
-
- int r ;
-
- for (r = 0 ; r < n_row ; r++)
- {
- if (ROW_IS_ALIVE (r))
- {
- Row [r].shared2.mark = 0 ;
- }
- }
- return (1) ;
-}
-
-
-/* ========================================================================== */
-/* === print_report ========================================================= */
-/* ========================================================================== */
-
-PRIVATE void print_report
-(
- char *method,
- int stats [COLAMD_STATS]
-)
-{
-
- int i1, i2, i3 ;
-
- if (!stats)
- {
- PRINTF ("%s: No statistics available.\n", method) ;
- return ;
- }
-
- i1 = stats [COLAMD_INFO1] ;
- i2 = stats [COLAMD_INFO2] ;
- i3 = stats [COLAMD_INFO3] ;
-
- if (stats [COLAMD_STATUS] >= 0)
- {
- PRINTF ("%s: OK. ", method) ;
- }
- else
- {
- PRINTF ("%s: ERROR. ", method) ;
- }
-
- switch (stats [COLAMD_STATUS])
- {
-
- case COLAMD_OK_BUT_JUMBLED:
-
- PRINTF ("Matrix has unsorted or duplicate row indices.\n") ;
-
- PRINTF ("%s: number of duplicate or out-of-order row indices: %d\n",
- method, i3) ;
-
- PRINTF ("%s: last seen duplicate or out-of-order row index: %d\n",
- method, INDEX (i2)) ;
-
- PRINTF ("%s: last seen in column: %d",
- method, INDEX (i1)) ;
-
- /* no break - fall through to next case instead */
-
- case COLAMD_OK:
-
- PRINTF ("\n") ;
-
- PRINTF ("%s: number of dense or empty rows ignored: %d\n",
- method, stats [COLAMD_DENSE_ROW]) ;
-
- PRINTF ("%s: number of dense or empty columns ignored: %d\n",
- method, stats [COLAMD_DENSE_COL]) ;
-
- PRINTF ("%s: number of garbage collections performed: %d\n",
- method, stats [COLAMD_DEFRAG_COUNT]) ;
- break ;
-
- case COLAMD_ERROR_A_not_present:
-
- PRINTF ("Array A (row indices of matrix) not present.\n") ;
- break ;
-
- case COLAMD_ERROR_p_not_present:
-
- PRINTF ("Array p (column pointers for matrix) not present.\n") ;
- break ;
-
- case COLAMD_ERROR_nrow_negative:
-
- PRINTF ("Invalid number of rows (%d).\n", i1) ;
- break ;
-
- case COLAMD_ERROR_ncol_negative:
-
- PRINTF ("Invalid number of columns (%d).\n", i1) ;
- break ;
-
- case COLAMD_ERROR_nnz_negative:
-
- PRINTF ("Invalid number of nonzero entries (%d).\n", i1) ;
- break ;
-
- case COLAMD_ERROR_p0_nonzero:
-
- PRINTF ("Invalid column pointer, p [0] = %d, must be zero.\n", i1) ;
- break ;
-
- case COLAMD_ERROR_A_too_small:
-
- PRINTF ("Array A too small.\n") ;
- PRINTF (" Need Alen >= %d, but given only Alen = %d.\n",
- i1, i2) ;
- break ;
-
- case COLAMD_ERROR_col_length_negative:
-
- PRINTF
- ("Column %d has a negative number of nonzero entries (%d).\n",
- INDEX (i1), i2) ;
- break ;
-
- case COLAMD_ERROR_row_index_out_of_bounds:
-
- PRINTF
- ("Row index (row %d) out of bounds (%d to %d) in column %d.\n",
- INDEX (i2), INDEX (0), INDEX (i3-1), INDEX (i1)) ;
- break ;
-
- case COLAMD_ERROR_out_of_memory:
-
- PRINTF ("Out of memory.\n") ;
- break ;
-
- case COLAMD_ERROR_internal_error:
-
- /* if this happens, there is a bug in the code */
- PRINTF
- ("Internal error! Please contact authors (davis at cise.ufl.edu).\n") ;
- break ;
- }
-}
-
-
-
-
-/* ========================================================================== */
-/* === colamd 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,
- Colamd_Row Row [],
- Colamd_Col 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,
- Colamd_Row Row [],
- Colamd_Col 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 && colamd_debug <= 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 && colamd_debug <= 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,
- Colamd_Row 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 && colamd_debug <= 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,
- Colamd_Row Row [],
- Colamd_Col 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 (colamd_debug < 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++ ;
- DEBUG4 ((" %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++ ;
- DEBUG4 ((" %d row %d\n", ROW_IS_ALIVE (r), r)) ;
- }
- }
-}
-
-PRIVATE void colamd_get_debug
-(
- char *method
-)
-{
- colamd_debug = 0 ; /* no debug printing */
-
- /* get "D" environment variable, which gives the debug printing level */
- if (getenv ("D"))
- {
- colamd_debug = atoi (getenv ("D")) ;
- }
-
- DEBUG0 (("%s: debug version, D = %d (THIS WILL BE SLOW!)\n",
- method, colamd_debug)) ;
-}
-
-#endif /* NDEBUG */
-
diff --git a/SRC/colamd.h b/SRC/colamd.h
deleted file mode 100644
index aacbd3f..0000000
--- a/SRC/colamd.h
+++ /dev/null
@@ -1,249 +0,0 @@
-/*! @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.
-
- 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:
-
- September 8, 2003. Version 2.3.
-
- Acknowledgements:
-
- This work was supported by the National Science Foundation, under
- grants DMS-9504974 and DMS-9803599.
-
- Notice:
-
- Copyright (c) 1998-2003 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, 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.
-
- Availability:
-
- The colamd/symamd library is available at
-
- http://www.cise.ufl.edu/research/sparse/colamd/
-
- This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.h
- 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
-#define COLAMD_H
-
-/* ========================================================================== */
-/* === Include files ======================================================== */
-/* ========================================================================== */
-
-#include <stdlib.h>
-
-/* ========================================================================== */
-/* === Knob and statistics definitions ====================================== */
-/* ========================================================================== */
-
-/* size of the knobs [ ] array. Only knobs [0..1] are currently used. */
-#define COLAMD_KNOBS 20
-
-/* number of output statistics. Only stats [0..6] are currently used. */
-#define COLAMD_STATS 20
-
-/* knobs [0] and stats [0]: dense row knob and output statistic. */
-#define COLAMD_DENSE_ROW 0
-
-/* knobs [1] and stats [1]: dense column knob and output statistic. */
-#define COLAMD_DENSE_COL 1
-
-/* stats [2]: memory defragmentation count output statistic */
-#define COLAMD_DEFRAG_COUNT 2
-
-/* stats [3]: colamd status: zero OK, > 0 warning or notice, < 0 error */
-#define COLAMD_STATUS 3
-
-/* stats [4..6]: error info, or info on jumbled columns */
-#define COLAMD_INFO1 4
-#define COLAMD_INFO2 5
-#define COLAMD_INFO3 6
-
-/* error codes returned in stats [3]: */
-#define COLAMD_OK (0)
-#define COLAMD_OK_BUT_JUMBLED (1)
-#define COLAMD_ERROR_A_not_present (-1)
-#define COLAMD_ERROR_p_not_present (-2)
-#define COLAMD_ERROR_nrow_negative (-3)
-#define COLAMD_ERROR_ncol_negative (-4)
-#define COLAMD_ERROR_nnz_negative (-5)
-#define COLAMD_ERROR_p0_nonzero (-6)
-#define COLAMD_ERROR_A_too_small (-7)
-#define COLAMD_ERROR_col_length_negative (-8)
-#define COLAMD_ERROR_row_index_out_of_bounds (-9)
-#define COLAMD_ERROR_out_of_memory (-10)
-#define COLAMD_ERROR_internal_error (-999)
-
-/* ========================================================================== */
-/* === Row and Column structures ============================================ */
-/* ========================================================================== */
-
-/* User code that makes use of the colamd/symamd routines need not directly */
-/* reference these structures. They are used only for the COLAMD_RECOMMENDED */
-/* macro. */
-
-typedef struct Colamd_Col_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 ;
-
-} Colamd_Col ;
-
-typedef struct Colamd_Row_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 ;
-
-} Colamd_Row ;
-
-/* ========================================================================== */
-/* === Colamd recommended memory size ======================================= */
-/* ========================================================================== */
-
-/*
- The recommended length Alen of the array A passed to colamd is given by
- the COLAMD_RECOMMENDED (nnz, n_row, n_col) macro. It returns -1 if any
- argument is negative. 2*nnz space is required for the row and column
- indices of the matrix. COLAMD_C (n_col) + COLAMD_R (n_row) space is
- required for the Col and Row arrays, respectively, which are internal to
- colamd. An additional n_col space is the minimal amount of "elbow room",
- and nnz/5 more space is recommended for run time efficiency.
-
- This macro is not needed when using symamd.
-
- Explicit typecast to int added Sept. 23, 2002, COLAMD version 2.2, to avoid
- gcc -pedantic warning messages.
-*/
-
-#define COLAMD_C(n_col) ((int) (((n_col) + 1) * sizeof (Colamd_Col) / sizeof (int)))
-#define COLAMD_R(n_row) ((int) (((n_row) + 1) * sizeof (Colamd_Row) / sizeof (int)))
-
-#define COLAMD_RECOMMENDED(nnz, n_row, n_col) \
-( \
-((nnz) < 0 || (n_row) < 0 || (n_col) < 0) \
-? \
- (-1) \
-: \
- (2 * (nnz) + COLAMD_C (n_col) + COLAMD_R (n_row) + (n_col) + ((nnz) / 5)) \
-)
-
-/* ========================================================================== */
-/* === Prototypes of user-callable routines ================================= */
-/* ========================================================================== */
-
-int colamd_recommended /* returns recommended value of Alen, */
- /* or (-1) if input arguments are erroneous */
-(
- 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 (1) if successful, (0) 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 */
- int stats [COLAMD_STATS] /* colamd output statistics and error codes */
-) ;
-
-int symamd /* return (1) if OK, (0) otherwise */
-(
- int n, /* number of rows and columns of A */
- int A [], /* row indices of A */
- int p [], /* column pointers of A */
- int perm [], /* output permutation, size n_col+1 */
- double knobs [COLAMD_KNOBS], /* parameters (uses defaults if NULL) */
- int stats [COLAMD_STATS], /* output statistics and error codes */
- void * (*allocate) (size_t, size_t),
- /* pointer to calloc (ANSI C) or */
- /* mxCalloc (for MATLAB mexFunction) */
- void (*release) (void *)
- /* pointer to free (ANSI C) or */
- /* mxFree (for MATLAB mexFunction) */
-) ;
-
-void colamd_report
-(
- int stats [COLAMD_STATS]
-) ;
-
-void symamd_report
-(
- int stats [COLAMD_STATS]
-) ;
-
-#endif /* COLAMD_H */
diff --git a/SRC/cpanel_bmod.c b/SRC/cpanel_bmod.c
deleted file mode 100644
index 93dc4ba..0000000
--- a/SRC/cpanel_bmod.c
+++ /dev/null
@@ -1,487 +0,0 @@
-
-/*! @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>
- */
-/*
-
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "slu_cdefs.h"
-
-/*
- * Function prototypes
- */
-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 */
- const int w, /* in */
- const int jcol, /* in */
- const int nseg, /* in */
- complex *dense, /* out, of size n by w */
- complex *tempv, /* working array */
- int *segrep, /* in */
- int *repfnz, /* in, of size n by w */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- complex alpha, beta;
-#endif
-
- register int k, ksub;
- int fsupc, nsupc, nsupr, nrow;
- int krep, krep_ind;
- complex ukj, ukj1, ukj2;
- int luptr, luptr1, luptr2;
- int segsze;
- int block_nrow; /* no of rows in a block row */
- register int lptr; /* Points to the row subscripts of a supernode */
- int kfnz, irow, no_zeros;
- register int isub, isub1, i;
- register int jj; /* Index through each column in the panel */
- int *xsup, *supno;
- int *lsub, *xlsub;
- complex *lusup;
- int *xlusup;
- int *repfnz_col; /* repfnz[] for a column in the panel */
- complex *dense_col; /* dense[] for a column in the panel */
- complex *tempv1; /* Used in 1-D update */
- complex *TriTmp, *MatvecTmp; /* used in 2-D update */
- complex zero = {0.0, 0.0};
- complex one = {1.0, 0.0};
- complex comp_temp, comp_temp1;
- register int ldaTmp;
- register int r_ind, r_hi;
- static int first = 1, maxsuper, rowblk, colblk;
- flops_t *ops = stat->ops;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- if ( first ) {
- maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
- rowblk = sp_ienv(4);
- colblk = sp_ienv(5);
- first = 0;
- }
- ldaTmp = maxsuper + rowblk;
-
- /*
- * For each nonz supernode segment of U[*,j] in topological order
- */
- k = nseg - 1;
- for (ksub = 0; ksub < nseg; ksub++) { /* for each updating supernode */
-
- /* krep = representative of current k-th supernode
- * fsupc = first supernodal column
- * nsupc = no of columns in a supernode
- * nsupr = no of rows in a supernode
- */
- krep = segrep[k--];
- fsupc = xsup[supno[krep]];
- nsupc = krep - fsupc + 1;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc];
- nrow = nsupr - nsupc;
- lptr = xlsub[fsupc];
- krep_ind = lptr + nsupc - 1;
-
- repfnz_col = repfnz;
- dense_col = dense;
-
- if ( nsupc >= colblk && nrow > rowblk ) { /* 2-D block update */
-
- TriTmp = tempv;
-
- /* Sequence through each column in panel -- triangular solves */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp ) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- luptr = xlusup[fsupc];
-
- ops[TRSV] += 4 * segsze * (segsze - 1);
- ops[GEMV] += 8 * nrow * segsze;
-
- /* Case 1: Update U-segment of size 1 -- col-col update */
- if ( segsze == 1 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
- irow = lsub[i];
- cc_mult(&comp_temp, &ukj, &lusup[luptr]);
- c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- ++luptr;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense_col[lsub[krep_ind]];
- ukj1 = dense_col[lsub[krep_ind - 1]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) {
- cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- c_sub(&ukj, &ukj, &comp_temp);
- dense_col[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++; luptr1++;
- cc_mult(&comp_temp, &ukj, &lusup[luptr]);
- cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- }
- } else {
- ukj2 = dense_col[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- cc_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
- c_sub(&ukj1, &ukj1, &comp_temp);
-
- cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- c_sub(&ukj, &ukj, &comp_temp);
- dense_col[lsub[krep_ind]] = ukj;
- dense_col[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++; luptr1++; luptr2++;
- cc_mult(&comp_temp, &ukj, &lusup[luptr]);
- cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- }
- }
-
- } else { /* segsze >= 4 */
-
- /* Copy U[*,j] segment from dense[*] to TriTmp[*], which
- holds the result of triangular solves. */
- no_zeros = kfnz - fsupc;
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; ++i) {
- irow = lsub[isub];
- TriTmp[i] = dense_col[irow]; /* Gather */
- ++isub;
- }
-
- /* start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, TriTmp, &incx );
-#else
- ctrsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, TriTmp, &incx );
-#endif
-#else
- clsolve ( nsupr, segsze, &lusup[luptr], TriTmp );
-#endif
-
-
- } /* else ... */
-
- } /* for jj ... end tri-solves */
-
- /* Block row updates; push all the way into dense[*] block */
- for ( r_ind = 0; r_ind < nrow; r_ind += rowblk ) {
-
- r_hi = SUPERLU_MIN(nrow, r_ind + rowblk);
- block_nrow = SUPERLU_MIN(rowblk, r_hi - r_ind);
- luptr = xlusup[fsupc] + nsupc + r_ind;
- isub1 = lptr + nsupc + r_ind;
-
- repfnz_col = repfnz;
- TriTmp = tempv;
- dense_col = dense;
-
- /* Sequence through each column in panel -- matrix-vector */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- if ( segsze <= 3 ) continue; /* skip unrolled cases */
-
- /* Perform a block update, and scatter the result of
- matrix-vector to dense[]. */
- no_zeros = kfnz - fsupc;
- luptr1 = luptr + nsupr * no_zeros;
- MatvecTmp = &TriTmp[maxsuper];
-
-#ifdef USE_VENDOR_BLAS
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- CGEMV(ftcs2, &block_nrow, &segsze, &alpha, &lusup[luptr1],
- &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
-#else
- cgemv_("N", &block_nrow, &segsze, &alpha, &lusup[luptr1],
- &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
-#endif
-#else
- cmatvec(nsupr, block_nrow, segsze, &lusup[luptr1],
- TriTmp, MatvecTmp);
-#endif
-
- /* Scatter MatvecTmp[*] into SPA dense[*] temporarily
- * such that MatvecTmp[*] can be re-used for the
- * the next blok row update. dense[] will be copied into
- * global store after the whole panel has been finished.
- */
- isub = isub1;
- for (i = 0; i < block_nrow; i++) {
- irow = lsub[isub];
- c_sub(&dense_col[irow], &dense_col[irow],
- &MatvecTmp[i]);
- MatvecTmp[i] = zero;
- ++isub;
- }
-
- } /* for jj ... */
-
- } /* for each block row ... */
-
- /* Scatter the triangular solves into SPA dense[*] */
- repfnz_col = repfnz;
- TriTmp = tempv;
- dense_col = dense;
-
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- if ( segsze <= 3 ) continue; /* skip unrolled cases */
-
- no_zeros = kfnz - fsupc;
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense_col[irow] = TriTmp[i];
- TriTmp[i] = zero;
- ++isub;
- }
-
- } /* for jj ... */
-
- } else { /* 1-D block modification */
-
-
- /* Sequence through each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- luptr = xlusup[fsupc];
-
- ops[TRSV] += 4 * segsze * (segsze - 1);
- ops[GEMV] += 8 * nrow * segsze;
-
- /* Case 1: Update U-segment of size 1 -- col-col update */
- if ( segsze == 1 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
- irow = lsub[i];
- cc_mult(&comp_temp, &ukj, &lusup[luptr]);
- c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- ++luptr;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- ukj1 = dense_col[lsub[krep_ind - 1]];
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) {
- cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- c_sub(&ukj, &ukj, &comp_temp);
- dense_col[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- ++luptr; ++luptr1;
- cc_mult(&comp_temp, &ukj, &lusup[luptr]);
- cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- }
- } else {
- ukj2 = dense_col[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- cc_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
- c_sub(&ukj1, &ukj1, &comp_temp);
-
- cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- c_sub(&ukj, &ukj, &comp_temp);
- dense_col[lsub[krep_ind]] = ukj;
- dense_col[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- ++luptr; ++luptr1; ++luptr2;
- cc_mult(&comp_temp, &ukj, &lusup[luptr]);
- cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- c_add(&comp_temp, &comp_temp, &comp_temp1);
- c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- }
- }
-
- } else { /* segsze >= 4 */
- /*
- * Perform a triangular solve and block update,
- * then scatter the result of sup-col update to dense[].
- */
- no_zeros = kfnz - fsupc;
-
- /* Copy U[*,j] segment from dense[*] to tempv[*]:
- * The result of triangular solve is in tempv[*];
- * The result of matrix vector update is in dense_col[*]
- */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; ++i) {
- irow = lsub[isub];
- tempv[i] = dense_col[irow]; /* Gather */
- ++isub;
- }
-
- /* start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#else
- ctrsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#endif
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- CGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#else
- cgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#endif
-#else
- clsolve ( nsupr, segsze, &lusup[luptr], tempv );
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- cmatvec (nsupr, nrow, segsze, &lusup[luptr], tempv, tempv1);
-#endif
-
- /* Scatter tempv[*] into SPA dense[*] temporarily, such
- * that tempv[*] can be used for the triangular solve of
- * the next column of the panel. They will be copied into
- * ucol[*] after the whole panel has been finished.
- */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense_col[irow] = tempv[i];
- tempv[i] = zero;
- isub++;
- }
-
- /* Scatter the update from tempv1[*] into SPA dense[*] */
- /* Start dense rectangular L */
- for (i = 0; i < nrow; i++) {
- irow = lsub[isub];
- c_sub(&dense_col[irow], &dense_col[irow], &tempv1[i]);
- tempv1[i] = zero;
- ++isub;
- }
-
- } /* else segsze>=4 ... */
-
- } /* for each column in the panel... */
-
- } /* else 1-D update ... */
-
- } /* for each updating supernode ... */
-
-}
-
-
-
diff --git a/SRC/cpanel_dfs.c b/SRC/cpanel_dfs.c
deleted file mode 100644
index 57a603e..0000000
--- a/SRC/cpanel_dfs.c
+++ /dev/null
@@ -1,254 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_cdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
- *
- * 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 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.
- *
- * 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;
- *
- * 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>
- */
-
-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;
- int *xa_begin, *xa_end;
- 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 *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;
-
- /* Initialize pointers */
- Astore = A->Store;
- a = Astore->nzval;
- asub = Astore->rowind;
- xa_begin = Astore->colbeg;
- xa_end = Astore->colend;
- marker1 = marker + m;
- repfnz_col = repfnz;
- dense_col = dense;
- *nseg = 0;
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
-
- /* For each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++) {
- nextl_col = (jj - jcol) * m;
-
-#ifdef CHK_DFS
- printf("\npanel col %d: ", jj);
-#endif
-
- /* 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 )
- continue; /* krow visited before, go to the next nonzero */
-
- /* For each unmarked nbr krow of jj
- * krow is in L: place it in structure of L[*,jj]
- */
- 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[*]
- */
- else {
-
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz_col[krep];
-
-#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 > kperm ) repfnz_col[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz_col[krep] = kperm;
- xdfs = xlsub[krep];
- maxdfs = xprune[krep];
-
-#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
- */
- 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
- * been explored, update its repfnz[*]
- */
- else {
-
- chrep = xsup[supno[chperm]+1] - 1;
- myfnz = repfnz_col[chrep];
-#ifdef CHK_DFS
- printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
-#endif
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > chperm )
- repfnz_col[chrep] = chperm;
- }
- else {
- /* Cont. dfs at snode-rep of kchild */
- 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
- printf(" xdfs %d, maxdfs %d: ", xdfs, maxdfs);
- 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
- * segment is seen for the first time. (Note that
- * "repfnz[krep]" may change later.)
- * Backtrack dfs to its parent.
- */
- if ( marker1[krep] < jcol ) {
- segrep[*nseg] = krep;
- ++(*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
- 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;
-
- } /* for jj ... */
-
-}
diff --git a/SRC/cpivotL.c b/SRC/cpivotL.c
deleted file mode 100644
index a14ea72..0000000
--- a/SRC/cpivotL.c
+++ /dev/null
@@ -1,185 +0,0 @@
-
-/*! @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>
- */
-
-
-#include <math.h>
-#include <stdlib.h>
-#include "slu_cdefs.h"
-
-#undef DEBUG
-
-/*! \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
-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 */
- int nsupr; /* no of rows in the supernode */
- int lptr; /* points to the starting subscript of the supernode */
- int pivptr, old_pivptr, diag, diagind;
- float pivmax, rtemp, thresh;
- complex temp;
- complex *lu_sup_ptr;
- complex *lu_col_ptr;
- int *lsub_ptr;
- int isub, icol, k, itemp;
- int *lsub, *xlsub;
- complex *lusup;
- int *xlusup;
- flops_t *ops = stat->ops;
-
- /* Initialize pointers */
- 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 */
-
-#ifdef DEBUG
-if ( jcol == MIN_COL ) {
- printf("Before cdiv: col %d\n", jcol);
- for (k = nsupc; k < nsupr; k++)
- printf(" lu[%d] %f\n", lsub_ptr[k], lu_col_ptr[k]);
-}
-#endif
-
- /* Determine the largest abs numerical value for partial pivoting;
- Also search for user-specified pivot, and diagonal element. */
- if ( *usepr ) *pivrow = iperm_r[jcol];
- diagind = iperm_c[jcol];
- pivmax = 0.0;
- pivptr = nsupc;
- diag = EMPTY;
- old_pivptr = nsupc;
- for (isub = nsupc; isub < nsupr; ++isub) {
- rtemp = c_abs1 (&lu_col_ptr[isub]);
- if ( rtemp > pivmax ) {
- pivmax = rtemp;
- pivptr = isub;
- }
- if ( *usepr && lsub_ptr[isub] == *pivrow ) old_pivptr = isub;
- if ( lsub_ptr[isub] == diagind ) diag = isub;
- }
-
- /* 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);
- }
-
- thresh = u * pivmax;
-
- /* Choose appropriate pivotal element by our policy. */
- if ( *usepr ) {
- rtemp = c_abs1 (&lu_col_ptr[old_pivptr]);
- if ( rtemp != 0.0 && rtemp >= thresh )
- pivptr = old_pivptr;
- else
- *usepr = 0;
- }
- if ( *usepr == 0 ) {
- /* Use diagonal pivot? */
- if ( diag >= 0 ) { /* diagonal exists */
- rtemp = c_abs1 (&lu_col_ptr[diag]);
- if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
- }
- *pivrow = lsub_ptr[pivptr];
- }
-
- /* Record pivot row */
- perm_r[*pivrow] = jcol;
-
- /* 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 0;
-}
-
diff --git a/SRC/cpivotgrowth.c b/SRC/cpivotgrowth.c
deleted file mode 100644
index db51443..0000000
--- a/SRC/cpivotgrowth.c
+++ /dev/null
@@ -1,114 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Compute the reciprocal pivot growth factor of the leading ncols columns
- * of the matrix, using the formula:
- * min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )
- *
- * Arguments
- * =========
- *
- * ncols (input) int
- * The number of columns of matrices A, L and U.
- *
- * 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.
- *
- * 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.
- *
- * 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>
- */
-
-float
-cPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
- SuperMatrix *L, SuperMatrix *U)
-{
-
- NCformat *Astore;
- SCformat *Lstore;
- NCformat *Ustore;
- complex *Aval, *Lval, *Uval;
- int fsupc, nsupr, luptr, nz_in_U;
- int i, j, k, oldcol;
- int *inv_perm_c;
- float rpg, maxaj, maxuj;
- float smlnum;
- complex *luval;
- complex temp_comp;
-
- /* Get machine constants. */
- smlnum = slamch_("S");
- rpg = 1. / smlnum;
-
- Astore = A->Store;
- Lstore = L->Store;
- Ustore = U->Store;
- Aval = Astore->nzval;
- Lval = Lstore->nzval;
- Uval = Ustore->nzval;
-
- inv_perm_c = (int *) SUPERLU_MALLOC(A->ncol*sizeof(int));
- for (j = 0; j < A->ncol; ++j) inv_perm_c[perm_c[j]] = j;
-
- for (k = 0; k <= Lstore->nsuper; ++k) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- luptr = L_NZ_START(fsupc);
- luval = &Lval[luptr];
- nz_in_U = 1;
-
- for (j = fsupc; j < L_FST_SUPC(k+1) && j < ncols; ++j) {
- maxaj = 0.;
- oldcol = inv_perm_c[j];
- for (i = Astore->colptr[oldcol]; i < Astore->colptr[oldcol+1]; ++i)
- maxaj = SUPERLU_MAX( maxaj, c_abs1( &Aval[i]) );
-
- maxuj = 0.;
- for (i = Ustore->colptr[j]; i < Ustore->colptr[j+1]; i++)
- maxuj = SUPERLU_MAX( maxuj, c_abs1( &Uval[i]) );
-
- /* Supernode */
- for (i = 0; i < nz_in_U; ++i)
- maxuj = SUPERLU_MAX( maxuj, c_abs1( &luval[i]) );
-
- ++nz_in_U;
- luval += nsupr;
-
- if ( maxuj == 0. )
- rpg = SUPERLU_MIN( rpg, 1.);
- else
- rpg = SUPERLU_MIN( rpg, maxaj / maxuj );
- }
-
- if ( j >= ncols ) break;
- }
-
- SUPERLU_FREE(inv_perm_c);
- return (rpg);
-}
diff --git a/SRC/cpruneL.c b/SRC/cpruneL.c
deleted file mode 100644
index 22a9ff5..0000000
--- a/SRC/cpruneL.c
+++ /dev/null
@@ -1,154 +0,0 @@
-
-/*! @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>
- */
-
-
-#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 */
- const int *perm_r, /* in */
- const int pivrow, /* in */
- const int nseg, /* in */
- const int *segrep, /* in */
- const int *repfnz, /* in */
- int *xprune, /* out */
- GlobalLU_t *Glu /* modified - global LU data structures */
- )
-{
-
- complex utemp;
- int jsupno, irep, irep1, kmin, kmax, krow, movnum;
- int i, ktemp, minloc, maxloc;
- int do_prune; /* logical variable */
- int *xsup, *supno;
- int *lsub, *xlsub;
- complex *lusup;
- int *xlusup;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- /*
- * For each supernode-rep irep in U[*,j]
- */
- jsupno = supno[jcol];
- for (i = 0; i < nseg; i++) {
-
- irep = segrep[i];
- irep1 = irep + 1;
- do_prune = FALSE;
-
- /* Don't prune with a zero U-segment */
- if ( repfnz[irep] == EMPTY )
- continue;
-
- /* If a snode overlaps with the next panel, then the U-segment
- * is fragmented into two parts -- irep and irep1. We should let
- * pruning occur at the rep-column in irep1's snode.
- */
- if ( supno[irep] == supno[irep1] ) /* Don't prune */
- continue;
-
- /*
- * If it has not been pruned & it has a nonz in row L[pivrow,i]
- */
- if ( supno[irep] != jsupno ) {
- if ( xprune[irep] >= xlsub[irep1] ) {
- kmin = xlsub[irep];
- kmax = xlsub[irep1] - 1;
- for (krow = kmin; krow <= kmax; krow++)
- if ( lsub[krow] == pivrow ) {
- do_prune = TRUE;
- break;
- }
- }
-
- if ( do_prune ) {
-
- /* Do a quicksort-type partition
- * movnum=TRUE means that the num values have to be exchanged.
- */
- movnum = FALSE;
- if ( irep == xsup[supno[irep]] ) /* Snode of size 1 */
- movnum = TRUE;
-
- while ( kmin <= kmax ) {
-
- if ( perm_r[lsub[kmax]] == EMPTY )
- kmax--;
- else if ( perm_r[lsub[kmin]] != EMPTY )
- kmin++;
- else { /* kmin below pivrow (not yet pivoted), and kmax
- * above pivrow: interchange the two subscripts
- */
- ktemp = lsub[kmin];
- lsub[kmin] = lsub[kmax];
- lsub[kmax] = ktemp;
-
- /* 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.
- */
- if ( movnum ) {
- minloc = xlusup[irep] + (kmin - xlsub[irep]);
- maxloc = xlusup[irep] + (kmax - xlsub[irep]);
- utemp = lusup[minloc];
- lusup[minloc] = lusup[maxloc];
- lusup[maxloc] = utemp;
- }
-
- kmin++;
- kmax--;
-
- }
-
- } /* while */
-
- xprune[irep] = kmin; /* Pruning */
-
-#ifdef CHK_PRUNE
- printf(" After cpruneL(),using col %d: xprune[%d] = %d\n",
- jcol, irep, kmin);
-#endif
- } /* if do_prune */
-
- } /* if */
-
- } /* for each U-segment... */
-}
diff --git a/SRC/creadhb.c b/SRC/creadhb.c
deleted file mode 100644
index a01bdc5..0000000
--- a/SRC/creadhb.c
+++ /dev/null
@@ -1,267 +0,0 @@
-
-/*! @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"
-
-
-/*! \brief Eat up the rest of the current line */
-int cDumpLine(FILE *fp)
-{
- register int c;
- while ((c = fgetc(fp)) != '\n') ;
- return 0;
-}
-
-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;
-}
-
-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) */
-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
-creadhb(int *nrow, int *ncol, int *nonz,
- complex **nzval, int **rowind, int **colptr)
-{
-
- register int i, numer_lines = 0, rhscrd = 0;
- int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
- char buf[100], type[4], key[10];
- FILE *fp;
-
- fp = stdin;
-
- /* Line 1 */
- fgets(buf, 100, fp);
- fputs(buf, stdout);
-#if 0
- fscanf(fp, "%72c", buf); buf[72] = 0;
- printf("Title: %s", buf);
- fscanf(fp, "%8c", key); key[8] = 0;
- printf("Key: %s\n", key);
- cDumpLine(fp);
-#endif
-
- /* Line 2 */
- for (i=0; i<5; i++) {
- fscanf(fp, "%14c", buf); buf[14] = 0;
- sscanf(buf, "%d", &tmp);
- if (i == 3) numer_lines = tmp;
- if (i == 4 && tmp) rhscrd = 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);
- fscanf(fp, "%20c", buf);
- cDumpLine(fp);
-
- /* Line 5: right-hand side */
- if ( rhscrd ) cDumpLine(fp); /* skip RHSFMT */
-
-#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/SRC/creadrb.c b/SRC/creadrb.c
deleted file mode 100644
index bd699af..0000000
--- a/SRC/creadrb.c
+++ /dev/null
@@ -1,246 +0,0 @@
-
-/*! @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/SRC/creadtriple.c b/SRC/creadtriple.c
deleted file mode 100644
index ab6c897..0000000
--- a/SRC/creadtriple.c
+++ /dev/null
@@ -1,140 +0,0 @@
-
-/*! @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
-creadtriple(int *m, int *n, int *nonz,
- complex **nzval, int **rowind, int **colptr)
-{
-/*
- * Output parameters
- * =================
- * (a,asub,xa): asub[*] contains the row subscripts of nonzeros
- * in columns of matrix A; a[*] the numerical values;
- * row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
- *
- */
- int j, k, jsize, nnz, nz;
- complex *a, *val;
- int *asub, *xa, *row, *col;
- int zero_base = 0;
-
- /* Matrix format:
- * First line: #rows, #cols, #non-zero
- * Triplet in the rest of lines:
- * row, col, value
- */
-
- scanf("%d%d", n, nonz);
- *m = *n;
- printf("m %d, n %d, nonz %d\n", *m, *n, *nonz);
- callocateA(*n, *nonz, nzval, rowind, colptr); /* Allocate storage */
- a = *nzval;
- asub = *rowind;
- xa = *colptr;
-
- val = (complex *) SUPERLU_MALLOC(*nonz * sizeof(complex));
- 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 (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
- 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,%e) out of bound, removed\n",
- nz, row[nz], col[nz], val[nz].r, val[nz].i);
- exit(-1);
- } else {
- ++xa[col[nz]];
- ++nz;
- }
- }
-
- *nonz = nz;
-
- /* Initialize the array of column pointers */
- k = 0;
- jsize = xa[0];
- xa[0] = 0;
- for (j = 1; j < *n; ++j) {
- k += jsize;
- jsize = xa[j];
- xa[j] = k;
- }
-
- /* Copy the triplets into the column oriented storage */
- for (nz = 0; nz < *nonz; ++nz) {
- j = col[nz];
- k = xa[j];
- asub[k] = row[nz];
- a[k] = val[nz];
- ++xa[j];
- }
-
- /* Reset the column pointers to the beginning of each column */
- for (j = *n; j > 0; --j)
- xa[j] = xa[j-1];
- xa[0] = 0;
-
- SUPERLU_FREE(val);
- SUPERLU_FREE(row);
- SUPERLU_FREE(col);
-
-#ifdef CHK_INPUT
- {
- 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 creadrhs(int m, complex *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, "%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
deleted file mode 100644
index 40c21f5..0000000
--- a/SRC/csnode_bmod.c
+++ /dev/null
@@ -1,120 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_cdefs.h"
-
-
-/*! \brief Performs numeric block updates within the relaxed snode.
- */
-int
-csnode_bmod (
- const int jcol, /* in */
- const int jsupno, /* in */
- const int fsupc, /* in */
- complex *dense, /* in */
- complex *tempv, /* working array */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- complex alpha = {-1.0, 0.0}, beta = {1.0, 0.0};
-#endif
-
- complex comp_zero = {0.0, 0.0};
- int luptr, nsupc, nsupr, nrow;
- int isub, irow, i, iptr;
- register int ufirst, nextlu;
- int *lsub, *xlsub;
- complex *lusup;
- int *xlusup;
- flops_t *ops = stat->ops;
-
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- nextlu = xlusup[jcol];
-
- /*
- * Process the supernodal portion of L\U[*,j]
- */
- for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
- irow = lsub[isub];
- lusup[nextlu] = dense[irow];
- dense[irow] = comp_zero;
- ++nextlu;
- }
-
- xlusup[jcol + 1] = nextlu; /* Initialize xlusup for next column */
-
- if ( fsupc < jcol ) {
-
- luptr = xlusup[fsupc];
- nsupr = xlsub[fsupc+1] - xlsub[fsupc];
- nsupc = jcol - fsupc; /* Excluding jcol */
- ufirst = xlusup[jcol]; /* Points to the beginning of column
- jcol in supernode L\U(jsupno). */
- nrow = nsupr - nsupc;
-
- ops[TRSV] += 4 * nsupc * (nsupc - 1);
- ops[GEMV] += 8 * nrow * nsupc;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr], &nsupr,
- &lusup[ufirst], &incx );
- CGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#else
- ctrsv_( "L", "N", "U", &nsupc, &lusup[luptr], &nsupr,
- &lusup[ufirst], &incx );
- cgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#endif
-#else
- clsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
- cmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
- &lusup[ufirst], &tempv[0] );
-
- /* Scatter tempv[*] into lusup[*] */
- iptr = ufirst + nsupc;
- for (i = 0; i < nrow; i++) {
- c_sub(&lusup[iptr], &lusup[iptr], &tempv[i]);
- ++iptr;
- tempv[i] = comp_zero;
- }
-#endif
-
- }
-
- return 0;
-}
diff --git a/SRC/csnode_dfs.c b/SRC/csnode_dfs.c
deleted file mode 100644
index 175da09..0000000
--- a/SRC/csnode_dfs.c
+++ /dev/null
@@ -1,112 +0,0 @@
-
-/*! @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>
- */
-
-
-#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 */
- const int kcol, /* in - end of the supernode */
- const int *asub, /* in */
- const int *xa_begin, /* in */
- const int *xa_end, /* in */
- int *xprune, /* out */
- int *marker, /* modified */
- GlobalLU_t *Glu /* modified */
- )
-{
-
- register int i, k, ifrom, ito, nextl, new_next;
- 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) )
- return (mem_error);
- lsub = Glu->lsub;
- }
- }
- }
- supno[i] = nsuper;
- }
-
- /* Supernode > 1, then make a copy of the subscripts for pruning */
- if ( jcol < kcol ) {
- new_next = nextl + (nextl - xlsub[jcol]);
- while ( new_next > nzlmax ) {
- if ( mem_error = cLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
- return (mem_error);
- lsub = Glu->lsub;
- }
- ito = nextl;
- for (ifrom = xlsub[jcol]; ifrom < nextl; )
- lsub[ito++] = lsub[ifrom++];
- for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
- nextl = ito;
- }
-
- xsup[nsuper+1] = kcol + 1;
- supno[kcol+1] = nsuper;
- xprune[kcol] = nextl;
- xlsub[kcol+1] = nextl;
-
- return 0;
-}
-
diff --git a/SRC/csp_blas2.c b/SRC/csp_blas2.c
deleted file mode 100644
index 2ab271d..0000000
--- a/SRC/csp_blas2.c
+++ /dev/null
@@ -1,573 +0,0 @@
-
-/*! @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
- * Purpose: Sparse BLAS 2, using some dense BLAS 2 operations.
- */
-
-#include "slu_cdefs.h"
-
-/*
- * Function prototypes
- */
-void cusolve(int, int, complex*, complex*);
-void clsolve(int, int, complex*, complex*);
-void cmatvec(int, int, int, complex*, complex*, complex*);
-
-/*! \brief Solves one of the systems of equations A*x = b, or A'*x = b
- *
- * <pre>
- * Purpose
- * =======
- *
- * sp_ctrsv() 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.
- *
- * Parameters
- * ==========
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * U - (input) SuperMatrix*
- * The factor U from the factorization Pr*A*Pc=L*U.
- * U has types: Stype = NC, Dtype = SLU_C, Mtype = TRU.
- *
- * 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.
- *
- * 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")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- SCformat *Lstore;
- NCformat *Ustore;
- complex *Lval, *Uval;
- int incx = 1, incy = 1;
- complex temp;
- complex alpha = {1.0, 0.0}, beta = {1.0, 0.0};
- complex comp_zero = {0.0, 0.0};
- int nrow;
- int fsupc, nsupr, nsupc, luptr, istart, irow;
- int i, k, iptr, jcol;
- complex *work;
- flops_t solve_ops;
-
- /* Test the input parameters */
- *info = 0;
- if ( !lsame_(uplo,"L") && !lsame_(uplo, "U") ) *info = -1;
- else if ( !lsame_(trans, "N") && !lsame_(trans, "T") &&
- !lsame_(trans, "C")) *info = -2;
- else if ( !lsame_(diag, "U") && !lsame_(diag, "N") ) *info = -3;
- else if ( L->nrow != L->ncol || L->nrow < 0 ) *info = -4;
- else if ( U->nrow != U->ncol || U->nrow < 0 ) *info = -5;
- if ( *info ) {
- i = -(*info);
- xerbla_("sp_ctrsv", &i);
- return 0;
- }
-
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
- solve_ops = 0;
-
- if ( !(work = complexCalloc(L->nrow)) )
- ABORT("Malloc fails for work in sp_ctrsv().");
-
- if ( lsame_(trans, "N") ) { /* Form x := inv(A)*x. */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := inv(L)*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- 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;
- luptr = L_NZ_START(fsupc);
- nrow = nsupr - nsupc;
-
- /* 1 c_div costs 10 flops */
- solve_ops += 4 * nsupc * (nsupc - 1) + 10 * nsupc;
- solve_ops += 8 * nrow * nsupc;
-
- if ( nsupc == 1 ) {
- for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
- irow = L_SUB(iptr);
- ++luptr;
- cc_mult(&comp_zero, &x[fsupc], &Lval[luptr]);
- c_sub(&x[irow], &x[irow], &comp_zero);
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-
- CGEMV(ftcs2, &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
- &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
-#else
- ctrsv_("L", "N", "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-
- cgemv_("N", &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
- &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
-#endif
-#else
- clsolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc]);
-
- cmatvec ( nsupr, nsupr-nsupc, nsupc, &Lval[luptr+nsupc],
- &x[fsupc], &work[0] );
-#endif
-
- iptr = istart + nsupc;
- for (i = 0; i < nrow; ++i, ++iptr) {
- irow = L_SUB(iptr);
- c_sub(&x[irow], &x[irow], &work[i]); /* Scatter */
- work[i] = comp_zero;
-
- }
- }
- } /* for k ... */
-
- } else {
- /* Form x := inv(U)*x */
-
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; k--) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- /* 1 c_div costs 10 flops */
- solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
-
- if ( nsupc == 1 ) {
- c_div(&x[fsupc], &x[fsupc], &Lval[luptr]);
- for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
- irow = U_SUB(i);
- cc_mult(&comp_zero, &x[fsupc], &Uval[i]);
- c_sub(&x[irow], &x[irow], &comp_zero);
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV(ftcs3, ftcs2, ftcs2, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ctrsv_("U", "N", "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
-#else
- cusolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
-#endif
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1);
- i++) {
- irow = U_SUB(i);
- cc_mult(&comp_zero, &x[jcol], &Uval[i]);
- c_sub(&x[irow], &x[irow], &comp_zero);
- }
- }
- }
- } /* for k ... */
-
- }
- } else if ( lsame_(trans, "T") ) { /* Form x := inv(A')*x */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := inv(L')*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; --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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += 8 * (nsupr - nsupc) * nsupc;
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- iptr = istart + nsupc;
- for (i = L_NZ_START(jcol) + nsupc;
- i < L_NZ_START(jcol+1); i++) {
- irow = L_SUB(iptr);
- cc_mult(&comp_zero, &x[irow], &Lval[i]);
- c_sub(&x[jcol], &x[jcol], &comp_zero);
- iptr++;
- }
- }
-
- if ( nsupc > 1 ) {
- solve_ops += 4 * nsupc * (nsupc - 1);
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd("T", strlen("T"));
- ftcs3 = _cptofcd("U", strlen("U"));
- CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ctrsv_("L", "T", "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- }
- } else {
- /* Form x := inv(U')*x */
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = 0; k <= Lstore->nsuper; k++) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
- irow = U_SUB(i);
- cc_mult(&comp_zero, &x[irow], &Uval[i]);
- c_sub(&x[jcol], &x[jcol], &comp_zero);
- }
- }
-
- /* 1 c_div costs 10 flops */
- solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
-
- if ( nsupc == 1 ) {
- c_div(&x[fsupc], &x[fsupc], &Lval[luptr]);
- } else {
-#ifdef _CRAY
- ftcs1 = _cptofcd("U", strlen("U"));
- ftcs2 = _cptofcd("T", strlen("T"));
- ftcs3 = _cptofcd("N", strlen("N"));
- CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ctrsv_("U", "T", "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- } /* for k ... */
- }
- } else { /* Form x := conj(inv(A'))*x */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := conj(inv(L'))*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; --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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += 8 * (nsupr - nsupc) * nsupc;
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- iptr = istart + nsupc;
- for (i = L_NZ_START(jcol) + nsupc;
- i < L_NZ_START(jcol+1); i++) {
- irow = L_SUB(iptr);
- cc_conj(&temp, &Lval[i]);
- cc_mult(&comp_zero, &x[irow], &temp);
- c_sub(&x[jcol], &x[jcol], &comp_zero);
- iptr++;
- }
- }
-
- if ( nsupc > 1 ) {
- solve_ops += 4 * nsupc * (nsupc - 1);
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd(trans, strlen("T"));
- ftcs3 = _cptofcd("U", strlen("U"));
- CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ctrsv_("L", trans, "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- }
- } else {
- /* Form x := conj(inv(U'))*x */
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = 0; k <= Lstore->nsuper; k++) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
- irow = U_SUB(i);
- cc_conj(&temp, &Uval[i]);
- cc_mult(&comp_zero, &x[irow], &temp);
- c_sub(&x[jcol], &x[jcol], &comp_zero);
- }
- }
-
- /* 1 c_div costs 10 flops */
- solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
-
- if ( nsupc == 1 ) {
- cc_conj(&temp, &Lval[luptr]);
- c_div(&x[fsupc], &x[fsupc], &temp);
- } else {
-#ifdef _CRAY
- ftcs1 = _cptofcd("U", strlen("U"));
- ftcs2 = _cptofcd(trans, strlen("T"));
- ftcs3 = _cptofcd("N", strlen("N"));
- CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ctrsv_("U", trans, "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- } /* for k ... */
- }
- }
-
- stat->ops[SOLVE] += solve_ops;
- SUPERLU_FREE(work);
- return 0;
-}
-
-
-
-/*! \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)
-{
-
- /* Local variables */
- NCformat *Astore;
- complex *Aval;
- int info;
- complex temp, temp1;
- int lenx, leny, i, j, irow;
- int iy, jx, jy, kx, ky;
- int notran;
- complex comp_zero = {0.0, 0.0};
- complex comp_one = {1.0, 0.0};
-
- notran = lsame_(trans, "N");
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Test the input parameters */
- info = 0;
- if ( !notran && !lsame_(trans, "T") && !lsame_(trans, "C")) info = 1;
- else if ( A->nrow < 0 || A->ncol < 0 ) info = 3;
- else if (incx == 0) info = 5;
- else if (incy == 0) info = 8;
- if (info != 0) {
- xerbla_("sp_cgemv ", &info);
- return 0;
- }
-
- /* Quick return if possible. */
- if (A->nrow == 0 || A->ncol == 0 ||
- c_eq(&alpha, &comp_zero) &&
- c_eq(&beta, &comp_one))
- return 0;
-
-
- /* Set LENX and LENY, the lengths of the vectors x and y, and set
- up the start points in X and Y. */
- if (lsame_(trans, "N")) {
- lenx = A->ncol;
- leny = A->nrow;
- } else {
- lenx = A->nrow;
- leny = A->ncol;
- }
- if (incx > 0) kx = 0;
- else kx = - (lenx - 1) * incx;
- if (incy > 0) ky = 0;
- else ky = - (leny - 1) * incy;
-
- /* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
- /* First form y := beta*y. */
- if ( !c_eq(&beta, &comp_one) ) {
- if (incy == 1) {
- if ( c_eq(&beta, &comp_zero) )
- for (i = 0; i < leny; ++i) y[i] = comp_zero;
- else
- for (i = 0; i < leny; ++i)
- cc_mult(&y[i], &beta, &y[i]);
- } else {
- iy = ky;
- if ( c_eq(&beta, &comp_zero) )
- for (i = 0; i < leny; ++i) {
- y[iy] = comp_zero;
- iy += incy;
- }
- else
- for (i = 0; i < leny; ++i) {
- cc_mult(&y[iy], &beta, &y[iy]);
- iy += incy;
- }
- }
- }
-
- if ( c_eq(&alpha, &comp_zero) ) return 0;
-
- if ( notran ) {
- /* Form y := alpha*A*x + y. */
- jx = kx;
- if (incy == 1) {
- for (j = 0; j < A->ncol; ++j) {
- if ( !c_eq(&x[jx], &comp_zero) ) {
- cc_mult(&temp, &alpha, &x[jx]);
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- cc_mult(&temp1, &temp, &Aval[i]);
- c_add(&y[irow], &y[irow], &temp1);
- }
- }
- jx += incx;
- }
- } else {
- ABORT("Not implemented.");
- }
- } else {
- /* Form y := alpha*A'*x + y. */
- jy = ky;
- if (incx == 1) {
- for (j = 0; j < A->ncol; ++j) {
- temp = comp_zero;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- cc_mult(&temp1, &Aval[i], &x[irow]);
- c_add(&temp, &temp, &temp1);
- }
- cc_mult(&temp1, &alpha, &temp);
- c_add(&y[jy], &y[jy], &temp1);
- jy += incy;
- }
- } else {
- ABORT("Not implemented.");
- }
- }
- return 0;
-} /* sp_cgemv */
-
diff --git a/SRC/csp_blas3.c b/SRC/csp_blas3.c
deleted file mode 100644
index 84ff940..0000000
--- a/SRC/csp_blas3.c
+++ /dev/null
@@ -1,127 +0,0 @@
-
-/*! @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
- * Purpose: Sparse BLAS3, using some dense BLAS3 operations.
- */
-
-#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)
-{
- int incx = 1, incy = 1;
- int j;
-
- for (j = 0; j < n; ++j) {
- sp_cgemv(transa, alpha, A, &b[ldb*j], incx, beta, &c[ldc*j], incy);
- }
- return 0;
-}
diff --git a/SRC/cutil.c b/SRC/cutil.c
deleted file mode 100644
index e9489a3..0000000
--- a/SRC/cutil.c
+++ /dev/null
@@ -1,475 +0,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.
- * 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>
- */
-
-
-#include <math.h>
-#include "slu_cdefs.h"
-
-void
-cCreate_CompCol_Matrix(SuperMatrix *A, int m, int n, int nnz,
- complex *nzval, int *rowind, int *colptr,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- NCformat *Astore;
-
- A->Stype = stype;
- A->Dtype = dtype;
- A->Mtype = mtype;
- A->nrow = m;
- A->ncol = n;
- A->Store = (void *) SUPERLU_MALLOC( sizeof(NCformat) );
- if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
- Astore = A->Store;
- Astore->nnz = nnz;
- Astore->nzval = nzval;
- Astore->rowind = rowind;
- Astore->colptr = colptr;
-}
-
-void
-cCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
- complex *nzval, int *colind, int *rowptr,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- NRformat *Astore;
-
- A->Stype = stype;
- A->Dtype = dtype;
- A->Mtype = mtype;
- A->nrow = m;
- A->ncol = n;
- A->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat) );
- if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
- Astore = A->Store;
- Astore->nnz = nnz;
- Astore->nzval = nzval;
- Astore->colind = colind;
- Astore->rowptr = rowptr;
-}
-
-/*! \brief Copy matrix A into matrix B. */
-void
-cCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
-{
- NCformat *Astore, *Bstore;
- int ncol, nnz, i;
-
- B->Stype = A->Stype;
- B->Dtype = A->Dtype;
- B->Mtype = A->Mtype;
- B->nrow = A->nrow;;
- B->ncol = ncol = A->ncol;
- Astore = (NCformat *) A->Store;
- Bstore = (NCformat *) B->Store;
- Bstore->nnz = nnz = Astore->nnz;
- for (i = 0; i < nnz; ++i)
- ((complex *)Bstore->nzval)[i] = ((complex *)Astore->nzval)[i];
- for (i = 0; i < nnz; ++i) Bstore->rowind[i] = Astore->rowind[i];
- for (i = 0; i <= ncol; ++i) Bstore->colptr[i] = Astore->colptr[i];
-}
-
-
-void
-cCreate_Dense_Matrix(SuperMatrix *X, int m, int n, complex *x, int ldx,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- DNformat *Xstore;
-
- X->Stype = stype;
- X->Dtype = dtype;
- X->Mtype = mtype;
- X->nrow = m;
- X->ncol = n;
- X->Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
- if ( !(X->Store) ) ABORT("SUPERLU_MALLOC fails for X->Store");
- Xstore = (DNformat *) X->Store;
- Xstore->lda = ldx;
- Xstore->nzval = (complex *) x;
-}
-
-void
-cCopy_Dense_Matrix(int M, int N, complex *X, int ldx,
- complex *Y, int ldy)
-{
-/*! \brief Copies a two-dimensional matrix X to another matrix Y.
- */
- int i, j;
-
- for (j = 0; j < N; ++j)
- for (i = 0; i < M; ++i)
- Y[i + j*ldy] = X[i + j*ldx];
-}
-
-void
-cCreate_SuperNode_Matrix(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)
-{
- SCformat *Lstore;
-
- L->Stype = stype;
- L->Dtype = dtype;
- L->Mtype = mtype;
- L->nrow = m;
- L->ncol = n;
- L->Store = (void *) SUPERLU_MALLOC( sizeof(SCformat) );
- if ( !(L->Store) ) ABORT("SUPERLU_MALLOC fails for L->Store");
- Lstore = L->Store;
- Lstore->nnz = nnz;
- Lstore->nsuper = col_to_sup[n];
- Lstore->nzval = nzval;
- Lstore->nzval_colptr = nzval_colptr;
- Lstore->rowind = rowind;
- Lstore->rowind_colptr = rowind_colptr;
- Lstore->col_to_sup = col_to_sup;
- Lstore->sup_to_col = sup_to_col;
-
-}
-
-
-/*! \brief Convert a row compressed storage into a column compressed storage.
- */
-void
-cCompRow_to_CompCol(int m, int n, int nnz,
- complex *a, int *colind, int *rowptr,
- complex **at, int **rowind, int **colptr)
-{
- register int i, j, col, relpos;
- int *marker;
-
- /* Allocate storage for another copy of the matrix. */
- *at = (complex *) complexMalloc(nnz);
- *rowind = (int *) intMalloc(nnz);
- *colptr = (int *) intMalloc(n+1);
- marker = (int *) intCalloc(n);
-
- /* Get counts of each column of A, and set up column pointers */
- for (i = 0; i < m; ++i)
- for (j = rowptr[i]; j < rowptr[i+1]; ++j) ++marker[colind[j]];
- (*colptr)[0] = 0;
- for (j = 0; j < n; ++j) {
- (*colptr)[j+1] = (*colptr)[j] + marker[j];
- marker[j] = (*colptr)[j];
- }
-
- /* Transfer the matrix into the compressed column storage. */
- for (i = 0; i < m; ++i) {
- for (j = rowptr[i]; j < rowptr[i+1]; ++j) {
- col = colind[j];
- relpos = marker[col];
- (*rowind)[relpos] = i;
- (*at)[relpos] = a[j];
- ++marker[col];
- }
- }
-
- SUPERLU_FREE(marker);
-}
-
-
-void
-cPrint_CompCol_Matrix(char *what, SuperMatrix *A)
-{
- NCformat *Astore;
- register int i,n;
- float *dp;
-
- printf("\nCompCol matrix %s:\n", what);
- printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
- n = A->ncol;
- Astore = (NCformat *) A->Store;
- dp = (float *) Astore->nzval;
- printf("nrow %d, ncol %d, nnz %d\n", A->nrow,A->ncol,Astore->nnz);
- printf("nzval: ");
- for (i = 0; i < 2*Astore->colptr[n]; ++i) printf("%f ", dp[i]);
- printf("\nrowind: ");
- for (i = 0; i < Astore->colptr[n]; ++i) printf("%d ", Astore->rowind[i]);
- printf("\ncolptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->colptr[i]);
- printf("\n");
- fflush(stdout);
-}
-
-void
-cPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
-{
- SCformat *Astore;
- register int i, j, k, c, d, n, nsup;
- float *dp;
- int *col_to_sup, *sup_to_col, *rowind, *rowind_colptr;
-
- printf("\nSuperNode matrix %s:\n", what);
- printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
- n = A->ncol;
- Astore = (SCformat *) A->Store;
- dp = (float *) Astore->nzval;
- col_to_sup = Astore->col_to_sup;
- sup_to_col = Astore->sup_to_col;
- rowind_colptr = Astore->rowind_colptr;
- rowind = Astore->rowind;
- printf("nrow %d, ncol %d, nnz %d, nsuper %d\n",
- A->nrow,A->ncol,Astore->nnz,Astore->nsuper);
- printf("nzval:\n");
- for (k = 0; k <= Astore->nsuper; ++k) {
- c = sup_to_col[k];
- nsup = sup_to_col[k+1] - c;
- for (j = c; j < c + nsup; ++j) {
- d = Astore->nzval_colptr[j];
- for (i = rowind_colptr[c]; i < rowind_colptr[c+1]; ++i) {
- printf("%d\t%d\t%e\t%e\n", rowind[i], j, dp[d], dp[d+1]);
- d += 2;
- }
- }
- }
-#if 0
- for (i = 0; i < 2*Astore->nzval_colptr[n]; ++i) printf("%f ", dp[i]);
-#endif
- printf("\nnzval_colptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->nzval_colptr[i]);
- printf("\nrowind: ");
- for (i = 0; i < Astore->rowind_colptr[n]; ++i)
- printf("%d ", Astore->rowind[i]);
- printf("\nrowind_colptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->rowind_colptr[i]);
- printf("\ncol_to_sup: ");
- for (i = 0; i < n; ++i) printf("%d ", col_to_sup[i]);
- printf("\nsup_to_col: ");
- for (i = 0; i <= Astore->nsuper+1; ++i)
- printf("%d ", sup_to_col[i]);
- printf("\n");
- fflush(stdout);
-}
-
-void
-cPrint_Dense_Matrix(char *what, SuperMatrix *A)
-{
- 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);
- dp = (float *) Astore->nzval;
- printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
- printf("\nnzval: ");
- for (j = 0; j < A->ncol; ++j) {
- for (i = 0; i < 2*A->nrow; ++i) printf("%f ", dp[i + j*2*lda]);
- printf("\n");
- }
- printf("\n");
- fflush(stdout);
-}
-
-/*! \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)
-{
- int i, k, fsupc;
- int *xsup, *supno;
- int *xlsub, *lsub;
- complex *lusup;
- int *xlusup;
- complex *ucol;
- int *usub, *xusub;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
- ucol = Glu->ucol;
- usub = Glu->usub;
- xusub = Glu->xusub;
-
- printf("%s", msg);
- printf("col %d: pivrow %d, supno %d, xprune %d\n",
- jcol, pivrow, supno[jcol], xprune[jcol]);
-
- printf("\tU-col:\n");
- for (i = xusub[jcol]; i < xusub[jcol+1]; i++)
- printf("\t%d%10.4f, %10.4f\n", usub[i], ucol[i].r, ucol[i].i);
- printf("\tL-col in rectangular snode:\n");
- fsupc = xsup[supno[jcol]]; /* first col of the snode */
- i = xlsub[fsupc];
- k = xlusup[jcol];
- while ( i < xlsub[fsupc+1] && k < xlusup[jcol+1] ) {
- printf("\t%d\t%10.4f, %10.4f\n", lsub[i], lusup[k].r, lusup[k].i);
- i++; k++;
- }
- fflush(stdout);
-}
-
-
-/*! \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)
-{
- int i;
-
- for (i = 0; i < n; i++) {
- if ((tempv[i].r != 0.0) || (tempv[i].i != 0.0))
- {
- fprintf(stderr,"tempv[%d] = {%f, %f}\n", i, tempv[i].r, tempv[i].i);
- ABORT("ccheck_tempv");
- }
- }
-}
-
-
-void
-cGenXtrue(int n, int nrhs, complex *x, int ldx)
-{
- int i, j;
- for (j = 0; j < nrhs; ++j)
- for (i = 0; i < n; ++i) {
- x[i + j*ldx].r = 1.0;
- x[i + j*ldx].i = 0.0;
- }
-}
-
-/*! \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,
- SuperMatrix *A, SuperMatrix *B)
-{
- NCformat *Astore;
- complex *Aval;
- DNformat *Bstore;
- complex *rhs;
- complex one = {1.0, 0.0};
- complex zero = {0.0, 0.0};
- int ldc;
- char transc[1];
-
- Astore = A->Store;
- Aval = (complex *) Astore->nzval;
- Bstore = B->Store;
- rhs = Bstore->nzval;
- ldc = Bstore->lda;
-
- if ( trans == NOTRANS ) *(unsigned char *)transc = 'N';
- else *(unsigned char *)transc = 'T';
-
- sp_cgemm(transc, "N", A->nrow, nrhs, A->ncol, one, A,
- x, ldx, zero, rhs, ldc);
-
-}
-
-/*! \brief Fills a complex precision array with a given value.
- */
-void
-cfill(complex *a, int alen, complex dval)
-{
- register int i;
- for (i = 0; i < alen; i++) a[i] = dval;
-}
-
-
-
-/*! \brief Check the inf-norm of the error vector
- */
-void cinf_norm_error(int nrhs, SuperMatrix *X, complex *xtrue)
-{
- DNformat *Xstore;
- float err, xnorm;
- complex *Xmat, *soln_work;
- complex temp;
- int i, j;
-
- Xstore = X->Store;
- Xmat = Xstore->nzval;
-
- for (j = 0; j < nrhs; j++) {
- soln_work = &Xmat[j*Xstore->lda];
- err = xnorm = 0.0;
- for (i = 0; i < X->nrow; i++) {
- c_sub(&temp, &soln_work[i], &xtrue[i]);
- err = SUPERLU_MAX(err, c_abs(&temp));
- xnorm = SUPERLU_MAX(xnorm, c_abs(&soln_work[i]));
- }
- err = err / xnorm;
- printf("||X - Xtrue||/||X|| = %e\n", err);
- }
-}
-
-
-
-/*! \brief Print performance of the code. */
-void
-cPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
- float rpg, float rcond, float *ferr,
- float *berr, char *equed, SuperLUStat_t *stat)
-{
- SCformat *Lstore;
- NCformat *Ustore;
- double *utime;
- flops_t *ops;
-
- utime = stat->utime;
- ops = stat->ops;
-
- if ( utime[FACT] != 0. )
- printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
- ops[FACT]*1e-6/utime[FACT]);
- printf("Identify relaxed snodes = %8.2f\n", utime[RELAX]);
- if ( utime[SOLVE] != 0. )
- printf("Solve flops = %.0f, Mflops = %8.2f\n", ops[SOLVE],
- ops[SOLVE]*1e-6/utime[SOLVE]);
-
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- printf("\tNo of nonzeros in factor L = %d\n", Lstore->nnz);
- 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\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",
- utime[FACT], ops[FACT]*1e-6/utime[FACT],
- utime[SOLVE], ops[SOLVE]*1e-6/utime[SOLVE],
- utime[ETREE], utime[EQUIL], utime[RCOND], utime[REFINE]);
-
- printf("\tRpg\t\tRcond\t\tFerr\t\tBerr\t\tEquil?\n");
- printf("NUM:\t%e\t%e\t%e\t%e\t%s\n",
- rpg, rcond, ferr[0], berr[0], equed);
-
-}
-
-
-
-
-print_complex_vec(char *what, int n, complex *vec)
-{
- int i;
- printf("%s: n %d\n", what, n);
- for (i = 0; i < n; ++i) printf("%d\t%f%f\n", i, vec[i].r, vec[i].i);
- return 0;
-}
-
diff --git a/SRC/dcolumn_bmod.c b/SRC/dcolumn_bmod.c
deleted file mode 100644
index 0eb2386..0000000
--- a/SRC/dcolumn_bmod.c
+++ /dev/null
@@ -1,352 +0,0 @@
-
-/*! @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.
- * </pre>
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "slu_ddefs.h"
-
-/*
- * Function prototypes
- */
-void dusolve(int, int, double*, double*);
-void dlsolve(int, int, double*, double*);
-void dmatvec(int, int, int, double*, double*, double*);
-
-
-
-/*! \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 (
- const int jcol, /* in */
- const int nseg, /* in */
- double *dense, /* in */
- double *tempv, /* working array */
- int *segrep, /* in */
- int *repfnz, /* in */
- int fpanelc, /* in -- first column in the current panel */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- double alpha, beta;
-
- /* krep = representative of current k-th supernode
- * fsupc = first supernodal column
- * nsupc = no of columns in supernode
- * nsupr = no of rows in supernode (used as leading dimension)
- * luptr = location of supernodal LU-block in storage
- * kfnz = first nonz in the k-th supernodal segment
- * no_zeros = no of leading zeros in a supernodal U-segment
- */
- double ukj, ukj1, ukj2;
- int luptr, luptr1, luptr2;
- int fsupc, nsupc, nsupr, segsze;
- int nrow; /* No of rows in the matrix of matrix-vector */
- int jcolp1, jsupno, k, ksub, krep, krep_ind, ksupno;
- register int lptr, kfnz, isub, irow, i;
- register int no_zeros, new_next;
- int ufirst, nextlu;
- int fst_col; /* First column within small LU update */
- int d_fsupc; /* Distance between the first column of the current
- panel and the first column of the current snode. */
- int *xsup, *supno;
- int *lsub, *xlsub;
- double *lusup;
- int *xlusup;
- int nzlumax;
- double *tempv1;
- double zero = 0.0;
- double one = 1.0;
- double none = -1.0;
- int mem_error;
- flops_t *ops = stat->ops;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
- nzlumax = Glu->nzlumax;
- jcolp1 = jcol + 1;
- jsupno = supno[jcol];
-
- /*
- * For each nonz supernode segment of U[*,j] in topological order
- */
- k = nseg - 1;
- for (ksub = 0; ksub < nseg; ksub++) {
-
- krep = segrep[k];
- k--;
- ksupno = supno[krep];
- if ( jsupno != ksupno ) { /* Outside the rectangular supernode */
-
- fsupc = xsup[ksupno];
- fst_col = SUPERLU_MAX ( fsupc, fpanelc );
-
- /* Distance from the current supernode to the current panel;
- d_fsupc=0 if fsupc > fpanelc. */
- d_fsupc = fst_col - fsupc;
-
- luptr = xlusup[fst_col] + d_fsupc;
- lptr = xlsub[fsupc] + d_fsupc;
-
- kfnz = repfnz[krep];
- kfnz = SUPERLU_MAX ( kfnz, fpanelc );
-
- segsze = krep - kfnz + 1;
- nsupc = krep - fst_col + 1;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
- nrow = nsupr - d_fsupc - nsupc;
- krep_ind = lptr + nsupc - 1;
-
- ops[TRSV] += segsze * (segsze - 1);
- ops[GEMV] += 2 * nrow * segsze;
-
-
- /*
- * Case 1: Update U-segment of size 1 -- col-col update
- */
- if ( segsze == 1 ) {
- ukj = dense[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- dense[irow] -= ukj*lusup[luptr];
- luptr++;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- ukj1 = dense[lsub[krep_ind - 1]];
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) { /* Case 2: 2cols-col update */
- ukj -= ukj1 * lusup[luptr1];
- dense[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++;
- luptr1++;
- dense[irow] -= ( ukj*lusup[luptr]
- + ukj1*lusup[luptr1] );
- }
- } else { /* Case 3: 3cols-col update */
- ukj2 = dense[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- ukj1 -= ukj2 * lusup[luptr2-1];
- ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
- dense[lsub[krep_ind]] = ukj;
- dense[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++;
- luptr1++;
- luptr2++;
- dense[irow] -= ( ukj*lusup[luptr]
- + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
- }
- }
-
-
-
- } else {
- /*
- * Case: sup-col update
- * Perform a triangular solve and block update,
- * then scatter the result of sup-col update to dense
- */
-
- no_zeros = kfnz - fst_col;
-
- /* Copy U[*,j] segment from dense[*] to tempv[*] */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- tempv[i] = dense[irow];
- ++isub;
- }
-
- /* Dense triangular solve -- start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#else
- dtrsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#endif
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- SGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#else
- dgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#endif
-#else
- dlsolve ( nsupr, segsze, &lusup[luptr], tempv );
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- dmatvec (nsupr, nrow , segsze, &lusup[luptr], tempv, tempv1);
-#endif
-
-
- /* Scatter tempv[] into SPA dense[] as a temporary storage */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense[irow] = tempv[i];
- tempv[i] = zero;
- ++isub;
- }
-
- /* Scatter tempv1[] into SPA dense[] */
- for (i = 0; i < nrow; i++) {
- irow = lsub[isub];
- dense[irow] -= tempv1[i];
- tempv1[i] = zero;
- ++isub;
- }
- }
-
- } /* if jsupno ... */
-
- } /* for each segment... */
-
- /*
- * Process the supernodal portion of L\U[*,j]
- */
- nextlu = xlusup[jcol];
- fsupc = xsup[jsupno];
-
- /* Copy the SPA dense into L\U[*,j] */
- new_next = nextlu + xlsub[fsupc+1] - xlsub[fsupc];
- while ( new_next > nzlumax ) {
- if (mem_error = dLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, Glu))
- return (mem_error);
- lusup = Glu->lusup;
- lsub = Glu->lsub;
- }
-
- for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
- irow = lsub[isub];
- lusup[nextlu] = dense[irow];
- dense[irow] = zero;
- ++nextlu;
- }
-
- xlusup[jcolp1] = nextlu; /* Close L\U[*,jcol] */
-
- /* For more updates within the panel (also within the current supernode),
- * should start from the first column of the panel, or the first column
- * of the supernode, whichever is bigger. There are 2 cases:
- * 1) fsupc < fpanelc, then fst_col := fpanelc
- * 2) fsupc >= fpanelc, then fst_col := fsupc
- */
- fst_col = SUPERLU_MAX ( fsupc, fpanelc );
-
- if ( fst_col < jcol ) {
-
- /* Distance between the current supernode and the current panel.
- d_fsupc=0 if fsupc >= fpanelc. */
- d_fsupc = fst_col - fsupc;
-
- lptr = xlsub[fsupc] + d_fsupc;
- luptr = xlusup[fst_col] + d_fsupc;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
- nsupc = jcol - fst_col; /* Excluding jcol */
- nrow = nsupr - d_fsupc - nsupc;
-
- /* Points to the beginning of jcol in snode L\U(jsupno) */
- ufirst = xlusup[jcol] + d_fsupc;
-
- ops[TRSV] += nsupc * (nsupc - 1);
- ops[GEMV] += 2 * nrow * nsupc;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr],
- &nsupr, &lusup[ufirst], &incx );
-#else
- dtrsv_( "L", "N", "U", &nsupc, &lusup[luptr],
- &nsupr, &lusup[ufirst], &incx );
-#endif
-
- alpha = none; beta = one; /* y := beta*y + alpha*A*x */
-
-#ifdef _CRAY
- SGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#else
- dgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#endif
-#else
- dlsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
-
- dmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
- &lusup[ufirst], tempv );
-
- /* Copy updates from tempv[*] into lusup[*] */
- isub = ufirst + nsupc;
- for (i = 0; i < nrow; i++) {
- lusup[isub] -= tempv[i];
- tempv[i] = 0.0;
- ++isub;
- }
-
-#endif
-
-
- } /* if fst_col < jcol ... */
-
- return 0;
-}
diff --git a/SRC/dcolumn_dfs.c b/SRC/dcolumn_dfs.c
deleted file mode 100644
index deebf94..0000000
--- a/SRC/dcolumn_dfs.c
+++ /dev/null
@@ -1,275 +0,0 @@
-
-/*! @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.
- * </pre>
-*/
-
-#include "slu_ddefs.h"
-
-/*! \brief What type of supernodes we want */
-#define T2_SUPER
-
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- * 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
- * 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 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.
- *
- * 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.
- *
- * 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
- *
- * Return value
- * ============
- * 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 */
- int fsupc; /* First column of a snode */
- int myfnz; /* First nonz column of a U-segment */
- int chperm, chmark, chrep, kchild;
- int xdfs, maxdfs, kpar, oldrep;
- int jptr, jm1ptr;
- int ito, ifrom, istop; /* 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;
- xlsub = Glu->xlsub;
- nzlmax = Glu->nzlmax;
-
- if ( first ) {
- maxsuper = sp_ienv(3);
- first = 0;
- }
- jcolp1 = jcol + 1;
- jcolm1 = jcol - 1;
- nsuper = supno[jcol];
- jsuper = nsuper;
- nextl = xlsub[jcol];
- marker2 = &marker[2*m];
-
-
- /* For each nonzero in A[*,jcol] do dfs */
- for (k = 0; lsub_col[k] != EMPTY; k++) {
-
- krow = lsub_col[k];
- lsub_col[k] = EMPTY;
- kmark = marker2[krow];
-
- /* krow was visited before, go to the next nonz */
- if ( kmark == jcol ) continue;
-
- /* For each unmarked nbr krow of jcol
- * krow is in L: place it in structure of L[*,jcol]
- */
- marker2[krow] = jcol;
- kperm = perm_r[krow];
-
- if ( kperm == EMPTY ) {
- lsub[nextl++] = krow; /* krow is indexed into A */
- if ( nextl >= nzlmax ) {
- 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 {
- /* krow is in U: if its supernode-rep krep
- * has been explored, update repfnz[*]
- */
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz[krep];
-
- if ( myfnz != EMPTY ) { /* Visited before */
- 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];
-
- do {
- /*
- * For each unmarked kchild of krep
- */
- while ( xdfs < maxdfs ) {
-
- kchild = lsub[xdfs];
- xdfs++;
- chmark = marker2[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;
- if ( nextl >= nzlmax ) {
- 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 */
- if ( myfnz > 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) */
- parent[krep] = oldrep;
- repfnz[krep] = chperm;
- xdfs = xlsub[krep];
- maxdfs = xprune[krep];
- } /* else */
-
- } /* else */
-
- } /* if */
-
- } /* while */
-
- /* krow has no more unexplored nbrs;
- * place supernode-rep krep in postorder DFS.
- * backtrack dfs to its parent
- */
- segrep[*nseg] = krep;
- ++(*nseg);
- kpar = parent[krep]; /* Pop from stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- maxdfs = xprune[krep];
-
- } while ( kpar != EMPTY ); /* Until empty stack */
-
- } /* else */
-
- } /* else */
-
- } /* for each nonzero ... */
-
- /* Check to see if j belongs in the same supernode as j-1 */
- if ( jcol == 0 ) { /* Do nothing for column 0 */
- nsuper = supno[0] = 0;
- } else {
- fsupc = xsup[nsuper];
- jptr = xlsub[jcol]; /* Not compressed yet */
- jm1ptr = xlsub[jcolm1];
-
-#ifdef T2_SUPER
- if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-#endif
- /* 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)
- */
- if ( jsuper == EMPTY ) { /* starts a new supernode */
- if ( (fsupc < jcolm1-1) ) { /* >= 3 columns in nsuper */
-#ifdef CHK_COMPRESS
- printf(" Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
-#endif
- 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)
- lsub[ito] = lsub[ifrom];
- nextl = ito; /* = istop + length(jcol) */
- }
- nsuper++;
- supno[jcol] = nsuper;
- } /* if a new supernode */
-
- } /* 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/dcomplex.c b/SRC/dcomplex.c
deleted file mode 100644
index 42496a6..0000000
--- a/SRC/dcomplex.c
+++ /dev/null
@@ -1,147 +0,0 @@
-
-/*! @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"
-
-
-/*! \brief Complex Division c = a/b */
-void z_div(doublecomplex *c, doublecomplex *a, doublecomplex *b)
-{
- double ratio, den;
- double abr, abi, cr, ci;
-
- if( (abr = b->r) < 0.)
- abr = - abr;
- if( (abi = b->i) < 0.)
- abi = - abi;
- if( abr <= abi ) {
- if (abi == 0) {
- fprintf(stderr, "z_div.c: division by zero\n");
- exit(-1);
- }
- ratio = b->r / b->i ;
- den = b->i * (1 + ratio*ratio);
- cr = (a->r*ratio + a->i) / den;
- ci = (a->i*ratio - a->r) / den;
- } else {
- ratio = b->i / b->r ;
- den = b->r * (1 + ratio*ratio);
- cr = (a->r + a->i*ratio) / den;
- ci = (a->i - a->r*ratio) / den;
- }
- c->r = cr;
- c->i = ci;
-}
-
-
-/*! \brief Returns sqrt(z.r^2 + z.i^2) */
-double z_abs(doublecomplex *z)
-{
- double temp;
- double real = z->r;
- double imag = z->i;
-
- if (real < 0) real = -real;
- if (imag < 0) imag = -imag;
- if (imag > real) {
- temp = real;
- real = imag;
- imag = temp;
- }
- if ((real+imag) == real) return(real);
-
- temp = imag/real;
- temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/
- return (temp);
-}
-
-
-/*! \brief Approximates the abs. Returns abs(z.r) + abs(z.i) */
-double z_abs1(doublecomplex *z)
-{
- double real = z->r;
- double imag = z->i;
-
- if (real < 0) real = -real;
- if (imag < 0) imag = -imag;
-
- return (real + imag);
-}
-
-/*! \brief Return the exponentiation */
-void z_exp(doublecomplex *r, doublecomplex *z)
-{
- double expx;
-
- expx = exp(z->r);
- r->r = expx * cos(z->i);
- r->i = expx * sin(z->i);
-}
-
-/*! \brief Return the complex conjugate */
-void d_cnjg(doublecomplex *r, doublecomplex *z)
-{
- r->r = z->r;
- r->i = -z->i;
-}
-
-/*! \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
deleted file mode 100644
index 5a1d7b7..0000000
--- a/SRC/dcopy_to_ucol.c
+++ /dev/null
@@ -1,103 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_ddefs.h"
-
-int
-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 */
- GlobalLU_t *Glu /* modified */
- )
-{
-/*
- * 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;
- 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;
-
- 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))
- return (mem_error);
- ucol = Glu->ucol;
- if (mem_error = dLUMemXpand(jcol, nextu, USUB, &nzumax, Glu))
- return (mem_error);
- usub = Glu->usub;
- lsub = Glu->lsub;
- }
-
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- usub[nextu] = perm_r[irow];
- ucol[nextu] = dense[irow];
- dense[irow] = zero;
- nextu++;
- isub++;
- }
-
- }
-
- }
-
- } /* for each segment... */
-
- xusub[jcol + 1] = nextu; /* Close U[*,jcol] */
- return 0;
-}
diff --git a/SRC/ddiagonal.c b/SRC/ddiagonal.c
deleted file mode 100644
index 60c7aa1..0000000
--- a/SRC/ddiagonal.c
+++ /dev/null
@@ -1,129 +0,0 @@
-
-/*! @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
deleted file mode 100644
index d91474a..0000000
--- a/SRC/dgscon.c
+++ /dev/null
@@ -1,157 +0,0 @@
-
-/*! @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.
- */
-#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)
-{
-
-
- /* Local variables */
- int kase, kase1, onenrm, i;
- double ainvnm;
- double *work;
- int *iwork;
- extern int drscl_(int *, double *, double *, int *);
-
- extern int dlacon_(int *, double *, double *, int *, double *, int *);
-
-
- /* Test the input parameters. */
- *info = 0;
- onenrm = *(unsigned char *)norm == '1' || lsame_(norm, "O");
- if (! onenrm && ! lsame_(norm, "I")) *info = -1;
- else if (L->nrow < 0 || L->nrow != L->ncol ||
- L->Stype != SLU_SC || L->Dtype != SLU_D || L->Mtype != SLU_TRLU)
- *info = -2;
- else if (U->nrow < 0 || U->nrow != U->ncol ||
- U->Stype != SLU_NC || U->Dtype != SLU_D || U->Mtype != SLU_TRU)
- *info = -3;
- if (*info != 0) {
- i = -(*info);
- xerbla_("dgscon", &i);
- return;
- }
-
- /* Quick return if possible */
- *rcond = 0.;
- if ( L->nrow == 0 || U->nrow == 0) {
- *rcond = 1.;
- return;
- }
-
- work = doubleCalloc( 3*L->nrow );
- iwork = intMalloc( L->nrow );
-
-
- if ( !work || !iwork )
- ABORT("Malloc fails for work arrays in dgscon.");
-
- /* Estimate the norm of inv(A). */
- ainvnm = 0.;
- if ( onenrm ) kase1 = 1;
- else kase1 = 2;
- kase = 0;
-
- do {
- dlacon_(&L->nrow, &work[L->nrow], &work[0], &iwork[0], &ainvnm, &kase);
-
- if (kase == 0) break;
-
- if (kase == kase1) {
- /* Multiply by inv(L). */
- sp_dtrsv("L", "No trans", "Unit", L, U, &work[0], stat, info);
-
- /* Multiply by inv(U). */
- sp_dtrsv("U", "No trans", "Non-unit", L, U, &work[0], stat, info);
-
- } else {
-
- /* Multiply by inv(U'). */
- sp_dtrsv("U", "Transpose", "Non-unit", L, U, &work[0], stat, info);
-
- /* Multiply by inv(L'). */
- sp_dtrsv("L", "Transpose", "Unit", L, U, &work[0], stat, info);
-
- }
-
- } while ( kase != 0 );
-
- /* Compute the estimate of the reciprocal condition number. */
- if (ainvnm != 0.) *rcond = (1. / ainvnm) / anorm;
-
- SUPERLU_FREE (work);
- SUPERLU_FREE (iwork);
- return;
-
-} /* dgscon */
-
diff --git a/SRC/dgsequ.c b/SRC/dgsequ.c
deleted file mode 100644
index 73870d4..0000000
--- a/SRC/dgsequ.c
+++ /dev/null
@@ -1,195 +0,0 @@
-
-/*! @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
- * History: Modified from LAPACK routine DGEEQU
- */
-#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)
-{
-
-
- /* Local variables */
- NCformat *Astore;
- double *Aval;
- int i, j, irow;
- double rcmin, rcmax;
- double bignum, smlnum;
- extern double dlamch_(char *);
-
- /* Test the input parameters. */
- *info = 0;
- if ( A->nrow < 0 || A->ncol < 0 ||
- A->Stype != SLU_NC || A->Dtype != SLU_D || A->Mtype != SLU_GE )
- *info = -1;
- if (*info != 0) {
- i = -(*info);
- xerbla_("dgsequ", &i);
- return;
- }
-
- /* Quick return if possible */
- if ( A->nrow == 0 || A->ncol == 0 ) {
- *rowcnd = 1.;
- *colcnd = 1.;
- *amax = 0.;
- return;
- }
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Get machine constants. */
- smlnum = dlamch_("S");
- bignum = 1. / smlnum;
-
- /* Compute row scale factors. */
- for (i = 0; i < A->nrow; ++i) r[i] = 0.;
-
- /* Find the maximum element in each row. */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- r[irow] = SUPERLU_MAX( r[irow], fabs(Aval[i]) );
- }
-
- /* Find the maximum and minimum scale factors. */
- rcmin = bignum;
- rcmax = 0.;
- for (i = 0; i < A->nrow; ++i) {
- rcmax = SUPERLU_MAX(rcmax, r[i]);
- rcmin = SUPERLU_MIN(rcmin, r[i]);
- }
- *amax = rcmax;
-
- if (rcmin == 0.) {
- /* Find the first zero scale factor and return an error code. */
- for (i = 0; i < A->nrow; ++i)
- if (r[i] == 0.) {
- *info = i + 1;
- return;
- }
- } else {
- /* Invert the scale factors. */
- for (i = 0; i < A->nrow; ++i)
- r[i] = 1. / SUPERLU_MIN( SUPERLU_MAX( r[i], smlnum ), bignum );
- /* Compute ROWCND = min(R(I)) / max(R(I)) */
- *rowcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
- }
-
- /* Compute column scale factors */
- for (j = 0; j < A->ncol; ++j) c[j] = 0.;
-
- /* Find the maximum element in each column, assuming the row
- scalings computed above. */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- c[j] = SUPERLU_MAX( c[j], fabs(Aval[i]) * r[irow] );
- }
-
- /* Find the maximum and minimum scale factors. */
- rcmin = bignum;
- rcmax = 0.;
- for (j = 0; j < A->ncol; ++j) {
- rcmax = SUPERLU_MAX(rcmax, c[j]);
- rcmin = SUPERLU_MIN(rcmin, c[j]);
- }
-
- if (rcmin == 0.) {
- /* Find the first zero scale factor and return an error code. */
- for (j = 0; j < A->ncol; ++j)
- if ( c[j] == 0. ) {
- *info = A->nrow + j + 1;
- return;
- }
- } else {
- /* Invert the scale factors. */
- for (j = 0; j < A->ncol; ++j)
- c[j] = 1. / SUPERLU_MIN( SUPERLU_MAX( c[j], smlnum ), bignum);
- /* Compute COLCND = min(C(J)) / max(C(J)) */
- *colcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
- }
-
- return;
-
-} /* dgsequ */
-
-
diff --git a/SRC/dgsisx.c b/SRC/dgsisx.c
deleted file mode 100644
index d3c942f..0000000
--- a/SRC/dgsisx.c
+++ /dev/null
@@ -1,727 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 22fa1e7..0000000
--- a/SRC/dgsisx.c.bak
+++ /dev/null
@@ -1,727 +0,0 @@
-/*! @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
deleted file mode 100644
index 62e70f1..0000000
--- a/SRC/dgsitrf.c
+++ /dev/null
@@ -1,639 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 969b5c1..0000000
--- a/SRC/dgsitrf.c.bak
+++ /dev/null
@@ -1,626 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 55531b0..0000000
--- a/SRC/dgsrfs.c
+++ /dev/null
@@ -1,452 +0,0 @@
-
-/*! @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
- * History: Modified from lapack routine DGERFS
- */
-#include <math.h>
-#include "slu_ddefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * DGSRFS improves the computed solution to a system of linear
- * equations and provides error bounds and backward error estimates for
- * the solution.
- *
- * If equilibration was performed, the system becomes:
- * (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.
- *
- * See supermatrix.h for the definition of 'SuperMatrix' structure.
- *
- * Arguments
- * =========
- *
- * 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)
- *
- * 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.
- *
- * 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.
- *
- * 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_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.
- *
- * 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.
- *
- * 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).
- *
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * 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 dgstrs().
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See 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
- *
- * Internal Parameters
- * ===================
- *
- * 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
-
- /* Table of constant values */
- int ione = 1;
- double ndone = -1.;
- double done = 1.;
-
- /* Local variables */
- NCformat *Astore;
- double *Aval;
- SuperMatrix Bjcol;
- DNformat *Bstore, *Xstore, *Bjcol_store;
- double *Bmat, *Xmat, *Bptr, *Xptr;
- int kase;
- double safe1, safe2;
- int i, j, k, irow, nz, count, notran, rowequ, colequ;
- int ldb, ldx, nrhs;
- double s, xk, lstres, eps, safmin;
- char transc[1];
- trans_t transt;
- double *work;
- double *rwork;
- int *iwork;
-
- extern int dlacon_(int *, double *, double *, int *, double *, int *);
-#ifdef _CRAY
- extern int SCOPY(int *, double *, int *, double *, int *);
- extern int SSAXPY(int *, double *, double *, int *, double *, int *);
-#else
- extern int dcopy_(int *, double *, int *, double *, int *);
- extern int daxpy_(int *, double *, double *, int *, double *, int *);
-#endif
-
- Astore = A->Store;
- Aval = Astore->nzval;
- Bstore = B->Store;
- Xstore = X->Store;
- Bmat = Bstore->nzval;
- Xmat = Xstore->nzval;
- ldb = Bstore->lda;
- ldx = Xstore->lda;
- nrhs = B->ncol;
-
- /* Test the input parameters */
- *info = 0;
- notran = (trans == NOTRANS);
- if ( !notran && trans != TRANS && trans != CONJ ) *info = -1;
- else if ( A->nrow != A->ncol || A->nrow < 0 ||
- A->Stype != SLU_NC || A->Dtype != SLU_D || A->Mtype != SLU_GE )
- *info = -2;
- else if ( L->nrow != L->ncol || L->nrow < 0 ||
- L->Stype != SLU_SC || L->Dtype != SLU_D || L->Mtype != SLU_TRLU )
- *info = -3;
- else if ( U->nrow != U->ncol || U->nrow < 0 ||
- U->Stype != SLU_NC || U->Dtype != SLU_D || U->Mtype != SLU_TRU )
- *info = -4;
- else if ( ldb < SUPERLU_MAX(0, A->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_D || B->Mtype != SLU_GE )
- *info = -10;
- else if ( ldx < SUPERLU_MAX(0, A->nrow) ||
- X->Stype != SLU_DN || X->Dtype != SLU_D || X->Mtype != SLU_GE )
- *info = -11;
- if (*info != 0) {
- i = -(*info);
- xerbla_("dgsrfs", &i);
- return;
- }
-
- /* Quick return if possible */
- if ( A->nrow == 0 || nrhs == 0) {
- for (j = 0; j < nrhs; ++j) {
- ferr[j] = 0.;
- berr[j] = 0.;
- }
- return;
- }
-
- rowequ = lsame_(equed, "R") || lsame_(equed, "B");
- colequ = lsame_(equed, "C") || lsame_(equed, "B");
-
- /* Allocate working space */
- work = doubleMalloc(2*A->nrow);
- rwork = (double *) SUPERLU_MALLOC( A->nrow * sizeof(double) );
- iwork = intMalloc(2*A->nrow);
- if ( !work || !rwork || !iwork )
- ABORT("Malloc fails for work/rwork/iwork.");
-
- if ( notran ) {
- *(unsigned char *)transc = 'N';
- transt = TRANS;
- } else {
- *(unsigned char *)transc = 'T';
- transt = NOTRANS;
- }
-
- /* NZ = maximum number of nonzero elements in each row of A, plus 1 */
- 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;
-
- /* Compute the number of nonzeros in each row (or column) of A */
- for (i = 0; i < A->nrow; ++i) iwork[i] = 0;
- if ( notran ) {
- for (k = 0; k < A->ncol; ++k)
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- ++iwork[Astore->rowind[i]];
- } else {
- for (k = 0; k < A->ncol; ++k)
- iwork[k] = Astore->colptr[k+1] - Astore->colptr[k];
- }
-
- /* Copy one column of RHS B into Bjcol. */
- Bjcol.Stype = B->Stype;
- Bjcol.Dtype = B->Dtype;
- Bjcol.Mtype = B->Mtype;
- Bjcol.nrow = B->nrow;
- Bjcol.ncol = 1;
- Bjcol.Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
- if ( !Bjcol.Store ) ABORT("SUPERLU_MALLOC fails for Bjcol.Store");
- Bjcol_store = Bjcol.Store;
- Bjcol_store->lda = ldb;
- Bjcol_store->nzval = work; /* address aliasing */
-
- /* Do for each right hand side ... */
- for (j = 0; j < nrhs; ++j) {
- count = 0;
- lstres = 3.;
- Bptr = &Bmat[j*ldb];
- Xptr = &Xmat[j*ldx];
-
- while (1) { /* Loop until stopping criterion is satisfied. */
-
- /* Compute residual R = B - op(A) * X,
- where op(A) = A, A**T, or A**H, depending on TRANS. */
-
-#ifdef _CRAY
- SCOPY(&A->nrow, Bptr, &ione, work, &ione);
-#else
- dcopy_(&A->nrow, Bptr, &ione, work, &ione);
-#endif
- sp_dgemv(transc, ndone, A, Xptr, ione, done, work, ione);
-
- /* Compute componentwise relative backward error from formula
- max(i) ( abs(R(i)) / ( abs(op(A))*abs(X) + abs(B) )(i) )
- 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 before dividing. */
-
- for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
-
- /* Compute abs(op(A))*abs(X) + abs(B). */
- if (notran) {
- for (k = 0; k < A->ncol; ++k) {
- xk = fabs( Xptr[k] );
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- rwork[Astore->rowind[i]] += fabs(Aval[i]) * xk;
- }
- } else {
- for (k = 0; k < A->ncol; ++k) {
- s = 0.;
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
- irow = Astore->rowind[i];
- s += fabs(Aval[i]) * fabs(Xptr[irow]);
- }
- rwork[k] += s;
- }
- }
- s = 0.;
- for (i = 0; i < A->nrow; ++i) {
- if (rwork[i] > safe2) {
- s = SUPERLU_MAX( s, fabs(work[i]) / rwork[i] );
- } 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;
-
- /* Test stopping criterion. Continue iterating if
- 1) The residual BERR(J) is larger than machine epsilon, and
- 2) BERR(J) decreased by at least a factor of 2 during the
- last iteration, and
- 3) At most ITMAX iterations tried. */
-
- if (berr[j] > eps && berr[j] * 2. <= lstres && count < ITMAX) {
- /* Update solution and try again. */
- dgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
-#ifdef _CRAY
- SAXPY(&A->nrow, &done, work, &ione,
- &Xmat[j*ldx], &ione);
-#else
- daxpy_(&A->nrow, &done, work, &ione,
- &Xmat[j*ldx], &ione);
-#endif
- lstres = berr[j];
- ++count;
- } else {
- break;
- }
-
- } /* end while */
-
- stat->RefineSteps = count;
-
- /* Bound error from formula:
- norm(X - XTRUE) / norm(X) .le. FERR = norm( abs(inv(op(A)))*
- ( abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) / norm(X)
- where
- norm(Z) is the magnitude of the largest component of Z
- inv(op(A)) is the inverse of op(A)
- abs(Z) is the componentwise absolute value of the matrix or
- vector Z
- NZ is the maximum number of nonzeros in any row of A, plus 1
- EPS is machine epsilon
-
- The i-th component of abs(R)+NZ*EPS*(abs(op(A))*abs(X)+abs(B))
- is incremented by SAFE1 if the i-th component of
- abs(op(A))*abs(X) + abs(B) is less than SAFE2.
-
- Use DLACON to estimate the infinity-norm of the matrix
- inv(op(A)) * diag(W),
- where W = abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) */
-
- for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
-
- /* Compute abs(op(A))*abs(X) + abs(B). */
- if ( notran ) {
- for (k = 0; k < A->ncol; ++k) {
- xk = fabs( Xptr[k] );
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- rwork[Astore->rowind[i]] += fabs(Aval[i]) * xk;
- }
- } else {
- for (k = 0; k < A->ncol; ++k) {
- s = 0.;
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
- irow = Astore->rowind[i];
- xk = fabs( Xptr[irow] );
- s += fabs(Aval[i]) * xk;
- }
- rwork[k] += s;
- }
- }
-
- for (i = 0; i < A->nrow; ++i)
- if (rwork[i] > safe2)
- rwork[i] = fabs(work[i]) + (iwork[i]+1)*eps*rwork[i];
- else
- rwork[i] = fabs(work[i])+(iwork[i]+1)*eps*rwork[i]+safe1;
-
- kase = 0;
-
- do {
- dlacon_(&A->nrow, &work[A->nrow], work,
- &iwork[A->nrow], &ferr[j], &kase);
- if (kase == 0) break;
-
- if (kase == 1) {
- /* Multiply by diag(W)*inv(op(A)**T)*(diag(C) or diag(R)). */
- if ( notran && colequ )
- for (i = 0; i < A->ncol; ++i) work[i] *= C[i];
- else if ( !notran && rowequ )
- for (i = 0; i < A->nrow; ++i) work[i] *= R[i];
-
- dgstrs (transt, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
- for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i];
- } else {
- /* Multiply by (diag(C) or diag(R))*inv(op(A))*diag(W). */
- for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i];
-
- dgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
- if ( notran && colequ )
- for (i = 0; i < A->ncol; ++i) work[i] *= C[i];
- else if ( !notran && rowequ )
- for (i = 0; i < A->ncol; ++i) work[i] *= R[i];
- }
-
- } while ( kase != 0 );
-
-
- /* Normalize error. */
- lstres = 0.;
- if ( notran && colequ ) {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, C[i] * fabs( Xptr[i]) );
- } else if ( !notran && rowequ ) {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, R[i] * fabs( Xptr[i]) );
- } else {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, fabs( Xptr[i]) );
- }
- if ( lstres != 0. )
- ferr[j] /= lstres;
-
- } /* for each RHS j ... */
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(rwork);
- SUPERLU_FREE(iwork);
- SUPERLU_FREE(Bjcol.Store);
-
- return;
-
-} /* dgsrfs */
diff --git a/SRC/dgssv.c b/SRC/dgssv.c
deleted file mode 100644
index 5baeda0..0000000
--- a/SRC/dgssv.c
+++ /dev/null
@@ -1,227 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * DGSSV solves the system of linear equations A*X=B, using the
- * LU factorization from DGSTRF. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 1.1. Permute the columns of A, forming A*Pc, where Pc
- * is a permutation matrix. For more details of this step,
- * see sp_preorder.c.
- *
- * 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.
- *
- * 1.3. Solve the system of equations A*X=B using the factored
- * form of A.
- *
- * 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
- * above algorithm to the transpose of A:
- *
- * 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 sp_preorder.c.
- *
- * 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.
- *
- * 2.3. Solve the system of equations A*X=B using the factored
- * form of A.
- *
- * 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) 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.
- *
- * 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.
- *
- * 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.
- *
- * 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->RowPerm = MY_PERMR or
- * options->Fact = SamePattern_SameRowPerm, perm_r is an
- * input argument.
- * otherwise it is an output argument.
- *
- * 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.
- *
- * 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;
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See util.h for the definition of 'SuperLUStat_t'.
- *
- * 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>
- */
-
-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 */
- int panel_size; /* panel size */
- int relax; /* no of columns in a relaxed snodes */
- int permc_spec;
- trans_t trans = NOTRANS;
- double *utime;
- double t; /* Temporary time */
-
- /* Test the input parameters ... */
- *info = 0;
- Bstore = B->Store;
- if ( options->Fact != DOFACT ) *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 ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_D || B->Mtype != SLU_GE )
- *info = -7;
- if ( *info != 0 ) {
- i = -(*info);
- xerbla_("dgssv", &i);
- return;
- }
-
- 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);
- trans = TRANS;
- } else {
- if ( A->Stype == SLU_NC ) AA = A;
- }
-
- t = SuperLU_timer_();
- /*
- * Get 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_() - t;
-
- etree = intMalloc(A->ncol);
-
- t = SuperLU_timer_();
- sp_preorder(options, AA, perm_c, etree, &AC);
- utime[ETREE] = SuperLU_timer_() - t;
-
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
-
- /*printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));*/
- t = SuperLU_timer_();
- /* Compute the LU factorization of A. */
- 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_();
- if ( *info == 0 ) {
- /* Solve the system A*X=B, overwriting B with X. */
- dgstrs (trans, L, U, perm_c, perm_r, B, stat, info);
- }
- utime[SOLVE] = SuperLU_timer_() - t;
-
- SUPERLU_FREE (etree);
- Destroy_CompCol_Permuted(&AC);
- if ( A->Stype == SLU_NR ) {
- Destroy_SuperMatrix_Store(AA);
- SUPERLU_FREE(AA);
- }
-
-}
diff --git a/SRC/dgssvx.c b/SRC/dgssvx.c
deleted file mode 100644
index c287d13..0000000
--- a/SRC/dgssvx.c
+++ /dev/null
@@ -1,622 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * DGSSVX solves the system of linear equations A*X=B or A'*X=B, using
- * the LU factorization from dgstrf(). Error bounds on the solution and
- * a condition estimate are also provided. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 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).
- *
- * 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 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.
- *
- * 1.6. The system of equations is solved for X using the factored form
- * of A.
- *
- * 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.
- *
- * 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.
- *
- * 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, 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 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.
- *
- * 2.6. The system of equations is solved for X using the factored form
- * of transpose(A).
- *
- * 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.
- *
- * 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.
- * 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).
- *
- * 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_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.
- *
- * 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.
- *
- * 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.
- *
- * 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: 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>
- */
-
-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;
- 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;
- 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;
-
- /* 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;
-
- *info = 0;
- nofact = (options->Fact != FACTORED);
- equil = (options->Equil == YES);
- notran = (options->Trans == NOTRANS);
- 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;
- }
-
-#if 0
-printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
- options->Fact, options->Trans, *equed);
-#endif
-
- /* 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 ) *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;
- }
- 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) {
- i = -(*info);
- xerbla_("dgssvx", &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 && equil ) {
- 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;
-
-/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));
- fflush(stdout); */
-
- /* Compute the LU factorization of A*Pc. */
- t0 = SuperLU_timer_();
- 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 ) {
- mem_usage->total_needed = *info - A->ncol;
- return;
- }
- }
-
- if ( options->PivotGrowth ) {
- if ( *info > 0 ) {
- if ( *info <= A->ncol ) {
- /* Compute the reciprocal pivot growth factor of the leading
- rank-deficient *info columns of A. */
- *recip_pivot_growth = dPivotGrowth(*info, AA, perm_c, L, U);
- }
- 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, info);
- utime[RCOND] = 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];
- }
-
- /* 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, info);
- utime[SOLVE] = SuperLU_timer_() - t0;
-
- /* Use iterative refinement to improve the computed solution and compute
- error bounds and backward error estimates for it. */
- t0 = SuperLU_timer_();
- if ( options->IterRefine != NOREFINE ) {
- dgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
- X, ferr, berr, stat, info);
- } else {
- for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
- }
- utime[REFINE] = 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 < 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)
- Xmat[i + j*ldx] *= R[i];
- }
- } /* 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 = A->ncol + 1;
- }
-
- if ( nofact ) {
- 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/dgssvx.c.bak b/SRC/dgssvx.c.bak
deleted file mode 100644
index 7d97d0f..0000000
--- a/SRC/dgssvx.c.bak
+++ /dev/null
@@ -1,614 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * DGSSVX solves the system of linear equations A*X=B or A'*X=B, using
- * the LU factorization from dgstrf(). Error bounds on the solution and
- * a condition estimate are also provided. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 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).
- *
- * 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 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.
- *
- * 1.6. The system of equations is solved for X using the factored form
- * of A.
- *
- * 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.
- *
- * 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.
- *
- * 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, 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 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.
- *
- * 2.6. The system of equations is solved for X using the factored form
- * of transpose(A).
- *
- * 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.
- *
- * 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.
- * 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).
- *
- * 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_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.
- *
- * 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.
- *
- * 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.
- *
- * 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: 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>
- */
-
-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;
- 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;
- 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;
-
- /* 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;
-
- *info = 0;
- nofact = (options->Fact != FACTORED);
- equil = (options->Equil == YES);
- notran = (options->Trans == NOTRANS);
- 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;
- }
-
-#if 0
-printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
- options->Fact, options->Trans, *equed);
-#endif
-
- /* 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_("dgssvx", &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 && equil ) {
- 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;
-
-/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));
- fflush(stdout); */
-
- /* Compute the LU factorization of A*Pc. */
- t0 = SuperLU_timer_();
- 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 ) {
- mem_usage->total_needed = *info - A->ncol;
- return;
- }
- }
-
- if ( options->PivotGrowth ) {
- if ( *info > 0 ) {
- if ( *info <= A->ncol ) {
- /* Compute the reciprocal pivot growth factor of the leading
- rank-deficient *info columns of A. */
- *recip_pivot_growth = dPivotGrowth(*info, AA, perm_c, L, U);
- }
- 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, info);
- utime[RCOND] = 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];
- }
-
- /* 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, info);
- utime[SOLVE] = SuperLU_timer_() - t0;
-
- /* Use iterative refinement to improve the computed solution and compute
- error bounds and backward error estimates for it. */
- t0 = SuperLU_timer_();
- if ( options->IterRefine != NOREFINE ) {
- dgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
- X, ferr, berr, stat, info);
- } else {
- for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
- }
- utime[REFINE] = 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 < 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)
- Xmat[i + j*ldx] *= R[i];
- }
- } /* 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 = A->ncol + 1;
- }
-
- if ( nofact ) {
- 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/dgstrf.c b/SRC/dgstrf.c
deleted file mode 100644
index 47f1290..0000000
--- a/SRC/dgstrf.c
+++ /dev/null
@@ -1,436 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_ddefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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).
- *
- * 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.
- *
- * 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: 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.
- *
- * ======================================================================
- *
- * Local Working Arrays:
- * ======================
- * m = number of rows in the matrix
- * n = number of columns in the matrix
- *
- * 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.
- *
- * 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 dpanel_dfs.c; marker2 is used for inner-factorization,
- * see dcolumn_dfs.c.
- *
- * 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_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
- options->Fact == SamePattern_SameRowPerm */
- int *iperm_c; /* inverse of perm_c */
- int *iwork;
- double *dwork;
- int *segrep, *repfnz, *parent, *xplore;
- int *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
- int *xprune;
- int *marker;
- double *dense, *tempv;
- int *relax_end;
- double *a;
- int *asub;
- int *xa_begin, *xa_end;
- int *xsup, *supno;
- int *xlsub, *xlusup, *xusub;
- int nzlumax;
- 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;
- double diag_pivot_thresh = options->DiagPivotThresh;
- 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;
-
- 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, fill_ratio, 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, &xprune, &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;
-
- /* Identify relaxed snodes */
- relax_end = (int *) intMalloc(n);
- if ( options->SymmetricMode == YES ) {
- heap_relax_snode(n, etree, relax, marker, relax_end);
- } else {
- relax_snode(n, etree, relax, marker, relax_end);
- }
-
- 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;
-
- /*
- * 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]++;
-
- /* --------------------------------------
- * Factorize the relaxed supernode(jcol:kcol)
- * -------------------------------------- */
- /* Determine the union of the row structure of the snode */
- if ( (*info = dsnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
- xprune, 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;
-
- /* Scatter into SPA dense[*] */
- for (k = xa_begin[icol]; k < xa_end[icol]; k++)
- dense[asub[k]] = a[k];
-
- /* Numeric update within the snode */
- dsnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
-
- if ( (*info = dpivotL(icol, diag_pivot_thresh, &usepr, perm_r,
- iperm_r, iperm_c, &pivrow, &Glu, stat)) )
- if ( iinfo == 0 ) iinfo = *info;
-
-#ifdef DEBUG
- dprint_lu_col("[1]: ", icol, pivrow, xprune, &Glu);
-#endif
-
- }
-
- jcol = icol;
-
- } 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 */
- dpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
- dense, panel_lsub, segrep, repfnz, xprune,
- 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 */
-
- if ((*info = dcolumn_dfs(m, jj, perm_r, &nseg, &panel_lsub[k],
- segrep, &repfnz[k], xprune, marker,
- parent, xplore, &Glu)) != 0) return;
-
- /* Numeric updates */
- if ((*info = dcolumn_bmod(jj, (nseg - nseg1), &dense[k],
- tempv, &segrep[nseg1], &repfnz[k],
- jcol, &Glu, stat)) != 0) return;
-
- /* Copy the U-segments to ucol[*] */
- if ((*info = dcopy_to_ucol(jj, nseg, segrep, &repfnz[k],
- perm_r, &dense[k], &Glu)) != 0)
- return;
-
- if ( (*info = dpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
- iperm_r, iperm_c, &pivrow, &Glu, stat)) )
- if ( iinfo == 0 ) iinfo = *info;
-
- /* Prune columns (0:jj-1) using column jj */
- dpruneL(jj, perm_r, pivrow, nseg, segrep,
- &repfnz[k], xprune, &Glu);
-
- /* Reset repfnz[] for this column */
- resetrep_col (nseg, segrep, &repfnz[k]);
-
-#ifdef DEBUG
- dprint_lu_col("[2]: ", jj, pivrow, xprune, &Glu);
-#endif
-
- }
-
- 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;
- }
- }
-
- countnz(min_mn, xprune, &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);
-
-}
diff --git a/SRC/dgstrs.c b/SRC/dgstrs.c
deleted file mode 100644
index 4e0247b..0000000
--- a/SRC/dgstrs.c
+++ /dev/null
@@ -1,337 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_ddefs.h"
-
-
-/*
- * Function prototypes
- */
-void dusolve(int, int, double*, double*);
-void dlsolve(int, int, double*, double*);
-void dmatvec(int, int, int, double*, double*, double*);
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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.
- *
- * See supermatrix.h for the definition of 'SuperMatrix' structure.
- *
- * Arguments
- * =========
- *
- * 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)
- *
- * 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_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.
- *
- * 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;
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See 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
- * </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
- int incx = 1, incy = 1;
-#ifdef USE_VENDOR_BLAS
- double alpha = 1.0, beta = 1.0;
- double *work_col;
-#endif
- DNformat *Bstore;
- double *Bmat;
- SCformat *Lstore;
- NCformat *Ustore;
- double *Lval, *Uval;
- int fsupc, nrow, nsupr, nsupc, luptr, istart, irow;
- int i, j, k, iptr, jcol, n, ldb, nrhs;
- double *work, *rhs_work, *soln;
- flops_t solve_ops;
- void dprint_soln();
-
- /* Test input parameters ... */
- *info = 0;
- Bstore = B->Store;
- ldb = Bstore->lda;
- nrhs = B->ncol;
- if ( trans != NOTRANS && trans != TRANS && trans != CONJ ) *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 ( U->nrow != U->ncol || U->nrow < 0 ||
- U->Stype != SLU_NC || U->Dtype != SLU_D || U->Mtype != SLU_TRU )
- *info = -3;
- else if ( ldb < SUPERLU_MAX(0, L->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_D || B->Mtype != SLU_GE )
- *info = -6;
- if ( *info ) {
- i = -(*info);
- xerbla_("dgstrs", &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;
- Ustore = U->Store;
- Uval = Ustore->nzval;
- solve_ops = 0;
-
- if ( trans == NOTRANS ) {
- /* 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
-
- /*
- * Back solve Ux=y.
- */
- for (k = Lstore->nsuper; k >= 0; 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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += nsupc * (nsupc + 1) * nrhs;
-
- if ( nsupc == 1 ) {
- rhs_work = &Bmat[0];
- for (j = 0; j < nrhs; j++) {
- rhs_work[fsupc] /= Lval[luptr];
- rhs_work += ldb;
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd("U", strlen("U"));
- ftcs3 = _cptofcd("N", strlen("N"));
- STRSM( ftcs1, ftcs2, ftcs3, ftcs3, &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-#else
- dtrsm_("L", "U", "N", "N", &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-#endif
-#else
- for (j = 0; j < nrhs; j++)
- dusolve ( nsupr, nsupc, &Lval[luptr], &Bmat[fsupc+j*ldb] );
-#endif
- }
-
- for (j = 0; j < nrhs; ++j) {
- rhs_work = &Bmat[j*ldb];
- for (jcol = fsupc; jcol < fsupc + nsupc; jcol++) {
- solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++ ){
- irow = U_SUB(i);
- rhs_work[irow] -= rhs_work[jcol] * Uval[i];
- }
- }
- }
-
- } /* for U-solve */
-
-#ifdef DEBUG
- printf("After U-solve: x=\n");
- dprint_soln(n, nrhs, Bmat);
-#endif
-
- /* Compute the final solution X := Pc*X. */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[k] = rhs_work[perm_c[k]];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- stat->ops[SOLVE] = solve_ops;
-
- } else { /* Solve A'*X=B or CONJ(A)*X=B */
- /* Permute right hand sides to form Pc'*B. */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[perm_c[k]] = rhs_work[k];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- stat->ops[SOLVE] = 0;
- for (k = 0; k < nrhs; ++k) {
-
- /* Multiply by inv(U'). */
- sp_dtrsv("U", "T", "N", L, U, &Bmat[k*ldb], stat, info);
-
- /* Multiply by inv(L'). */
- sp_dtrsv("L", "T", "U", L, U, &Bmat[k*ldb], stat, info);
-
- }
- /* Compute the final solution X := Pr'*X (=inv(Pr)*X) */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[k] = rhs_work[perm_r[k]];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- }
-
- 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
deleted file mode 100644
index 951fe7a..0000000
--- a/SRC/dlacon.c
+++ /dev/null
@@ -1,236 +0,0 @@
-
-/*! @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)
-
-{
-
-
- /* Table of constant values */
- int c__1 = 1;
- double zero = 0.0;
- double one = 1.0;
-
- /* Local variables */
- static int iter;
- static int jump, jlast;
- static double altsgn, estold;
- static int i, j;
- double temp;
-#ifdef _CRAY
- extern int ISAMAX(int *, double *, int *);
- extern double SASUM(int *, double *, int *);
- extern int SCOPY(int *, double *, int *, double *, int *);
-#else
- extern int idamax_(int *, double *, int *);
- extern double dasum_(int *, double *, int *);
- extern int dcopy_(int *, double *, int *, double *, int *);
-#endif
-#define d_sign(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */
-#define i_dnnt(a) \
- ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */
-
- if ( *kase == 0 ) {
- for (i = 0; i < *n; ++i) {
- x[i] = 1. / (double) (*n);
- }
- *kase = 1;
- jump = 1;
- return 0;
- }
-
- switch (jump) {
- case 1: goto L20;
- case 2: goto L40;
- case 3: goto L70;
- case 4: goto L110;
- case 5: goto L140;
- }
-
- /* ................ ENTRY (JUMP = 1)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
- L20:
- if (*n == 1) {
- v[0] = x[0];
- *est = fabs(v[0]);
- /* ... QUIT */
- goto L150;
- }
-#ifdef _CRAY
- *est = SASUM(n, x, &c__1);
-#else
- *est = dasum_(n, x, &c__1);
-#endif
-
- for (i = 0; i < *n; ++i) {
- x[i] = d_sign(one, x[i]);
- isgn[i] = i_dnnt(x[i]);
- }
- *kase = 2;
- jump = 2;
- return 0;
-
- /* ................ ENTRY (JUMP = 2)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
-L40:
-#ifdef _CRAY
- j = ISAMAX(n, &x[0], &c__1);
-#else
- j = idamax_(n, &x[0], &c__1);
-#endif
- --j;
- iter = 2;
-
- /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
-L50:
- for (i = 0; i < *n; ++i) x[i] = zero;
- x[j] = one;
- *kase = 1;
- jump = 3;
- return 0;
-
- /* ................ ENTRY (JUMP = 3)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L70:
-#ifdef _CRAY
- SCOPY(n, x, &c__1, v, &c__1);
-#else
- dcopy_(n, x, &c__1, v, &c__1);
-#endif
- estold = *est;
-#ifdef _CRAY
- *est = SASUM(n, v, &c__1);
-#else
- *est = dasum_(n, v, &c__1);
-#endif
-
- for (i = 0; i < *n; ++i)
- if (i_dnnt(d_sign(one, x[i])) != isgn[i])
- goto L90;
-
- /* REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED. */
- goto L120;
-
-L90:
- /* TEST FOR CYCLING. */
- if (*est <= estold) goto L120;
-
- for (i = 0; i < *n; ++i) {
- x[i] = d_sign(one, x[i]);
- isgn[i] = i_dnnt(x[i]);
- }
- *kase = 2;
- jump = 4;
- return 0;
-
- /* ................ ENTRY (JUMP = 4)
- X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
-L110:
- jlast = j;
-#ifdef _CRAY
- j = ISAMAX(n, &x[0], &c__1);
-#else
- j = idamax_(n, &x[0], &c__1);
-#endif
- --j;
- if (x[jlast] != fabs(x[j]) && iter < 5) {
- ++iter;
- goto L50;
- }
-
- /* ITERATION COMPLETE. FINAL STAGE. */
-L120:
- altsgn = 1.;
- for (i = 1; i <= *n; ++i) {
- x[i-1] = altsgn * ((double)(i - 1) / (double)(*n - 1) + 1.);
- altsgn = -altsgn;
- }
- *kase = 1;
- jump = 5;
- return 0;
-
- /* ................ ENTRY (JUMP = 5)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L140:
-#ifdef _CRAY
- temp = SASUM(n, x, &c__1) / (double)(*n * 3) * 2.;
-#else
- temp = dasum_(n, x, &c__1) / (double)(*n * 3) * 2.;
-#endif
- if (temp > *est) {
-#ifdef _CRAY
- SCOPY(n, &x[0], &c__1, &v[0], &c__1);
-#else
- dcopy_(n, &x[0], &c__1, &v[0], &c__1);
-#endif
- *est = temp;
- }
-
-L150:
- *kase = 0;
- return 0;
-
-} /* dlacon_ */
diff --git a/SRC/dlacon.c.bak b/SRC/dlacon.c.bak
deleted file mode 100644
index 951fe7a..0000000
--- a/SRC/dlacon.c.bak
+++ /dev/null
@@ -1,236 +0,0 @@
-
-/*! @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)
-
-{
-
-
- /* Table of constant values */
- int c__1 = 1;
- double zero = 0.0;
- double one = 1.0;
-
- /* Local variables */
- static int iter;
- static int jump, jlast;
- static double altsgn, estold;
- static int i, j;
- double temp;
-#ifdef _CRAY
- extern int ISAMAX(int *, double *, int *);
- extern double SASUM(int *, double *, int *);
- extern int SCOPY(int *, double *, int *, double *, int *);
-#else
- extern int idamax_(int *, double *, int *);
- extern double dasum_(int *, double *, int *);
- extern int dcopy_(int *, double *, int *, double *, int *);
-#endif
-#define d_sign(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */
-#define i_dnnt(a) \
- ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */
-
- if ( *kase == 0 ) {
- for (i = 0; i < *n; ++i) {
- x[i] = 1. / (double) (*n);
- }
- *kase = 1;
- jump = 1;
- return 0;
- }
-
- switch (jump) {
- case 1: goto L20;
- case 2: goto L40;
- case 3: goto L70;
- case 4: goto L110;
- case 5: goto L140;
- }
-
- /* ................ ENTRY (JUMP = 1)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
- L20:
- if (*n == 1) {
- v[0] = x[0];
- *est = fabs(v[0]);
- /* ... QUIT */
- goto L150;
- }
-#ifdef _CRAY
- *est = SASUM(n, x, &c__1);
-#else
- *est = dasum_(n, x, &c__1);
-#endif
-
- for (i = 0; i < *n; ++i) {
- x[i] = d_sign(one, x[i]);
- isgn[i] = i_dnnt(x[i]);
- }
- *kase = 2;
- jump = 2;
- return 0;
-
- /* ................ ENTRY (JUMP = 2)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
-L40:
-#ifdef _CRAY
- j = ISAMAX(n, &x[0], &c__1);
-#else
- j = idamax_(n, &x[0], &c__1);
-#endif
- --j;
- iter = 2;
-
- /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
-L50:
- for (i = 0; i < *n; ++i) x[i] = zero;
- x[j] = one;
- *kase = 1;
- jump = 3;
- return 0;
-
- /* ................ ENTRY (JUMP = 3)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L70:
-#ifdef _CRAY
- SCOPY(n, x, &c__1, v, &c__1);
-#else
- dcopy_(n, x, &c__1, v, &c__1);
-#endif
- estold = *est;
-#ifdef _CRAY
- *est = SASUM(n, v, &c__1);
-#else
- *est = dasum_(n, v, &c__1);
-#endif
-
- for (i = 0; i < *n; ++i)
- if (i_dnnt(d_sign(one, x[i])) != isgn[i])
- goto L90;
-
- /* REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED. */
- goto L120;
-
-L90:
- /* TEST FOR CYCLING. */
- if (*est <= estold) goto L120;
-
- for (i = 0; i < *n; ++i) {
- x[i] = d_sign(one, x[i]);
- isgn[i] = i_dnnt(x[i]);
- }
- *kase = 2;
- jump = 4;
- return 0;
-
- /* ................ ENTRY (JUMP = 4)
- X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
-L110:
- jlast = j;
-#ifdef _CRAY
- j = ISAMAX(n, &x[0], &c__1);
-#else
- j = idamax_(n, &x[0], &c__1);
-#endif
- --j;
- if (x[jlast] != fabs(x[j]) && iter < 5) {
- ++iter;
- goto L50;
- }
-
- /* ITERATION COMPLETE. FINAL STAGE. */
-L120:
- altsgn = 1.;
- for (i = 1; i <= *n; ++i) {
- x[i-1] = altsgn * ((double)(i - 1) / (double)(*n - 1) + 1.);
- altsgn = -altsgn;
- }
- *kase = 1;
- jump = 5;
- return 0;
-
- /* ................ ENTRY (JUMP = 5)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L140:
-#ifdef _CRAY
- temp = SASUM(n, x, &c__1) / (double)(*n * 3) * 2.;
-#else
- temp = dasum_(n, x, &c__1) / (double)(*n * 3) * 2.;
-#endif
- if (temp > *est) {
-#ifdef _CRAY
- SCOPY(n, &x[0], &c__1, &v[0], &c__1);
-#else
- dcopy_(n, &x[0], &c__1, &v[0], &c__1);
-#endif
- *est = temp;
- }
-
-L150:
- *kase = 0;
- return 0;
-
-} /* dlacon_ */
diff --git a/SRC/dlamch.c b/SRC/dlamch.c
deleted file mode 100644
index 678ac35..0000000
--- a/SRC/dlamch.c
+++ /dev/null
@@ -1,971 +0,0 @@
-/*! @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"
-
-#define TRUE_ (1)
-#define FALSE_ (0)
-#define abs(x) ((x) >= 0 ? (x) : -(x))
-#define min(a,b) ((a) <= (b) ? (a) : (b))
-#define max(a,b) ((a) >= (b) ? (a) : (b))
-
-
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- DLAMCH determines double precision machine parameters.
-
- Arguments
- =========
-
- 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
-
- where
-
- 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>
-*/
-double dlamch_(char *cmach)
-{
-
-
- static int first = TRUE_;
-
- /* System generated locals */
- int i__1;
- double ret_val;
- /* Builtin functions */
- double pow_di(double *, int *);
- /* Local variables */
- static double base;
- static int beta;
- static double emin, prec, emax;
- static int imin, imax;
- static int lrnd;
- static double rmin, rmax, t, rmach;
- extern int lsame_(char *, char *);
- static double small, sfmin;
- extern /* Subroutine */ int dlamc2_(int *, int *, int *,
- double *, int *, double *, int *, double *);
- static int it;
- static double rnd, eps;
-
- if (first) {
- first = FALSE_;
- dlamc2_(&beta, &it, &lrnd, &eps, &imin, &rmin, &imax, &rmax);
- base = (double) beta;
- t = (double) it;
- if (lrnd) {
- rnd = 1.;
- i__1 = 1 - it;
- eps = pow_di(&base, &i__1) / 2;
- } else {
- rnd = 0.;
- i__1 = 1 - it;
- eps = pow_di(&base, &i__1);
- }
- prec = eps * base;
- emin = (double) imin;
- emax = (double) imax;
- sfmin = rmin;
- small = 1. / rmax;
- if (small >= sfmin) {
-
- /* Use SMALL plus a bit, to avoid the possibility of rounding
- causing overflow when computing 1/sfmin. */
- sfmin = small * (eps + 1.);
- }
- }
-
- if (lsame_(cmach, "E")) {
- rmach = eps;
- } else if (lsame_(cmach, "S")) {
- rmach = sfmin;
- } else if (lsame_(cmach, "B")) {
- rmach = base;
- } else if (lsame_(cmach, "P")) {
- rmach = prec;
- } else if (lsame_(cmach, "N")) {
- rmach = t;
- } else if (lsame_(cmach, "R")) {
- rmach = rnd;
- } else if (lsame_(cmach, "M")) {
- rmach = emin;
- } else if (lsame_(cmach, "U")) {
- rmach = rmin;
- } else if (lsame_(cmach, "L")) {
- rmach = emax;
- } else if (lsame_(cmach, "O")) {
- rmach = rmax;
- }
-
- ret_val = rmach;
- return ret_val;
-
-/* End of DLAMCH */
-
-} /* dlamch_ */
-/* Subroutine */
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- DLAMC1 determines the machine parameters given by BETA, T, RND, and
- IEEE1.
-
- Arguments
- =========
-
- BETA (output) INT
- The base of the machine.
-
- T (output) INT
- The number of ( BETA ) digits in the mantissa.
-
- RND (output) INT
- Specifies whether proper rounding ( RND = .TRUE. ) or
- chopping ( RND = .FALSE. ) occurs in addition. This may not
-
- be a reliable guide to the way in which the machine performs
-
- its arithmetic.
-
- IEEE1 (output) INT
- Specifies whether rounding appears to be done in the IEEE
- 'round to nearest' style.
-
- Further Details
- ===============
-
- The routine is based on the routine ENVRON by Malcolm and
- incorporates suggestions by Gentleman and Marovich. See
-
- Malcolm M. A. (1972) Algorithms to reveal properties of
- floating-point arithmetic. Comms. of the ACM, 15, 949-951.
-
- 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>
-*/
-int dlamc1_(int *beta, int *t, int *rnd, int
- *ieee1)
-{
- /* Initialized data */
- static int first = TRUE_;
- /* System generated locals */
- double d__1, d__2;
- /* Local variables */
- static int lrnd;
- static double a, b, c, f;
- static int lbeta;
- static double savec;
- extern double dlamc3_(double *, double *);
- static int lieee1;
- static double t1, t2;
- static int lt;
- static double one, qtr;
-
- if (first) {
- first = FALSE_;
- one = 1.;
-
-/* LBETA, LIEEE1, LT and LRND are the local values of BE
-TA,
- IEEE1, T and RND.
-
- Throughout this routine we use the function DLAMC3 to ens
-ure
- that relevant values are stored and not held in registers,
- or
- are not affected by optimizers.
-
- Compute a = 2.0**m with the smallest positive integer m s
-uch
- that
-
- fl( a + 1.0 ) = a. */
-
- a = 1.;
- c = 1.;
-
-/* + WHILE( C.EQ.ONE )LOOP */
-L10:
- if (c == one) {
- a *= 2;
- c = dlamc3_(&a, &one);
- d__1 = -a;
- c = dlamc3_(&c, &d__1);
- goto L10;
- }
-/* + END WHILE
-
- Now compute b = 2.0**m with the smallest positive integer
-m
- such that
-
- fl( a + b ) .gt. a. */
-
- b = 1.;
- c = dlamc3_(&a, &b);
-
-/* + WHILE( C.EQ.A )LOOP */
-L20:
- if (c == a) {
- b *= 2;
- c = dlamc3_(&a, &b);
- goto L20;
- }
-/* + END WHILE
-
- Now compute the base. a and c are neighbouring floating po
-int
- numbers in the interval ( beta**t, beta**( t + 1 ) ) and
- so
- their difference is beta. Adding 0.25 to c is to ensure that
- it
- is truncated to beta and not ( beta - 1 ). */
-
- qtr = one / 4;
- savec = c;
- d__1 = -a;
- c = dlamc3_(&c, &d__1);
- lbeta = (int) (c + qtr);
-
-/* Now determine whether rounding or chopping occurs, by addin
-g a
- bit less than beta/2 and a bit more than beta/2 to
- a. */
-
- b = (double) lbeta;
- d__1 = b / 2;
- d__2 = -b / 100;
- f = dlamc3_(&d__1, &d__2);
- c = dlamc3_(&f, &a);
- if (c == a) {
- lrnd = TRUE_;
- } else {
- lrnd = FALSE_;
- }
- d__1 = b / 2;
- d__2 = b / 100;
- f = dlamc3_(&d__1, &d__2);
- c = dlamc3_(&f, &a);
- if (lrnd && c == a) {
- lrnd = FALSE_;
- }
-
-/* Try and decide whether rounding is done in the IEEE 'round
- to
- nearest' style. B/2 is half a unit in the last place of the
-two
- numbers A and SAVEC. Furthermore, A is even, i.e. has last
-bit
- zero, and SAVEC is odd. Thus adding B/2 to A should not cha
-nge
- A, but adding B/2 to SAVEC should change SAVEC. */
-
- d__1 = b / 2;
- t1 = dlamc3_(&d__1, &a);
- d__1 = b / 2;
- t2 = dlamc3_(&d__1, &savec);
- lieee1 = t1 == a && t2 > savec && lrnd;
-
-/* Now find the mantissa, t. It should be the integer part
- of
- log to the base beta of a, however it is safer to determine
- t
- by powering. So we find t as the smallest positive integer
-for
- which
-
- fl( beta**t + 1.0 ) = 1.0. */
-
- lt = 0;
- a = 1.;
- c = 1.;
-
-/* + WHILE( C.EQ.ONE )LOOP */
-L30:
- if (c == one) {
- ++lt;
- a *= lbeta;
- c = dlamc3_(&a, &one);
- d__1 = -a;
- c = dlamc3_(&c, &d__1);
- goto L30;
- }
-/* + END WHILE */
-
- }
-
- *beta = lbeta;
- *t = lt;
- *rnd = lrnd;
- *ieee1 = lieee1;
- return 0;
-
-/* End of DLAMC1 */
-
-} /* dlamc1_ */
-
-
-/* Subroutine */
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- DLAMC2 determines the machine parameters specified in its argument
- list.
-
- Arguments
- =========
-
- BETA (output) INT
- The base of the machine.
-
- T (output) INT
- The number of ( BETA ) digits in the mantissa.
-
- RND (output) INT
- Specifies whether proper rounding ( RND = .TRUE. ) or
- chopping ( RND = .FALSE. ) occurs in addition. This may not
-
- be a reliable guide to the way in which the machine performs
-
- its arithmetic.
-
- EPS (output) DOUBLE PRECISION
- The smallest positive number such that
-
- fl( 1.0 - EPS ) .LT. 1.0,
-
- where fl denotes the computed value.
-
- EMIN (output) INT
- The minimum exponent before (gradual) underflow occurs.
-
- RMIN (output) DOUBLE PRECISION
- The smallest normalized number for the machine, given by
- BASE**( EMIN - 1 ), where BASE is the floating point value
-
- of BETA.
-
- EMAX (output) INT
- The maximum exponent before overflow occurs.
-
- RMAX (output) DOUBLE PRECISION
- The largest positive number for the machine, given by
- BASE**EMAX * ( 1 - EPS ), where BASE is the floating point
-
- value of BETA.
-
- Further Details
- ===============
-
- The computation of EPS is based on a routine PARANOIA by
- 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;
-
- /* Initialized data */
- static int first = TRUE_;
- static int iwarn = FALSE_;
- /* System generated locals */
- int i__1;
- double d__1, d__2, d__3, d__4, d__5;
- /* Builtin functions */
- double pow_di(double *, int *);
- /* Local variables */
- static int ieee;
- static double half;
- static int lrnd;
- static double leps, zero, a, b, c;
- static int i, lbeta;
- static double rbase;
- static int lemin, lemax, gnmin;
- static double small;
- static int gpmin;
- static double third, lrmin, lrmax, sixth;
- extern /* Subroutine */ int dlamc1_(int *, int *, int *,
- int *);
- extern double dlamc3_(double *, double *);
- static int lieee1;
- extern /* Subroutine */ int dlamc4_(int *, double *, int *),
- dlamc5_(int *, int *, int *, int *, int *,
- double *);
- static int lt, ngnmin, ngpmin;
- static double one, two;
-
- if (first) {
- first = FALSE_;
- zero = 0.;
- one = 1.;
- two = 2.;
-
-/* LBETA, LT, LRND, LEPS, LEMIN and LRMIN are the local values
- of
- BETA, T, RND, EPS, EMIN and RMIN.
-
- Throughout this routine we use the function DLAMC3 to ens
-ure
- that relevant values are stored and not held in registers,
- or
- are not affected by optimizers.
-
- DLAMC1 returns the parameters LBETA, LT, LRND and LIEEE1.
-*/
-
- dlamc1_(&lbeta, <, &lrnd, &lieee1);
-
-/* Start to find EPS. */
-
- b = (double) lbeta;
- i__1 = -lt;
- a = pow_di(&b, &i__1);
- leps = a;
-
-/* Try some tricks to see whether or not this is the correct E
-PS. */
-
- b = two / 3;
- half = one / 2;
- d__1 = -half;
- sixth = dlamc3_(&b, &d__1);
- third = dlamc3_(&sixth, &sixth);
- d__1 = -half;
- b = dlamc3_(&third, &d__1);
- b = dlamc3_(&b, &sixth);
- b = abs(b);
- if (b < leps) {
- b = leps;
- }
-
- leps = 1.;
-
-/* + WHILE( ( LEPS.GT.B ).AND.( B.GT.ZERO ) )LOOP */
-L10:
- if (leps > b && b > zero) {
- leps = b;
- d__1 = half * leps;
-/* Computing 5th power */
- d__3 = two, d__4 = d__3, d__3 *= d__3;
-/* Computing 2nd power */
- d__5 = leps;
- d__2 = d__4 * (d__3 * d__3) * (d__5 * d__5);
- c = dlamc3_(&d__1, &d__2);
- d__1 = -c;
- c = dlamc3_(&half, &d__1);
- b = dlamc3_(&half, &c);
- d__1 = -b;
- c = dlamc3_(&half, &d__1);
- b = dlamc3_(&half, &c);
- goto L10;
- }
-/* + END WHILE */
-
- if (a < leps) {
- leps = a;
- }
-
-/* Computation of EPS complete.
-
- Now find EMIN. Let A = + or - 1, and + or - (1 + BASE**(-3
-)).
- Keep dividing A by BETA until (gradual) underflow occurs. T
-his
- is detected when we cannot recover the previous A. */
-
- rbase = one / lbeta;
- small = one;
- for (i = 1; i <= 3; ++i) {
- d__1 = small * rbase;
- small = dlamc3_(&d__1, &zero);
-/* L20: */
- }
- a = dlamc3_(&one, &small);
- dlamc4_(&ngpmin, &one, &lbeta);
- d__1 = -one;
- dlamc4_(&ngnmin, &d__1, &lbeta);
- dlamc4_(&gpmin, &a, &lbeta);
- d__1 = -a;
- dlamc4_(&gnmin, &d__1, &lbeta);
- ieee = FALSE_;
-
- if (ngpmin == ngnmin && gpmin == gnmin) {
- if (ngpmin == gpmin) {
- lemin = ngpmin;
-/* ( Non twos-complement machines, no gradual under
-flow;
- e.g., VAX ) */
- } else if (gpmin - ngpmin == 3) {
- lemin = ngpmin - 1 + lt;
- ieee = TRUE_;
-/* ( Non twos-complement machines, with gradual und
-erflow;
- e.g., IEEE standard followers ) */
- } else {
- lemin = min(ngpmin,gpmin);
-/* ( A guess; no known machine ) */
- iwarn = TRUE_;
- }
-
- } else if (ngpmin == gpmin && ngnmin == gnmin) {
- if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1) {
- lemin = max(ngpmin,ngnmin);
-/* ( Twos-complement machines, no gradual underflow
-;
- e.g., CYBER 205 ) */
- } else {
- lemin = min(ngpmin,ngnmin);
-/* ( A guess; no known machine ) */
- iwarn = TRUE_;
- }
-
- } else if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1 && gpmin == gnmin)
- {
- if (gpmin - min(ngpmin,ngnmin) == 3) {
- lemin = max(ngpmin,ngnmin) - 1 + lt;
-/* ( Twos-complement machines with gradual underflo
-w;
- no known machine ) */
- } else {
- lemin = min(ngpmin,ngnmin);
-/* ( A guess; no known machine ) */
- iwarn = TRUE_;
- }
-
- } else {
-/* Computing MIN */
- i__1 = min(ngpmin,ngnmin), i__1 = min(i__1,gpmin);
- lemin = min(i__1,gnmin);
-/* ( A guess; no known machine ) */
- iwarn = TRUE_;
- }
-/* **
- Comment out this if block if EMIN is ok */
- if (iwarn) {
- first = TRUE_;
- printf("\n\n WARNING. The value EMIN may be incorrect:- ");
- printf("EMIN = %8i\n",lemin);
- printf("If, after inspection, the value EMIN looks acceptable");
- printf("please comment out \n the IF block as marked within the");
- printf("code of routine DLAMC2, \n otherwise supply EMIN");
- printf("explicitly.\n");
- }
-/* **
-
- Assume IEEE arithmetic if we found denormalised numbers abo
-ve,
- or if arithmetic seems to round in the IEEE style, determi
-ned
- in routine DLAMC1. A true IEEE machine should have both thi
-ngs
- true; however, faulty machines may have one or the other. */
-
- ieee = ieee || lieee1;
-
-/* Compute RMIN by successive division by BETA. We could comp
-ute
- RMIN as BASE**( EMIN - 1 ), but some machines underflow dur
-ing
- this computation. */
-
- lrmin = 1.;
- i__1 = 1 - lemin;
- for (i = 1; i <= 1-lemin; ++i) {
- d__1 = lrmin * rbase;
- lrmin = dlamc3_(&d__1, &zero);
-/* L30: */
- }
-
-/* Finally, call DLAMC5 to compute EMAX and RMAX. */
-
- dlamc5_(&lbeta, <, &lemin, &ieee, &lemax, &lrmax);
- }
-
- *beta = lbeta;
- *t = lt;
- *rnd = lrnd;
- *eps = leps;
- *emin = lemin;
- *rmin = lrmin;
- *emax = lemax;
- *rmax = lrmax;
-
- return 0;
-
-
-/* End of DLAMC2 */
-
-} /* dlamc2_ */
-
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- DLAMC3 is intended to force A and B to be stored prior to doing
-
- the addition of A and B , for use in situations where optimizers
-
- might hold one of these in a register.
-
- Arguments
- =========
-
- A, B (input) DOUBLE PRECISION
- The values A and B.
-
- =====================================================================
-</pre>
-*/
-double dlamc3_(double *a, double *b)
-{
-/* >>Start of File<<
- System generated locals */
- double ret_val;
-
- ret_val = *a + *b;
-
- return ret_val;
-
-/* End of DLAMC3 */
-
-} /* dlamc3_ */
-
-
-/* Subroutine */
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- DLAMC4 is a service routine for DLAMC2.
-
- Arguments
- =========
-
- EMIN (output) EMIN
- The minimum exponent before (gradual) underflow, computed by
-
- setting A = START and dividing by BASE until the previous A
- can not be recovered.
-
- START (input) DOUBLE PRECISION
- The starting point for determining EMIN.
-
- BASE (input) INT
- The base of the machine.
-
- =====================================================================
-</pre>
-*/
-
-int dlamc4_(int *emin, double *start, int *base)
-{
- /* System generated locals */
- int i__1;
- double d__1;
- /* Local variables */
- static double zero, a;
- static int i;
- static double rbase, b1, b2, c1, c2, d1, d2;
- extern double dlamc3_(double *, double *);
- static double one;
-
- a = *start;
- one = 1.;
- rbase = one / *base;
- zero = 0.;
- *emin = 1;
- d__1 = a * rbase;
- b1 = dlamc3_(&d__1, &zero);
- c1 = a;
- c2 = a;
- d1 = a;
- d2 = a;
-/* + WHILE( ( C1.EQ.A ).AND.( C2.EQ.A ).AND.
- $ ( D1.EQ.A ).AND.( D2.EQ.A ) )LOOP */
-L10:
- if (c1 == a && c2 == a && d1 == a && d2 == a) {
- --(*emin);
- a = b1;
- d__1 = a / *base;
- b1 = dlamc3_(&d__1, &zero);
- d__1 = b1 * *base;
- c1 = dlamc3_(&d__1, &zero);
- d1 = zero;
- i__1 = *base;
- for (i = 1; i <= *base; ++i) {
- d1 += b1;
-/* L20: */
- }
- d__1 = a * rbase;
- b2 = dlamc3_(&d__1, &zero);
- d__1 = b2 / rbase;
- c2 = dlamc3_(&d__1, &zero);
- d2 = zero;
- i__1 = *base;
- for (i = 1; i <= *base; ++i) {
- d2 += b2;
-/* L30: */
- }
- goto L10;
- }
-/* + END WHILE */
-
- return 0;
-
-/* End of DLAMC4 */
-
-} /* dlamc4_ */
-
-
-/* Subroutine */
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- DLAMC5 attempts to compute RMAX, the largest machine floating-point
- number, without overflow. It assumes that EMAX + abs(EMIN) 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,
-
- EMAX = 28718). It will also fail if the value supplied for EMIN is
- too large (i.e. too close to zero), probably with overflow.
-
- Arguments
- =========
-
- BETA (input) INT
- The base of floating-point arithmetic.
-
- P (input) INT
- The number of base BETA digits in the mantissa of a
- floating-point value.
-
- EMIN (input) INT
- The minimum exponent before (gradual) underflow.
-
- IEEE (input) INT
- A int flag specifying whether or not the arithmetic
- system is thought to comply with the IEEE standard.
-
- EMAX (output) INT
- The largest exponent before overflow
-
- RMAX (output) DOUBLE PRECISION
- The largest machine floating-point number.
-
- =====================================================================
-
-
-
- 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).
-</pre>
-*/
-int dlamc5_(int *beta, int *p, int *emin,
- int *ieee, int *emax, double *rmax)
-{
-
- /* Table of constant values */
- static double c_b5 = 0.;
-
- /* System generated locals */
- int i__1;
- double d__1;
- /* Local variables */
- static int lexp;
- static double oldy;
- static int uexp, i;
- static double y, z;
- static int nbits;
- extern double dlamc3_(double *, double *);
- static double recbas;
- static int exbits, expsum, try__;
-
-
-
- lexp = 1;
- exbits = 1;
-L10:
- try__ = lexp << 1;
- if (try__ <= -(*emin)) {
- lexp = try__;
- ++exbits;
- goto L10;
- }
- if (lexp == -(*emin)) {
- uexp = lexp;
- } else {
- uexp = try__;
- ++exbits;
- }
-
-/* Now -LEXP is less than or equal to EMIN, and -UEXP is greater
- than or equal to EMIN. EXBITS is the number of bits needed to
- store the exponent. */
-
- if (uexp + *emin > -lexp - *emin) {
- expsum = lexp << 1;
- } else {
- expsum = uexp << 1;
- }
-
-/* EXPSUM is the exponent range, approximately equal to
- EMAX - EMIN + 1 . */
-
- *emax = expsum + *emin - 1;
- nbits = exbits + 1 + *p;
-
-/* NBITS is the total number of bits needed to store a
- floating-point number. */
-
- if (nbits % 2 == 1 && *beta == 2) {
-
-/* Either there are an odd number of bits used to store a
- floating-point number, which is unlikely, or some bits are
-
- not used in the representation of numbers, which is possible
-,
- (e.g. Cray machines) or the mantissa has an implicit bit,
- (e.g. IEEE machines, Dec Vax machines), which is perhaps the
-
- most likely. We have to assume the last alternative.
- If this is true, then we need to reduce EMAX by one because
-
- there must be some way of representing zero in an implicit-b
-it
- system. On machines like Cray, we are reducing EMAX by one
-
- unnecessarily. */
-
- --(*emax);
- }
-
- if (*ieee) {
-
-/* Assume we are on an IEEE machine which reserves one exponent
-
- for infinity and NaN. */
-
- --(*emax);
- }
-
-/* Now create RMAX, the largest machine number, which should
- be equal to (1.0 - BETA**(-P)) * BETA**EMAX .
-
- First compute 1.0 - BETA**(-P), being careful that the
- result is less than 1.0 . */
-
- recbas = 1. / *beta;
- z = *beta - 1.;
- y = 0.;
- i__1 = *p;
- for (i = 1; i <= *p; ++i) {
- z *= recbas;
- if (y < 1.) {
- oldy = y;
- }
- y = dlamc3_(&y, &z);
-/* L20: */
- }
- if (y >= 1.) {
- y = oldy;
- }
-
-/* Now multiply by BETA**EMAX to get RMAX. */
-
- i__1 = *emax;
- for (i = 1; i <= *emax; ++i) {
- d__1 = y * *beta;
- y = dlamc3_(&d__1, &c_b5);
-/* L30: */
- }
-
- *rmax = y;
- return 0;
-
-/* End of DLAMC5 */
-
-} /* dlamc5_ */
-
-double pow_di(double *ap, int *bp)
-{
- double pow, x;
- int n;
-
- pow = 1;
- x = *ap;
- n = *bp;
-
- if(n != 0){
- if(n < 0) {
- n = -n;
- x = 1/x;
- }
- for( ; ; ) {
- if(n & 01) pow *= x;
- if(n >>= 1) x *= x;
- else break;
- }
- }
- return(pow);
-}
-
diff --git a/SRC/dlangs.c b/SRC/dlangs.c
deleted file mode 100644
index 871cd33..0000000
--- a/SRC/dlangs.c
+++ /dev/null
@@ -1,119 +0,0 @@
-
-/*! @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
- * History: Modified from lapack routine DLANGE
- */
-#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)
-{
-
- /* Local variables */
- NCformat *Astore;
- double *Aval;
- int i, j, irow;
- double value, sum;
- double *rwork;
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- if ( SUPERLU_MIN(A->nrow, A->ncol) == 0) {
- value = 0.;
-
- } else if (lsame_(norm, "M")) {
- /* Find max(abs(A(i,j))). */
- value = 0.;
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
- value = SUPERLU_MAX( value, fabs( Aval[i]) );
-
- } else if (lsame_(norm, "O") || *(unsigned char *)norm == '1') {
- /* Find norm1(A). */
- value = 0.;
- for (j = 0; j < A->ncol; ++j) {
- sum = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
- sum += fabs(Aval[i]);
- value = SUPERLU_MAX(value,sum);
- }
-
- } else if (lsame_(norm, "I")) {
- /* Find normI(A). */
- if ( !(rwork = (double *) SUPERLU_MALLOC(A->nrow * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for rwork.");
- for (i = 0; i < A->nrow; ++i) rwork[i] = 0.;
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++) {
- irow = Astore->rowind[i];
- rwork[irow] += fabs(Aval[i]);
- }
- value = 0.;
- for (i = 0; i < A->nrow; ++i)
- value = SUPERLU_MAX(value, rwork[i]);
-
- SUPERLU_FREE (rwork);
-
- } else if (lsame_(norm, "F") || lsame_(norm, "E")) {
- /* Find normF(A). */
- ABORT("Not implemented.");
- } else
- ABORT("Illegal norm specified.");
-
- return (value);
-
-} /* dlangs */
-
diff --git a/SRC/dlaqgs.c b/SRC/dlaqgs.c
deleted file mode 100644
index c25d47a..0000000
--- a/SRC/dlaqgs.c
+++ /dev/null
@@ -1,145 +0,0 @@
-
-/*! @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
- * History: Modified from LAPACK routine DLAQGE
- */
-#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)
-{
-
-
-#define THRESH (0.1)
-
- /* Local variables */
- NCformat *Astore;
- double *Aval;
- int i, j, irow;
- double large, small, cj;
-
-
- /* Quick return if possible */
- if (A->nrow <= 0 || A->ncol <= 0) {
- *(unsigned char *)equed = 'N';
- return;
- }
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Initialize LARGE and SMALL. */
- small = dlamch_("Safe minimum") / dlamch_("Precision");
- large = 1. / small;
-
- if (rowcnd >= THRESH && amax >= small && amax <= large) {
- if (colcnd >= THRESH)
- *(unsigned char *)equed = 'N';
- else {
- /* Column scaling */
- for (j = 0; j < A->ncol; ++j) {
- cj = c[j];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- Aval[i] *= cj;
- }
- }
- *(unsigned char *)equed = 'C';
- }
- } else if (colcnd >= THRESH) {
- /* Row scaling, no column scaling */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- Aval[i] *= r[irow];
- }
- *(unsigned char *)equed = 'R';
- } else {
- /* Row and column scaling */
- for (j = 0; j < A->ncol; ++j) {
- cj = c[j];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- Aval[i] *= cj * r[irow];
- }
- }
- *(unsigned char *)equed = 'B';
- }
-
- return;
-
-} /* dlaqgs */
-
diff --git a/SRC/dldperm.c b/SRC/dldperm.c
deleted file mode 100644
index 197769b..0000000
--- a/SRC/dldperm.c
+++ /dev/null
@@ -1,165 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 0c03e0e..0000000
--- a/SRC/dmemory.c
+++ /dev/null
@@ -1,701 +0,0 @@
-
-/*! @file dmemory.c
- * \brief Memory details
- *
- * <pre>
- * -- SuperLU routine (version 4.0) --
- * Lawrence Berkeley National Laboratory.
- * June 30, 2009
- * </pre>
- */
-#include "slu_ddefs.h"
-
-
-/* Internal prototypes */
-void *dexpand (int *, MemType,int, int, GlobalLU_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, GlobalLU_t *);
-void *duser_malloc (int, int, GlobalLU_t *);
-void duser_free (int, int, GlobalLU_t *);
-
-/* External prototypes (in memory.c - prec-independent) */
-extern void copy_mem_int (int, void *, void *);
-extern void user_bcopy (char *, char *, int);
-
-
-/* Macros to manipulate stack */
-#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) + \
- (w + 1) * m * sizeof(double) )
-#define Reduce(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */
-
-
-
-
-/*! \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, GlobalLU_t *Glu)
-{
- if ( lwork == 0 ) {
- Glu->MemModel = SYSTEM; /* malloc/free */
- } else if ( lwork > 0 ) {
- 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, GlobalLU_t *Glu)
-{
- void *buf;
-
- if ( StackFull(bytes) ) return (NULL);
-
- if ( which_end == HEAD ) {
- buf = (char*) Glu->stack.array + Glu->stack.top1;
- Glu->stack.top1 += bytes;
- } else {
- Glu->stack.top2 -= bytes;
- buf = (char*) Glu->stack.array + Glu->stack.top2;
- }
-
- Glu->stack.used += bytes;
- return buf;
-}
-
-
-void duser_free(int bytes, int which_end, GlobalLU_t *Glu)
-{
- if ( which_end == HEAD ) {
- Glu->stack.top1 -= bytes;
- } else {
- Glu->stack.top2 += 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.
- * </pre>
- */
-int dQuerySpace(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(double);
-
- /* For LU factors */
- 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.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
- (panel_size + 1.0) * n * dword );
-
- return 0;
-} /* dQuerySpace */
-
-
-/*! \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, double fill_ratio, SuperMatrix *L, SuperMatrix *U,
- GlobalLU_t *Glu, int **iwork, double **dwork)
-{
- int info, iword, dword;
- SCformat *Lstore;
- NCformat *Ustore;
- int *xsup, *supno;
- int *lsub, *xlsub;
- double *lusup;
- int *xlusup;
- double *ucol;
- int *usub, *xusub;
- int nzlmax, nzumax, nzlumax;
-
- iword = sizeof(int);
- dword = sizeof(double);
- Glu->n = n;
- Glu->num_expansions = 0;
-
- 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_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);
- }
-
-#if ( PRNTlevel >= 1 )
- printf("dLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n",
- fill_ratio, 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 *)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 );
- ucol = (double *) dexpand( &nzumax, UCOL, 0, 0, Glu );
- lsub = (int *) dexpand( &nzlmax, LSUB, 0, 0, Glu );
- usub = (int *) dexpand( &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 {
- duser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
- HEAD, Glu);
- }
- nzlumax /= 2;
- nzumax /= 2;
- nzlmax /= 2;
- if ( nzlumax < annz ) {
- printf("Not enough memory to perform factorization.\n");
- return (dmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
- }
-#if ( PRNTlevel >= 1)
- printf("dLUMemInit() reduce size: nzlmax %ld, nzumax %ld\n",
- nzlmax, nzumax);
- fflush(stdout);
-#endif
- lusup = (double *) dexpand( &nzlumax, LUSUP, 0, 0, Glu );
- ucol = (double *) dexpand( &nzumax, UCOL, 0, 0, Glu );
- lsub = (int *) dexpand( &nzlmax, LSUB, 0, 0, Glu );
- usub = (int *) dexpand( &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;
- Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
- Glu->stack.size = Glu->stack.top2;
- }
-
- 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;
- 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 = dLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
- if ( info )
- return ( info + dmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
-
- ++Glu->num_expansions;
- return 0;
-
-} /* dLUMemInit */
-
-/*! \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, GlobalLU_t *Glu)
-{
- int isize, dsize, extra;
- double *old_ptr;
- 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 ( Glu->MemModel == SYSTEM )
- *iworkptr = (int *) intCalloc(isize/sizeof(int));
- else
- *iworkptr = (int *) duser_malloc(isize, TAIL, Glu);
- if ( ! *iworkptr ) {
- fprintf(stderr, "dLUWorkInit: malloc fails for local iworkptr[]\n");
- return (isize + n);
- }
-
- if ( Glu->MemModel == SYSTEM )
- *dworkptr = (double *) SUPERLU_MALLOC(dsize);
- else {
- *dworkptr = (double *) duser_malloc(dsize, TAIL, Glu);
- if ( NotDoubleAlign(*dworkptr) ) {
- old_ptr = *dworkptr;
- *dworkptr = (double*) DoubleAlign(*dworkptr);
- *dworkptr = (double*) ((double*)*dworkptr - 1);
- extra = (char*)old_ptr - (char*)*dworkptr;
-#ifdef DEBUG
- printf("dLUWorkInit: not aligned, extra %d\n", extra);
-#endif
- Glu->stack.top2 -= extra;
- Glu->stack.used += extra;
- }
- }
- if ( ! *dworkptr ) {
- fprintf(stderr, "malloc fails for local dworkptr[].");
- return (isize + dsize + n);
- }
-
- return 0;
-}
-
-
-/*! \brief Set up pointers for real working arrays.
- */
-void
-dSetRWork(int m, int panel_size, double *dworkptr,
- double **dense, double **tempv)
-{
- double zero = 0.0;
-
- int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
- rowblk = sp_ienv(4);
- *dense = dworkptr;
- *tempv = *dense + panel_size*m;
- dfill (*dense, m * panel_size, zero);
- dfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);
-}
-
-/*! \brief Free the working storage used by factor routines.
- */
-void dLUWorkFree(int *iwork, double *dwork, GlobalLU_t *Glu)
-{
- if ( Glu->MemModel == SYSTEM ) {
- SUPERLU_FREE (iwork);
- SUPERLU_FREE (dwork);
- } else {
- Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
- Glu->stack.top2 = Glu->stack.size;
-/* dStackCompress(Glu); */
- }
-
- SUPERLU_FREE (Glu->expanders);
- Glu->expanders = NULL;
-}
-
-/*! \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,
- 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("dLUMemXpand(): jcol %d, next %d, maxlen %d, MemType %d\n",
- jcol, next, *maxlen, mem_type);
-#endif
-
- if (mem_type == USUB)
- new_mem = dexpand(maxlen, mem_type, next, 1, Glu);
- else
- new_mem = dexpand(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 (dmemory_usage(nzlmax, nzumax, nzlumax, Glu->n) + Glu->n);
- }
-
- switch ( mem_type ) {
- case LUSUP:
- Glu->lusup = (double *) new_mem;
- Glu->nzlumax = *maxlen;
- break;
- case UCOL:
- Glu->ucol = (double *) 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_double(int howmany, void *old, void *new)
-{
- register int i;
- double *dold = old;
- double *dnew = new;
- for (i = 0; i < howmany; i++) dnew[i] = dold[i];
-}
-
-/*! \brief Expand the existing storage to accommodate more fill-ins.
- */
-void
-*dexpand (
- 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;
- ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
-
- alpha = EXPAND;
-
- if ( Glu->num_expansions == 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(double);
-
- if ( Glu->MemModel == SYSTEM ) {
- new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
- if ( Glu->num_expansions != 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((size_t)new_len * lword);
- }
- }
- if ( type == LSUB || type == USUB ) {
- copy_mem_int(len_to_copy, expanders[type].mem, new_mem);
- } else {
- copy_mem_double(len_to_copy, expanders[type].mem, new_mem);
- }
- SUPERLU_FREE (expanders[type].mem);
- }
- expanders[type].mem = (void *) new_mem;
-
- } else { /* MemModel == USER */
- 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;
- new_mem = (void *)DoubleAlign(new_mem);
- extra = (char*)new_mem - (char*)old_mem;
-#ifdef DEBUG
- printf("expand(): not aligned, extra %d\n", extra);
-#endif
- Glu->stack.top1 += extra;
- Glu->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*)Glu->stack.array + Glu->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);
- }
- Glu->stack.top1 += extra;
- Glu->stack.used += extra;
- if ( type == UCOL ) {
- Glu->stack.top1 += extra; /* Add same amount for USUB */
- Glu->stack.used += extra;
- }
-
- } /* if ... */
-
- } /* else ... */
- }
-
- expanders[type].size = new_len;
- *prev_len = new_len;
- if ( Glu->num_expansions ) ++Glu->num_expansions;
-
- return (void *) expanders[type].mem;
-
-} /* dexpand */
-
-
-/*! \brief Compress the work[] array to remove fragmentation.
- */
-void
-dStackCompress(GlobalLU_t *Glu)
-{
- register int iword, dword, ndim;
- char *last, *fragment;
- int *ifrom, *ito;
- double *dfrom, *dto;
- int *xlsub, *lsub, *xusub, *usub, *xlusup;
- double *ucol, *lusup;
-
- iword = sizeof(int);
- dword = sizeof(double);
- 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 = (double *)((char*)lusup + xlusup[ndim] * dword);
- copy_mem_double(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*)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;
- Glu->usub = usub;
-
-#ifdef DEBUG
- printf("dStackCompress: fragment %d\n", fragment);
- /* for (last = 0; last < ndim; ++last)
- print_lu_col("After compress:", last, 0);*/
-#endif
-
-}
-
-/*! \brief Allocate storage for original matrix A
- */
-void
-dallocateA(int n, int nnz, double **a, int **asub, int **xa)
-{
- *a = (double *) doubleMalloc(nnz);
- *asub = (int *) intMalloc(nnz);
- *xa = (int *) intMalloc(n+1);
-}
-
-
-double *doubleMalloc(int n)
-{
- double *buf;
- buf = (double *) SUPERLU_MALLOC((size_t)n * sizeof(double));
- if ( !buf ) {
- ABORT("SUPERLU_MALLOC failed for buf in doubleMalloc()\n");
- }
- return (buf);
-}
-
-double *doubleCalloc(int n)
-{
- double *buf;
- register int i;
- double zero = 0.0;
- buf = (double *) SUPERLU_MALLOC((size_t)n * sizeof(double));
- if ( !buf ) {
- ABORT("SUPERLU_MALLOC failed for buf in doubleCalloc()\n");
- }
- for (i = 0; i < n; ++i) buf[i] = zero;
- return (buf);
-}
-
-
-int dmemory_usage(const int nzlmax, const int nzumax,
- const int nzlumax, const int n)
-{
- register int iword, dword;
-
- iword = sizeof(int);
- dword = sizeof(double);
-
- return (10 * n * iword +
- nzlmax * iword + nzumax * (iword + dword) + nzlumax * dword);
-
-}
diff --git a/SRC/dmyblas2.c b/SRC/dmyblas2.c
deleted file mode 100644
index 2a58f5b..0000000
--- a/SRC/dmyblas2.c
+++ /dev/null
@@ -1,230 +0,0 @@
-
-/*! @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
- * </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: 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.
- */
-void dlsolve ( int ldm, int ncol, double *M, double *rhs )
-{
- int k;
- double x0, x1, x2, x3, x4, x5, x6, x7;
- double *M0;
- register double *Mki0, *Mki1, *Mki2, *Mki3, *Mki4, *Mki5, *Mki6, *Mki7;
- register int firstcol = 0;
-
- M0 = &M[0];
-
- while ( firstcol < ncol - 7 ) { /* Do 8 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
- Mki2 = Mki1 + ldm + 1;
- Mki3 = Mki2 + ldm + 1;
- Mki4 = Mki3 + ldm + 1;
- Mki5 = Mki4 + ldm + 1;
- Mki6 = Mki5 + ldm + 1;
- Mki7 = Mki6 + ldm + 1;
-
- x0 = rhs[firstcol];
- x1 = rhs[firstcol+1] - x0 * *Mki0++;
- x2 = rhs[firstcol+2] - x0 * *Mki0++ - x1 * *Mki1++;
- x3 = rhs[firstcol+3] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++;
- x4 = rhs[firstcol+4] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
- - x3 * *Mki3++;
- x5 = rhs[firstcol+5] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
- - x3 * *Mki3++ - x4 * *Mki4++;
- x6 = rhs[firstcol+6] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
- - x3 * *Mki3++ - x4 * *Mki4++ - x5 * *Mki5++;
- x7 = rhs[firstcol+7] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
- - x3 * *Mki3++ - x4 * *Mki4++ - x5 * *Mki5++
- - x6 * *Mki6++;
-
- rhs[++firstcol] = x1;
- rhs[++firstcol] = x2;
- rhs[++firstcol] = x3;
- rhs[++firstcol] = x4;
- rhs[++firstcol] = x5;
- rhs[++firstcol] = x6;
- rhs[++firstcol] = x7;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++)
- rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++
- - x2 * *Mki2++ - x3 * *Mki3++
- - x4 * *Mki4++ - x5 * *Mki5++
- - x6 * *Mki6++ - x7 * *Mki7++;
-
- M0 += 8 * ldm + 8;
- }
-
- while ( firstcol < ncol - 3 ) { /* Do 4 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
- Mki2 = Mki1 + ldm + 1;
- Mki3 = Mki2 + ldm + 1;
-
- x0 = rhs[firstcol];
- x1 = rhs[firstcol+1] - x0 * *Mki0++;
- x2 = rhs[firstcol+2] - x0 * *Mki0++ - x1 * *Mki1++;
- x3 = rhs[firstcol+3] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++;
-
- rhs[++firstcol] = x1;
- rhs[++firstcol] = x2;
- rhs[++firstcol] = x3;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++)
- rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++
- - x2 * *Mki2++ - x3 * *Mki3++;
-
- M0 += 4 * ldm + 4;
- }
-
- if ( firstcol < ncol - 1 ) { /* Do 2 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
-
- x0 = rhs[firstcol];
- x1 = rhs[firstcol+1] - x0 * *Mki0++;
-
- rhs[++firstcol] = x1;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++)
- rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++;
-
- }
-
-}
-
-/*! \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.
- */
-void
-dusolve ( ldm, ncol, M, rhs )
-int ldm; /* in */
-int ncol; /* in */
-double *M; /* in */
-double *rhs; /* modified */
-{
- double xj;
- int jcol, j, irow;
-
- jcol = ncol - 1;
-
- for (j = 0; j < ncol; j++) {
-
- xj = rhs[jcol] / M[jcol + jcol*ldm]; /* M(jcol, jcol) */
- rhs[jcol] = xj;
-
- for (irow = 0; irow < jcol; irow++)
- rhs[irow] -= xj * M[irow + jcol*ldm]; /* M(irow, jcol) */
-
- jcol--;
-
- }
-}
-
-
-/*! \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 )
-
-int ldm; /* in -- leading dimension of M */
-int nrow; /* in */
-int ncol; /* in */
-double *M; /* in */
-double *vec; /* in */
-double *Mxvec; /* in/out */
-
-{
- double vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7;
- double *M0;
- register double *Mki0, *Mki1, *Mki2, *Mki3, *Mki4, *Mki5, *Mki6, *Mki7;
- register int firstcol = 0;
- int k;
-
- M0 = &M[0];
- while ( firstcol < ncol - 7 ) { /* Do 8 columns */
-
- Mki0 = M0;
- Mki1 = Mki0 + ldm;
- Mki2 = Mki1 + ldm;
- Mki3 = Mki2 + ldm;
- Mki4 = Mki3 + ldm;
- Mki5 = Mki4 + ldm;
- Mki6 = Mki5 + ldm;
- Mki7 = Mki6 + ldm;
-
- vi0 = vec[firstcol++];
- vi1 = vec[firstcol++];
- vi2 = vec[firstcol++];
- vi3 = vec[firstcol++];
- vi4 = vec[firstcol++];
- vi5 = vec[firstcol++];
- vi6 = vec[firstcol++];
- vi7 = vec[firstcol++];
-
- for (k = 0; k < nrow; k++)
- Mxvec[k] += vi0 * *Mki0++ + vi1 * *Mki1++
- + vi2 * *Mki2++ + vi3 * *Mki3++
- + vi4 * *Mki4++ + vi5 * *Mki5++
- + vi6 * *Mki6++ + vi7 * *Mki7++;
-
- M0 += 8 * ldm;
- }
-
- while ( firstcol < ncol - 3 ) { /* Do 4 columns */
-
- Mki0 = M0;
- Mki1 = Mki0 + ldm;
- Mki2 = Mki1 + ldm;
- Mki3 = Mki2 + ldm;
-
- vi0 = vec[firstcol++];
- vi1 = vec[firstcol++];
- vi2 = vec[firstcol++];
- vi3 = vec[firstcol++];
- for (k = 0; k < nrow; k++)
- Mxvec[k] += vi0 * *Mki0++ + vi1 * *Mki1++
- + vi2 * *Mki2++ + vi3 * *Mki3++ ;
-
- M0 += 4 * ldm;
- }
-
- while ( firstcol < ncol ) { /* Do 1 column */
-
- Mki0 = M0;
- vi0 = vec[firstcol++];
- for (k = 0; k < nrow; k++)
- Mxvec[k] += vi0 * *Mki0++;
-
- M0 += ldm;
- }
-
-}
-
diff --git a/SRC/dpanel_bmod.c b/SRC/dpanel_bmod.c
deleted file mode 100644
index f2ae3a8..0000000
--- a/SRC/dpanel_bmod.c
+++ /dev/null
@@ -1,459 +0,0 @@
-
-/*! @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>
- */
-/*
-
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "slu_ddefs.h"
-
-/*
- * Function prototypes
- */
-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 */
- const int w, /* in */
- const int jcol, /* in */
- const int nseg, /* in */
- double *dense, /* out, of size n by w */
- double *tempv, /* working array */
- int *segrep, /* in */
- int *repfnz, /* in, of size n by w */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- double alpha, beta;
-#endif
-
- register int k, ksub;
- int fsupc, nsupc, nsupr, nrow;
- int krep, krep_ind;
- double ukj, ukj1, ukj2;
- int luptr, luptr1, luptr2;
- int segsze;
- int block_nrow; /* no of rows in a block row */
- register int lptr; /* Points to the row subscripts of a supernode */
- int kfnz, irow, no_zeros;
- register int isub, isub1, i;
- register int jj; /* Index through each column in the panel */
- int *xsup, *supno;
- int *lsub, *xlsub;
- double *lusup;
- int *xlusup;
- int *repfnz_col; /* repfnz[] for a column in the panel */
- double *dense_col; /* dense[] for a column in the panel */
- double *tempv1; /* Used in 1-D update */
- double *TriTmp, *MatvecTmp; /* used in 2-D update */
- double zero = 0.0;
- double one = 1.0;
- register int ldaTmp;
- register int r_ind, r_hi;
- static int first = 1, maxsuper, rowblk, colblk;
- flops_t *ops = stat->ops;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- if ( first ) {
- maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
- rowblk = sp_ienv(4);
- colblk = sp_ienv(5);
- first = 0;
- }
- ldaTmp = maxsuper + rowblk;
-
- /*
- * For each nonz supernode segment of U[*,j] in topological order
- */
- k = nseg - 1;
- for (ksub = 0; ksub < nseg; ksub++) { /* for each updating supernode */
-
- /* krep = representative of current k-th supernode
- * fsupc = first supernodal column
- * nsupc = no of columns in a supernode
- * nsupr = no of rows in a supernode
- */
- krep = segrep[k--];
- fsupc = xsup[supno[krep]];
- nsupc = krep - fsupc + 1;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc];
- nrow = nsupr - nsupc;
- lptr = xlsub[fsupc];
- krep_ind = lptr + nsupc - 1;
-
- repfnz_col = repfnz;
- dense_col = dense;
-
- if ( nsupc >= colblk && nrow > rowblk ) { /* 2-D block update */
-
- TriTmp = tempv;
-
- /* Sequence through each column in panel -- triangular solves */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp ) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- luptr = xlusup[fsupc];
-
- ops[TRSV] += segsze * (segsze - 1);
- ops[GEMV] += 2 * nrow * segsze;
-
- /* Case 1: Update U-segment of size 1 -- col-col update */
- if ( segsze == 1 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
- irow = lsub[i];
- dense_col[irow] -= ukj * lusup[luptr];
- ++luptr;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense_col[lsub[krep_ind]];
- ukj1 = dense_col[lsub[krep_ind - 1]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) {
- ukj -= ukj1 * lusup[luptr1];
- dense_col[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++; luptr1++;
- dense_col[irow] -= (ukj*lusup[luptr]
- + ukj1*lusup[luptr1]);
- }
- } else {
- ukj2 = dense_col[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- ukj1 -= ukj2 * lusup[luptr2-1];
- ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
- dense_col[lsub[krep_ind]] = ukj;
- dense_col[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++; luptr1++; luptr2++;
- dense_col[irow] -= ( ukj*lusup[luptr]
- + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
- }
- }
-
- } else { /* segsze >= 4 */
-
- /* Copy U[*,j] segment from dense[*] to TriTmp[*], which
- holds the result of triangular solves. */
- no_zeros = kfnz - fsupc;
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; ++i) {
- irow = lsub[isub];
- TriTmp[i] = dense_col[irow]; /* Gather */
- ++isub;
- }
-
- /* start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, TriTmp, &incx );
-#else
- dtrsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, TriTmp, &incx );
-#endif
-#else
- dlsolve ( nsupr, segsze, &lusup[luptr], TriTmp );
-#endif
-
-
- } /* else ... */
-
- } /* for jj ... end tri-solves */
-
- /* Block row updates; push all the way into dense[*] block */
- for ( r_ind = 0; r_ind < nrow; r_ind += rowblk ) {
-
- r_hi = SUPERLU_MIN(nrow, r_ind + rowblk);
- block_nrow = SUPERLU_MIN(rowblk, r_hi - r_ind);
- luptr = xlusup[fsupc] + nsupc + r_ind;
- isub1 = lptr + nsupc + r_ind;
-
- repfnz_col = repfnz;
- TriTmp = tempv;
- dense_col = dense;
-
- /* Sequence through each column in panel -- matrix-vector */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- if ( segsze <= 3 ) continue; /* skip unrolled cases */
-
- /* Perform a block update, and scatter the result of
- matrix-vector to dense[]. */
- no_zeros = kfnz - fsupc;
- luptr1 = luptr + nsupr * no_zeros;
- MatvecTmp = &TriTmp[maxsuper];
-
-#ifdef USE_VENDOR_BLAS
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- SGEMV(ftcs2, &block_nrow, &segsze, &alpha, &lusup[luptr1],
- &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
-#else
- dgemv_("N", &block_nrow, &segsze, &alpha, &lusup[luptr1],
- &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
-#endif
-#else
- dmatvec(nsupr, block_nrow, segsze, &lusup[luptr1],
- TriTmp, MatvecTmp);
-#endif
-
- /* Scatter MatvecTmp[*] into SPA dense[*] temporarily
- * such that MatvecTmp[*] can be re-used for the
- * the next blok row update. dense[] will be copied into
- * global store after the whole panel has been finished.
- */
- isub = isub1;
- for (i = 0; i < block_nrow; i++) {
- irow = lsub[isub];
- dense_col[irow] -= MatvecTmp[i];
- MatvecTmp[i] = zero;
- ++isub;
- }
-
- } /* for jj ... */
-
- } /* for each block row ... */
-
- /* Scatter the triangular solves into SPA dense[*] */
- repfnz_col = repfnz;
- TriTmp = tempv;
- dense_col = dense;
-
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- if ( segsze <= 3 ) continue; /* skip unrolled cases */
-
- no_zeros = kfnz - fsupc;
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense_col[irow] = TriTmp[i];
- TriTmp[i] = zero;
- ++isub;
- }
-
- } /* for jj ... */
-
- } else { /* 1-D block modification */
-
-
- /* Sequence through each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- luptr = xlusup[fsupc];
-
- ops[TRSV] += segsze * (segsze - 1);
- ops[GEMV] += 2 * nrow * segsze;
-
- /* Case 1: Update U-segment of size 1 -- col-col update */
- if ( segsze == 1 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
- irow = lsub[i];
- dense_col[irow] -= ukj * lusup[luptr];
- ++luptr;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- ukj1 = dense_col[lsub[krep_ind - 1]];
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) {
- ukj -= ukj1 * lusup[luptr1];
- dense_col[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- ++luptr; ++luptr1;
- dense_col[irow] -= (ukj*lusup[luptr]
- + ukj1*lusup[luptr1]);
- }
- } else {
- ukj2 = dense_col[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- ukj1 -= ukj2 * lusup[luptr2-1];
- ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
- dense_col[lsub[krep_ind]] = ukj;
- dense_col[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- ++luptr; ++luptr1; ++luptr2;
- dense_col[irow] -= ( ukj*lusup[luptr]
- + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
- }
- }
-
- } else { /* segsze >= 4 */
- /*
- * Perform a triangular solve and block update,
- * then scatter the result of sup-col update to dense[].
- */
- no_zeros = kfnz - fsupc;
-
- /* Copy U[*,j] segment from dense[*] to tempv[*]:
- * The result of triangular solve is in tempv[*];
- * The result of matrix vector update is in dense_col[*]
- */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; ++i) {
- irow = lsub[isub];
- tempv[i] = dense_col[irow]; /* Gather */
- ++isub;
- }
-
- /* start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#else
- dtrsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#endif
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- SGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#else
- dgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#endif
-#else
- dlsolve ( nsupr, segsze, &lusup[luptr], tempv );
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- dmatvec (nsupr, nrow, segsze, &lusup[luptr], tempv, tempv1);
-#endif
-
- /* Scatter tempv[*] into SPA dense[*] temporarily, such
- * that tempv[*] can be used for the triangular solve of
- * the next column of the panel. They will be copied into
- * ucol[*] after the whole panel has been finished.
- */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense_col[irow] = tempv[i];
- tempv[i] = zero;
- isub++;
- }
-
- /* Scatter the update from tempv1[*] into SPA dense[*] */
- /* Start dense rectangular L */
- for (i = 0; i < nrow; i++) {
- irow = lsub[isub];
- dense_col[irow] -= tempv1[i];
- tempv1[i] = zero;
- ++isub;
- }
-
- } /* else segsze>=4 ... */
-
- } /* for each column in the panel... */
-
- } /* else 1-D update ... */
-
- } /* for each updating supernode ... */
-
-}
-
-
-
diff --git a/SRC/dpanel_dfs.c b/SRC/dpanel_dfs.c
deleted file mode 100644
index 73343e5..0000000
--- a/SRC/dpanel_dfs.c
+++ /dev/null
@@ -1,254 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_ddefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
- *
- * 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 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.
- *
- * 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;
- *
- * 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>
- */
-
-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;
- int *xa_begin, *xa_end;
- 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 *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;
-
- /* Initialize pointers */
- Astore = A->Store;
- a = Astore->nzval;
- asub = Astore->rowind;
- xa_begin = Astore->colbeg;
- xa_end = Astore->colend;
- marker1 = marker + m;
- repfnz_col = repfnz;
- dense_col = dense;
- *nseg = 0;
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
-
- /* For each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++) {
- nextl_col = (jj - jcol) * m;
-
-#ifdef CHK_DFS
- printf("\npanel col %d: ", jj);
-#endif
-
- /* 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 )
- continue; /* krow visited before, go to the next nonzero */
-
- /* For each unmarked nbr krow of jj
- * krow is in L: place it in structure of L[*,jj]
- */
- 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[*]
- */
- else {
-
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz_col[krep];
-
-#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 > kperm ) repfnz_col[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz_col[krep] = kperm;
- xdfs = xlsub[krep];
- maxdfs = xprune[krep];
-
-#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
- */
- 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
- * been explored, update its repfnz[*]
- */
- else {
-
- chrep = xsup[supno[chperm]+1] - 1;
- myfnz = repfnz_col[chrep];
-#ifdef CHK_DFS
- printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
-#endif
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > chperm )
- repfnz_col[chrep] = chperm;
- }
- else {
- /* Cont. dfs at snode-rep of kchild */
- 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
- printf(" xdfs %d, maxdfs %d: ", xdfs, maxdfs);
- 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
- * segment is seen for the first time. (Note that
- * "repfnz[krep]" may change later.)
- * Backtrack dfs to its parent.
- */
- if ( marker1[krep] < jcol ) {
- segrep[*nseg] = krep;
- ++(*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
- 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;
-
- } /* for jj ... */
-
-}
diff --git a/SRC/dpivotL.c b/SRC/dpivotL.c
deleted file mode 100644
index bcfa96d..0000000
--- a/SRC/dpivotL.c
+++ /dev/null
@@ -1,184 +0,0 @@
-
-/*! @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>
- */
-
-
-#include <math.h>
-#include <stdlib.h>
-#include "slu_ddefs.h"
-
-#undef DEBUG
-
-/*! \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
-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 */
- int lptr; /* points to the starting subscript of the supernode */
- int pivptr, old_pivptr, diag, diagind;
- double pivmax, rtemp, thresh;
- double temp;
- double *lu_sup_ptr;
- double *lu_col_ptr;
- int *lsub_ptr;
- int isub, icol, k, itemp;
- int *lsub, *xlsub;
- double *lusup;
- int *xlusup;
- flops_t *ops = stat->ops;
-
- /* Initialize pointers */
- 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 */
-
-#ifdef DEBUG
-if ( jcol == MIN_COL ) {
- printf("Before cdiv: col %d\n", jcol);
- for (k = nsupc; k < nsupr; k++)
- printf(" lu[%d] %f\n", lsub_ptr[k], lu_col_ptr[k]);
-}
-#endif
-
- /* Determine the largest abs numerical value for partial pivoting;
- Also search for user-specified pivot, and diagonal element. */
- if ( *usepr ) *pivrow = iperm_r[jcol];
- diagind = iperm_c[jcol];
- pivmax = 0.0;
- pivptr = nsupc;
- diag = EMPTY;
- old_pivptr = nsupc;
- for (isub = nsupc; isub < nsupr; ++isub) {
- rtemp = fabs (lu_col_ptr[isub]);
- if ( rtemp > pivmax ) {
- pivmax = rtemp;
- pivptr = isub;
- }
- if ( *usepr && lsub_ptr[isub] == *pivrow ) old_pivptr = isub;
- if ( lsub_ptr[isub] == diagind ) diag = isub;
- }
-
- /* 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);
- }
-
- thresh = u * pivmax;
-
- /* Choose appropriate pivotal element by our policy. */
- if ( *usepr ) {
- rtemp = fabs (lu_col_ptr[old_pivptr]);
- if ( rtemp != 0.0 && rtemp >= thresh )
- pivptr = old_pivptr;
- else
- *usepr = 0;
- }
- if ( *usepr == 0 ) {
- /* Use diagonal pivot? */
- if ( diag >= 0 ) { /* diagonal exists */
- rtemp = fabs (lu_col_ptr[diag]);
- if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
- }
- *pivrow = lsub_ptr[pivptr];
- }
-
- /* Record pivot row */
- perm_r[*pivrow] = jcol;
-
- /* 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 0;
-}
-
diff --git a/SRC/dpivotgrowth.c b/SRC/dpivotgrowth.c
deleted file mode 100644
index 14fec65..0000000
--- a/SRC/dpivotgrowth.c
+++ /dev/null
@@ -1,113 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Compute the reciprocal pivot growth factor of the leading ncols columns
- * of the matrix, using the formula:
- * min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )
- *
- * Arguments
- * =========
- *
- * ncols (input) int
- * The number of columns of matrices A, L and U.
- *
- * 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.
- *
- * 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.
- *
- * 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>
- */
-
-double
-dPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
- SuperMatrix *L, SuperMatrix *U)
-{
-
- NCformat *Astore;
- SCformat *Lstore;
- NCformat *Ustore;
- double *Aval, *Lval, *Uval;
- int fsupc, nsupr, luptr, nz_in_U;
- int i, j, k, oldcol;
- int *inv_perm_c;
- double rpg, maxaj, maxuj;
- double smlnum;
- double *luval;
-
- /* Get machine constants. */
- smlnum = dlamch_("S");
- rpg = 1. / smlnum;
-
- Astore = A->Store;
- Lstore = L->Store;
- Ustore = U->Store;
- Aval = Astore->nzval;
- Lval = Lstore->nzval;
- Uval = Ustore->nzval;
-
- inv_perm_c = (int *) SUPERLU_MALLOC(A->ncol*sizeof(int));
- for (j = 0; j < A->ncol; ++j) inv_perm_c[perm_c[j]] = j;
-
- for (k = 0; k <= Lstore->nsuper; ++k) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- luptr = L_NZ_START(fsupc);
- luval = &Lval[luptr];
- nz_in_U = 1;
-
- for (j = fsupc; j < L_FST_SUPC(k+1) && j < ncols; ++j) {
- maxaj = 0.;
- oldcol = inv_perm_c[j];
- for (i = Astore->colptr[oldcol]; i < Astore->colptr[oldcol+1]; ++i)
- maxaj = SUPERLU_MAX( maxaj, fabs(Aval[i]) );
-
- maxuj = 0.;
- for (i = Ustore->colptr[j]; i < Ustore->colptr[j+1]; i++)
- maxuj = SUPERLU_MAX( maxuj, fabs(Uval[i]) );
-
- /* Supernode */
- for (i = 0; i < nz_in_U; ++i)
- maxuj = SUPERLU_MAX( maxuj, fabs(luval[i]) );
-
- ++nz_in_U;
- luval += nsupr;
-
- if ( maxuj == 0. )
- rpg = SUPERLU_MIN( rpg, 1.);
- else
- rpg = SUPERLU_MIN( rpg, maxaj / maxuj );
- }
-
- if ( j >= ncols ) break;
- }
-
- SUPERLU_FREE(inv_perm_c);
- return (rpg);
-}
diff --git a/SRC/dpruneL.c b/SRC/dpruneL.c
deleted file mode 100644
index 62b8099..0000000
--- a/SRC/dpruneL.c
+++ /dev/null
@@ -1,154 +0,0 @@
-
-/*! @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>
- */
-
-
-#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 */
- const int *perm_r, /* in */
- const int pivrow, /* in */
- const int nseg, /* in */
- const int *segrep, /* in */
- const int *repfnz, /* in */
- int *xprune, /* out */
- GlobalLU_t *Glu /* modified - global LU data structures */
- )
-{
-
- double utemp;
- int jsupno, irep, irep1, kmin, kmax, krow, movnum;
- int i, ktemp, minloc, maxloc;
- int do_prune; /* logical variable */
- int *xsup, *supno;
- int *lsub, *xlsub;
- double *lusup;
- int *xlusup;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- /*
- * For each supernode-rep irep in U[*,j]
- */
- jsupno = supno[jcol];
- for (i = 0; i < nseg; i++) {
-
- irep = segrep[i];
- irep1 = irep + 1;
- do_prune = FALSE;
-
- /* Don't prune with a zero U-segment */
- if ( repfnz[irep] == EMPTY )
- continue;
-
- /* If a snode overlaps with the next panel, then the U-segment
- * is fragmented into two parts -- irep and irep1. We should let
- * pruning occur at the rep-column in irep1's snode.
- */
- if ( supno[irep] == supno[irep1] ) /* Don't prune */
- continue;
-
- /*
- * If it has not been pruned & it has a nonz in row L[pivrow,i]
- */
- if ( supno[irep] != jsupno ) {
- if ( xprune[irep] >= xlsub[irep1] ) {
- kmin = xlsub[irep];
- kmax = xlsub[irep1] - 1;
- for (krow = kmin; krow <= kmax; krow++)
- if ( lsub[krow] == pivrow ) {
- do_prune = TRUE;
- break;
- }
- }
-
- if ( do_prune ) {
-
- /* Do a quicksort-type partition
- * movnum=TRUE means that the num values have to be exchanged.
- */
- movnum = FALSE;
- if ( irep == xsup[supno[irep]] ) /* Snode of size 1 */
- movnum = TRUE;
-
- while ( kmin <= kmax ) {
-
- if ( perm_r[lsub[kmax]] == EMPTY )
- kmax--;
- else if ( perm_r[lsub[kmin]] != EMPTY )
- kmin++;
- else { /* kmin below pivrow (not yet pivoted), and kmax
- * above pivrow: interchange the two subscripts
- */
- ktemp = lsub[kmin];
- lsub[kmin] = lsub[kmax];
- lsub[kmax] = ktemp;
-
- /* 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.
- */
- if ( movnum ) {
- minloc = xlusup[irep] + (kmin - xlsub[irep]);
- maxloc = xlusup[irep] + (kmax - xlsub[irep]);
- utemp = lusup[minloc];
- lusup[minloc] = lusup[maxloc];
- lusup[maxloc] = utemp;
- }
-
- kmin++;
- kmax--;
-
- }
-
- } /* while */
-
- xprune[irep] = kmin; /* Pruning */
-
-#ifdef CHK_PRUNE
- printf(" After dpruneL(),using col %d: xprune[%d] = %d\n",
- jcol, irep, kmin);
-#endif
- } /* if do_prune */
-
- } /* if */
-
- } /* for each U-segment... */
-}
diff --git a/SRC/dreadhb.c b/SRC/dreadhb.c
deleted file mode 100644
index e2aa3d6..0000000
--- a/SRC/dreadhb.c
+++ /dev/null
@@ -1,257 +0,0 @@
-
-/*! @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"
-
-
-/*! \brief Eat up the rest of the current line */
-int dDumpLine(FILE *fp)
-{
- register int c;
- while ((c = fgetc(fp)) != '\n') ;
- return 0;
-}
-
-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;
-}
-
-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;
-}
-
-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
-dreadhb(int *nrow, int *ncol, int *nonz,
- double **nzval, int **rowind, int **colptr)
-{
-
- register int i, numer_lines = 0, rhscrd = 0;
- int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
- char buf[100], type[4], key[10];
- FILE *fp;
-
- fp = stdin;
-
- /* Line 1 */
- fgets(buf, 100, fp);
- fputs(buf, stdout);
-#if 0
- fscanf(fp, "%72c", buf); buf[72] = 0;
- printf("Title: %s", buf);
- fscanf(fp, "%8c", key); key[8] = 0;
- printf("Key: %s\n", key);
- dDumpLine(fp);
-#endif
-
- /* Line 2 */
- for (i=0; i<5; i++) {
- fscanf(fp, "%14c", buf); buf[14] = 0;
- sscanf(buf, "%d", &tmp);
- if (i == 3) numer_lines = tmp;
- if (i == 4 && tmp) rhscrd = 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);
- fscanf(fp, "%20c", buf);
- dDumpLine(fp);
-
- /* Line 5: right-hand side */
- if ( rhscrd ) dDumpLine(fp); /* skip RHSFMT */
-
-#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/SRC/dreadrb.c b/SRC/dreadrb.c
deleted file mode 100644
index 6d525af..0000000
--- a/SRC/dreadrb.c
+++ /dev/null
@@ -1,237 +0,0 @@
-
-/*! @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/SRC/dreadtriple.c b/SRC/dreadtriple.c
deleted file mode 100644
index 259fc57..0000000
--- a/SRC/dreadtriple.c
+++ /dev/null
@@ -1,140 +0,0 @@
-
-/*! @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
-dreadtriple(int *m, int *n, int *nonz,
- double **nzval, int **rowind, int **colptr)
-{
-/*
- * Output parameters
- * =================
- * (a,asub,xa): asub[*] contains the row subscripts of nonzeros
- * in columns of matrix A; a[*] the numerical values;
- * row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
- *
- */
- int j, k, jsize, nnz, nz;
- double *a, *val;
- int *asub, *xa, *row, *col;
- int zero_base = 0;
-
- /* Matrix format:
- * First line: #rows, #cols, #non-zero
- * Triplet in the rest of lines:
- * row, col, value
- */
-
- 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 */
- a = *nzval;
- asub = *rowind;
- xa = *colptr;
-
- val = (double *) SUPERLU_MALLOC(*nonz * sizeof(double));
- 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 (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
- scanf("%d%d%lf\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",
- nz, row[nz], col[nz], val[nz]);
- exit(-1);
- } else {
- ++xa[col[nz]];
- ++nz;
- }
- }
-
- *nonz = nz;
-
- /* Initialize the array of column pointers */
- k = 0;
- jsize = xa[0];
- xa[0] = 0;
- for (j = 1; j < *n; ++j) {
- k += jsize;
- jsize = xa[j];
- xa[j] = k;
- }
-
- /* Copy the triplets into the column oriented storage */
- for (nz = 0; nz < *nonz; ++nz) {
- j = col[nz];
- k = xa[j];
- asub[k] = row[nz];
- a[k] = val[nz];
- ++xa[j];
- }
-
- /* Reset the column pointers to the beginning of each column */
- for (j = *n; j > 0; --j)
- xa[j] = xa[j-1];
- xa[0] = 0;
-
- SUPERLU_FREE(val);
- SUPERLU_FREE(row);
- SUPERLU_FREE(col);
-
-#ifdef CHK_INPUT
- {
- 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)
-{
- 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\n", &b[i]);
-
- /* readpair_(j, &b[i]);*/
- fclose(fp);
-}
diff --git a/SRC/dsnode_bmod.c b/SRC/dsnode_bmod.c
deleted file mode 100644
index 8d70a99..0000000
--- a/SRC/dsnode_bmod.c
+++ /dev/null
@@ -1,118 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_ddefs.h"
-
-
-/*! \brief Performs numeric block updates within the relaxed snode.
- */
-int
-dsnode_bmod (
- const int jcol, /* in */
- const int jsupno, /* in */
- const int fsupc, /* in */
- double *dense, /* in */
- double *tempv, /* working array */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- double alpha = -1.0, beta = 1.0;
-#endif
-
- int luptr, nsupc, nsupr, nrow;
- int isub, irow, i, iptr;
- register int ufirst, nextlu;
- int *lsub, *xlsub;
- double *lusup;
- int *xlusup;
- flops_t *ops = stat->ops;
-
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- nextlu = xlusup[jcol];
-
- /*
- * Process the supernodal portion of L\U[*,j]
- */
- for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
- irow = lsub[isub];
- lusup[nextlu] = dense[irow];
- dense[irow] = 0;
- ++nextlu;
- }
-
- xlusup[jcol + 1] = nextlu; /* Initialize xlusup for next column */
-
- if ( fsupc < jcol ) {
-
- luptr = xlusup[fsupc];
- nsupr = xlsub[fsupc+1] - xlsub[fsupc];
- nsupc = jcol - fsupc; /* Excluding jcol */
- ufirst = xlusup[jcol]; /* Points to the beginning of column
- jcol in supernode L\U(jsupno). */
- nrow = nsupr - nsupc;
-
- ops[TRSV] += nsupc * (nsupc - 1);
- ops[GEMV] += 2 * nrow * nsupc;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr], &nsupr,
- &lusup[ufirst], &incx );
- SGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#else
- dtrsv_( "L", "N", "U", &nsupc, &lusup[luptr], &nsupr,
- &lusup[ufirst], &incx );
- dgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#endif
-#else
- dlsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
- dmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
- &lusup[ufirst], &tempv[0] );
-
- /* Scatter tempv[*] into lusup[*] */
- iptr = ufirst + nsupc;
- for (i = 0; i < nrow; i++) {
- lusup[iptr++] -= tempv[i];
- tempv[i] = 0.0;
- }
-#endif
-
- }
-
- return 0;
-}
diff --git a/SRC/dsnode_dfs.c b/SRC/dsnode_dfs.c
deleted file mode 100644
index 9672fe6..0000000
--- a/SRC/dsnode_dfs.c
+++ /dev/null
@@ -1,112 +0,0 @@
-
-/*! @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>
- */
-
-
-#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 */
- const int kcol, /* in - end of the supernode */
- const int *asub, /* in */
- const int *xa_begin, /* in */
- const int *xa_end, /* in */
- int *xprune, /* out */
- int *marker, /* modified */
- GlobalLU_t *Glu /* modified */
- )
-{
-
- register int i, k, ifrom, ito, nextl, new_next;
- 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) )
- return (mem_error);
- lsub = Glu->lsub;
- }
- }
- }
- supno[i] = nsuper;
- }
-
- /* Supernode > 1, then make a copy of the subscripts for pruning */
- if ( jcol < kcol ) {
- new_next = nextl + (nextl - xlsub[jcol]);
- while ( new_next > nzlmax ) {
- if ( mem_error = dLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
- return (mem_error);
- lsub = Glu->lsub;
- }
- ito = nextl;
- for (ifrom = xlsub[jcol]; ifrom < nextl; )
- lsub[ito++] = lsub[ifrom++];
- for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
- nextl = ito;
- }
-
- xsup[nsuper+1] = kcol + 1;
- supno[kcol+1] = nsuper;
- xprune[kcol] = nextl;
- xlsub[kcol+1] = nextl;
-
- return 0;
-}
-
diff --git a/SRC/dsp_blas2.c b/SRC/dsp_blas2.c
deleted file mode 100644
index 59d6d40..0000000
--- a/SRC/dsp_blas2.c
+++ /dev/null
@@ -1,477 +0,0 @@
-
-/*! @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
- * Purpose: Sparse BLAS 2, using some dense BLAS 2 operations.
- */
-
-#include "slu_ddefs.h"
-
-/*
- * Function prototypes
- */
-void dusolve(int, int, double*, double*);
-void dlsolve(int, int, double*, double*);
-void dmatvec(int, int, int, double*, double*, double*);
-
-/*! \brief Solves one of the systems of equations A*x = b, or A'*x = b
- *
- * <pre>
- * Purpose
- * =======
- *
- * sp_dtrsv() 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.
- *
- * Parameters
- * ==========
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * U - (input) SuperMatrix*
- * The factor U from the factorization Pr*A*Pc=L*U.
- * U has types: Stype = NC, Dtype = SLU_D, Mtype = TRU.
- *
- * 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.
- *
- * 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")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- SCformat *Lstore;
- NCformat *Ustore;
- double *Lval, *Uval;
- int incx = 1, incy = 1;
- double alpha = 1.0, beta = 1.0;
- int nrow;
- int fsupc, nsupr, nsupc, luptr, istart, irow;
- int i, k, iptr, jcol;
- double *work;
- flops_t solve_ops;
-
- /* Test the input parameters */
- *info = 0;
- if ( !lsame_(uplo,"L") && !lsame_(uplo, "U") ) *info = -1;
- else if ( !lsame_(trans, "N") && !lsame_(trans, "T") &&
- !lsame_(trans, "C")) *info = -2;
- else if ( !lsame_(diag, "U") && !lsame_(diag, "N") ) *info = -3;
- else if ( L->nrow != L->ncol || L->nrow < 0 ) *info = -4;
- else if ( U->nrow != U->ncol || U->nrow < 0 ) *info = -5;
- if ( *info ) {
- i = -(*info);
- xerbla_("sp_dtrsv", &i);
- return 0;
- }
-
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
- solve_ops = 0;
-
- if ( !(work = doubleCalloc(L->nrow)) )
- ABORT("Malloc fails for work in sp_dtrsv().");
-
- if ( lsame_(trans, "N") ) { /* Form x := inv(A)*x. */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := inv(L)*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- 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;
- luptr = L_NZ_START(fsupc);
- nrow = nsupr - nsupc;
-
- solve_ops += nsupc * (nsupc - 1);
- solve_ops += 2 * nrow * nsupc;
-
- if ( nsupc == 1 ) {
- for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
- irow = L_SUB(iptr);
- ++luptr;
- x[irow] -= x[fsupc] * Lval[luptr];
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-
- SGEMV(ftcs2, &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
- &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
-#else
- dtrsv_("L", "N", "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-
- dgemv_("N", &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
- &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
-#endif
-#else
- dlsolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc]);
-
- dmatvec ( nsupr, nsupr-nsupc, nsupc, &Lval[luptr+nsupc],
- &x[fsupc], &work[0] );
-#endif
-
- iptr = istart + nsupc;
- for (i = 0; i < nrow; ++i, ++iptr) {
- irow = L_SUB(iptr);
- x[irow] -= work[i]; /* Scatter */
- work[i] = 0.0;
-
- }
- }
- } /* for k ... */
-
- } else {
- /* Form x := inv(U)*x */
-
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; k--) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += nsupc * (nsupc + 1);
-
- if ( nsupc == 1 ) {
- x[fsupc] /= Lval[luptr];
- for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
- irow = U_SUB(i);
- x[irow] -= x[fsupc] * Uval[i];
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV(ftcs3, ftcs2, ftcs2, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- dtrsv_("U", "N", "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
-#else
- dusolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
-#endif
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1);
- i++) {
- irow = U_SUB(i);
- x[irow] -= x[jcol] * Uval[i];
- }
- }
- }
- } /* for k ... */
-
- }
- } else { /* Form x := inv(A')*x */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := inv(L')*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; --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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += 2 * (nsupr - nsupc) * nsupc;
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- iptr = istart + nsupc;
- for (i = L_NZ_START(jcol) + nsupc;
- i < L_NZ_START(jcol+1); i++) {
- irow = L_SUB(iptr);
- x[jcol] -= x[irow] * Lval[i];
- iptr++;
- }
- }
-
- if ( nsupc > 1 ) {
- solve_ops += nsupc * (nsupc - 1);
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd("T", strlen("T"));
- ftcs3 = _cptofcd("U", strlen("U"));
- STRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- dtrsv_("L", "T", "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- }
- } else {
- /* Form x := inv(U')*x */
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = 0; k <= Lstore->nsuper; k++) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
- irow = U_SUB(i);
- x[jcol] -= x[irow] * Uval[i];
- }
- }
-
- solve_ops += nsupc * (nsupc + 1);
-
- if ( nsupc == 1 ) {
- x[fsupc] /= Lval[luptr];
- } else {
-#ifdef _CRAY
- ftcs1 = _cptofcd("U", strlen("U"));
- ftcs2 = _cptofcd("T", strlen("T"));
- ftcs3 = _cptofcd("N", strlen("N"));
- STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- dtrsv_("U", "T", "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- } /* for k ... */
- }
- }
-
- stat->ops[SOLVE] += solve_ops;
- SUPERLU_FREE(work);
- return 0;
-}
-
-
-
-/*! \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)
-{
- /* Local variables */
- NCformat *Astore;
- double *Aval;
- int info;
- double temp;
- int lenx, leny, i, j, irow;
- int iy, jx, jy, kx, ky;
- int notran;
-
- notran = lsame_(trans, "N");
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Test the input parameters */
- info = 0;
- if ( !notran && !lsame_(trans, "T") && !lsame_(trans, "C")) info = 1;
- else if ( A->nrow < 0 || A->ncol < 0 ) info = 3;
- else if (incx == 0) info = 5;
- else if (incy == 0) info = 8;
- if (info != 0) {
- xerbla_("sp_dgemv ", &info);
- return 0;
- }
-
- /* Quick return if possible. */
- if (A->nrow == 0 || A->ncol == 0 || (alpha == 0. && beta == 1.))
- return 0;
-
- /* Set LENX and LENY, the lengths of the vectors x and y, and set
- up the start points in X and Y. */
- if (lsame_(trans, "N")) {
- lenx = A->ncol;
- leny = A->nrow;
- } else {
- lenx = A->nrow;
- leny = A->ncol;
- }
- if (incx > 0) kx = 0;
- else kx = - (lenx - 1) * incx;
- if (incy > 0) ky = 0;
- else ky = - (leny - 1) * incy;
-
- /* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
- /* First form y := beta*y. */
- if (beta != 1.) {
- if (incy == 1) {
- if (beta == 0.)
- for (i = 0; i < leny; ++i) y[i] = 0.;
- else
- for (i = 0; i < leny; ++i) y[i] = beta * y[i];
- } else {
- iy = ky;
- if (beta == 0.)
- for (i = 0; i < leny; ++i) {
- y[iy] = 0.;
- iy += incy;
- }
- else
- for (i = 0; i < leny; ++i) {
- y[iy] = beta * y[iy];
- iy += incy;
- }
- }
- }
-
- if (alpha == 0.) return 0;
-
- if ( notran ) {
- /* Form y := alpha*A*x + y. */
- jx = kx;
- if (incy == 1) {
- for (j = 0; j < A->ncol; ++j) {
- if (x[jx] != 0.) {
- temp = alpha * x[jx];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- y[irow] += temp * Aval[i];
- }
- }
- jx += incx;
- }
- } else {
- ABORT("Not implemented.");
- }
- } else {
- /* Form y := alpha*A'*x + y. */
- jy = ky;
- if (incx == 1) {
- for (j = 0; j < A->ncol; ++j) {
- temp = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- temp += Aval[i] * x[irow];
- }
- y[jy] += alpha * temp;
- jy += incy;
- }
- } else {
- ABORT("Not implemented.");
- }
- }
- return 0;
-} /* sp_dgemv */
-
-
-
diff --git a/SRC/dsp_blas3.c b/SRC/dsp_blas3.c
deleted file mode 100644
index f0c7233..0000000
--- a/SRC/dsp_blas3.c
+++ /dev/null
@@ -1,127 +0,0 @@
-
-/*! @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
- * Purpose: Sparse BLAS3, using some dense BLAS3 operations.
- */
-
-#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)
-{
- int incx = 1, incy = 1;
- int j;
-
- for (j = 0; j < n; ++j) {
- sp_dgemv(transa, alpha, A, &b[ldb*j], incx, beta, &c[ldc*j], incy);
- }
- return 0;
-}
diff --git a/SRC/dutil.c b/SRC/dutil.c
deleted file mode 100644
index 807ff2f..0000000
--- a/SRC/dutil.c
+++ /dev/null
@@ -1,471 +0,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.
- * 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>
- */
-
-
-#include <math.h>
-#include "slu_ddefs.h"
-
-void
-dCreate_CompCol_Matrix(SuperMatrix *A, int m, int n, int nnz,
- double *nzval, int *rowind, int *colptr,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- NCformat *Astore;
-
- A->Stype = stype;
- A->Dtype = dtype;
- A->Mtype = mtype;
- A->nrow = m;
- A->ncol = n;
- A->Store = (void *) SUPERLU_MALLOC( sizeof(NCformat) );
- if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
- Astore = A->Store;
- Astore->nnz = nnz;
- Astore->nzval = nzval;
- Astore->rowind = rowind;
- Astore->colptr = colptr;
-}
-
-void
-dCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
- double *nzval, int *colind, int *rowptr,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- NRformat *Astore;
-
- A->Stype = stype;
- A->Dtype = dtype;
- A->Mtype = mtype;
- A->nrow = m;
- A->ncol = n;
- A->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat) );
- if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
- Astore = A->Store;
- Astore->nnz = nnz;
- Astore->nzval = nzval;
- Astore->colind = colind;
- Astore->rowptr = rowptr;
-}
-
-/*! \brief Copy matrix A into matrix B. */
-void
-dCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
-{
- NCformat *Astore, *Bstore;
- int ncol, nnz, i;
-
- B->Stype = A->Stype;
- B->Dtype = A->Dtype;
- B->Mtype = A->Mtype;
- B->nrow = A->nrow;;
- B->ncol = ncol = A->ncol;
- Astore = (NCformat *) A->Store;
- Bstore = (NCformat *) B->Store;
- Bstore->nnz = nnz = Astore->nnz;
- for (i = 0; i < nnz; ++i)
- ((double *)Bstore->nzval)[i] = ((double *)Astore->nzval)[i];
- for (i = 0; i < nnz; ++i) Bstore->rowind[i] = Astore->rowind[i];
- for (i = 0; i <= ncol; ++i) Bstore->colptr[i] = Astore->colptr[i];
-}
-
-
-void
-dCreate_Dense_Matrix(SuperMatrix *X, int m, int n, double *x, int ldx,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- DNformat *Xstore;
-
- X->Stype = stype;
- X->Dtype = dtype;
- X->Mtype = mtype;
- X->nrow = m;
- X->ncol = n;
- X->Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
- if ( !(X->Store) ) ABORT("SUPERLU_MALLOC fails for X->Store");
- Xstore = (DNformat *) X->Store;
- Xstore->lda = ldx;
- Xstore->nzval = (double *) x;
-}
-
-void
-dCopy_Dense_Matrix(int M, int N, double *X, int ldx,
- double *Y, int ldy)
-{
-/*! \brief Copies a two-dimensional matrix X to another matrix Y.
- */
- int i, j;
-
- for (j = 0; j < N; ++j)
- for (i = 0; i < M; ++i)
- Y[i + j*ldy] = X[i + j*ldx];
-}
-
-void
-dCreate_SuperNode_Matrix(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)
-{
- SCformat *Lstore;
-
- L->Stype = stype;
- L->Dtype = dtype;
- L->Mtype = mtype;
- L->nrow = m;
- L->ncol = n;
- L->Store = (void *) SUPERLU_MALLOC( sizeof(SCformat) );
- if ( !(L->Store) ) ABORT("SUPERLU_MALLOC fails for L->Store");
- Lstore = L->Store;
- Lstore->nnz = nnz;
- Lstore->nsuper = col_to_sup[n];
- Lstore->nzval = nzval;
- Lstore->nzval_colptr = nzval_colptr;
- Lstore->rowind = rowind;
- Lstore->rowind_colptr = rowind_colptr;
- Lstore->col_to_sup = col_to_sup;
- Lstore->sup_to_col = sup_to_col;
-
-}
-
-
-/*! \brief Convert a row compressed storage into a column compressed storage.
- */
-void
-dCompRow_to_CompCol(int m, int n, int nnz,
- double *a, int *colind, int *rowptr,
- double **at, int **rowind, int **colptr)
-{
- register int i, j, col, relpos;
- int *marker;
-
- /* Allocate storage for another copy of the matrix. */
- *at = (double *) doubleMalloc(nnz);
- *rowind = (int *) intMalloc(nnz);
- *colptr = (int *) intMalloc(n+1);
- marker = (int *) intCalloc(n);
-
- /* Get counts of each column of A, and set up column pointers */
- for (i = 0; i < m; ++i)
- for (j = rowptr[i]; j < rowptr[i+1]; ++j) ++marker[colind[j]];
- (*colptr)[0] = 0;
- for (j = 0; j < n; ++j) {
- (*colptr)[j+1] = (*colptr)[j] + marker[j];
- marker[j] = (*colptr)[j];
- }
-
- /* Transfer the matrix into the compressed column storage. */
- for (i = 0; i < m; ++i) {
- for (j = rowptr[i]; j < rowptr[i+1]; ++j) {
- col = colind[j];
- relpos = marker[col];
- (*rowind)[relpos] = i;
- (*at)[relpos] = a[j];
- ++marker[col];
- }
- }
-
- SUPERLU_FREE(marker);
-}
-
-
-void
-dPrint_CompCol_Matrix(char *what, SuperMatrix *A)
-{
- NCformat *Astore;
- register int i,n;
- double *dp;
-
- printf("\nCompCol matrix %s:\n", what);
- printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
- n = A->ncol;
- Astore = (NCformat *) A->Store;
- dp = (double *) Astore->nzval;
- printf("nrow %d, ncol %d, nnz %d\n", A->nrow,A->ncol,Astore->nnz);
- printf("nzval: ");
- for (i = 0; i < Astore->colptr[n]; ++i) printf("%f ", dp[i]);
- printf("\nrowind: ");
- for (i = 0; i < Astore->colptr[n]; ++i) printf("%d ", Astore->rowind[i]);
- printf("\ncolptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->colptr[i]);
- printf("\n");
- fflush(stdout);
-}
-
-void
-dPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
-{
- SCformat *Astore;
- register int i, j, k, c, d, n, nsup;
- double *dp;
- int *col_to_sup, *sup_to_col, *rowind, *rowind_colptr;
-
- printf("\nSuperNode matrix %s:\n", what);
- printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
- n = A->ncol;
- Astore = (SCformat *) A->Store;
- dp = (double *) Astore->nzval;
- col_to_sup = Astore->col_to_sup;
- sup_to_col = Astore->sup_to_col;
- rowind_colptr = Astore->rowind_colptr;
- rowind = Astore->rowind;
- printf("nrow %d, ncol %d, nnz %d, nsuper %d\n",
- A->nrow,A->ncol,Astore->nnz,Astore->nsuper);
- printf("nzval:\n");
- for (k = 0; k <= Astore->nsuper; ++k) {
- c = sup_to_col[k];
- nsup = sup_to_col[k+1] - c;
- for (j = c; j < c + nsup; ++j) {
- d = Astore->nzval_colptr[j];
- for (i = rowind_colptr[c]; i < rowind_colptr[c+1]; ++i) {
- printf("%d\t%d\t%e\n", rowind[i], j, dp[d++]);
- }
- }
- }
-#if 0
- for (i = 0; i < Astore->nzval_colptr[n]; ++i) printf("%f ", dp[i]);
-#endif
- printf("\nnzval_colptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->nzval_colptr[i]);
- printf("\nrowind: ");
- for (i = 0; i < Astore->rowind_colptr[n]; ++i)
- printf("%d ", Astore->rowind[i]);
- printf("\nrowind_colptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->rowind_colptr[i]);
- printf("\ncol_to_sup: ");
- for (i = 0; i < n; ++i) printf("%d ", col_to_sup[i]);
- printf("\nsup_to_col: ");
- for (i = 0; i <= Astore->nsuper+1; ++i)
- printf("%d ", sup_to_col[i]);
- printf("\n");
- fflush(stdout);
-}
-
-void
-dPrint_Dense_Matrix(char *what, SuperMatrix *A)
-{
- 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);
- dp = (double *) Astore->nzval;
- printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
- printf("\nnzval: ");
- for (j = 0; j < A->ncol; ++j) {
- for (i = 0; i < A->nrow; ++i) printf("%f ", dp[i + j*lda]);
- printf("\n");
- }
- printf("\n");
- fflush(stdout);
-}
-
-/*! \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)
-{
- int i, k, fsupc;
- int *xsup, *supno;
- int *xlsub, *lsub;
- double *lusup;
- int *xlusup;
- double *ucol;
- int *usub, *xusub;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
- ucol = Glu->ucol;
- usub = Glu->usub;
- xusub = Glu->xusub;
-
- printf("%s", msg);
- printf("col %d: pivrow %d, supno %d, xprune %d\n",
- jcol, pivrow, supno[jcol], xprune[jcol]);
-
- printf("\tU-col:\n");
- for (i = xusub[jcol]; i < xusub[jcol+1]; i++)
- printf("\t%d%10.4f\n", usub[i], ucol[i]);
- printf("\tL-col in rectangular snode:\n");
- fsupc = xsup[supno[jcol]]; /* first col of the snode */
- i = xlsub[fsupc];
- k = xlusup[jcol];
- while ( i < xlsub[fsupc+1] && k < xlusup[jcol+1] ) {
- printf("\t%d\t%10.4f\n", lsub[i], lusup[k]);
- i++; k++;
- }
- fflush(stdout);
-}
-
-
-/*! \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)
-{
- int i;
-
- for (i = 0; i < n; i++) {
- if (tempv[i] != 0.0)
- {
- fprintf(stderr,"tempv[%d] = %f\n", i,tempv[i]);
- ABORT("dcheck_tempv");
- }
- }
-}
-
-
-void
-dGenXtrue(int n, int nrhs, double *x, int ldx)
-{
- int i, j;
- for (j = 0; j < nrhs; ++j)
- for (i = 0; i < n; ++i) {
- x[i + j*ldx] = 1.0;/* + (double)(i+1.)/n;*/
- }
-}
-
-/*! \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,
- SuperMatrix *A, SuperMatrix *B)
-{
- NCformat *Astore;
- double *Aval;
- DNformat *Bstore;
- double *rhs;
- double one = 1.0;
- double zero = 0.0;
- int ldc;
- char transc[1];
-
- Astore = A->Store;
- Aval = (double *) Astore->nzval;
- Bstore = B->Store;
- rhs = Bstore->nzval;
- ldc = Bstore->lda;
-
- if ( trans == NOTRANS ) *(unsigned char *)transc = 'N';
- else *(unsigned char *)transc = 'T';
-
- sp_dgemm(transc, "N", A->nrow, nrhs, A->ncol, one, A,
- x, ldx, zero, rhs, ldc);
-
-}
-
-/*! \brief Fills a double precision array with a given value.
- */
-void
-dfill(double *a, int alen, double dval)
-{
- register int i;
- for (i = 0; i < alen; i++) a[i] = dval;
-}
-
-
-
-/*! \brief Check the inf-norm of the error vector
- */
-void dinf_norm_error(int nrhs, SuperMatrix *X, double *xtrue)
-{
- DNformat *Xstore;
- double err, xnorm;
- double *Xmat, *soln_work;
- int i, j;
-
- Xstore = X->Store;
- Xmat = Xstore->nzval;
-
- for (j = 0; j < nrhs; j++) {
- soln_work = &Xmat[j*Xstore->lda];
- err = xnorm = 0.0;
- for (i = 0; i < X->nrow; i++) {
- err = SUPERLU_MAX(err, fabs(soln_work[i] - xtrue[i]));
- xnorm = SUPERLU_MAX(xnorm, fabs(soln_work[i]));
- }
- err = err / xnorm;
- printf("||X - Xtrue||/||X|| = %e\n", err);
- }
-}
-
-
-
-/*! \brief Print performance of the code. */
-void
-dPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
- double rpg, double rcond, double *ferr,
- double *berr, char *equed, SuperLUStat_t *stat)
-{
- SCformat *Lstore;
- NCformat *Ustore;
- double *utime;
- flops_t *ops;
-
- utime = stat->utime;
- ops = stat->ops;
-
- if ( utime[FACT] != 0. )
- printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
- ops[FACT]*1e-6/utime[FACT]);
- printf("Identify relaxed snodes = %8.2f\n", utime[RELAX]);
- if ( utime[SOLVE] != 0. )
- printf("Solve flops = %.0f, Mflops = %8.2f\n", ops[SOLVE],
- ops[SOLVE]*1e-6/utime[SOLVE]);
-
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- printf("\tNo of nonzeros in factor L = %d\n", Lstore->nnz);
- 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\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",
- utime[FACT], ops[FACT]*1e-6/utime[FACT],
- utime[SOLVE], ops[SOLVE]*1e-6/utime[SOLVE],
- utime[ETREE], utime[EQUIL], utime[RCOND], utime[REFINE]);
-
- printf("\tRpg\t\tRcond\t\tFerr\t\tBerr\t\tEquil?\n");
- printf("NUM:\t%e\t%e\t%e\t%e\t%s\n",
- rpg, rcond, ferr[0], berr[0], equed);
-
-}
-
-
-
-
-print_double_vec(char *what, int n, double *vec)
-{
- int i;
- printf("%s: n %d\n", what, n);
- for (i = 0; i < n; ++i) printf("%d\t%f\n", i, vec[i]);
- return 0;
-}
-
diff --git a/SRC/dzsum1.c b/SRC/dzsum1.c
deleted file mode 100644
index ffaac7a..0000000
--- a/SRC/dzsum1.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*! @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"
-
-/*! \brief
-
- <pre>
- Purpose
- =======
-
- DZSUM1 takes the sum of the absolute values of a complex
- vector and returns a double precision result.
-
- Based on DZASUM from the Level 1 BLAS.
- The change is to use the 'genuine' absolute value.
-
- Contributed by Nick Higham for use with ZLACON.
-
- Arguments
- =========
-
- N (input) INT
- The number of elements in the vector CX.
-
- CX (input) COMPLEX*16 array, dimension (N)
- The vector whose elements will be summed.
-
- INCX (input) INT
- The spacing between successive values of CX. INCX > 0.
-
- =====================================================================
-</pre>
-*/
-double dzsum1_(int *n, doublecomplex *cx, int *incx)
-{
-
- /* Builtin functions */
- double z_abs(doublecomplex *);
-
- /* Local variables */
- int i, nincx;
- double stemp;
-
-
-#define CX(I) cx[(I)-1]
-
- stemp = 0.;
- if (*n <= 0) {
- return stemp;
- }
- if (*incx == 1) {
- goto L20;
- }
-
- /* CODE FOR INCREMENT NOT EQUAL TO 1 */
-
- nincx = *n * *incx;
- for (i = 1; *incx < 0 ? i >= nincx : i <= nincx; i += *incx) {
-
- /* NEXT LINE MODIFIED. */
-
- stemp += z_abs(&CX(i));
-/* L10: */
- }
-
- return stemp;
-
- /* CODE FOR INCREMENT EQUAL TO 1 */
-
-L20:
- for (i = 1; i <= *n; ++i) {
-
- /* NEXT LINE MODIFIED. */
-
- stemp += z_abs(&CX(i));
-/* L30: */
- }
-
- return stemp;
-
- /* End of DZSUM1 */
-
-} /* dzsum1_ */
-
diff --git a/SRC/get_perm_c.c b/SRC/get_perm_c.c
deleted file mode 100644
index f99908e..0000000
--- a/SRC/get_perm_c.c
+++ /dev/null
@@ -1,457 +0,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.
- * August 1, 2008
- * </pre>
- */
-#include "slu_ddefs.h"
-#include "colamd.h"
-
-extern int genmmd_(int *, int *, int *, int *, int *, int *, int *,
- int *, int *, int *, int *, int *);
-
-void
-get_colamd(
- const int m, /* number of rows in matrix A. */
- const int n, /* number of columns in matrix A. */
- const int nnz,/* 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 *perm_c /* out - the column permutation vector. */
- )
-{
- int Alen, *A, i, info, *p;
- double knobs[COLAMD_KNOBS];
- int stats[COLAMD_STATS];
-
- Alen = colamd_recommended(nnz, m, n);
-
- colamd_set_defaults(knobs);
-
- if (!(A = (int *) SUPERLU_MALLOC(Alen * sizeof(int))) )
- ABORT("Malloc fails for A[]");
- if (!(p = (int *) SUPERLU_MALLOC((n+1) * sizeof(int))) )
- ABORT("Malloc fails for p[]");
- for (i = 0; i <= n; ++i) p[i] = colptr[i];
- for (i = 0; i < nnz; ++i) A[i] = rowind[i];
- info = colamd(m, n, Alen, A, p, knobs, stats);
- if ( info == FALSE ) ABORT("COLAMD failed");
-
- for (i = 0; i < n; ++i) perm_c[p[i]] = i;
-
- SUPERLU_FREE(A);
- SUPERLU_FREE(p);
-}
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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).
- *
- * 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.
- *
- * Questions
- * =========
- * 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;
- int *t_colptr, *t_rowind; /* a column oriented form of T = A' */
-
- if ( !(marker = (int*) SUPERLU_MALLOC((SUPERLU_MAX(m,n)+1)*sizeof(int))) )
- ABORT("SUPERLU_MALLOC fails for marker[]");
- if ( !(t_colptr = (int*) SUPERLU_MALLOC((m+1) * sizeof(int))) )
- ABORT("SUPERLU_MALLOC t_colptr[]");
- if ( !(t_rowind = (int*) SUPERLU_MALLOC(nz * sizeof(int))) )
- ABORT("SUPERLU_MALLOC fails for t_rowind[]");
-
-
- /* Get counts of each column of T, and set up column pointers */
- for (i = 0; i < m; ++i) marker[i] = 0;
- for (j = 0; j < n; ++j) {
- for (i = colptr[j]; i < colptr[j+1]; ++i)
- ++marker[rowind[i]];
- }
- t_colptr[0] = 0;
- for (i = 0; i < m; ++i) {
- t_colptr[i+1] = t_colptr[i] + marker[i];
- marker[i] = t_colptr[i];
- }
-
- /* Transpose the matrix from A to T */
- for (j = 0; j < n; ++j)
- for (i = colptr[j]; i < colptr[j+1]; ++i) {
- col = rowind[i];
- t_rowind[marker[col]] = j;
- ++marker[col];
- }
-
-
- /* ----------------------------------------------------------------
- compute B = T * A, where column j of B is:
-
- Struct (B_*j) = UNION ( Struct (T_*k) )
- A_kj != 0
-
- do not include the diagonal entry
-
- ( Partition A as: A = (A_*1, ..., A_*n)
- Then B = T * A = (T * A_*1, ..., T * A_*n), where
- T * A_*j = (T_*1, ..., T_*m) * A_*j. )
- ---------------------------------------------------------------- */
-
- /* Zero the diagonal flag */
- for (i = 0; i < n; ++i) marker[i] = -1;
-
- /* First pass determines number of nonzeros in B */
- num_nz = 0;
- for (j = 0; j < n; ++j) {
- /* Flag the diagonal so it's not included in the B matrix */
- marker[j] = j;
-
- for (i = colptr[j]; i < colptr[j+1]; ++i) {
- /* A_kj is nonzero, add pattern of column T_*k to B_*j */
- k = rowind[i];
- for (ti = t_colptr[k]; ti < t_colptr[k+1]; ++ti) {
- trow = t_rowind[ti];
- if ( marker[trow] != j ) {
- marker[trow] = j;
- num_nz++;
- }
- }
- }
- }
- *atanz = num_nz;
-
- /* Allocate storage for A'*A */
- if ( !(*ata_colptr = (int*) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
- ABORT("SUPERLU_MALLOC fails for ata_colptr[]");
- if ( *atanz ) {
- if ( !(*ata_rowind = (int*) SUPERLU_MALLOC( *atanz * sizeof(int)) ) )
- ABORT("SUPERLU_MALLOC fails for ata_rowind[]");
- }
- b_colptr = *ata_colptr; /* aliasing */
- b_rowind = *ata_rowind;
-
- /* Zero the diagonal flag */
- for (i = 0; i < n; ++i) marker[i] = -1;
-
- /* Compute each column of B, one at a time */
- num_nz = 0;
- for (j = 0; j < n; ++j) {
- b_colptr[j] = num_nz;
-
- /* Flag the diagonal so it's not included in the B matrix */
- marker[j] = j;
-
- for (i = colptr[j]; i < colptr[j+1]; ++i) {
- /* A_kj is nonzero, add pattern of column T_*k to B_*j */
- k = rowind[i];
- for (ti = t_colptr[k]; ti < t_colptr[k+1]; ++ti) {
- trow = t_rowind[ti];
- if ( marker[trow] != j ) {
- marker[trow] = j;
- b_rowind[num_nz++] = trow;
- }
- }
- }
- }
- b_colptr[n] = num_nz;
-
- SUPERLU_FREE(marker);
- SUPERLU_FREE(t_colptr);
- SUPERLU_FREE(t_rowind);
-}
-
-
-/*! \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. */
- 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 *bnz, /* out - on exit, returns the actual number of
- nonzeros in matrix A'*A. */
- int **b_colptr, /* out - size n+1 */
- int **b_rowind /* out - size *bnz */
- )
-{
- register int i, j, k, col, num_nz;
- int *t_colptr, *t_rowind; /* a column oriented form of T = A' */
- int *marker;
-
- if ( !(marker = (int*) SUPERLU_MALLOC( n * sizeof(int)) ) )
- ABORT("SUPERLU_MALLOC fails for marker[]");
- if ( !(t_colptr = (int*) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
- ABORT("SUPERLU_MALLOC fails for t_colptr[]");
- if ( !(t_rowind = (int*) SUPERLU_MALLOC( nz * sizeof(int)) ) )
- ABORT("SUPERLU_MALLOC fails t_rowind[]");
-
-
- /* Get counts of each column of T, and set up column pointers */
- for (i = 0; i < n; ++i) marker[i] = 0;
- for (j = 0; j < n; ++j) {
- for (i = colptr[j]; i < colptr[j+1]; ++i)
- ++marker[rowind[i]];
- }
- t_colptr[0] = 0;
- for (i = 0; i < n; ++i) {
- t_colptr[i+1] = t_colptr[i] + marker[i];
- marker[i] = t_colptr[i];
- }
-
- /* Transpose the matrix from A to T */
- for (j = 0; j < n; ++j)
- for (i = colptr[j]; i < colptr[j+1]; ++i) {
- col = rowind[i];
- t_rowind[marker[col]] = j;
- ++marker[col];
- }
-
-
- /* ----------------------------------------------------------------
- compute B = A + T, where column j of B is:
-
- Struct (B_*j) = Struct (A_*k) UNION Struct (T_*k)
-
- do not include the diagonal entry
- ---------------------------------------------------------------- */
-
- /* Zero the diagonal flag */
- for (i = 0; i < n; ++i) marker[i] = -1;
-
- /* First pass determines number of nonzeros in B */
- num_nz = 0;
- for (j = 0; j < n; ++j) {
- /* Flag the diagonal so it's not included in the B matrix */
- marker[j] = j;
-
- /* Add pattern of column A_*k to B_*j */
- for (i = colptr[j]; i < colptr[j+1]; ++i) {
- k = rowind[i];
- if ( marker[k] != j ) {
- marker[k] = j;
- ++num_nz;
- }
- }
-
- /* Add pattern of column T_*k to B_*j */
- for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
- k = t_rowind[i];
- if ( marker[k] != j ) {
- marker[k] = j;
- ++num_nz;
- }
- }
- }
- *bnz = num_nz;
-
- /* Allocate storage for A+A' */
- if ( !(*b_colptr = (int*) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
- ABORT("SUPERLU_MALLOC fails for b_colptr[]");
- if ( *bnz) {
- if ( !(*b_rowind = (int*) SUPERLU_MALLOC( *bnz * sizeof(int)) ) )
- ABORT("SUPERLU_MALLOC fails for b_rowind[]");
- }
-
- /* Zero the diagonal flag */
- for (i = 0; i < n; ++i) marker[i] = -1;
-
- /* Compute each column of B, one at a time */
- num_nz = 0;
- for (j = 0; j < n; ++j) {
- (*b_colptr)[j] = num_nz;
-
- /* Flag the diagonal so it's not included in the B matrix */
- marker[j] = j;
-
- /* Add pattern of column A_*k to B_*j */
- for (i = colptr[j]; i < colptr[j+1]; ++i) {
- k = rowind[i];
- if ( marker[k] != j ) {
- marker[k] = j;
- (*b_rowind)[num_nz++] = k;
- }
- }
-
- /* Add pattern of column T_*k to B_*j */
- for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
- k = t_rowind[i];
- if ( marker[k] != j ) {
- marker[k] = j;
- (*b_rowind)[num_nz++] = k;
- }
- }
- }
- (*b_colptr)[n] = num_nz;
-
- SUPERLU_FREE(marker);
- SUPERLU_FREE(t_colptr);
- SUPERLU_FREE(t_rowind);
-}
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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.
- *
- * Arguments
- * =========
- *
- * 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.
- *
- * 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.
- *
- * 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>
- */
-void
-get_perm_c(int ispec, SuperMatrix *A, int *perm_c)
-{
- NCformat *Astore = A->Store;
- int m, n, bnz = 0, *b_colptr, i;
- int delta, maxint, nofsub, *invp;
- int *b_rowind, *dhead, *qsize, *llist, *marker;
- double t, SuperLU_timer_();
-
- m = A->nrow;
- n = A->ncol;
-
- t = SuperLU_timer_();
- switch ( ispec ) {
- case (NATURAL): /* Natural ordering */
- for (i = 0; i < n; ++i) perm_c[i] = i;
-#if ( PRNTlevel>=1 )
- printf("Use natural column ordering.\n");
-#endif
- 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");
-#endif
- 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");
-#endif
- 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");
-#endif
- return;
- default:
- ABORT("Invalid ISPEC");
- }
-
- if ( bnz != 0 ) {
- t = SuperLU_timer_();
-
- /* Initialize and allocate storage for GENMMD. */
- 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));
- if ( !invp ) ABORT("SUPERLU_MALLOC fails for invp.");
- dhead = (int *) SUPERLU_MALLOC((n+delta)*sizeof(int));
- if ( !dhead ) ABORT("SUPERLU_MALLOC fails for dhead.");
- qsize = (int *) SUPERLU_MALLOC((n+delta)*sizeof(int));
- if ( !qsize ) ABORT("SUPERLU_MALLOC fails for qsize.");
- llist = (int *) SUPERLU_MALLOC(n*sizeof(int));
- if ( !llist ) ABORT("SUPERLU_MALLOC fails for llist.");
- marker = (int *) SUPERLU_MALLOC(n*sizeof(int));
- if ( !marker ) ABORT("SUPERLU_MALLOC fails for marker.");
-
- /* Transform adjacency list into 1-based indexing required by GENMMD.*/
- for (i = 0; i <= n; ++i) ++b_colptr[i];
- for (i = 0; i < bnz; ++i) ++b_rowind[i];
-
- genmmd_(&n, b_colptr, b_rowind, perm_c, invp, &delta, dhead,
- qsize, llist, marker, &maxint, &nofsub);
-
- /* Transform perm_c into 0-based indexing. */
- for (i = 0; i < n; ++i) --perm_c[i];
-
- SUPERLU_FREE(invp);
- SUPERLU_FREE(dhead);
- SUPERLU_FREE(qsize);
- SUPERLU_FREE(llist);
- SUPERLU_FREE(marker);
- SUPERLU_FREE(b_rowind);
-
- t = SuperLU_timer_() - t;
- /* printf("call GENMMD time = %8.3f\n", t);*/
-
- } else { /* Empty adjacency structure */
- for (i = 0; i < n; ++i) perm_c[i] = i;
- }
-
- SUPERLU_FREE(b_colptr);
-}
diff --git a/SRC/heap_relax_snode.c b/SRC/heap_relax_snode.c
deleted file mode 100644
index 1dafd82..0000000
--- a/SRC/heap_relax_snode.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/*! @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>
- */
-
-#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,
- 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 */
- )
-{
- register int i, j, k, l, 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);
- if ( !iwork ) ABORT("SUPERLU_MALLOC fails for iwork[]");
- inv_post = iwork + n+1;
- et_save = inv_post + n+1;
-
- /* Post order etree */
- post = (int *) TreePostorder(n, et);
- for (i = 0; i < n+1; ++i) inv_post[post[i]] = i;
-
- /* Renumber etree in postorder */
- for (i = 0; i < n; ++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);
- for (j = 0; j < n; j++) descendants[j] = 0;
- 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 = 0; j < n; ) {
- parent = et[j];
- snode_start = j;
- while ( parent != n && descendants[parent] < relax_columns ) {
- j = parent;
- parent = et[j];
- }
- /* Found a supernode in postordered etree; j is the last column. */
- ++nsuper_et_post;
- k = n;
- for (i = snode_start; i <= j; ++i)
- k = SUPERLU_MIN(k, inv_post[i]);
- l = inv_post[j];
- if ( (l - k) == (j - snode_start) ) {
- /* It's also a supernode in the original etree */
- relax_end[k] = l; /* Last column is recorded */
- ++nsuper_et;
- } else {
- for (i = snode_start; i <= j; ++i) {
- l = inv_post[i];
- if ( descendants[i] == 0 ) {
- relax_end[l] = l;
- ++nsuper_et;
- }
- }
- }
- j++;
- /* Search for a new leaf */
- while ( descendants[j] != 0 && j < n ) j++;
- }
-
-#if ( PRNTlevel>=1 )
- printf(".. heap_snode_relax:\n"
- "\tNo of relaxed snodes in postordered etree:\t%d\n"
- "\tNo of relaxed snodes in original etree:\t%d\n",
- nsuper_et_post, nsuper_et);
-#endif
-
- /* Recover the original etree */
- for (i = 0; i < n; ++i) et[i] = et_save[i];
-
- SUPERLU_FREE(post);
- SUPERLU_FREE(iwork);
-}
-
-
diff --git a/SRC/html_mainpage.h b/SRC/html_mainpage.h
deleted file mode 100644
index 0b789fb..0000000
--- a/SRC/html_mainpage.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*! \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
deleted file mode 100644
index 419c728..0000000
--- a/SRC/icmax1.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*! @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"
-
-/*! \brief
-
- <pre>
- Purpose
- =======
-
- ICMAX1 finds the index of the element whose real part has maximum
- absolute value.
-
- Based on ICAMAX from Level 1 BLAS.
- The change is to use the 'genuine' absolute value.
-
- Contributed by Nick Higham for use with CLACON.
-
- Arguments
- =========
-
- N (input) INT
- The number of elements in the vector CX.
-
- CX (input) COMPLEX array, dimension (N)
- The vector whose elements will be summed.
-
- INCX (input) INT
- The spacing between successive values of CX. INCX >= 1.
-
- =====================================================================
- </pre>
-*/
-int icmax1_(int *n, complex *cx, int *incx)
-{
-/*
- NEXT LINE IS THE ONLY MODIFICATION.
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- int ret_val, i__1, i__2;
- float r__1;
- /* Local variables */
- static float smax;
- static int i, ix;
-
-
-#define CX(I) cx[(I)-1]
-
-
- ret_val = 0;
- if (*n < 1) {
- return ret_val;
- }
- ret_val = 1;
- if (*n == 1) {
- return ret_val;
- }
- if (*incx == 1) {
- goto L30;
- }
-
-/* CODE FOR INCREMENT NOT EQUAL TO 1 */
-
- ix = 1;
- smax = (r__1 = CX(1).r, fabs(r__1));
- ix += *incx;
- i__1 = *n;
- for (i = 2; i <= *n; ++i) {
- i__2 = ix;
- if ((r__1 = CX(ix).r, fabs(r__1)) <= smax) {
- goto L10;
- }
- ret_val = i;
- i__2 = ix;
- smax = (r__1 = CX(ix).r, fabs(r__1));
-L10:
- ix += *incx;
-/* L20: */
- }
- return ret_val;
-
-/* CODE FOR INCREMENT EQUAL TO 1 */
-
-L30:
- smax = (r__1 = CX(1).r, fabs(r__1));
- i__1 = *n;
- for (i = 2; i <= *n; ++i) {
- i__2 = i;
- if ((r__1 = CX(i).r, fabs(r__1)) <= smax) {
- goto L40;
- }
- ret_val = i;
- i__2 = i;
- smax = (r__1 = CX(i).r, fabs(r__1));
-L40:
- ;
- }
- return ret_val;
-
-/* End of ICMAX1 */
-
-} /* icmax1_ */
-
diff --git a/SRC/ilu_ccolumn_dfs.c b/SRC/ilu_ccolumn_dfs.c
deleted file mode 100644
index fc9f403..0000000
--- a/SRC/ilu_ccolumn_dfs.c
+++ /dev/null
@@ -1,258 +0,0 @@
-
-/*! @file ilu_ccolumn_dfs.c
- * \brief Performs a symbolic factorization
- *
- * <pre>
- * -- SuperLU routine (version 4.0) --
- * Lawrence Berkeley National Laboratory
- * June 30, 2009
- * </pre>
-*/
-
-#include "slu_cdefs.h"
-
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- * 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
- * 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 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.
- *
- * 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.
- *
- * 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
- *
- * Return value
- * ============
- * 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 myfnz; /* First nonz column of a U-segment */
- int chperm, chmark, chrep, kchild;
- int xdfs, maxdfs, kpar, oldrep;
- int jptr, jm1ptr;
- 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;
- xlsub = Glu->xlsub;
- nzlmax = Glu->nzlmax;
-
- if ( first ) {
- maxsuper = sp_ienv(7);
- first = 0;
- }
- jcolp1 = jcol + 1;
- jcolm1 = jcol - 1;
- nsuper = supno[jcol];
- jsuper = nsuper;
- nextl = xlsub[jcol];
- marker2 = &marker[2*m];
-
-
- /* For each nonzero in A[*,jcol] do dfs */
- for (k = 0; lsub_col[k] != EMPTY; k++) {
-
- krow = lsub_col[k];
- lsub_col[k] = EMPTY;
- kmark = marker2[krow];
-
- /* 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]
- */
- marker2[krow] = jcol;
- kperm = perm_r[krow];
-
- if ( kperm == EMPTY ) {
- lsub[nextl++] = krow; /* krow is indexed into A */
- if ( nextl >= nzlmax ) {
- 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 {
- /* krow is in U: if its supernode-rep krep
- * has been explored, update repfnz[*]
- */
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz[krep];
-
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > kperm ) repfnz[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz[krep] = kperm;
- xdfs = xlsub[xsup[supno[krep]]];
- maxdfs = xlsub[krep + 1];
-
- do {
- /*
- * For each unmarked kchild of krep
- */
- while ( xdfs < maxdfs ) {
-
- kchild = lsub[xdfs];
- xdfs++;
- chmark = marker2[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;
- if ( nextl >= nzlmax ) {
- 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 */
- if ( myfnz > 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) */
- parent[krep] = oldrep;
- repfnz[krep] = chperm;
- xdfs = xlsub[xsup[supno[krep]]];
- maxdfs = xlsub[krep + 1];
- } /* else */
-
- } /* else */
-
- } /* if */
-
- } /* while */
-
- /* krow has no more unexplored nbrs;
- * place supernode-rep krep in postorder DFS.
- * backtrack dfs to its parent
- */
- segrep[*nseg] = krep;
- ++(*nseg);
- kpar = parent[krep]; /* Pop from stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- maxdfs = xlsub[krep + 1];
-
- } while ( kpar != EMPTY ); /* Until empty stack */
-
- } /* else */
-
- } /* else */
-
- } /* for each nonzero ... */
-
- /* Check to see if j belongs in the same supernode as j-1 */
- if ( jcol == 0 ) { /* Do nothing for column 0 */
- nsuper = supno[0] = 0;
- } else {
- fsupc = xsup[nsuper];
- jptr = xlsub[jcol]; /* Not compressed yet */
- jm1ptr = xlsub[jcolm1];
-
- if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-
- /* 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 columns of the supernode.
- */
- if ( jsuper == EMPTY ) { /* starts a new supernode */
- 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];
- xlsub[jcolm1] = ito;
- xlsub[jcol] = ito;
- for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
- lsub[ito] = lsub[ifrom];
- nextl = ito;
- }
- nsuper++;
- supno[jcol] = nsuper;
- } /* if a new supernode */
-
- } /* else: jcol > 0 */
-
- /* Tidy up the pointers before exit */
- xsup[nsuper+1] = jcolp1;
- supno[jcolp1] = nsuper;
- xlsub[jcolp1] = nextl;
-
- return 0;
-}
diff --git a/SRC/ilu_ccopy_to_ucol.c b/SRC/ilu_ccopy_to_ucol.c
deleted file mode 100644
index b6b0328..0000000
--- a/SRC/ilu_ccopy_to_ucol.c
+++ /dev/null
@@ -1,211 +0,0 @@
-
-/*! @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
deleted file mode 100644
index ba32096..0000000
--- a/SRC/ilu_ccopy_to_ucol.c.bak
+++ /dev/null
@@ -1,202 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 44173c8..0000000
--- a/SRC/ilu_cdrop_row.c
+++ /dev/null
@@ -1,339 +0,0 @@
-
-/*! @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/ilu_cpanel_dfs.c b/SRC/ilu_cpanel_dfs.c
deleted file mode 100644
index 05a5bf5..0000000
--- a/SRC/ilu_cpanel_dfs.c
+++ /dev/null
@@ -1,248 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_cdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
- *
- * 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 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.
- *
- * 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;
- *
- * 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>
- */
-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 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 *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;
- 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;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
-
- /* For each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++) {
- nextl_col = (jj - jcol) * m;
-
-#ifdef CHK_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];
- 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
- * krow is in L: place it in structure of L[*,jj]
- */
- 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[*]
- */
- else {
-
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz_col[krep];
-
-#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 > kperm ) repfnz_col[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz_col[krep] = kperm;
- 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
- */
- 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
- * been explored, update its repfnz[*]
- */
- else {
-
- chrep = xsup[supno[chperm]+1] - 1;
- myfnz = repfnz_col[chrep];
-#ifdef CHK_DFS
- printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
-#endif
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > chperm )
- repfnz_col[chrep] = chperm;
- }
- else {
- /* Cont. dfs at snode-rep of kchild */
- xplore[krep] = xdfs;
- oldrep = krep;
- krep = chrep; /* Go deeper down G(L) */
- parent[krep] = oldrep;
- repfnz_col[krep] = chperm;
- 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
- } /* else */
-
- } /* else */
-
- } /* if... */
-
- } /* while xdfs < maxdfs */
-
- /* krow has no more unexplored nbrs:
- * 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.
- */
- if ( marker1[krep] < jcol ) {
- segrep[*nseg] = krep;
- ++(*nseg);
- marker1[krep] = jj;
- }
-
- kpar = parent[krep]; /* Pop stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- 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;
- amax_col++;
-
- } /* for jj ... */
-
-}
diff --git a/SRC/ilu_cpivotL.c b/SRC/ilu_cpivotL.c
deleted file mode 100644
index d806485..0000000
--- a/SRC/ilu_cpivotL.c
+++ /dev/null
@@ -1,274 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 161d154..0000000
--- a/SRC/ilu_csnode_dfs.c
+++ /dev/null
@@ -1,90 +0,0 @@
-
-/*! @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/ilu_dcolumn_dfs.c b/SRC/ilu_dcolumn_dfs.c
deleted file mode 100644
index a2e14db..0000000
--- a/SRC/ilu_dcolumn_dfs.c
+++ /dev/null
@@ -1,258 +0,0 @@
-
-/*! @file ilu_dcolumn_dfs.c
- * \brief Performs a symbolic factorization
- *
- * <pre>
- * -- SuperLU routine (version 4.0) --
- * Lawrence Berkeley National Laboratory
- * June 30, 2009
- * </pre>
-*/
-
-#include "slu_ddefs.h"
-
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- * 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
- * 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 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.
- *
- * 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.
- *
- * 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
- *
- * Return value
- * ============
- * 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 myfnz; /* First nonz column of a U-segment */
- int chperm, chmark, chrep, kchild;
- int xdfs, maxdfs, kpar, oldrep;
- int jptr, jm1ptr;
- 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;
- xlsub = Glu->xlsub;
- nzlmax = Glu->nzlmax;
-
- if ( first ) {
- maxsuper = sp_ienv(7);
- first = 0;
- }
- jcolp1 = jcol + 1;
- jcolm1 = jcol - 1;
- nsuper = supno[jcol];
- jsuper = nsuper;
- nextl = xlsub[jcol];
- marker2 = &marker[2*m];
-
-
- /* For each nonzero in A[*,jcol] do dfs */
- for (k = 0; lsub_col[k] != EMPTY; k++) {
-
- krow = lsub_col[k];
- lsub_col[k] = EMPTY;
- kmark = marker2[krow];
-
- /* 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]
- */
- marker2[krow] = jcol;
- kperm = perm_r[krow];
-
- if ( kperm == EMPTY ) {
- lsub[nextl++] = krow; /* krow is indexed into A */
- if ( nextl >= nzlmax ) {
- 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 {
- /* krow is in U: if its supernode-rep krep
- * has been explored, update repfnz[*]
- */
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz[krep];
-
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > kperm ) repfnz[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz[krep] = kperm;
- xdfs = xlsub[xsup[supno[krep]]];
- maxdfs = xlsub[krep + 1];
-
- do {
- /*
- * For each unmarked kchild of krep
- */
- while ( xdfs < maxdfs ) {
-
- kchild = lsub[xdfs];
- xdfs++;
- chmark = marker2[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;
- if ( nextl >= nzlmax ) {
- 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 */
- if ( myfnz > 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) */
- parent[krep] = oldrep;
- repfnz[krep] = chperm;
- xdfs = xlsub[xsup[supno[krep]]];
- maxdfs = xlsub[krep + 1];
- } /* else */
-
- } /* else */
-
- } /* if */
-
- } /* while */
-
- /* krow has no more unexplored nbrs;
- * place supernode-rep krep in postorder DFS.
- * backtrack dfs to its parent
- */
- segrep[*nseg] = krep;
- ++(*nseg);
- kpar = parent[krep]; /* Pop from stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- maxdfs = xlsub[krep + 1];
-
- } while ( kpar != EMPTY ); /* Until empty stack */
-
- } /* else */
-
- } /* else */
-
- } /* for each nonzero ... */
-
- /* Check to see if j belongs in the same supernode as j-1 */
- if ( jcol == 0 ) { /* Do nothing for column 0 */
- nsuper = supno[0] = 0;
- } else {
- fsupc = xsup[nsuper];
- jptr = xlsub[jcol]; /* Not compressed yet */
- jm1ptr = xlsub[jcolm1];
-
- if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-
- /* 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 columns of the supernode.
- */
- if ( jsuper == EMPTY ) { /* starts a new supernode */
- 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];
- xlsub[jcolm1] = ito;
- xlsub[jcol] = ito;
- for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
- lsub[ito] = lsub[ifrom];
- nextl = ito;
- }
- nsuper++;
- supno[jcol] = nsuper;
- } /* if a new supernode */
-
- } /* else: jcol > 0 */
-
- /* Tidy up the pointers before exit */
- xsup[nsuper+1] = jcolp1;
- supno[jcolp1] = nsuper;
- xlsub[jcolp1] = nextl;
-
- return 0;
-}
diff --git a/SRC/ilu_dcopy_to_ucol.c b/SRC/ilu_dcopy_to_ucol.c
deleted file mode 100644
index e9162a7..0000000
--- a/SRC/ilu_dcopy_to_ucol.c
+++ /dev/null
@@ -1,207 +0,0 @@
-
-/*! @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
deleted file mode 100644
index a27a148..0000000
--- a/SRC/ilu_dcopy_to_ucol.c.bak
+++ /dev/null
@@ -1,199 +0,0 @@
-
-/*! @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
deleted file mode 100644
index a08c85c..0000000
--- a/SRC/ilu_ddrop_row.c
+++ /dev/null
@@ -1,329 +0,0 @@
-
-/*! @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
deleted file mode 100644
index caffa13..0000000
--- a/SRC/ilu_ddrop_row.c.bak
+++ /dev/null
@@ -1,311 +0,0 @@
-
-/*! @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/ilu_dpanel_dfs.c b/SRC/ilu_dpanel_dfs.c
deleted file mode 100644
index 5aae050..0000000
--- a/SRC/ilu_dpanel_dfs.c
+++ /dev/null
@@ -1,248 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_ddefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
- *
- * 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 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.
- *
- * 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;
- *
- * 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>
- */
-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 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 *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;
- 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;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
-
- /* For each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++) {
- nextl_col = (jj - jcol) * m;
-
-#ifdef CHK_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];
- 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
- * krow is in L: place it in structure of L[*,jj]
- */
- 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[*]
- */
- else {
-
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz_col[krep];
-
-#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 > kperm ) repfnz_col[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz_col[krep] = kperm;
- 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
- */
- 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
- * been explored, update its repfnz[*]
- */
- else {
-
- chrep = xsup[supno[chperm]+1] - 1;
- myfnz = repfnz_col[chrep];
-#ifdef CHK_DFS
- printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
-#endif
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > chperm )
- repfnz_col[chrep] = chperm;
- }
- else {
- /* Cont. dfs at snode-rep of kchild */
- xplore[krep] = xdfs;
- oldrep = krep;
- krep = chrep; /* Go deeper down G(L) */
- parent[krep] = oldrep;
- repfnz_col[krep] = chperm;
- 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
- } /* else */
-
- } /* else */
-
- } /* if... */
-
- } /* while xdfs < maxdfs */
-
- /* krow has no more unexplored nbrs:
- * 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.
- */
- if ( marker1[krep] < jcol ) {
- segrep[*nseg] = krep;
- ++(*nseg);
- marker1[krep] = jj;
- }
-
- kpar = parent[krep]; /* Pop stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- 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;
- amax_col++;
-
- } /* for jj ... */
-
-}
diff --git a/SRC/ilu_dpivotL.c b/SRC/ilu_dpivotL.c
deleted file mode 100644
index 33c316d..0000000
--- a/SRC/ilu_dpivotL.c
+++ /dev/null
@@ -1,266 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 5251134..0000000
--- a/SRC/ilu_dsnode_dfs.c
+++ /dev/null
@@ -1,90 +0,0 @@
-
-/*! @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/ilu_heap_relax_snode.c b/SRC/ilu_heap_relax_snode.c
deleted file mode 100644
index d7a98bc..0000000
--- a/SRC/ilu_heap_relax_snode.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*! @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>
- */
-
-#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
-ilu_heap_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 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);
- if ( !iwork ) ABORT("SUPERLU_MALLOC fails for iwork[]");
- inv_post = iwork + n+1;
- et_save = inv_post + n+1;
-
- /* Post order etree */
- post = (int *) TreePostorder(n, et);
- for (i = 0; i < n+1; ++i) inv_post[post[i]] = i;
-
- /* Renumber etree in postorder */
- for (i = 0; i < n; ++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];
- if ( parent != n ) /* not the dummy root */
- descendants[parent] += descendants[j] + 1;
- }
-
- /* Identify the relaxed supernodes by postorder traversal of the etree. */
- for ( f = j = 0; j < n; ) {
- parent = et[j];
- snode_start = j;
- while ( parent != n && descendants[parent] < relax_columns ) {
- j = parent;
- parent = et[j];
- }
- /* Found a supernode in postordered etree; j is the last column. */
- ++nsuper_et_post;
- k = n;
- for (i = snode_start; i <= j; ++i)
- k = SUPERLU_MIN(k, inv_post[i]);
- l = inv_post[j];
- 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;
- relax_fsupc[f++] = l;
- ++nsuper_et;
- }
- }
- }
- j++;
- /* Search for a new leaf */
- while ( descendants[j] != 0 && j < n ) j++;
- }
-
-#if ( PRNTlevel>=1 )
- printf(".. heap_snode_relax:\n"
- "\tNo of relaxed snodes in postordered etree:\t%d\n"
- "\tNo of relaxed snodes in original etree:\t%d\n",
- nsuper_et_post, nsuper_et);
-#endif
-
- /* Recover the original etree */
- for (i = 0; i < n; ++i) et[i] = et_save[i];
-
- SUPERLU_FREE(post);
- SUPERLU_FREE(iwork);
-}
diff --git a/SRC/ilu_relax_snode.c b/SRC/ilu_relax_snode.c
deleted file mode 100644
index 124101a..0000000
--- a/SRC/ilu_relax_snode.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*! @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/ilu_scolumn_dfs.c b/SRC/ilu_scolumn_dfs.c
deleted file mode 100644
index 0e7631c..0000000
--- a/SRC/ilu_scolumn_dfs.c
+++ /dev/null
@@ -1,258 +0,0 @@
-
-/*! @file ilu_scolumn_dfs.c
- * \brief Performs a symbolic factorization
- *
- * <pre>
- * -- SuperLU routine (version 4.0) --
- * Lawrence Berkeley National Laboratory
- * June 30, 2009
- * </pre>
-*/
-
-#include "slu_sdefs.h"
-
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- * 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
- * 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 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.
- *
- * 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.
- *
- * 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
- *
- * Return value
- * ============
- * 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 myfnz; /* First nonz column of a U-segment */
- int chperm, chmark, chrep, kchild;
- int xdfs, maxdfs, kpar, oldrep;
- int jptr, jm1ptr;
- 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;
- xlsub = Glu->xlsub;
- nzlmax = Glu->nzlmax;
-
- if ( first ) {
- maxsuper = sp_ienv(7);
- first = 0;
- }
- jcolp1 = jcol + 1;
- jcolm1 = jcol - 1;
- nsuper = supno[jcol];
- jsuper = nsuper;
- nextl = xlsub[jcol];
- marker2 = &marker[2*m];
-
-
- /* For each nonzero in A[*,jcol] do dfs */
- for (k = 0; lsub_col[k] != EMPTY; k++) {
-
- krow = lsub_col[k];
- lsub_col[k] = EMPTY;
- kmark = marker2[krow];
-
- /* 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]
- */
- marker2[krow] = jcol;
- kperm = perm_r[krow];
-
- if ( kperm == EMPTY ) {
- lsub[nextl++] = krow; /* krow is indexed into A */
- if ( nextl >= nzlmax ) {
- 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 {
- /* krow is in U: if its supernode-rep krep
- * has been explored, update repfnz[*]
- */
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz[krep];
-
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > kperm ) repfnz[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz[krep] = kperm;
- xdfs = xlsub[xsup[supno[krep]]];
- maxdfs = xlsub[krep + 1];
-
- do {
- /*
- * For each unmarked kchild of krep
- */
- while ( xdfs < maxdfs ) {
-
- kchild = lsub[xdfs];
- xdfs++;
- chmark = marker2[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;
- if ( nextl >= nzlmax ) {
- 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 */
- if ( myfnz > 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) */
- parent[krep] = oldrep;
- repfnz[krep] = chperm;
- xdfs = xlsub[xsup[supno[krep]]];
- maxdfs = xlsub[krep + 1];
- } /* else */
-
- } /* else */
-
- } /* if */
-
- } /* while */
-
- /* krow has no more unexplored nbrs;
- * place supernode-rep krep in postorder DFS.
- * backtrack dfs to its parent
- */
- segrep[*nseg] = krep;
- ++(*nseg);
- kpar = parent[krep]; /* Pop from stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- maxdfs = xlsub[krep + 1];
-
- } while ( kpar != EMPTY ); /* Until empty stack */
-
- } /* else */
-
- } /* else */
-
- } /* for each nonzero ... */
-
- /* Check to see if j belongs in the same supernode as j-1 */
- if ( jcol == 0 ) { /* Do nothing for column 0 */
- nsuper = supno[0] = 0;
- } else {
- fsupc = xsup[nsuper];
- jptr = xlsub[jcol]; /* Not compressed yet */
- jm1ptr = xlsub[jcolm1];
-
- if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-
- /* 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 columns of the supernode.
- */
- if ( jsuper == EMPTY ) { /* starts a new supernode */
- 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];
- xlsub[jcolm1] = ito;
- xlsub[jcol] = ito;
- for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
- lsub[ito] = lsub[ifrom];
- nextl = ito;
- }
- nsuper++;
- supno[jcol] = nsuper;
- } /* if a new supernode */
-
- } /* else: jcol > 0 */
-
- /* Tidy up the pointers before exit */
- xsup[nsuper+1] = jcolp1;
- supno[jcolp1] = nsuper;
- xlsub[jcolp1] = nextl;
-
- return 0;
-}
diff --git a/SRC/ilu_scopy_to_ucol.c b/SRC/ilu_scopy_to_ucol.c
deleted file mode 100644
index 7e0e97c..0000000
--- a/SRC/ilu_scopy_to_ucol.c
+++ /dev/null
@@ -1,207 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 2b3bc70..0000000
--- a/SRC/ilu_scopy_to_ucol.c.bak
+++ /dev/null
@@ -1,199 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 108f849..0000000
--- a/SRC/ilu_sdrop_row.c
+++ /dev/null
@@ -1,329 +0,0 @@
-
-/*! @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/ilu_spanel_dfs.c b/SRC/ilu_spanel_dfs.c
deleted file mode 100644
index a741846..0000000
--- a/SRC/ilu_spanel_dfs.c
+++ /dev/null
@@ -1,248 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_sdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
- *
- * 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 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.
- *
- * 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;
- *
- * 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>
- */
-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 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 *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;
- 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;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
-
- /* For each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++) {
- nextl_col = (jj - jcol) * m;
-
-#ifdef CHK_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];
- 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
- * krow is in L: place it in structure of L[*,jj]
- */
- 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[*]
- */
- else {
-
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz_col[krep];
-
-#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 > kperm ) repfnz_col[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz_col[krep] = kperm;
- 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
- */
- 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
- * been explored, update its repfnz[*]
- */
- else {
-
- chrep = xsup[supno[chperm]+1] - 1;
- myfnz = repfnz_col[chrep];
-#ifdef CHK_DFS
- printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
-#endif
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > chperm )
- repfnz_col[chrep] = chperm;
- }
- else {
- /* Cont. dfs at snode-rep of kchild */
- xplore[krep] = xdfs;
- oldrep = krep;
- krep = chrep; /* Go deeper down G(L) */
- parent[krep] = oldrep;
- repfnz_col[krep] = chperm;
- 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
- } /* else */
-
- } /* else */
-
- } /* if... */
-
- } /* while xdfs < maxdfs */
-
- /* krow has no more unexplored nbrs:
- * 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.
- */
- if ( marker1[krep] < jcol ) {
- segrep[*nseg] = krep;
- ++(*nseg);
- marker1[krep] = jj;
- }
-
- kpar = parent[krep]; /* Pop stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- 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;
- amax_col++;
-
- } /* for jj ... */
-
-}
diff --git a/SRC/ilu_spivotL.c b/SRC/ilu_spivotL.c
deleted file mode 100644
index 25b6b00..0000000
--- a/SRC/ilu_spivotL.c
+++ /dev/null
@@ -1,266 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 22ae226..0000000
--- a/SRC/ilu_ssnode_dfs.c
+++ /dev/null
@@ -1,90 +0,0 @@
-
-/*! @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/ilu_zcolumn_dfs.c b/SRC/ilu_zcolumn_dfs.c
deleted file mode 100644
index dec9460..0000000
--- a/SRC/ilu_zcolumn_dfs.c
+++ /dev/null
@@ -1,258 +0,0 @@
-
-/*! @file ilu_zcolumn_dfs.c
- * \brief Performs a symbolic factorization
- *
- * <pre>
- * -- SuperLU routine (version 4.0) --
- * Lawrence Berkeley National Laboratory
- * June 30, 2009
- * </pre>
-*/
-
-#include "slu_zdefs.h"
-
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- * 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
- * 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 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.
- *
- * 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.
- *
- * 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
- *
- * Return value
- * ============
- * 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 myfnz; /* First nonz column of a U-segment */
- int chperm, chmark, chrep, kchild;
- int xdfs, maxdfs, kpar, oldrep;
- int jptr, jm1ptr;
- 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;
- xlsub = Glu->xlsub;
- nzlmax = Glu->nzlmax;
-
- if ( first ) {
- maxsuper = sp_ienv(7);
- first = 0;
- }
- jcolp1 = jcol + 1;
- jcolm1 = jcol - 1;
- nsuper = supno[jcol];
- jsuper = nsuper;
- nextl = xlsub[jcol];
- marker2 = &marker[2*m];
-
-
- /* For each nonzero in A[*,jcol] do dfs */
- for (k = 0; lsub_col[k] != EMPTY; k++) {
-
- krow = lsub_col[k];
- lsub_col[k] = EMPTY;
- kmark = marker2[krow];
-
- /* 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]
- */
- marker2[krow] = jcol;
- kperm = perm_r[krow];
-
- if ( kperm == EMPTY ) {
- lsub[nextl++] = krow; /* krow is indexed into A */
- if ( nextl >= nzlmax ) {
- 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 {
- /* krow is in U: if its supernode-rep krep
- * has been explored, update repfnz[*]
- */
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz[krep];
-
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > kperm ) repfnz[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz[krep] = kperm;
- xdfs = xlsub[xsup[supno[krep]]];
- maxdfs = xlsub[krep + 1];
-
- do {
- /*
- * For each unmarked kchild of krep
- */
- while ( xdfs < maxdfs ) {
-
- kchild = lsub[xdfs];
- xdfs++;
- chmark = marker2[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;
- if ( nextl >= nzlmax ) {
- 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 */
- if ( myfnz > 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) */
- parent[krep] = oldrep;
- repfnz[krep] = chperm;
- xdfs = xlsub[xsup[supno[krep]]];
- maxdfs = xlsub[krep + 1];
- } /* else */
-
- } /* else */
-
- } /* if */
-
- } /* while */
-
- /* krow has no more unexplored nbrs;
- * place supernode-rep krep in postorder DFS.
- * backtrack dfs to its parent
- */
- segrep[*nseg] = krep;
- ++(*nseg);
- kpar = parent[krep]; /* Pop from stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- maxdfs = xlsub[krep + 1];
-
- } while ( kpar != EMPTY ); /* Until empty stack */
-
- } /* else */
-
- } /* else */
-
- } /* for each nonzero ... */
-
- /* Check to see if j belongs in the same supernode as j-1 */
- if ( jcol == 0 ) { /* Do nothing for column 0 */
- nsuper = supno[0] = 0;
- } else {
- fsupc = xsup[nsuper];
- jptr = xlsub[jcol]; /* Not compressed yet */
- jm1ptr = xlsub[jcolm1];
-
- if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-
- /* 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 columns of the supernode.
- */
- if ( jsuper == EMPTY ) { /* starts a new supernode */
- 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];
- xlsub[jcolm1] = ito;
- xlsub[jcol] = ito;
- for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
- lsub[ito] = lsub[ifrom];
- nextl = ito;
- }
- nsuper++;
- supno[jcol] = nsuper;
- } /* if a new supernode */
-
- } /* else: jcol > 0 */
-
- /* Tidy up the pointers before exit */
- xsup[nsuper+1] = jcolp1;
- supno[jcolp1] = nsuper;
- xlsub[jcolp1] = nextl;
-
- return 0;
-}
diff --git a/SRC/ilu_zcopy_to_ucol.c b/SRC/ilu_zcopy_to_ucol.c
deleted file mode 100644
index ddf3a63..0000000
--- a/SRC/ilu_zcopy_to_ucol.c
+++ /dev/null
@@ -1,211 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 9859c2f..0000000
--- a/SRC/ilu_zcopy_to_ucol.c.bak
+++ /dev/null
@@ -1,202 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 0a140d4..0000000
--- a/SRC/ilu_zdrop_row.c
+++ /dev/null
@@ -1,339 +0,0 @@
-
-/*! @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/ilu_zpanel_dfs.c b/SRC/ilu_zpanel_dfs.c
deleted file mode 100644
index 3f5a081..0000000
--- a/SRC/ilu_zpanel_dfs.c
+++ /dev/null
@@ -1,248 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_zdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
- *
- * 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 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.
- *
- * 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;
- *
- * 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>
- */
-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 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 *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;
- 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;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
-
- /* For each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++) {
- nextl_col = (jj - jcol) * m;
-
-#ifdef CHK_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];
- 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
- * krow is in L: place it in structure of L[*,jj]
- */
- 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[*]
- */
- else {
-
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz_col[krep];
-
-#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 > kperm ) repfnz_col[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz_col[krep] = kperm;
- 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
- */
- 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
- * been explored, update its repfnz[*]
- */
- else {
-
- chrep = xsup[supno[chperm]+1] - 1;
- myfnz = repfnz_col[chrep];
-#ifdef CHK_DFS
- printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
-#endif
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > chperm )
- repfnz_col[chrep] = chperm;
- }
- else {
- /* Cont. dfs at snode-rep of kchild */
- xplore[krep] = xdfs;
- oldrep = krep;
- krep = chrep; /* Go deeper down G(L) */
- parent[krep] = oldrep;
- repfnz_col[krep] = chperm;
- 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
- } /* else */
-
- } /* else */
-
- } /* if... */
-
- } /* while xdfs < maxdfs */
-
- /* krow has no more unexplored nbrs:
- * 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.
- */
- if ( marker1[krep] < jcol ) {
- segrep[*nseg] = krep;
- ++(*nseg);
- marker1[krep] = jj;
- }
-
- kpar = parent[krep]; /* Pop stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- 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;
- amax_col++;
-
- } /* for jj ... */
-
-}
diff --git a/SRC/ilu_zpivotL.c b/SRC/ilu_zpivotL.c
deleted file mode 100644
index dafea2b..0000000
--- a/SRC/ilu_zpivotL.c
+++ /dev/null
@@ -1,274 +0,0 @@
-
-/*! @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
deleted file mode 100644
index e7a357d..0000000
--- a/SRC/ilu_zsnode_dfs.c
+++ /dev/null
@@ -1,90 +0,0 @@
-
-/*! @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
deleted file mode 100644
index d0154ab..0000000
--- a/SRC/izmax1.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*! @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_dcomplex.h"
-#include "slu_Cnames.h"
-
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- IZMAX1 finds the index of the element whose real part has maximum
- absolute value.
-
- Based on IZAMAX from Level 1 BLAS.
- The change is to use the 'genuine' absolute value.
-
- Contributed by Nick Higham for use with ZLACON.
-
- Arguments
- =========
-
- N (input) INT
- The number of elements in the vector CX.
-
- CX (input) COMPLEX*16 array, dimension (N)
- The vector whose elements will be summed.
-
- INCX (input) INT
- 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;
-
- /* Local variables */
- double smax;
- int i, ix;
-
-#define CX(I) cx[(I)-1]
-
- ret_val = 0;
- if (*n < 1) {
- return ret_val;
- }
- ret_val = 1;
- if (*n == 1) {
- return ret_val;
- }
- if (*incx == 1) {
- goto L30;
- }
-
-/* CODE FOR INCREMENT NOT EQUAL TO 1 */
-
- ix = 1;
- smax = (d__1 = CX(1).r, fabs(d__1));
- ix += *incx;
- i__1 = *n;
- for (i = 2; i <= *n; ++i) {
- i__2 = ix;
- if ((d__1 = CX(ix).r, fabs(d__1)) <= smax) {
- goto L10;
- }
- ret_val = i;
- i__2 = ix;
- smax = (d__1 = CX(ix).r, fabs(d__1));
-L10:
- ix += *incx;
-/* L20: */
- }
- return ret_val;
-
-/* CODE FOR INCREMENT EQUAL TO 1 */
-
-L30:
- smax = (d__1 = CX(1).r, fabs(d__1));
- i__1 = *n;
- for (i = 2; i <= *n; ++i) {
- i__2 = i;
- if ((d__1 = CX(i).r, fabs(d__1)) <= smax) {
- goto L40;
- }
- ret_val = i;
- i__2 = i;
- smax = (d__1 = CX(i).r, fabs(d__1));
-L40:
- ;
- }
- return ret_val;
-
-/* End of IZMAX1 */
-
-} /* izmax1_ */
-
diff --git a/SRC/lsame.c b/SRC/lsame.c
deleted file mode 100644
index 073a551..0000000
--- a/SRC/lsame.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*! @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"
-
-/*! \brief
-
- <pre>
- Purpose
- =======
-
- LSAME returns .TRUE. if CA is the same letter as CB regardless of case.
-
- Arguments
- =========
-
- CA (input) CHARACTER*1
- CB (input) CHARACTER*1
- CA and CB specify the single characters to be compared.
-
- =====================================================================
-</pre>
-*/
-
-int lsame_(char *ca, char *cb)
-{
-
-
- /* System generated locals */
- int ret_val;
-
- /* Local variables */
- int inta, intb, zcode;
-
- ret_val = *(unsigned char *)ca == *(unsigned char *)cb;
- if (ret_val) {
- return ret_val;
- }
-
- /* Now test for equivalence if both characters are alphabetic. */
-
- zcode = 'Z';
-
- /* Use 'Z' rather than 'A' so that ASCII can be detected on Prime
- machines, on which ICHAR returns a value with bit 8 set.
- ICHAR('A') on Prime machines returns 193 which is the same as
- ICHAR('A') on an EBCDIC machine. */
-
- inta = *(unsigned char *)ca;
- intb = *(unsigned char *)cb;
-
- if (zcode == 90 || zcode == 122) {
- /* ASCII is assumed - ZCODE is the ASCII code of either lower or
- upper case 'Z'. */
- if (inta >= 97 && inta <= 122) inta += -32;
- if (intb >= 97 && intb <= 122) intb += -32;
-
- } else if (zcode == 233 || zcode == 169) {
- /* EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or
- upper case 'Z'. */
- if (inta >= 129 && inta <= 137 || inta >= 145 && inta <= 153 || inta
- >= 162 && inta <= 169)
- inta += 64;
- if (intb >= 129 && intb <= 137 || intb >= 145 && intb <= 153 || intb
- >= 162 && intb <= 169)
- intb += 64;
- } else if (zcode == 218 || zcode == 250) {
- /* ASCII is assumed, on Prime machines - ZCODE is the ASCII code
- plus 128 of either lower or upper case 'Z'. */
- if (inta >= 225 && inta <= 250) inta += -32;
- if (intb >= 225 && intb <= 250) intb += -32;
- }
- ret_val = inta == intb;
- return ret_val;
-
-} /* lsame_ */
diff --git a/SRC/mark_relax.c b/SRC/mark_relax.c
deleted file mode 100644
index b2338aa..0000000
--- a/SRC/mark_relax.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*! @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
deleted file mode 100644
index 4e15d6c..0000000
--- a/SRC/memory.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/*! @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) **/
-
-#include "slu_ddefs.h"
-
-
-#if ( DEBUGlevel>=1 ) /* Debug malloc/free. */
-int superlu_malloc_total = 0;
-
-#define PAD_FACTOR 2
-#define DWORD (sizeof(double)) /* Be sure it's no smaller than double. */
-/* size_t is usually defined as 'unsigned long' */
-
-void *superlu_malloc(size_t size)
-{
- char *buf;
-
- buf = (char *) malloc(size + DWORD);
- if ( !buf ) {
- printf("superlu_malloc fails: malloc_total %.0f MB, size %ld\n",
- superlu_malloc_total*1e-6, size);
- ABORT("superlu_malloc: out of memory");
- }
-
- ((int_t *) buf)[0] = size;
-#if 0
- superlu_malloc_total += size + DWORD;
-#else
- superlu_malloc_total += size;
-#endif
- return (void *) (buf + DWORD);
-}
-
-void superlu_free(void *addr)
-{
- char *p = ((char *) addr) - DWORD;
-
- if ( !addr )
- ABORT("superlu_free: tried to free NULL pointer");
-
- if ( !p )
- ABORT("superlu_free: tried to free NULL+DWORD pointer");
-
- {
- int_t n = ((int_t *) p)[0];
-
- if ( !n )
- ABORT("superlu_free: tried to free a freed pointer");
- *((int_t *) p) = 0; /* Set to zero to detect duplicate free's. */
-#if 0
- superlu_malloc_total -= (n + DWORD);
-#else
- superlu_malloc_total -= n;
-#endif
-
- if ( superlu_malloc_total < 0 )
- ABORT("superlu_malloc_total went negative!");
-
- /*free (addr);*/
- free (p);
- }
-
-}
-
-#else /* production mode */
-
-void *superlu_malloc(size_t size)
-{
- void *buf;
- buf = (void *) malloc(size);
- return (buf);
-}
-
-void superlu_free(void *addr)
-{
- free (addr);
-}
-
-#endif
-
-
-/*! \brief Set up pointers for integer working arrays.
- */
-void
-SetIWork(int m, int n, int panel_size, int *iworkptr, int **segrep,
- int **parent, int **xplore, int **repfnz, int **panel_lsub,
- int **xprune, int **marker)
-{
- *segrep = iworkptr;
- *parent = iworkptr + m;
- *xplore = *parent + m;
- *repfnz = *xplore + m;
- *panel_lsub = *repfnz + panel_size * m;
- *xprune = *panel_lsub + panel_size * m;
- *marker = *xprune + n;
- ifill (*repfnz, m * panel_size, EMPTY);
- ifill (*panel_lsub, m * panel_size, EMPTY);
-}
-
-
-void
-copy_mem_int(int howmany, void *old, void *new)
-{
- register int i;
- int *iold = old;
- int *inew = new;
- for (i = 0; i < howmany; i++) inew[i] = iold[i];
-}
-
-
-void
-user_bcopy(char *src, char *dest, int bytes)
-{
- char *s_ptr, *d_ptr;
-
- s_ptr = src + bytes - 1;
- d_ptr = dest + bytes - 1;
- for (; d_ptr >= dest; --s_ptr, --d_ptr ) *d_ptr = *s_ptr;
-}
-
-
-
-int *intMalloc(int n)
-{
- int *buf;
- buf = (int *) SUPERLU_MALLOC((size_t) n * sizeof(int));
- if ( !buf ) {
- ABORT("SUPERLU_MALLOC fails for buf in intMalloc()");
- }
- return (buf);
-}
-
-int *intCalloc(int n)
-{
- int *buf;
- register int i;
- buf = (int *) SUPERLU_MALLOC(n * sizeof(int));
- if ( !buf ) {
- ABORT("SUPERLU_MALLOC fails for buf in intCalloc()");
- }
- for (i = 0; i < n; ++i) buf[i] = 0;
- return (buf);
-}
-
-
-
-#if 0
-check_expanders()
-{
- int p;
- printf("Check expanders:\n");
- for (p = 0; p < NO_MEMTYPE; p++) {
- printf("type %d, size %d, mem %d\n",
- p, expanders[p].size, (int)expanders[p].mem);
- }
-
- return 0;
-}
-
-
-StackInfo()
-{
- printf("Stack: size %d, used %d, top1 %d, top2 %d\n",
- stack.size, stack.used, stack.top1, stack.top2);
- return 0;
-}
-
-
-
-PrintStack(char *msg, GlobalLU_t *Glu)
-{
- int i;
- int *xlsub, *lsub, *xusub, *usub;
-
- xlsub = Glu->xlsub;
- lsub = Glu->lsub;
- xusub = Glu->xusub;
- usub = Glu->usub;
-
- printf("%s\n", msg);
-
-/* printf("\nUCOL: ");
- for (i = 0; i < xusub[ndim]; ++i)
- printf("%f ", ucol[i]);
-
- printf("\nLSUB: ");
- for (i = 0; i < xlsub[ndim]; ++i)
- printf("%d ", lsub[i]);
-
- printf("\nUSUB: ");
- for (i = 0; i < xusub[ndim]; ++i)
- printf("%d ", usub[i]);
-
- printf("\n");*/
- return 0;
-}
-#endif
-
-
-
diff --git a/SRC/mmd.c b/SRC/mmd.c
deleted file mode 100644
index 05f26ce..0000000
--- a/SRC/mmd.c
+++ /dev/null
@@ -1,1012 +0,0 @@
-
-typedef int shortint;
-
-/* *************************************************************** */
-/* *************************************************************** */
-/* **** GENMMD ..... MULTIPLE MINIMUM EXTERNAL DEGREE **** */
-/* *************************************************************** */
-/* *************************************************************** */
-
-/* AUTHOR - JOSEPH W.H. LIU */
-/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
-
-/* PURPOSE - THIS ROUTINE IMPLEMENTS THE MINIMUM DEGREE */
-/* ALGORITHM. IT MAKES USE OF THE IMPLICIT REPRESENTATION */
-/* OF ELIMINATION GRAPHS BY QUOTIENT GRAPHS, AND THE */
-/* NOTION OF INDISTINGUISHABLE NODES. IT ALSO IMPLEMENTS */
-/* THE MODIFICATIONS BY MULTIPLE ELIMINATION AND MINIMUM */
-/* EXTERNAL DEGREE. */
-/* --------------------------------------------- */
-/* CAUTION - THE ADJACENCY VECTOR ADJNCY WILL BE */
-/* DESTROYED. */
-/* --------------------------------------------- */
-
-/* INPUT PARAMETERS - */
-/* NEQNS - NUMBER OF EQUATIONS. */
-/* (XADJ,ADJNCY) - THE ADJACENCY STRUCTURE. */
-/* DELTA - TOLERANCE VALUE FOR MULTIPLE ELIMINATION. */
-/* MAXINT - MAXIMUM MACHINE REPRESENTABLE (SHORT) INTEGER */
-/* (ANY SMALLER ESTIMATE WILL DO) FOR MARKING */
-/* NODES. */
-
-/* OUTPUT PARAMETERS - */
-/* PERM - THE MINIMUM DEGREE ORDERING. */
-/* INVP - THE INVERSE OF PERM. */
-/* NOFSUB - AN UPPER BOUND ON THE NUMBER OF NONZERO */
-/* SUBSCRIPTS FOR THE COMPRESSED STORAGE SCHEME. */
-
-/* WORKING PARAMETERS - */
-/* DHEAD - VECTOR FOR HEAD OF DEGREE LISTS. */
-/* INVP - USED TEMPORARILY FOR DEGREE FORWARD LINK. */
-/* PERM - USED TEMPORARILY FOR DEGREE BACKWARD LINK. */
-/* QSIZE - VECTOR FOR SIZE OF SUPERNODES. */
-/* LLIST - VECTOR FOR TEMPORARY LINKED LISTS. */
-/* MARKER - A TEMPORARY MARKER VECTOR. */
-
-/* PROGRAM SUBROUTINES - */
-/* MMDELM, MMDINT, MMDNUM, MMDUPD. */
-
-/* *************************************************************** */
-
-/* Subroutine */ int genmmd_(int *neqns, int *xadj, shortint *adjncy,
- shortint *invp, shortint *perm, int *delta, shortint *dhead,
- shortint *qsize, shortint *llist, shortint *marker, int *maxint,
- int *nofsub)
-{
- /* System generated locals */
- int i__1;
-
- /* Local variables */
- static int mdeg, ehead, i, mdlmt, mdnode;
- extern /* Subroutine */ int mmdelm_(int *, int *, shortint *,
- shortint *, shortint *, shortint *, shortint *, shortint *,
- shortint *, int *, int *), mmdupd_(int *, int *,
- int *, shortint *, int *, int *, shortint *, shortint
- *, shortint *, shortint *, shortint *, shortint *, int *,
- int *), mmdint_(int *, int *, shortint *, shortint *,
- shortint *, shortint *, shortint *, shortint *, shortint *),
- mmdnum_(int *, shortint *, shortint *, shortint *);
- static int nextmd, tag, num;
-
-
-/* *************************************************************** */
-
-
-/* *************************************************************** */
-
- /* Parameter adjustments */
- --marker;
- --llist;
- --qsize;
- --dhead;
- --perm;
- --invp;
- --adjncy;
- --xadj;
-
- /* Function Body */
- if (*neqns <= 0) {
- return 0;
- }
-
-/* ------------------------------------------------ */
-/* INITIALIZATION FOR THE MINIMUM DEGREE ALGORITHM. */
-/* ------------------------------------------------ */
- *nofsub = 0;
- mmdint_(neqns, &xadj[1], &adjncy[1], &dhead[1], &invp[1], &perm[1], &
- qsize[1], &llist[1], &marker[1]);
-
-/* ---------------------------------------------- */
-/* NUM COUNTS THE NUMBER OF ORDERED NODES PLUS 1. */
-/* ---------------------------------------------- */
- num = 1;
-
-/* ----------------------------- */
-/* ELIMINATE ALL ISOLATED NODES. */
-/* ----------------------------- */
- nextmd = dhead[1];
-L100:
- if (nextmd <= 0) {
- goto L200;
- }
- mdnode = nextmd;
- nextmd = invp[mdnode];
- marker[mdnode] = *maxint;
- invp[mdnode] = -num;
- ++num;
- goto L100;
-
-L200:
-/* ---------------------------------------- */
-/* SEARCH FOR NODE OF THE MINIMUM DEGREE. */
-/* MDEG IS THE CURRENT MINIMUM DEGREE; */
-/* TAG IS USED TO FACILITATE MARKING NODES. */
-/* ---------------------------------------- */
- if (num > *neqns) {
- goto L1000;
- }
- tag = 1;
- dhead[1] = 0;
- mdeg = 2;
-L300:
- if (dhead[mdeg] > 0) {
- goto L400;
- }
- ++mdeg;
- goto L300;
-L400:
-/* ------------------------------------------------- */
-/* USE VALUE OF DELTA TO SET UP MDLMT, WHICH GOVERNS */
-/* WHEN A DEGREE UPDATE IS TO BE PERFORMED. */
-/* ------------------------------------------------- */
- mdlmt = mdeg + *delta;
- ehead = 0;
-
-L500:
- mdnode = dhead[mdeg];
- if (mdnode > 0) {
- goto L600;
- }
- ++mdeg;
- if (mdeg > mdlmt) {
- goto L900;
- }
- goto L500;
-L600:
-/* ---------------------------------------- */
-/* REMOVE MDNODE FROM THE DEGREE STRUCTURE. */
-/* ---------------------------------------- */
- nextmd = invp[mdnode];
- dhead[mdeg] = nextmd;
- if (nextmd > 0) {
- perm[nextmd] = -mdeg;
- }
- invp[mdnode] = -num;
- *nofsub = *nofsub + mdeg + qsize[mdnode] - 2;
- if (num + qsize[mdnode] > *neqns) {
- goto L1000;
- }
-/* ---------------------------------------------- */
-/* ELIMINATE MDNODE AND PERFORM QUOTIENT GRAPH */
-/* TRANSFORMATION. RESET TAG VALUE IF NECESSARY. */
-/* ---------------------------------------------- */
- ++tag;
- if (tag < *maxint) {
- goto L800;
- }
- tag = 1;
- i__1 = *neqns;
- for (i = 1; i <= i__1; ++i) {
- if (marker[i] < *maxint) {
- marker[i] = 0;
- }
-/* L700: */
- }
-L800:
- mmdelm_(&mdnode, &xadj[1], &adjncy[1], &dhead[1], &invp[1], &perm[1], &
- qsize[1], &llist[1], &marker[1], maxint, &tag);
- num += qsize[mdnode];
- llist[mdnode] = ehead;
- ehead = mdnode;
- if (*delta >= 0) {
- goto L500;
- }
-L900:
-/* ------------------------------------------- */
-/* UPDATE DEGREES OF THE NODES INVOLVED IN THE */
-/* MINIMUM DEGREE NODES ELIMINATION. */
-/* ------------------------------------------- */
- if (num > *neqns) {
- goto L1000;
- }
- mmdupd_(&ehead, neqns, &xadj[1], &adjncy[1], delta, &mdeg, &dhead[1], &
- invp[1], &perm[1], &qsize[1], &llist[1], &marker[1], maxint, &tag)
- ;
- goto L300;
-
-L1000:
- mmdnum_(neqns, &perm[1], &invp[1], &qsize[1]);
- return 0;
-
-} /* genmmd_ */
-
-/* *************************************************************** */
-/* *************************************************************** */
-/* *** MMDINT ..... MULT MINIMUM DEGREE INITIALIZATION *** */
-/* *************************************************************** */
-/* *************************************************************** */
-
-/* AUTHOR - JOSEPH W.H. LIU */
-/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
-
-/* PURPOSE - THIS ROUTINE PERFORMS INITIALIZATION FOR THE */
-/* MULTIPLE ELIMINATION VERSION OF THE MINIMUM DEGREE */
-/* ALGORITHM. */
-
-/* INPUT PARAMETERS - */
-/* NEQNS - NUMBER OF EQUATIONS. */
-/* (XADJ,ADJNCY) - ADJACENCY STRUCTURE. */
-
-/* OUTPUT PARAMETERS - */
-/* (DHEAD,DFORW,DBAKW) - DEGREE DOUBLY LINKED STRUCTURE. */
-/* QSIZE - SIZE OF SUPERNODE (INITIALIZED TO ONE). */
-/* LLIST - LINKED LIST. */
-/* MARKER - MARKER VECTOR. */
-
-/* *************************************************************** */
-
-/* Subroutine */ int mmdint_(int *neqns, int *xadj, shortint *adjncy,
- shortint *dhead, shortint *dforw, shortint *dbakw, shortint *qsize,
- shortint *llist, shortint *marker)
-{
- /* System generated locals */
- int i__1;
-
- /* Local variables */
- static int ndeg, node, fnode;
-
-
-/* *************************************************************** */
-
-
-/* *************************************************************** */
-
- /* Parameter adjustments */
- --marker;
- --llist;
- --qsize;
- --dbakw;
- --dforw;
- --dhead;
- --adjncy;
- --xadj;
-
- /* Function Body */
- i__1 = *neqns;
- for (node = 1; node <= i__1; ++node) {
- dhead[node] = 0;
- qsize[node] = 1;
- marker[node] = 0;
- llist[node] = 0;
-/* L100: */
- }
-/* ------------------------------------------ */
-/* INITIALIZE THE DEGREE DOUBLY LINKED LISTS. */
-/* ------------------------------------------ */
- i__1 = *neqns;
- for (node = 1; node <= i__1; ++node) {
- ndeg = xadj[node + 1] - xadj[node] + 1;
- fnode = dhead[ndeg];
- dforw[node] = fnode;
- dhead[ndeg] = node;
- if (fnode > 0) {
- dbakw[fnode] = node;
- }
- dbakw[node] = -ndeg;
-/* L200: */
- }
- return 0;
-
-} /* mmdint_ */
-
-/* *************************************************************** */
-/* *************************************************************** */
-/* ** MMDELM ..... MULTIPLE MINIMUM DEGREE ELIMINATION *** */
-/* *************************************************************** */
-/* *************************************************************** */
-
-/* AUTHOR - JOSEPH W.H. LIU */
-/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
-
-/* PURPOSE - THIS ROUTINE ELIMINATES THE NODE MDNODE OF */
-/* MINIMUM DEGREE FROM THE ADJACENCY STRUCTURE, WHICH */
-/* IS STORED IN THE QUOTIENT GRAPH FORMAT. IT ALSO */
-/* TRANSFORMS THE QUOTIENT GRAPH REPRESENTATION OF THE */
-/* ELIMINATION GRAPH. */
-
-/* INPUT PARAMETERS - */
-/* MDNODE - NODE OF MINIMUM DEGREE. */
-/* MAXINT - ESTIMATE OF MAXIMUM REPRESENTABLE (SHORT) */
-/* INT. */
-/* TAG - TAG VALUE. */
-
-/* UPDATED PARAMETERS - */
-/* (XADJ,ADJNCY) - UPDATED ADJACENCY STRUCTURE. */
-/* (DHEAD,DFORW,DBAKW) - DEGREE DOUBLY LINKED STRUCTURE. */
-/* QSIZE - SIZE OF SUPERNODE. */
-/* MARKER - MARKER VECTOR. */
-/* LLIST - TEMPORARY LINKED LIST OF ELIMINATED NABORS. */
-
-/* *************************************************************** */
-
-/* Subroutine */ int mmdelm_(int *mdnode, int *xadj, shortint *adjncy,
- shortint *dhead, shortint *dforw, shortint *dbakw, shortint *qsize,
- shortint *llist, shortint *marker, int *maxint, int *tag)
-{
- /* System generated locals */
- int i__1, i__2;
-
- /* Local variables */
- static int node, link, rloc, rlmt, i, j, nabor, rnode, elmnt, xqnbr,
- istop, jstop, istrt, jstrt, nxnode, pvnode, nqnbrs, npv;
-
-
-/* *************************************************************** */
-
-
-/* *************************************************************** */
-
-/* ----------------------------------------------- */
-/* FIND REACHABLE SET AND PLACE IN DATA STRUCTURE. */
-/* ----------------------------------------------- */
- /* Parameter adjustments */
- --marker;
- --llist;
- --qsize;
- --dbakw;
- --dforw;
- --dhead;
- --adjncy;
- --xadj;
-
- /* Function Body */
- marker[*mdnode] = *tag;
- istrt = xadj[*mdnode];
- istop = xadj[*mdnode + 1] - 1;
-/* ------------------------------------------------------- */
-/* ELMNT POINTS TO THE BEGINNING OF THE LIST OF ELIMINATED */
-/* NABORS OF MDNODE, AND RLOC GIVES THE STORAGE LOCATION */
-/* FOR THE NEXT REACHABLE NODE. */
-/* ------------------------------------------------------- */
- elmnt = 0;
- rloc = istrt;
- rlmt = istop;
- i__1 = istop;
- for (i = istrt; i <= i__1; ++i) {
- nabor = adjncy[i];
- if (nabor == 0) {
- goto L300;
- }
- if (marker[nabor] >= *tag) {
- goto L200;
- }
- marker[nabor] = *tag;
- if (dforw[nabor] < 0) {
- goto L100;
- }
- adjncy[rloc] = nabor;
- ++rloc;
- goto L200;
-L100:
- llist[nabor] = elmnt;
- elmnt = nabor;
-L200:
- ;
- }
-L300:
-/* ----------------------------------------------------- */
-/* MERGE WITH REACHABLE NODES FROM GENERALIZED ELEMENTS. */
-/* ----------------------------------------------------- */
- if (elmnt <= 0) {
- goto L1000;
- }
- adjncy[rlmt] = -elmnt;
- link = elmnt;
-L400:
- jstrt = xadj[link];
- jstop = xadj[link + 1] - 1;
- i__1 = jstop;
- for (j = jstrt; j <= i__1; ++j) {
- node = adjncy[j];
- link = -node;
- if (node < 0) {
- goto L400;
- } else if (node == 0) {
- goto L900;
- } else {
- goto L500;
- }
-L500:
- if (marker[node] >= *tag || dforw[node] < 0) {
- goto L800;
- }
- marker[node] = *tag;
-/* --------------------------------- */
-/* USE STORAGE FROM ELIMINATED NODES */
-/* IF NECESSARY. */
-/* --------------------------------- */
-L600:
- if (rloc < rlmt) {
- goto L700;
- }
- link = -adjncy[rlmt];
- rloc = xadj[link];
- rlmt = xadj[link + 1] - 1;
- goto L600;
-L700:
- adjncy[rloc] = node;
- ++rloc;
-L800:
- ;
- }
-L900:
- elmnt = llist[elmnt];
- goto L300;
-L1000:
- if (rloc <= rlmt) {
- adjncy[rloc] = 0;
- }
-/* -------------------------------------------------------- */
-/* FOR EACH NODE IN THE REACHABLE SET, DO THE FOLLOWING ... */
-/* -------------------------------------------------------- */
- link = *mdnode;
-L1100:
- istrt = xadj[link];
- istop = xadj[link + 1] - 1;
- i__1 = istop;
- for (i = istrt; i <= i__1; ++i) {
- rnode = adjncy[i];
- link = -rnode;
- if (rnode < 0) {
- goto L1100;
- } else if (rnode == 0) {
- goto L1800;
- } else {
- goto L1200;
- }
-L1200:
-/* -------------------------------------------- */
-/* IF RNODE IS IN THE DEGREE LIST STRUCTURE ... */
-/* -------------------------------------------- */
- pvnode = dbakw[rnode];
- if (pvnode == 0 || pvnode == -(*maxint)) {
- goto L1300;
- }
-/* ------------------------------------- */
-/* THEN REMOVE RNODE FROM THE STRUCTURE. */
-/* ------------------------------------- */
- nxnode = dforw[rnode];
- if (nxnode > 0) {
- dbakw[nxnode] = pvnode;
- }
- if (pvnode > 0) {
- dforw[pvnode] = nxnode;
- }
- npv = -pvnode;
- if (pvnode < 0) {
- dhead[npv] = nxnode;
- }
-L1300:
-/* ---------------------------------------- */
-/* PURGE INACTIVE QUOTIENT NABORS OF RNODE. */
-/* ---------------------------------------- */
- jstrt = xadj[rnode];
- jstop = xadj[rnode + 1] - 1;
- xqnbr = jstrt;
- i__2 = jstop;
- for (j = jstrt; j <= i__2; ++j) {
- nabor = adjncy[j];
- if (nabor == 0) {
- goto L1500;
- }
- if (marker[nabor] >= *tag) {
- goto L1400;
- }
- adjncy[xqnbr] = nabor;
- ++xqnbr;
-L1400:
- ;
- }
-L1500:
-/* ---------------------------------------- */
-/* IF NO ACTIVE NABOR AFTER THE PURGING ... */
-/* ---------------------------------------- */
- nqnbrs = xqnbr - jstrt;
- if (nqnbrs > 0) {
- goto L1600;
- }
-/* ----------------------------- */
-/* THEN MERGE RNODE WITH MDNODE. */
-/* ----------------------------- */
- qsize[*mdnode] += qsize[rnode];
- qsize[rnode] = 0;
- marker[rnode] = *maxint;
- dforw[rnode] = -(*mdnode);
- dbakw[rnode] = -(*maxint);
- goto L1700;
-L1600:
-/* -------------------------------------- */
-/* ELSE FLAG RNODE FOR DEGREE UPDATE, AND */
-/* ADD MDNODE AS A NABOR OF RNODE. */
-/* -------------------------------------- */
- dforw[rnode] = nqnbrs + 1;
- dbakw[rnode] = 0;
- adjncy[xqnbr] = *mdnode;
- ++xqnbr;
- if (xqnbr <= jstop) {
- adjncy[xqnbr] = 0;
- }
-
-L1700:
- ;
- }
-L1800:
- return 0;
-
-} /* mmdelm_ */
-
-/* *************************************************************** */
-/* *************************************************************** */
-/* ***** MMDUPD ..... MULTIPLE MINIMUM DEGREE UPDATE ***** */
-/* *************************************************************** */
-/* *************************************************************** */
-
-/* AUTHOR - JOSEPH W.H. LIU */
-/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
-
-/* PURPOSE - THIS ROUTINE UPDATES THE DEGREES OF NODES */
-/* AFTER A MULTIPLE ELIMINATION STEP. */
-
-/* INPUT PARAMETERS - */
-/* EHEAD - THE BEGINNING OF THE LIST OF ELIMINATED */
-/* NODES (I.E., NEWLY FORMED ELEMENTS). */
-/* NEQNS - NUMBER OF EQUATIONS. */
-/* (XADJ,ADJNCY) - ADJACENCY STRUCTURE. */
-/* DELTA - TOLERANCE VALUE FOR MULTIPLE ELIMINATION. */
-/* MAXINT - MAXIMUM MACHINE REPRESENTABLE (SHORT) */
-/* INTEGER. */
-
-/* UPDATED PARAMETERS - */
-/* MDEG - NEW MINIMUM DEGREE AFTER DEGREE UPDATE. */
-/* (DHEAD,DFORW,DBAKW) - DEGREE DOUBLY LINKED STRUCTURE. */
-/* QSIZE - SIZE OF SUPERNODE. */
-/* LLIST - WORKING LINKED LIST. */
-/* MARKER - MARKER VECTOR FOR DEGREE UPDATE. */
-/* TAG - TAG VALUE. */
-
-/* *************************************************************** */
-
-/* Subroutine */ int mmdupd_(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)
-{
- /* System generated locals */
- int i__1, i__2;
-
- /* Local variables */
- static int node, mtag, link, mdeg0, i, j, enode, fnode, nabor, elmnt,
- istop, jstop, q2head, istrt, jstrt, qxhead, iq2, deg, deg0;
-
-
-/* *************************************************************** */
-
-
-/* *************************************************************** */
-
- /* Parameter adjustments */
- --marker;
- --llist;
- --qsize;
- --dbakw;
- --dforw;
- --dhead;
- --adjncy;
- --xadj;
-
- /* Function Body */
- mdeg0 = *mdeg + *delta;
- elmnt = *ehead;
-L100:
-/* ------------------------------------------------------- */
-/* FOR EACH OF THE NEWLY FORMED ELEMENT, DO THE FOLLOWING. */
-/* (RESET TAG VALUE IF NECESSARY.) */
-/* ------------------------------------------------------- */
- if (elmnt <= 0) {
- return 0;
- }
- mtag = *tag + mdeg0;
- if (mtag < *maxint) {
- goto L300;
- }
- *tag = 1;
- i__1 = *neqns;
- for (i = 1; i <= i__1; ++i) {
- if (marker[i] < *maxint) {
- marker[i] = 0;
- }
-/* L200: */
- }
- mtag = *tag + mdeg0;
-L300:
-/* --------------------------------------------- */
-/* CREATE TWO LINKED LISTS FROM NODES ASSOCIATED */
-/* WITH ELMNT: ONE WITH TWO NABORS (Q2HEAD) IN */
-/* ADJACENCY STRUCTURE, AND THE OTHER WITH MORE */
-/* THAN TWO NABORS (QXHEAD). ALSO COMPUTE DEG0, */
-/* NUMBER OF NODES IN THIS ELEMENT. */
-/* --------------------------------------------- */
- q2head = 0;
- qxhead = 0;
- deg0 = 0;
- link = elmnt;
-L400:
- istrt = xadj[link];
- istop = xadj[link + 1] - 1;
- i__1 = istop;
- for (i = istrt; i <= i__1; ++i) {
- enode = adjncy[i];
- link = -enode;
- if (enode < 0) {
- goto L400;
- } else if (enode == 0) {
- goto L800;
- } else {
- goto L500;
- }
-
-L500:
- if (qsize[enode] == 0) {
- goto L700;
- }
- deg0 += qsize[enode];
- marker[enode] = mtag;
-/* ---------------------------------- */
-/* IF ENODE REQUIRES A DEGREE UPDATE, */
-/* THEN DO THE FOLLOWING. */
-/* ---------------------------------- */
- if (dbakw[enode] != 0) {
- goto L700;
- }
-/* ---------------------------------------
-*/
-/* PLACE EITHER IN QXHEAD OR Q2HEAD LISTS.
-*/
-/* ---------------------------------------
-*/
- if (dforw[enode] == 2) {
- goto L600;
- }
- llist[enode] = qxhead;
- qxhead = enode;
- goto L700;
-L600:
- llist[enode] = q2head;
- q2head = enode;
-L700:
- ;
- }
-L800:
-/* -------------------------------------------- */
-/* FOR EACH ENODE IN Q2 LIST, DO THE FOLLOWING. */
-/* -------------------------------------------- */
- enode = q2head;
- iq2 = 1;
-L900:
- if (enode <= 0) {
- goto L1500;
- }
- if (dbakw[enode] != 0) {
- goto L2200;
- }
- ++(*tag);
- deg = deg0;
-/* ------------------------------------------ */
-/* IDENTIFY THE OTHER ADJACENT ELEMENT NABOR. */
-/* ------------------------------------------ */
- istrt = xadj[enode];
- nabor = adjncy[istrt];
- if (nabor == elmnt) {
- nabor = adjncy[istrt + 1];
- }
-/* ------------------------------------------------ */
-/* IF NABOR IS UNELIMINATED, INCREASE DEGREE COUNT. */
-/* ------------------------------------------------ */
- link = nabor;
- if (dforw[nabor] < 0) {
- goto L1000;
- }
- deg += qsize[nabor];
- goto L2100;
-L1000:
-/* -------------------------------------------- */
-/* OTHERWISE, FOR EACH NODE IN THE 2ND ELEMENT, */
-/* DO THE FOLLOWING. */
-/* -------------------------------------------- */
- istrt = xadj[link];
- istop = xadj[link + 1] - 1;
- i__1 = istop;
- for (i = istrt; i <= i__1; ++i) {
- node = adjncy[i];
- link = -node;
- if (node == enode) {
- goto L1400;
- }
- if (node < 0) {
- goto L1000;
- } else if (node == 0) {
- goto L2100;
- } else {
- goto L1100;
- }
-
-L1100:
- if (qsize[node] == 0) {
- goto L1400;
- }
- if (marker[node] >= *tag) {
- goto L1200;
- }
-/* -----------------------------------
--- */
-/* CASE WHEN NODE IS NOT YET CONSIDERED
-. */
-/* -----------------------------------
--- */
- marker[node] = *tag;
- deg += qsize[node];
- goto L1400;
-L1200:
-/* ----------------------------------------
- */
-/* CASE WHEN NODE IS INDISTINGUISHABLE FROM
- */
-/* ENODE. MERGE THEM INTO A NEW SUPERNODE.
- */
-/* ----------------------------------------
- */
- if (dbakw[node] != 0) {
- goto L1400;
- }
- if (dforw[node] != 2) {
- goto L1300;
- }
- qsize[enode] += qsize[node];
- qsize[node] = 0;
- marker[node] = *maxint;
- dforw[node] = -enode;
- dbakw[node] = -(*maxint);
- goto L1400;
-L1300:
-/* --------------------------------------
-*/
-/* CASE WHEN NODE IS OUTMATCHED BY ENODE.
-*/
-/* --------------------------------------
-*/
- if (dbakw[node] == 0) {
- dbakw[node] = -(*maxint);
- }
-L1400:
- ;
- }
- goto L2100;
-L1500:
-/* ------------------------------------------------ */
-/* FOR EACH ENODE IN THE QX LIST, DO THE FOLLOWING. */
-/* ------------------------------------------------ */
- enode = qxhead;
- iq2 = 0;
-L1600:
- if (enode <= 0) {
- goto L2300;
- }
- if (dbakw[enode] != 0) {
- goto L2200;
- }
- ++(*tag);
- deg = deg0;
-/* --------------------------------- */
-/* FOR EACH UNMARKED NABOR OF ENODE, */
-/* DO THE FOLLOWING. */
-/* --------------------------------- */
- istrt = xadj[enode];
- istop = xadj[enode + 1] - 1;
- i__1 = istop;
- for (i = istrt; i <= i__1; ++i) {
- nabor = adjncy[i];
- if (nabor == 0) {
- goto L2100;
- }
- if (marker[nabor] >= *tag) {
- goto L2000;
- }
- marker[nabor] = *tag;
- link = nabor;
-/* ------------------------------ */
-/* IF UNELIMINATED, INCLUDE IT IN */
-/* DEG COUNT. */
-/* ------------------------------ */
- if (dforw[nabor] < 0) {
- goto L1700;
- }
- deg += qsize[nabor];
- goto L2000;
-L1700:
-/* -------------------------------
-*/
-/* IF ELIMINATED, INCLUDE UNMARKED
-*/
-/* NODES IN THIS ELEMENT INTO THE
-*/
-/* DEGREE COUNT. */
-/* -------------------------------
-*/
- jstrt = xadj[link];
- jstop = xadj[link + 1] - 1;
- i__2 = jstop;
- for (j = jstrt; j <= i__2; ++j) {
- node = adjncy[j];
- link = -node;
- if (node < 0) {
- goto L1700;
- } else if (node == 0) {
- goto L2000;
- } else {
- goto L1800;
- }
-
-L1800:
- if (marker[node] >= *tag) {
- goto L1900;
- }
- marker[node] = *tag;
- deg += qsize[node];
-L1900:
- ;
- }
-L2000:
- ;
- }
-L2100:
-/* ------------------------------------------- */
-/* UPDATE EXTERNAL DEGREE OF ENODE IN DEGREE */
-/* STRUCTURE, AND MDEG (MIN DEG) IF NECESSARY. */
-/* ------------------------------------------- */
- deg = deg - qsize[enode] + 1;
- fnode = dhead[deg];
- dforw[enode] = fnode;
- dbakw[enode] = -deg;
- if (fnode > 0) {
- dbakw[fnode] = enode;
- }
- dhead[deg] = enode;
- if (deg < *mdeg) {
- *mdeg = deg;
- }
-L2200:
-/* ---------------------------------- */
-/* GET NEXT ENODE IN CURRENT ELEMENT. */
-/* ---------------------------------- */
- enode = llist[enode];
- if (iq2 == 1) {
- goto L900;
- }
- goto L1600;
-L2300:
-/* ----------------------------- */
-/* GET NEXT ELEMENT IN THE LIST. */
-/* ----------------------------- */
- *tag = mtag;
- elmnt = llist[elmnt];
- goto L100;
-
-} /* mmdupd_ */
-
-/* *************************************************************** */
-/* *************************************************************** */
-/* ***** MMDNUM ..... MULTI MINIMUM DEGREE NUMBERING ***** */
-/* *************************************************************** */
-/* *************************************************************** */
-
-/* AUTHOR - JOSEPH W.H. LIU */
-/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
-
-/* PURPOSE - THIS ROUTINE PERFORMS THE FINAL STEP IN */
-/* PRODUCING THE PERMUTATION AND INVERSE PERMUTATION */
-/* VECTORS IN THE MULTIPLE ELIMINATION VERSION OF THE */
-/* MINIMUM DEGREE ORDERING ALGORITHM. */
-
-/* INPUT PARAMETERS - */
-/* NEQNS - NUMBER OF EQUATIONS. */
-/* QSIZE - SIZE OF SUPERNODES AT ELIMINATION. */
-
-/* UPDATED PARAMETERS - */
-/* INVP - INVERSE PERMUTATION VECTOR. ON INPUT, */
-/* IF QSIZE(NODE)=0, THEN NODE HAS BEEN MERGED */
-/* INTO THE NODE -INVP(NODE); OTHERWISE, */
-/* -INVP(NODE) IS ITS INVERSE LABELLING. */
-
-/* OUTPUT PARAMETERS - */
-/* PERM - THE PERMUTATION VECTOR. */
-
-/* *************************************************************** */
-
-/* Subroutine */ int mmdnum_(int *neqns, shortint *perm, shortint *invp,
- shortint *qsize)
-{
- /* System generated locals */
- int i__1;
-
- /* Local variables */
- static int node, root, nextf, father, nqsize, num;
-
-
-/* *************************************************************** */
-
-
-/* *************************************************************** */
-
- /* Parameter adjustments */
- --qsize;
- --invp;
- --perm;
-
- /* Function Body */
- i__1 = *neqns;
- for (node = 1; node <= i__1; ++node) {
- nqsize = qsize[node];
- if (nqsize <= 0) {
- perm[node] = invp[node];
- }
- if (nqsize > 0) {
- perm[node] = -invp[node];
- }
-/* L100: */
- }
-/* ------------------------------------------------------ */
-/* FOR EACH NODE WHICH HAS BEEN MERGED, DO THE FOLLOWING. */
-/* ------------------------------------------------------ */
- i__1 = *neqns;
- for (node = 1; node <= i__1; ++node) {
- if (perm[node] > 0) {
- goto L500;
- }
-/* ----------------------------------------- */
-/* TRACE THE MERGED TREE UNTIL ONE WHICH HAS */
-/* NOT BEEN MERGED, CALL IT ROOT. */
-/* ----------------------------------------- */
- father = node;
-L200:
- if (perm[father] > 0) {
- goto L300;
- }
- father = -perm[father];
- goto L200;
-L300:
-/* ----------------------- */
-/* NUMBER NODE AFTER ROOT. */
-/* ----------------------- */
- root = father;
- num = perm[root] + 1;
- invp[node] = -num;
- perm[root] = num;
-/* ------------------------ */
-/* SHORTEN THE MERGED TREE. */
-/* ------------------------ */
- father = node;
-L400:
- nextf = -perm[father];
- if (nextf <= 0) {
- goto L500;
- }
- perm[father] = -root;
- father = nextf;
- goto L400;
-L500:
- ;
- }
-/* ---------------------- */
-/* READY TO COMPUTE PERM. */
-/* ---------------------- */
- i__1 = *neqns;
- for (node = 1; node <= i__1; ++node) {
- num = -invp[node];
- invp[node] = num;
- perm[num] = node;
-/* L600: */
- }
- return 0;
-
-} /* mmdnum_ */
-
diff --git a/SRC/qselect.c b/SRC/qselect.c
deleted file mode 100755
index 60d77e4..0000000
--- a/SRC/qselect.c
+++ /dev/null
@@ -1,74 +0,0 @@
-
-/*! @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
deleted file mode 100644
index f666b6e..0000000
--- a/SRC/relax_snode.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*! @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>
- */
-
-#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,
- 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 */
- )
-{
-
- register int j, parent;
- register int snode_start; /* beginning of a snode */
-
- ifill (relax_end, 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 = 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++;
- /* Search for a new leaf */
- while ( descendants[j] != 0 && j < n ) j++;
- }
-
- /*printf("No of relaxed snodes: %d; relaxed columns: %d\n",
- nsuper, no_relaxed_col); */
-}
diff --git a/SRC/scolumn_bmod.c b/SRC/scolumn_bmod.c
deleted file mode 100644
index c1839d3..0000000
--- a/SRC/scolumn_bmod.c
+++ /dev/null
@@ -1,352 +0,0 @@
-
-/*! @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.
- * </pre>
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "slu_sdefs.h"
-
-/*
- * Function prototypes
- */
-void susolve(int, int, float*, float*);
-void slsolve(int, int, float*, float*);
-void smatvec(int, int, int, float*, float*, float*);
-
-
-
-/*! \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 (
- const int jcol, /* in */
- const int nseg, /* in */
- float *dense, /* in */
- float *tempv, /* working array */
- int *segrep, /* in */
- int *repfnz, /* in */
- int fpanelc, /* in -- first column in the current panel */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- float alpha, beta;
-
- /* krep = representative of current k-th supernode
- * fsupc = first supernodal column
- * nsupc = no of columns in supernode
- * nsupr = no of rows in supernode (used as leading dimension)
- * luptr = location of supernodal LU-block in storage
- * kfnz = first nonz in the k-th supernodal segment
- * no_zeros = no of leading zeros in a supernodal U-segment
- */
- float ukj, ukj1, ukj2;
- int luptr, luptr1, luptr2;
- int fsupc, nsupc, nsupr, segsze;
- int nrow; /* No of rows in the matrix of matrix-vector */
- int jcolp1, jsupno, k, ksub, krep, krep_ind, ksupno;
- register int lptr, kfnz, isub, irow, i;
- register int no_zeros, new_next;
- int ufirst, nextlu;
- int fst_col; /* First column within small LU update */
- int d_fsupc; /* Distance between the first column of the current
- panel and the first column of the current snode. */
- int *xsup, *supno;
- int *lsub, *xlsub;
- float *lusup;
- int *xlusup;
- int nzlumax;
- float *tempv1;
- float zero = 0.0;
- float one = 1.0;
- float none = -1.0;
- int mem_error;
- flops_t *ops = stat->ops;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
- nzlumax = Glu->nzlumax;
- jcolp1 = jcol + 1;
- jsupno = supno[jcol];
-
- /*
- * For each nonz supernode segment of U[*,j] in topological order
- */
- k = nseg - 1;
- for (ksub = 0; ksub < nseg; ksub++) {
-
- krep = segrep[k];
- k--;
- ksupno = supno[krep];
- if ( jsupno != ksupno ) { /* Outside the rectangular supernode */
-
- fsupc = xsup[ksupno];
- fst_col = SUPERLU_MAX ( fsupc, fpanelc );
-
- /* Distance from the current supernode to the current panel;
- d_fsupc=0 if fsupc > fpanelc. */
- d_fsupc = fst_col - fsupc;
-
- luptr = xlusup[fst_col] + d_fsupc;
- lptr = xlsub[fsupc] + d_fsupc;
-
- kfnz = repfnz[krep];
- kfnz = SUPERLU_MAX ( kfnz, fpanelc );
-
- segsze = krep - kfnz + 1;
- nsupc = krep - fst_col + 1;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
- nrow = nsupr - d_fsupc - nsupc;
- krep_ind = lptr + nsupc - 1;
-
- ops[TRSV] += segsze * (segsze - 1);
- ops[GEMV] += 2 * nrow * segsze;
-
-
- /*
- * Case 1: Update U-segment of size 1 -- col-col update
- */
- if ( segsze == 1 ) {
- ukj = dense[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- dense[irow] -= ukj*lusup[luptr];
- luptr++;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- ukj1 = dense[lsub[krep_ind - 1]];
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) { /* Case 2: 2cols-col update */
- ukj -= ukj1 * lusup[luptr1];
- dense[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++;
- luptr1++;
- dense[irow] -= ( ukj*lusup[luptr]
- + ukj1*lusup[luptr1] );
- }
- } else { /* Case 3: 3cols-col update */
- ukj2 = dense[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- ukj1 -= ukj2 * lusup[luptr2-1];
- ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
- dense[lsub[krep_ind]] = ukj;
- dense[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++;
- luptr1++;
- luptr2++;
- dense[irow] -= ( ukj*lusup[luptr]
- + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
- }
- }
-
-
-
- } else {
- /*
- * Case: sup-col update
- * Perform a triangular solve and block update,
- * then scatter the result of sup-col update to dense
- */
-
- no_zeros = kfnz - fst_col;
-
- /* Copy U[*,j] segment from dense[*] to tempv[*] */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- tempv[i] = dense[irow];
- ++isub;
- }
-
- /* Dense triangular solve -- start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#else
- strsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#endif
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- SGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#else
- sgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#endif
-#else
- slsolve ( nsupr, segsze, &lusup[luptr], tempv );
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- smatvec (nsupr, nrow , segsze, &lusup[luptr], tempv, tempv1);
-#endif
-
-
- /* Scatter tempv[] into SPA dense[] as a temporary storage */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense[irow] = tempv[i];
- tempv[i] = zero;
- ++isub;
- }
-
- /* Scatter tempv1[] into SPA dense[] */
- for (i = 0; i < nrow; i++) {
- irow = lsub[isub];
- dense[irow] -= tempv1[i];
- tempv1[i] = zero;
- ++isub;
- }
- }
-
- } /* if jsupno ... */
-
- } /* for each segment... */
-
- /*
- * Process the supernodal portion of L\U[*,j]
- */
- nextlu = xlusup[jcol];
- fsupc = xsup[jsupno];
-
- /* Copy the SPA dense into L\U[*,j] */
- new_next = nextlu + xlsub[fsupc+1] - xlsub[fsupc];
- while ( new_next > nzlumax ) {
- if (mem_error = sLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, Glu))
- return (mem_error);
- lusup = Glu->lusup;
- lsub = Glu->lsub;
- }
-
- for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
- irow = lsub[isub];
- lusup[nextlu] = dense[irow];
- dense[irow] = zero;
- ++nextlu;
- }
-
- xlusup[jcolp1] = nextlu; /* Close L\U[*,jcol] */
-
- /* For more updates within the panel (also within the current supernode),
- * should start from the first column of the panel, or the first column
- * of the supernode, whichever is bigger. There are 2 cases:
- * 1) fsupc < fpanelc, then fst_col := fpanelc
- * 2) fsupc >= fpanelc, then fst_col := fsupc
- */
- fst_col = SUPERLU_MAX ( fsupc, fpanelc );
-
- if ( fst_col < jcol ) {
-
- /* Distance between the current supernode and the current panel.
- d_fsupc=0 if fsupc >= fpanelc. */
- d_fsupc = fst_col - fsupc;
-
- lptr = xlsub[fsupc] + d_fsupc;
- luptr = xlusup[fst_col] + d_fsupc;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
- nsupc = jcol - fst_col; /* Excluding jcol */
- nrow = nsupr - d_fsupc - nsupc;
-
- /* Points to the beginning of jcol in snode L\U(jsupno) */
- ufirst = xlusup[jcol] + d_fsupc;
-
- ops[TRSV] += nsupc * (nsupc - 1);
- ops[GEMV] += 2 * nrow * nsupc;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr],
- &nsupr, &lusup[ufirst], &incx );
-#else
- strsv_( "L", "N", "U", &nsupc, &lusup[luptr],
- &nsupr, &lusup[ufirst], &incx );
-#endif
-
- alpha = none; beta = one; /* y := beta*y + alpha*A*x */
-
-#ifdef _CRAY
- SGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#else
- sgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#endif
-#else
- slsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
-
- smatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
- &lusup[ufirst], tempv );
-
- /* Copy updates from tempv[*] into lusup[*] */
- isub = ufirst + nsupc;
- for (i = 0; i < nrow; i++) {
- lusup[isub] -= tempv[i];
- tempv[i] = 0.0;
- ++isub;
- }
-
-#endif
-
-
- } /* if fst_col < jcol ... */
-
- return 0;
-}
diff --git a/SRC/scolumn_dfs.c b/SRC/scolumn_dfs.c
deleted file mode 100644
index 4a412ab..0000000
--- a/SRC/scolumn_dfs.c
+++ /dev/null
@@ -1,275 +0,0 @@
-
-/*! @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.
- * </pre>
-*/
-
-#include "slu_sdefs.h"
-
-/*! \brief What type of supernodes we want */
-#define T2_SUPER
-
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- * 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
- * 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 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.
- *
- * 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.
- *
- * 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
- *
- * Return value
- * ============
- * 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 */
- int fsupc; /* First column of a snode */
- int myfnz; /* First nonz column of a U-segment */
- int chperm, chmark, chrep, kchild;
- int xdfs, maxdfs, kpar, oldrep;
- int jptr, jm1ptr;
- int ito, ifrom, istop; /* 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;
- xlsub = Glu->xlsub;
- nzlmax = Glu->nzlmax;
-
- if ( first ) {
- maxsuper = sp_ienv(3);
- first = 0;
- }
- jcolp1 = jcol + 1;
- jcolm1 = jcol - 1;
- nsuper = supno[jcol];
- jsuper = nsuper;
- nextl = xlsub[jcol];
- marker2 = &marker[2*m];
-
-
- /* For each nonzero in A[*,jcol] do dfs */
- for (k = 0; lsub_col[k] != EMPTY; k++) {
-
- krow = lsub_col[k];
- lsub_col[k] = EMPTY;
- kmark = marker2[krow];
-
- /* krow was visited before, go to the next nonz */
- if ( kmark == jcol ) continue;
-
- /* For each unmarked nbr krow of jcol
- * krow is in L: place it in structure of L[*,jcol]
- */
- marker2[krow] = jcol;
- kperm = perm_r[krow];
-
- if ( kperm == EMPTY ) {
- lsub[nextl++] = krow; /* krow is indexed into A */
- if ( nextl >= nzlmax ) {
- 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 {
- /* krow is in U: if its supernode-rep krep
- * has been explored, update repfnz[*]
- */
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz[krep];
-
- if ( myfnz != EMPTY ) { /* Visited before */
- 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];
-
- do {
- /*
- * For each unmarked kchild of krep
- */
- while ( xdfs < maxdfs ) {
-
- kchild = lsub[xdfs];
- xdfs++;
- chmark = marker2[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;
- if ( nextl >= nzlmax ) {
- 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 */
- if ( myfnz > 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) */
- parent[krep] = oldrep;
- repfnz[krep] = chperm;
- xdfs = xlsub[krep];
- maxdfs = xprune[krep];
- } /* else */
-
- } /* else */
-
- } /* if */
-
- } /* while */
-
- /* krow has no more unexplored nbrs;
- * place supernode-rep krep in postorder DFS.
- * backtrack dfs to its parent
- */
- segrep[*nseg] = krep;
- ++(*nseg);
- kpar = parent[krep]; /* Pop from stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- maxdfs = xprune[krep];
-
- } while ( kpar != EMPTY ); /* Until empty stack */
-
- } /* else */
-
- } /* else */
-
- } /* for each nonzero ... */
-
- /* Check to see if j belongs in the same supernode as j-1 */
- if ( jcol == 0 ) { /* Do nothing for column 0 */
- nsuper = supno[0] = 0;
- } else {
- fsupc = xsup[nsuper];
- jptr = xlsub[jcol]; /* Not compressed yet */
- jm1ptr = xlsub[jcolm1];
-
-#ifdef T2_SUPER
- if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-#endif
- /* 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)
- */
- if ( jsuper == EMPTY ) { /* starts a new supernode */
- if ( (fsupc < jcolm1-1) ) { /* >= 3 columns in nsuper */
-#ifdef CHK_COMPRESS
- printf(" Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
-#endif
- 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)
- lsub[ito] = lsub[ifrom];
- nextl = ito; /* = istop + length(jcol) */
- }
- nsuper++;
- supno[jcol] = nsuper;
- } /* if a new supernode */
-
- } /* 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/scomplex.c b/SRC/scomplex.c
deleted file mode 100644
index 2f78c07..0000000
--- a/SRC/scomplex.c
+++ /dev/null
@@ -1,147 +0,0 @@
-
-/*! @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"
-
-
-/*! \brief Complex Division c = a/b */
-void c_div(complex *c, complex *a, complex *b)
-{
- float ratio, den;
- float abr, abi, cr, ci;
-
- if( (abr = b->r) < 0.)
- abr = - abr;
- if( (abi = b->i) < 0.)
- abi = - abi;
- if( abr <= abi ) {
- if (abi == 0) {
- fprintf(stderr, "z_div.c: division by zero\n");
- exit(-1);
- }
- ratio = b->r / b->i ;
- den = b->i * (1 + ratio*ratio);
- cr = (a->r*ratio + a->i) / den;
- ci = (a->i*ratio - a->r) / den;
- } else {
- ratio = b->i / b->r ;
- den = b->r * (1 + ratio*ratio);
- cr = (a->r + a->i*ratio) / den;
- ci = (a->i - a->r*ratio) / den;
- }
- c->r = cr;
- c->i = ci;
-}
-
-
-/*! \brief Returns sqrt(z.r^2 + z.i^2) */
-double c_abs(complex *z)
-{
- float temp;
- float real = z->r;
- float imag = z->i;
-
- if (real < 0) real = -real;
- if (imag < 0) imag = -imag;
- if (imag > real) {
- temp = real;
- real = imag;
- imag = temp;
- }
- if ((real+imag) == real) return(real);
-
- temp = imag/real;
- temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/
- return (temp);
-}
-
-
-/*! \brief Approximates the abs. Returns abs(z.r) + abs(z.i) */
-double c_abs1(complex *z)
-{
- float real = z->r;
- float imag = z->i;
-
- if (real < 0) real = -real;
- if (imag < 0) imag = -imag;
-
- return (real + imag);
-}
-
-/*! \brief Return the exponentiation */
-void c_exp(complex *r, complex *z)
-{
- float expx;
-
- expx = exp(z->r);
- r->r = expx * cos(z->i);
- r->i = expx * sin(z->i);
-}
-
-/*! \brief Return the complex conjugate */
-void r_cnjg(complex *r, complex *z)
-{
- r->r = z->r;
- r->i = -z->i;
-}
-
-/*! \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
deleted file mode 100644
index 2f6399f..0000000
--- a/SRC/scopy_to_ucol.c
+++ /dev/null
@@ -1,103 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_sdefs.h"
-
-int
-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 */
- GlobalLU_t *Glu /* modified */
- )
-{
-/*
- * 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;
- 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;
-
- 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))
- return (mem_error);
- ucol = Glu->ucol;
- if (mem_error = sLUMemXpand(jcol, nextu, USUB, &nzumax, Glu))
- return (mem_error);
- usub = Glu->usub;
- lsub = Glu->lsub;
- }
-
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- usub[nextu] = perm_r[irow];
- ucol[nextu] = dense[irow];
- dense[irow] = zero;
- nextu++;
- isub++;
- }
-
- }
-
- }
-
- } /* for each segment... */
-
- xusub[jcol + 1] = nextu; /* Close U[*,jcol] */
- return 0;
-}
diff --git a/SRC/scsum1.c b/SRC/scsum1.c
deleted file mode 100644
index 5b4eb3a..0000000
--- a/SRC/scsum1.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/*! @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"
-
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- SCSUM1 takes the sum of the absolute values of a complex
- vector and returns a single precision result.
-
- Based on SCASUM from the Level 1 BLAS.
- The change is to use the 'genuine' absolute value.
-
- Contributed by Nick Higham for use with CLACON.
-
- Arguments
- =========
-
- N (input) INT
- The number of elements in the vector CX.
-
- CX (input) COMPLEX array, dimension (N)
- The vector whose elements will be summed.
-
- INCX (input) INT
- The spacing between successive values of CX. INCX > 0.
-
- =====================================================================
-</pre>
-*/
-double scsum1_(int *n, complex *cx, int *incx)
-{
- /* System generated locals */
- int i__1, i__2;
- float ret_val;
- /* Builtin functions */
- double c_abs(complex *);
- /* Local variables */
- static int i, nincx;
- static float stemp;
-
-
-#define CX(I) cx[(I)-1]
-
-
- ret_val = 0.f;
- stemp = 0.f;
- if (*n <= 0) {
- return ret_val;
- }
- if (*incx == 1) {
- goto L20;
- }
-
-/* CODE FOR INCREMENT NOT EQUAL TO 1 */
-
- nincx = *n * *incx;
- i__1 = nincx;
- i__2 = *incx;
- for (i = 1; *incx < 0 ? i >= nincx : i <= nincx; i += *incx) {
-
-/* NEXT LINE MODIFIED. */
-
- stemp += c_abs(&CX(i));
-/* L10: */
- }
- ret_val = stemp;
- return ret_val;
-
-/* CODE FOR INCREMENT EQUAL TO 1 */
-
-L20:
- i__2 = *n;
- for (i = 1; i <= *n; ++i) {
-
-/* NEXT LINE MODIFIED. */
-
- stemp += c_abs(&CX(i));
-/* L30: */
- }
- ret_val = stemp;
- return ret_val;
-
-/* End of SCSUM1 */
-
-} /* scsum1_ */
-
diff --git a/SRC/sdiagonal.c b/SRC/sdiagonal.c
deleted file mode 100644
index 54a56c8..0000000
--- a/SRC/sdiagonal.c
+++ /dev/null
@@ -1,129 +0,0 @@
-
-/*! @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
deleted file mode 100644
index a474967..0000000
--- a/SRC/sgscon.c
+++ /dev/null
@@ -1,157 +0,0 @@
-
-/*! @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.
- */
-#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)
-{
-
-
- /* Local variables */
- int kase, kase1, onenrm, i;
- float ainvnm;
- float *work;
- int *iwork;
- extern int srscl_(int *, float *, float *, int *);
-
- extern int slacon_(int *, float *, float *, int *, float *, int *);
-
-
- /* Test the input parameters. */
- *info = 0;
- onenrm = *(unsigned char *)norm == '1' || lsame_(norm, "O");
- if (! onenrm && ! lsame_(norm, "I")) *info = -1;
- else if (L->nrow < 0 || L->nrow != L->ncol ||
- L->Stype != SLU_SC || L->Dtype != SLU_S || L->Mtype != SLU_TRLU)
- *info = -2;
- else if (U->nrow < 0 || U->nrow != U->ncol ||
- U->Stype != SLU_NC || U->Dtype != SLU_S || U->Mtype != SLU_TRU)
- *info = -3;
- if (*info != 0) {
- i = -(*info);
- xerbla_("sgscon", &i);
- return;
- }
-
- /* Quick return if possible */
- *rcond = 0.;
- if ( L->nrow == 0 || U->nrow == 0) {
- *rcond = 1.;
- return;
- }
-
- work = floatCalloc( 3*L->nrow );
- iwork = intMalloc( L->nrow );
-
-
- if ( !work || !iwork )
- ABORT("Malloc fails for work arrays in sgscon.");
-
- /* Estimate the norm of inv(A). */
- ainvnm = 0.;
- if ( onenrm ) kase1 = 1;
- else kase1 = 2;
- kase = 0;
-
- do {
- slacon_(&L->nrow, &work[L->nrow], &work[0], &iwork[0], &ainvnm, &kase);
-
- if (kase == 0) break;
-
- if (kase == kase1) {
- /* Multiply by inv(L). */
- sp_strsv("L", "No trans", "Unit", L, U, &work[0], stat, info);
-
- /* Multiply by inv(U). */
- sp_strsv("U", "No trans", "Non-unit", L, U, &work[0], stat, info);
-
- } else {
-
- /* Multiply by inv(U'). */
- sp_strsv("U", "Transpose", "Non-unit", L, U, &work[0], stat, info);
-
- /* Multiply by inv(L'). */
- sp_strsv("L", "Transpose", "Unit", L, U, &work[0], stat, info);
-
- }
-
- } while ( kase != 0 );
-
- /* Compute the estimate of the reciprocal condition number. */
- if (ainvnm != 0.) *rcond = (1. / ainvnm) / anorm;
-
- SUPERLU_FREE (work);
- SUPERLU_FREE (iwork);
- return;
-
-} /* sgscon */
-
diff --git a/SRC/sgsequ.c b/SRC/sgsequ.c
deleted file mode 100644
index 3637d7e..0000000
--- a/SRC/sgsequ.c
+++ /dev/null
@@ -1,195 +0,0 @@
-
-/*! @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
- * History: Modified from LAPACK routine SGEEQU
- */
-#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)
-{
-
-
- /* Local variables */
- NCformat *Astore;
- float *Aval;
- int i, j, irow;
- float rcmin, rcmax;
- float bignum, smlnum;
- extern float slamch_(char *);
-
- /* Test the input parameters. */
- *info = 0;
- if ( A->nrow < 0 || A->ncol < 0 ||
- A->Stype != SLU_NC || A->Dtype != SLU_S || A->Mtype != SLU_GE )
- *info = -1;
- if (*info != 0) {
- i = -(*info);
- xerbla_("sgsequ", &i);
- return;
- }
-
- /* Quick return if possible */
- if ( A->nrow == 0 || A->ncol == 0 ) {
- *rowcnd = 1.;
- *colcnd = 1.;
- *amax = 0.;
- return;
- }
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Get machine constants. */
- smlnum = slamch_("S");
- bignum = 1. / smlnum;
-
- /* Compute row scale factors. */
- for (i = 0; i < A->nrow; ++i) r[i] = 0.;
-
- /* Find the maximum element in each row. */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- r[irow] = SUPERLU_MAX( r[irow], fabs(Aval[i]) );
- }
-
- /* Find the maximum and minimum scale factors. */
- rcmin = bignum;
- rcmax = 0.;
- for (i = 0; i < A->nrow; ++i) {
- rcmax = SUPERLU_MAX(rcmax, r[i]);
- rcmin = SUPERLU_MIN(rcmin, r[i]);
- }
- *amax = rcmax;
-
- if (rcmin == 0.) {
- /* Find the first zero scale factor and return an error code. */
- for (i = 0; i < A->nrow; ++i)
- if (r[i] == 0.) {
- *info = i + 1;
- return;
- }
- } else {
- /* Invert the scale factors. */
- for (i = 0; i < A->nrow; ++i)
- r[i] = 1. / SUPERLU_MIN( SUPERLU_MAX( r[i], smlnum ), bignum );
- /* Compute ROWCND = min(R(I)) / max(R(I)) */
- *rowcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
- }
-
- /* Compute column scale factors */
- for (j = 0; j < A->ncol; ++j) c[j] = 0.;
-
- /* Find the maximum element in each column, assuming the row
- scalings computed above. */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- c[j] = SUPERLU_MAX( c[j], fabs(Aval[i]) * r[irow] );
- }
-
- /* Find the maximum and minimum scale factors. */
- rcmin = bignum;
- rcmax = 0.;
- for (j = 0; j < A->ncol; ++j) {
- rcmax = SUPERLU_MAX(rcmax, c[j]);
- rcmin = SUPERLU_MIN(rcmin, c[j]);
- }
-
- if (rcmin == 0.) {
- /* Find the first zero scale factor and return an error code. */
- for (j = 0; j < A->ncol; ++j)
- if ( c[j] == 0. ) {
- *info = A->nrow + j + 1;
- return;
- }
- } else {
- /* Invert the scale factors. */
- for (j = 0; j < A->ncol; ++j)
- c[j] = 1. / SUPERLU_MIN( SUPERLU_MAX( c[j], smlnum ), bignum);
- /* Compute COLCND = min(C(J)) / max(C(J)) */
- *colcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
- }
-
- return;
-
-} /* sgsequ */
-
-
diff --git a/SRC/sgsisx.c b/SRC/sgsisx.c
deleted file mode 100644
index 993fc34..0000000
--- a/SRC/sgsisx.c
+++ /dev/null
@@ -1,727 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 5d98f06..0000000
--- a/SRC/sgsisx.c.bak
+++ /dev/null
@@ -1,723 +0,0 @@
-
-/*! @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
deleted file mode 100644
index c0a3675..0000000
--- a/SRC/sgsitrf.c
+++ /dev/null
@@ -1,639 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 3dfaadd..0000000
--- a/SRC/sgsitrf.c.bak
+++ /dev/null
@@ -1,626 +0,0 @@
-
-/*! @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
deleted file mode 100644
index a93bc5b..0000000
--- a/SRC/sgsrfs.c
+++ /dev/null
@@ -1,452 +0,0 @@
-
-/*! @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
- * History: Modified from lapack routine SGERFS
- */
-#include <math.h>
-#include "slu_sdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * SGSRFS improves the computed solution to a system of linear
- * equations and provides error bounds and backward error estimates for
- * the solution.
- *
- * If equilibration was performed, the system becomes:
- * (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.
- *
- * See supermatrix.h for the definition of 'SuperMatrix' structure.
- *
- * Arguments
- * =========
- *
- * 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)
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * 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 sgstrs().
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See 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
- *
- * Internal Parameters
- * ===================
- *
- * 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
-
- /* Table of constant values */
- int ione = 1;
- float ndone = -1.;
- float done = 1.;
-
- /* Local variables */
- NCformat *Astore;
- float *Aval;
- SuperMatrix Bjcol;
- DNformat *Bstore, *Xstore, *Bjcol_store;
- float *Bmat, *Xmat, *Bptr, *Xptr;
- int kase;
- float safe1, safe2;
- int i, j, k, irow, nz, count, notran, rowequ, colequ;
- int ldb, ldx, nrhs;
- float s, xk, lstres, eps, safmin;
- char transc[1];
- trans_t transt;
- float *work;
- float *rwork;
- int *iwork;
-
- extern int slacon_(int *, float *, float *, int *, float *, int *);
-#ifdef _CRAY
- extern int SCOPY(int *, float *, int *, float *, int *);
- extern int SSAXPY(int *, float *, float *, int *, float *, int *);
-#else
- extern int scopy_(int *, float *, int *, float *, int *);
- extern int saxpy_(int *, float *, float *, int *, float *, int *);
-#endif
-
- Astore = A->Store;
- Aval = Astore->nzval;
- Bstore = B->Store;
- Xstore = X->Store;
- Bmat = Bstore->nzval;
- Xmat = Xstore->nzval;
- ldb = Bstore->lda;
- ldx = Xstore->lda;
- nrhs = B->ncol;
-
- /* Test the input parameters */
- *info = 0;
- notran = (trans == NOTRANS);
- if ( !notran && trans != TRANS && trans != CONJ ) *info = -1;
- else if ( A->nrow != A->ncol || A->nrow < 0 ||
- A->Stype != SLU_NC || A->Dtype != SLU_S || A->Mtype != SLU_GE )
- *info = -2;
- else if ( L->nrow != L->ncol || L->nrow < 0 ||
- L->Stype != SLU_SC || L->Dtype != SLU_S || L->Mtype != SLU_TRLU )
- *info = -3;
- else if ( U->nrow != U->ncol || U->nrow < 0 ||
- U->Stype != SLU_NC || U->Dtype != SLU_S || U->Mtype != SLU_TRU )
- *info = -4;
- else if ( ldb < SUPERLU_MAX(0, A->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_S || B->Mtype != SLU_GE )
- *info = -10;
- else if ( ldx < SUPERLU_MAX(0, A->nrow) ||
- X->Stype != SLU_DN || X->Dtype != SLU_S || X->Mtype != SLU_GE )
- *info = -11;
- if (*info != 0) {
- i = -(*info);
- xerbla_("sgsrfs", &i);
- return;
- }
-
- /* Quick return if possible */
- if ( A->nrow == 0 || nrhs == 0) {
- for (j = 0; j < nrhs; ++j) {
- ferr[j] = 0.;
- berr[j] = 0.;
- }
- return;
- }
-
- rowequ = lsame_(equed, "R") || lsame_(equed, "B");
- colequ = lsame_(equed, "C") || lsame_(equed, "B");
-
- /* Allocate working space */
- work = floatMalloc(2*A->nrow);
- rwork = (float *) SUPERLU_MALLOC( A->nrow * sizeof(float) );
- iwork = intMalloc(2*A->nrow);
- if ( !work || !rwork || !iwork )
- ABORT("Malloc fails for work/rwork/iwork.");
-
- if ( notran ) {
- *(unsigned char *)transc = 'N';
- transt = TRANS;
- } else {
- *(unsigned char *)transc = 'T';
- transt = NOTRANS;
- }
-
- /* NZ = maximum number of nonzero elements in each row of A, plus 1 */
- 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;
-
- /* Compute the number of nonzeros in each row (or column) of A */
- for (i = 0; i < A->nrow; ++i) iwork[i] = 0;
- if ( notran ) {
- for (k = 0; k < A->ncol; ++k)
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- ++iwork[Astore->rowind[i]];
- } else {
- for (k = 0; k < A->ncol; ++k)
- iwork[k] = Astore->colptr[k+1] - Astore->colptr[k];
- }
-
- /* Copy one column of RHS B into Bjcol. */
- Bjcol.Stype = B->Stype;
- Bjcol.Dtype = B->Dtype;
- Bjcol.Mtype = B->Mtype;
- Bjcol.nrow = B->nrow;
- Bjcol.ncol = 1;
- Bjcol.Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
- if ( !Bjcol.Store ) ABORT("SUPERLU_MALLOC fails for Bjcol.Store");
- Bjcol_store = Bjcol.Store;
- Bjcol_store->lda = ldb;
- Bjcol_store->nzval = work; /* address aliasing */
-
- /* Do for each right hand side ... */
- for (j = 0; j < nrhs; ++j) {
- count = 0;
- lstres = 3.;
- Bptr = &Bmat[j*ldb];
- Xptr = &Xmat[j*ldx];
-
- while (1) { /* Loop until stopping criterion is satisfied. */
-
- /* Compute residual R = B - op(A) * X,
- where op(A) = A, A**T, or A**H, depending on TRANS. */
-
-#ifdef _CRAY
- SCOPY(&A->nrow, Bptr, &ione, work, &ione);
-#else
- scopy_(&A->nrow, Bptr, &ione, work, &ione);
-#endif
- sp_sgemv(transc, ndone, A, Xptr, ione, done, work, ione);
-
- /* Compute componentwise relative backward error from formula
- max(i) ( abs(R(i)) / ( abs(op(A))*abs(X) + abs(B) )(i) )
- 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 before dividing. */
-
- for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
-
- /* Compute abs(op(A))*abs(X) + abs(B). */
- if (notran) {
- for (k = 0; k < A->ncol; ++k) {
- xk = fabs( Xptr[k] );
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- rwork[Astore->rowind[i]] += fabs(Aval[i]) * xk;
- }
- } else {
- for (k = 0; k < A->ncol; ++k) {
- s = 0.;
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
- irow = Astore->rowind[i];
- s += fabs(Aval[i]) * fabs(Xptr[irow]);
- }
- rwork[k] += s;
- }
- }
- s = 0.;
- for (i = 0; i < A->nrow; ++i) {
- if (rwork[i] > safe2) {
- s = SUPERLU_MAX( s, fabs(work[i]) / rwork[i] );
- } 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;
-
- /* Test stopping criterion. Continue iterating if
- 1) The residual BERR(J) is larger than machine epsilon, and
- 2) BERR(J) decreased by at least a factor of 2 during the
- last iteration, and
- 3) At most ITMAX iterations tried. */
-
- if (berr[j] > eps && berr[j] * 2. <= lstres && count < ITMAX) {
- /* Update solution and try again. */
- sgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
-#ifdef _CRAY
- SAXPY(&A->nrow, &done, work, &ione,
- &Xmat[j*ldx], &ione);
-#else
- saxpy_(&A->nrow, &done, work, &ione,
- &Xmat[j*ldx], &ione);
-#endif
- lstres = berr[j];
- ++count;
- } else {
- break;
- }
-
- } /* end while */
-
- stat->RefineSteps = count;
-
- /* Bound error from formula:
- norm(X - XTRUE) / norm(X) .le. FERR = norm( abs(inv(op(A)))*
- ( abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) / norm(X)
- where
- norm(Z) is the magnitude of the largest component of Z
- inv(op(A)) is the inverse of op(A)
- abs(Z) is the componentwise absolute value of the matrix or
- vector Z
- NZ is the maximum number of nonzeros in any row of A, plus 1
- EPS is machine epsilon
-
- The i-th component of abs(R)+NZ*EPS*(abs(op(A))*abs(X)+abs(B))
- is incremented by SAFE1 if the i-th component of
- abs(op(A))*abs(X) + abs(B) is less than SAFE2.
-
- Use SLACON to estimate the infinity-norm of the matrix
- inv(op(A)) * diag(W),
- where W = abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) */
-
- for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
-
- /* Compute abs(op(A))*abs(X) + abs(B). */
- if ( notran ) {
- for (k = 0; k < A->ncol; ++k) {
- xk = fabs( Xptr[k] );
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- rwork[Astore->rowind[i]] += fabs(Aval[i]) * xk;
- }
- } else {
- for (k = 0; k < A->ncol; ++k) {
- s = 0.;
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
- irow = Astore->rowind[i];
- xk = fabs( Xptr[irow] );
- s += fabs(Aval[i]) * xk;
- }
- rwork[k] += s;
- }
- }
-
- for (i = 0; i < A->nrow; ++i)
- if (rwork[i] > safe2)
- rwork[i] = fabs(work[i]) + (iwork[i]+1)*eps*rwork[i];
- else
- rwork[i] = fabs(work[i])+(iwork[i]+1)*eps*rwork[i]+safe1;
-
- kase = 0;
-
- do {
- slacon_(&A->nrow, &work[A->nrow], work,
- &iwork[A->nrow], &ferr[j], &kase);
- if (kase == 0) break;
-
- if (kase == 1) {
- /* Multiply by diag(W)*inv(op(A)**T)*(diag(C) or diag(R)). */
- if ( notran && colequ )
- for (i = 0; i < A->ncol; ++i) work[i] *= C[i];
- else if ( !notran && rowequ )
- for (i = 0; i < A->nrow; ++i) work[i] *= R[i];
-
- sgstrs (transt, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
- for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i];
- } else {
- /* Multiply by (diag(C) or diag(R))*inv(op(A))*diag(W). */
- for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i];
-
- sgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
- if ( notran && colequ )
- for (i = 0; i < A->ncol; ++i) work[i] *= C[i];
- else if ( !notran && rowequ )
- for (i = 0; i < A->ncol; ++i) work[i] *= R[i];
- }
-
- } while ( kase != 0 );
-
-
- /* Normalize error. */
- lstres = 0.;
- if ( notran && colequ ) {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, C[i] * fabs( Xptr[i]) );
- } else if ( !notran && rowequ ) {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, R[i] * fabs( Xptr[i]) );
- } else {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, fabs( Xptr[i]) );
- }
- if ( lstres != 0. )
- ferr[j] /= lstres;
-
- } /* for each RHS j ... */
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(rwork);
- SUPERLU_FREE(iwork);
- SUPERLU_FREE(Bjcol.Store);
-
- return;
-
-} /* sgsrfs */
diff --git a/SRC/sgssv.c b/SRC/sgssv.c
deleted file mode 100644
index c567daa..0000000
--- a/SRC/sgssv.c
+++ /dev/null
@@ -1,227 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * SGSSV solves the system of linear equations A*X=B, using the
- * LU factorization from SGSTRF. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 1.1. Permute the columns of A, forming A*Pc, where Pc
- * is a permutation matrix. For more details of this step,
- * see sp_preorder.c.
- *
- * 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.
- *
- * 1.3. Solve the system of equations A*X=B using the factored
- * form of A.
- *
- * 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
- * above algorithm to the transpose of A:
- *
- * 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 sp_preorder.c.
- *
- * 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.
- *
- * 2.3. Solve the system of equations A*X=B using the factored
- * form of A.
- *
- * 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) 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.
- *
- * 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.
- *
- * 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.
- *
- * 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->RowPerm = MY_PERMR or
- * options->Fact = SamePattern_SameRowPerm, perm_r is an
- * input argument.
- * otherwise it is an output argument.
- *
- * 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.
- *
- * 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;
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See util.h for the definition of 'SuperLUStat_t'.
- *
- * 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>
- */
-
-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 */
- int panel_size; /* panel size */
- int relax; /* no of columns in a relaxed snodes */
- int permc_spec;
- trans_t trans = NOTRANS;
- double *utime;
- double t; /* Temporary time */
-
- /* Test the input parameters ... */
- *info = 0;
- Bstore = B->Store;
- if ( options->Fact != DOFACT ) *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 ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_S || B->Mtype != SLU_GE )
- *info = -7;
- if ( *info != 0 ) {
- i = -(*info);
- xerbla_("sgssv", &i);
- return;
- }
-
- 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);
- trans = TRANS;
- } else {
- if ( A->Stype == SLU_NC ) AA = A;
- }
-
- t = SuperLU_timer_();
- /*
- * Get 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_() - t;
-
- etree = intMalloc(A->ncol);
-
- t = SuperLU_timer_();
- sp_preorder(options, AA, perm_c, etree, &AC);
- utime[ETREE] = SuperLU_timer_() - t;
-
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
-
- /*printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));*/
- t = SuperLU_timer_();
- /* Compute the LU factorization of A. */
- 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_();
- if ( *info == 0 ) {
- /* Solve the system A*X=B, overwriting B with X. */
- sgstrs (trans, L, U, perm_c, perm_r, B, stat, info);
- }
- utime[SOLVE] = SuperLU_timer_() - t;
-
- SUPERLU_FREE (etree);
- Destroy_CompCol_Permuted(&AC);
- if ( A->Stype == SLU_NR ) {
- Destroy_SuperMatrix_Store(AA);
- SUPERLU_FREE(AA);
- }
-
-}
diff --git a/SRC/sgssvx.c b/SRC/sgssvx.c
deleted file mode 100644
index d33ca33..0000000
--- a/SRC/sgssvx.c
+++ /dev/null
@@ -1,622 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * SGSSVX solves the system of linear equations A*X=B or A'*X=B, using
- * the LU factorization from sgstrf(). Error bounds on the solution and
- * a condition estimate are also provided. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 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).
- *
- * 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 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.
- *
- * 1.6. The system of equations is solved for X using the factored form
- * of A.
- *
- * 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.
- *
- * 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.
- *
- * 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, 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 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.
- *
- * 2.6. The system of equations is solved for X using the factored form
- * of transpose(A).
- *
- * 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.
- *
- * 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.
- * 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).
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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: 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>
- */
-
-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;
- 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;
- 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;
-
- /* 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);
- 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;
- }
-
-#if 0
-printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
- options->Fact, options->Trans, *equed);
-#endif
-
- /* 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 ) *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;
- }
- 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) {
- i = -(*info);
- xerbla_("sgssvx", &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 && 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;
-
-/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));
- fflush(stdout); */
-
- /* Compute the LU factorization of A*Pc. */
- t0 = SuperLU_timer_();
- 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 ) {
- mem_usage->total_needed = *info - A->ncol;
- return;
- }
- }
-
- if ( options->PivotGrowth ) {
- if ( *info > 0 ) {
- if ( *info <= A->ncol ) {
- /* Compute the reciprocal pivot growth factor of the leading
- rank-deficient *info columns of A. */
- *recip_pivot_growth = sPivotGrowth(*info, AA, perm_c, L, U);
- }
- 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, info);
- utime[RCOND] = 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];
- }
-
- /* 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, info);
- utime[SOLVE] = SuperLU_timer_() - t0;
-
- /* Use iterative refinement to improve the computed solution and compute
- error bounds and backward error estimates for it. */
- t0 = SuperLU_timer_();
- if ( options->IterRefine != NOREFINE ) {
- sgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
- X, ferr, berr, stat, info);
- } else {
- for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
- }
- utime[REFINE] = 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 < 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)
- Xmat[i + j*ldx] *= R[i];
- }
- } /* 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 = A->ncol + 1;
- }
-
- if ( nofact ) {
- 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/sgstrf.c b/SRC/sgstrf.c
deleted file mode 100644
index 109f0bb..0000000
--- a/SRC/sgstrf.c
+++ /dev/null
@@ -1,436 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_sdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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).
- *
- * 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.
- *
- * 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: 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.
- *
- * ======================================================================
- *
- * Local Working Arrays:
- * ======================
- * m = number of rows in the matrix
- * n = number of columns in the matrix
- *
- * 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.
- *
- * 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 spanel_dfs.c; marker2 is used for inner-factorization,
- * see scolumn_dfs.c.
- *
- * 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 spanel_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_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
- options->Fact == SamePattern_SameRowPerm */
- int *iperm_c; /* inverse of perm_c */
- int *iwork;
- float *swork;
- int *segrep, *repfnz, *parent, *xplore;
- int *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
- int *xprune;
- int *marker;
- float *dense, *tempv;
- int *relax_end;
- float *a;
- int *asub;
- int *xa_begin, *xa_end;
- int *xsup, *supno;
- int *xlsub, *xlusup, *xusub;
- int nzlumax;
- 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;
- double diag_pivot_thresh = options->DiagPivotThresh;
- 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;
-
- 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, fill_ratio, 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, &xprune, &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;
-
- /* Identify relaxed snodes */
- relax_end = (int *) intMalloc(n);
- if ( options->SymmetricMode == YES ) {
- heap_relax_snode(n, etree, relax, marker, relax_end);
- } else {
- relax_snode(n, etree, relax, marker, relax_end);
- }
-
- 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;
-
- /*
- * 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]++;
-
- /* --------------------------------------
- * Factorize the relaxed supernode(jcol:kcol)
- * -------------------------------------- */
- /* Determine the union of the row structure of the snode */
- if ( (*info = ssnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
- xprune, 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;
-
- /* Scatter into SPA dense[*] */
- for (k = xa_begin[icol]; k < xa_end[icol]; k++)
- dense[asub[k]] = a[k];
-
- /* Numeric update within the snode */
- ssnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
-
- if ( (*info = spivotL(icol, diag_pivot_thresh, &usepr, perm_r,
- iperm_r, iperm_c, &pivrow, &Glu, stat)) )
- if ( iinfo == 0 ) iinfo = *info;
-
-#ifdef DEBUG
- sprint_lu_col("[1]: ", icol, pivrow, xprune, &Glu);
-#endif
-
- }
-
- jcol = icol;
-
- } 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 */
- spanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
- dense, panel_lsub, segrep, repfnz, xprune,
- 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 */
-
- if ((*info = scolumn_dfs(m, jj, perm_r, &nseg, &panel_lsub[k],
- segrep, &repfnz[k], xprune, marker,
- parent, xplore, &Glu)) != 0) return;
-
- /* Numeric updates */
- if ((*info = scolumn_bmod(jj, (nseg - nseg1), &dense[k],
- tempv, &segrep[nseg1], &repfnz[k],
- jcol, &Glu, stat)) != 0) return;
-
- /* Copy the U-segments to ucol[*] */
- if ((*info = scopy_to_ucol(jj, nseg, segrep, &repfnz[k],
- perm_r, &dense[k], &Glu)) != 0)
- return;
-
- if ( (*info = spivotL(jj, diag_pivot_thresh, &usepr, perm_r,
- iperm_r, iperm_c, &pivrow, &Glu, stat)) )
- if ( iinfo == 0 ) iinfo = *info;
-
- /* Prune columns (0:jj-1) using column jj */
- spruneL(jj, perm_r, pivrow, nseg, segrep,
- &repfnz[k], xprune, &Glu);
-
- /* Reset repfnz[] for this column */
- resetrep_col (nseg, segrep, &repfnz[k]);
-
-#ifdef DEBUG
- sprint_lu_col("[2]: ", jj, pivrow, xprune, &Glu);
-#endif
-
- }
-
- 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;
- }
- }
-
- countnz(min_mn, xprune, &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);
-
-}
diff --git a/SRC/sgstrs.c b/SRC/sgstrs.c
deleted file mode 100644
index 13b9bb4..0000000
--- a/SRC/sgstrs.c
+++ /dev/null
@@ -1,337 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_sdefs.h"
-
-
-/*
- * Function prototypes
- */
-void susolve(int, int, float*, float*);
-void slsolve(int, int, float*, float*);
-void smatvec(int, int, int, float*, float*, float*);
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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.
- *
- * See supermatrix.h for the definition of 'SuperMatrix' structure.
- *
- * Arguments
- * =========
- *
- * 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)
- *
- * 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.
- *
- * 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.
- *
- * 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_S, Mtype = SLU_GE.
- * On entry, the right hand side matrix.
- * On exit, the solution matrix if info = 0;
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See 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
- * </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
- int incx = 1, incy = 1;
-#ifdef USE_VENDOR_BLAS
- float alpha = 1.0, beta = 1.0;
- float *work_col;
-#endif
- DNformat *Bstore;
- float *Bmat;
- SCformat *Lstore;
- NCformat *Ustore;
- float *Lval, *Uval;
- int fsupc, nrow, nsupr, nsupc, luptr, istart, irow;
- int i, j, k, iptr, jcol, n, ldb, nrhs;
- float *work, *rhs_work, *soln;
- flops_t solve_ops;
- void sprint_soln();
-
- /* Test input parameters ... */
- *info = 0;
- Bstore = B->Store;
- ldb = Bstore->lda;
- nrhs = B->ncol;
- if ( trans != NOTRANS && trans != TRANS && trans != CONJ ) *info = -1;
- else if ( L->nrow != L->ncol || L->nrow < 0 ||
- L->Stype != SLU_SC || L->Dtype != SLU_S || L->Mtype != SLU_TRLU )
- *info = -2;
- else if ( U->nrow != U->ncol || U->nrow < 0 ||
- U->Stype != SLU_NC || U->Dtype != SLU_S || U->Mtype != SLU_TRU )
- *info = -3;
- else if ( ldb < SUPERLU_MAX(0, L->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_S || B->Mtype != SLU_GE )
- *info = -6;
- if ( *info ) {
- i = -(*info);
- xerbla_("sgstrs", &i);
- return;
- }
-
- n = L->nrow;
- work = floatCalloc(n * nrhs);
- if ( !work ) ABORT("Malloc fails for local work[].");
- soln = floatMalloc(n);
- if ( !soln ) ABORT("Malloc fails for local soln[].");
-
- Bmat = Bstore->nzval;
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
- solve_ops = 0;
-
- if ( trans == NOTRANS ) {
- /* 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
- strsm_("L", "L", "N", "U", &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-
- sgemm_( "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];
- slsolve (nsupr, nsupc, &Lval[luptr], &rhs_work[fsupc]);
- smatvec (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");
- sprint_soln(n, nrhs, Bmat);
-#endif
-
- /*
- * Back solve Ux=y.
- */
- for (k = Lstore->nsuper; k >= 0; 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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += nsupc * (nsupc + 1) * nrhs;
-
- if ( nsupc == 1 ) {
- rhs_work = &Bmat[0];
- for (j = 0; j < nrhs; j++) {
- rhs_work[fsupc] /= Lval[luptr];
- rhs_work += ldb;
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd("U", strlen("U"));
- ftcs3 = _cptofcd("N", strlen("N"));
- STRSM( ftcs1, ftcs2, ftcs3, ftcs3, &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-#else
- strsm_("L", "U", "N", "N", &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-#endif
-#else
- for (j = 0; j < nrhs; j++)
- susolve ( nsupr, nsupc, &Lval[luptr], &Bmat[fsupc+j*ldb] );
-#endif
- }
-
- for (j = 0; j < nrhs; ++j) {
- rhs_work = &Bmat[j*ldb];
- for (jcol = fsupc; jcol < fsupc + nsupc; jcol++) {
- solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++ ){
- irow = U_SUB(i);
- rhs_work[irow] -= rhs_work[jcol] * Uval[i];
- }
- }
- }
-
- } /* for U-solve */
-
-#ifdef DEBUG
- printf("After U-solve: x=\n");
- sprint_soln(n, nrhs, Bmat);
-#endif
-
- /* Compute the final solution X := Pc*X. */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[k] = rhs_work[perm_c[k]];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- stat->ops[SOLVE] = solve_ops;
-
- } else { /* Solve A'*X=B or CONJ(A)*X=B */
- /* Permute right hand sides to form Pc'*B. */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[perm_c[k]] = rhs_work[k];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- stat->ops[SOLVE] = 0;
- for (k = 0; k < nrhs; ++k) {
-
- /* Multiply by inv(U'). */
- sp_strsv("U", "T", "N", L, U, &Bmat[k*ldb], stat, info);
-
- /* Multiply by inv(L'). */
- sp_strsv("L", "T", "U", L, U, &Bmat[k*ldb], stat, info);
-
- }
- /* Compute the final solution X := Pr'*X (=inv(Pr)*X) */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[k] = rhs_work[perm_r[k]];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- }
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(soln);
-}
-
-/*
- * Diagnostic print of the solution vector
- */
-void
-sprint_soln(int n, int nrhs, float *soln)
-{
- int i;
-
- for (i = 0; i < n; i++)
- printf("\t%d: %.4f\n", i, soln[i]);
-}
diff --git a/SRC/slacon.c b/SRC/slacon.c
deleted file mode 100644
index 4e02fdc..0000000
--- a/SRC/slacon.c
+++ /dev/null
@@ -1,236 +0,0 @@
-
-/*! @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)
-
-{
-
-
- /* Table of constant values */
- int c__1 = 1;
- float zero = 0.0;
- float one = 1.0;
-
- /* Local variables */
- static int iter;
- static int jump, jlast;
- static float altsgn, estold;
- static int i, j;
- float temp;
-#ifdef _CRAY
- extern int ISAMAX(int *, float *, int *);
- extern float SASUM(int *, float *, int *);
- extern int SCOPY(int *, float *, int *, float *, int *);
-#else
- extern int isamax_(int *, float *, int *);
- extern float sasum_(int *, float *, int *);
- extern int scopy_(int *, float *, int *, float *, int *);
-#endif
-#define d_sign(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */
-#define i_dnnt(a) \
- ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */
-
- if ( *kase == 0 ) {
- for (i = 0; i < *n; ++i) {
- x[i] = 1. / (float) (*n);
- }
- *kase = 1;
- jump = 1;
- return 0;
- }
-
- switch (jump) {
- case 1: goto L20;
- case 2: goto L40;
- case 3: goto L70;
- case 4: goto L110;
- case 5: goto L140;
- }
-
- /* ................ ENTRY (JUMP = 1)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
- L20:
- if (*n == 1) {
- v[0] = x[0];
- *est = fabs(v[0]);
- /* ... QUIT */
- goto L150;
- }
-#ifdef _CRAY
- *est = SASUM(n, x, &c__1);
-#else
- *est = sasum_(n, x, &c__1);
-#endif
-
- for (i = 0; i < *n; ++i) {
- x[i] = d_sign(one, x[i]);
- isgn[i] = i_dnnt(x[i]);
- }
- *kase = 2;
- jump = 2;
- return 0;
-
- /* ................ ENTRY (JUMP = 2)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
-L40:
-#ifdef _CRAY
- j = ISAMAX(n, &x[0], &c__1);
-#else
- j = isamax_(n, &x[0], &c__1);
-#endif
- --j;
- iter = 2;
-
- /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
-L50:
- for (i = 0; i < *n; ++i) x[i] = zero;
- x[j] = one;
- *kase = 1;
- jump = 3;
- return 0;
-
- /* ................ ENTRY (JUMP = 3)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L70:
-#ifdef _CRAY
- SCOPY(n, x, &c__1, v, &c__1);
-#else
- scopy_(n, x, &c__1, v, &c__1);
-#endif
- estold = *est;
-#ifdef _CRAY
- *est = SASUM(n, v, &c__1);
-#else
- *est = sasum_(n, v, &c__1);
-#endif
-
- for (i = 0; i < *n; ++i)
- if (i_dnnt(d_sign(one, x[i])) != isgn[i])
- goto L90;
-
- /* REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED. */
- goto L120;
-
-L90:
- /* TEST FOR CYCLING. */
- if (*est <= estold) goto L120;
-
- for (i = 0; i < *n; ++i) {
- x[i] = d_sign(one, x[i]);
- isgn[i] = i_dnnt(x[i]);
- }
- *kase = 2;
- jump = 4;
- return 0;
-
- /* ................ ENTRY (JUMP = 4)
- X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
-L110:
- jlast = j;
-#ifdef _CRAY
- j = ISAMAX(n, &x[0], &c__1);
-#else
- j = isamax_(n, &x[0], &c__1);
-#endif
- --j;
- if (x[jlast] != fabs(x[j]) && iter < 5) {
- ++iter;
- goto L50;
- }
-
- /* ITERATION COMPLETE. FINAL STAGE. */
-L120:
- altsgn = 1.;
- for (i = 1; i <= *n; ++i) {
- x[i-1] = altsgn * ((float)(i - 1) / (float)(*n - 1) + 1.);
- altsgn = -altsgn;
- }
- *kase = 1;
- jump = 5;
- return 0;
-
- /* ................ ENTRY (JUMP = 5)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L140:
-#ifdef _CRAY
- temp = SASUM(n, x, &c__1) / (float)(*n * 3) * 2.;
-#else
- temp = sasum_(n, x, &c__1) / (float)(*n * 3) * 2.;
-#endif
- if (temp > *est) {
-#ifdef _CRAY
- SCOPY(n, &x[0], &c__1, &v[0], &c__1);
-#else
- scopy_(n, &x[0], &c__1, &v[0], &c__1);
-#endif
- *est = temp;
- }
-
-L150:
- *kase = 0;
- return 0;
-
-} /* slacon_ */
diff --git a/SRC/slacon.c.bak b/SRC/slacon.c.bak
deleted file mode 100644
index 4e02fdc..0000000
--- a/SRC/slacon.c.bak
+++ /dev/null
@@ -1,236 +0,0 @@
-
-/*! @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)
-
-{
-
-
- /* Table of constant values */
- int c__1 = 1;
- float zero = 0.0;
- float one = 1.0;
-
- /* Local variables */
- static int iter;
- static int jump, jlast;
- static float altsgn, estold;
- static int i, j;
- float temp;
-#ifdef _CRAY
- extern int ISAMAX(int *, float *, int *);
- extern float SASUM(int *, float *, int *);
- extern int SCOPY(int *, float *, int *, float *, int *);
-#else
- extern int isamax_(int *, float *, int *);
- extern float sasum_(int *, float *, int *);
- extern int scopy_(int *, float *, int *, float *, int *);
-#endif
-#define d_sign(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */
-#define i_dnnt(a) \
- ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */
-
- if ( *kase == 0 ) {
- for (i = 0; i < *n; ++i) {
- x[i] = 1. / (float) (*n);
- }
- *kase = 1;
- jump = 1;
- return 0;
- }
-
- switch (jump) {
- case 1: goto L20;
- case 2: goto L40;
- case 3: goto L70;
- case 4: goto L110;
- case 5: goto L140;
- }
-
- /* ................ ENTRY (JUMP = 1)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
- L20:
- if (*n == 1) {
- v[0] = x[0];
- *est = fabs(v[0]);
- /* ... QUIT */
- goto L150;
- }
-#ifdef _CRAY
- *est = SASUM(n, x, &c__1);
-#else
- *est = sasum_(n, x, &c__1);
-#endif
-
- for (i = 0; i < *n; ++i) {
- x[i] = d_sign(one, x[i]);
- isgn[i] = i_dnnt(x[i]);
- }
- *kase = 2;
- jump = 2;
- return 0;
-
- /* ................ ENTRY (JUMP = 2)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
-L40:
-#ifdef _CRAY
- j = ISAMAX(n, &x[0], &c__1);
-#else
- j = isamax_(n, &x[0], &c__1);
-#endif
- --j;
- iter = 2;
-
- /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
-L50:
- for (i = 0; i < *n; ++i) x[i] = zero;
- x[j] = one;
- *kase = 1;
- jump = 3;
- return 0;
-
- /* ................ ENTRY (JUMP = 3)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L70:
-#ifdef _CRAY
- SCOPY(n, x, &c__1, v, &c__1);
-#else
- scopy_(n, x, &c__1, v, &c__1);
-#endif
- estold = *est;
-#ifdef _CRAY
- *est = SASUM(n, v, &c__1);
-#else
- *est = sasum_(n, v, &c__1);
-#endif
-
- for (i = 0; i < *n; ++i)
- if (i_dnnt(d_sign(one, x[i])) != isgn[i])
- goto L90;
-
- /* REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED. */
- goto L120;
-
-L90:
- /* TEST FOR CYCLING. */
- if (*est <= estold) goto L120;
-
- for (i = 0; i < *n; ++i) {
- x[i] = d_sign(one, x[i]);
- isgn[i] = i_dnnt(x[i]);
- }
- *kase = 2;
- jump = 4;
- return 0;
-
- /* ................ ENTRY (JUMP = 4)
- X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
-L110:
- jlast = j;
-#ifdef _CRAY
- j = ISAMAX(n, &x[0], &c__1);
-#else
- j = isamax_(n, &x[0], &c__1);
-#endif
- --j;
- if (x[jlast] != fabs(x[j]) && iter < 5) {
- ++iter;
- goto L50;
- }
-
- /* ITERATION COMPLETE. FINAL STAGE. */
-L120:
- altsgn = 1.;
- for (i = 1; i <= *n; ++i) {
- x[i-1] = altsgn * ((float)(i - 1) / (float)(*n - 1) + 1.);
- altsgn = -altsgn;
- }
- *kase = 1;
- jump = 5;
- return 0;
-
- /* ................ ENTRY (JUMP = 5)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L140:
-#ifdef _CRAY
- temp = SASUM(n, x, &c__1) / (float)(*n * 3) * 2.;
-#else
- temp = sasum_(n, x, &c__1) / (float)(*n * 3) * 2.;
-#endif
- if (temp > *est) {
-#ifdef _CRAY
- SCOPY(n, &x[0], &c__1, &v[0], &c__1);
-#else
- scopy_(n, &x[0], &c__1, &v[0], &c__1);
-#endif
- *est = temp;
- }
-
-L150:
- *kase = 0;
- return 0;
-
-} /* slacon_ */
diff --git a/SRC/slamch.c b/SRC/slamch.c
deleted file mode 100644
index ec3cd61..0000000
--- a/SRC/slamch.c
+++ /dev/null
@@ -1,993 +0,0 @@
-/*! @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"
-
-#define TRUE_ (1)
-#define FALSE_ (0)
-#define min(a,b) ((a) <= (b) ? (a) : (b))
-#define max(a,b) ((a) >= (b) ? (a) : (b))
-#define abs(x) ((x) >= 0 ? (x) : -(x))
-#define dabs(x) (double)abs(x)
-
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- SLAMCH determines single precision machine parameters.
-
- Arguments
- =========
-
- 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
-
- where
-
- 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>
-*/
-float slamch_(char *cmach)
-{
-/* >>Start of File<<
- Initialized data */
- static int first = TRUE_;
- /* System generated locals */
- int i__1;
- float ret_val;
- /* Builtin functions */
- double pow_ri(float *, int *);
- /* Local variables */
- static float base;
- static int beta;
- static float emin, prec, emax;
- static int imin, imax;
- static int lrnd;
- static float rmin, rmax, t, rmach;
- extern int lsame_(char *, char *);
- static float small, sfmin;
- extern /* Subroutine */ int slamc2_(int *, int *, int *, float
- *, int *, float *, int *, float *);
- static int it;
- static float rnd, eps;
-
-
-
- if (first) {
- first = FALSE_;
- slamc2_(&beta, &it, &lrnd, &eps, &imin, &rmin, &imax, &rmax);
- base = (float) beta;
- t = (float) it;
- if (lrnd) {
- rnd = 1.f;
- i__1 = 1 - it;
- eps = pow_ri(&base, &i__1) / 2;
- } else {
- rnd = 0.f;
- i__1 = 1 - it;
- eps = pow_ri(&base, &i__1);
- }
- prec = eps * base;
- emin = (float) imin;
- emax = (float) imax;
- sfmin = rmin;
- small = 1.f / rmax;
- if (small >= sfmin) {
-
-/* Use SMALL plus a bit, to avoid the possibility of rou
-nding
- causing overflow when computing 1/sfmin. */
-
- sfmin = small * (eps + 1.f);
- }
- }
-
- if (lsame_(cmach, "E")) {
- rmach = eps;
- } else if (lsame_(cmach, "S")) {
- rmach = sfmin;
- } else if (lsame_(cmach, "B")) {
- rmach = base;
- } else if (lsame_(cmach, "P")) {
- rmach = prec;
- } else if (lsame_(cmach, "N")) {
- rmach = t;
- } else if (lsame_(cmach, "R")) {
- rmach = rnd;
- } else if (lsame_(cmach, "M")) {
- rmach = emin;
- } else if (lsame_(cmach, "U")) {
- rmach = rmin;
- } else if (lsame_(cmach, "L")) {
- rmach = emax;
- } else if (lsame_(cmach, "O")) {
- rmach = rmax;
- }
-
- ret_val = rmach;
- return ret_val;
-
-/* End of SLAMCH */
-
-} /* slamch_ */
-
-
-/* Subroutine */
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- SLAMC1 determines the machine parameters given by BETA, T, RND, and
- IEEE1.
-
- Arguments
- =========
-
- BETA (output) INT
- The base of the machine.
-
- T (output) INT
- The number of ( BETA ) digits in the mantissa.
-
- RND (output) INT
- Specifies whether proper rounding ( RND = .TRUE. ) or
- chopping ( RND = .FALSE. ) occurs in addition. This may not
-
- be a reliable guide to the way in which the machine performs
-
- its arithmetic.
-
- IEEE1 (output) INT
- Specifies whether rounding appears to be done in the IEEE
- 'round to nearest' style.
-
- Further Details
- ===============
-
- The routine is based on the routine ENVRON by Malcolm and
- incorporates suggestions by Gentleman and Marovich. See
-
- Malcolm M. A. (1972) Algorithms to reveal properties of
- floating-point arithmetic. Comms. of the ACM, 15, 949-951.
-
- 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>
-*/
-
-int slamc1_(int *beta, int *t, int *rnd, int
- *ieee1)
-{
- /* Initialized data */
- static int first = TRUE_;
- /* System generated locals */
- float r__1, r__2;
- /* Local variables */
- static int lrnd;
- static float a, b, c, f;
- static int lbeta;
- static float savec;
- static int lieee1;
- static float t1, t2;
- extern double slamc3_(float *, float *);
- static int lt;
- static float one, qtr;
-
-
-
- if (first) {
- first = FALSE_;
- one = 1.f;
-
-/* LBETA, LIEEE1, LT and LRND are the local values of BE
-TA,
- IEEE1, T and RND.
-
- Throughout this routine we use the function SLAMC3 to ens
-ure
- that relevant values are stored and not held in registers,
- or
- are not affected by optimizers.
-
- Compute a = 2.0**m with the smallest positive integer m s
-uch
- that
-
- fl( a + 1.0 ) = a. */
-
- a = 1.f;
- c = 1.f;
-
-/* + WHILE( C.EQ.ONE )LOOP */
-L10:
- if (c == one) {
- a *= 2;
- c = slamc3_(&a, &one);
- r__1 = -(double)a;
- c = slamc3_(&c, &r__1);
- goto L10;
- }
-/* + END WHILE
-
- Now compute b = 2.0**m with the smallest positive integer
-m
- such that
-
- fl( a + b ) .gt. a. */
-
- b = 1.f;
- c = slamc3_(&a, &b);
-
-/* + WHILE( C.EQ.A )LOOP */
-L20:
- if (c == a) {
- b *= 2;
- c = slamc3_(&a, &b);
- goto L20;
- }
-/* + END WHILE
-
- Now compute the base. a and c are neighbouring floating po
-int
- numbers in the interval ( beta**t, beta**( t + 1 ) ) and
- so
- their difference is beta. Adding 0.25 to c is to ensure that
- it
- is truncated to beta and not ( beta - 1 ). */
-
- qtr = one / 4;
- savec = c;
- r__1 = -(double)a;
- c = slamc3_(&c, &r__1);
- lbeta = c + qtr;
-
-/* Now determine whether rounding or chopping occurs, by addin
-g a
- bit less than beta/2 and a bit more than beta/2 to
- a. */
-
- b = (float) lbeta;
- r__1 = b / 2;
- r__2 = -(double)b / 100;
- f = slamc3_(&r__1, &r__2);
- c = slamc3_(&f, &a);
- if (c == a) {
- lrnd = TRUE_;
- } else {
- lrnd = FALSE_;
- }
- r__1 = b / 2;
- r__2 = b / 100;
- f = slamc3_(&r__1, &r__2);
- c = slamc3_(&f, &a);
- if (lrnd && c == a) {
- lrnd = FALSE_;
- }
-
-/* Try and decide whether rounding is done in the IEEE 'round
- to
- nearest' style. B/2 is half a unit in the last place of the
-two
- numbers A and SAVEC. Furthermore, A is even, i.e. has last
-bit
- zero, and SAVEC is odd. Thus adding B/2 to A should not cha
-nge
- A, but adding B/2 to SAVEC should change SAVEC. */
-
- r__1 = b / 2;
- t1 = slamc3_(&r__1, &a);
- r__1 = b / 2;
- t2 = slamc3_(&r__1, &savec);
- lieee1 = t1 == a && t2 > savec && lrnd;
-
-/* Now find the mantissa, t. It should be the integer part
- of
- log to the base beta of a, however it is safer to determine
- t
- by powering. So we find t as the smallest positive integer
-for
- which
-
- fl( beta**t + 1.0 ) = 1.0. */
-
- lt = 0;
- a = 1.f;
- c = 1.f;
-
-/* + WHILE( C.EQ.ONE )LOOP */
-L30:
- if (c == one) {
- ++lt;
- a *= lbeta;
- c = slamc3_(&a, &one);
- r__1 = -(double)a;
- c = slamc3_(&c, &r__1);
- goto L30;
- }
-/* + END WHILE */
-
- }
-
- *beta = lbeta;
- *t = lt;
- *rnd = lrnd;
- *ieee1 = lieee1;
- return 0;
-
-/* End of SLAMC1 */
-
-} /* slamc1_ */
-
-
-/* Subroutine */
-
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- SLAMC2 determines the machine parameters specified in its argument
- list.
-
- Arguments
- =========
-
- BETA (output) INT
- The base of the machine.
-
- T (output) INT
- The number of ( BETA ) digits in the mantissa.
-
- RND (output) INT
- Specifies whether proper rounding ( RND = .TRUE. ) or
- chopping ( RND = .FALSE. ) occurs in addition. This may not
-
- be a reliable guide to the way in which the machine performs
-
- its arithmetic.
-
- EPS (output) FLOAT
- The smallest positive number such that
-
- fl( 1.0 - EPS ) .LT. 1.0,
-
- where fl denotes the computed value.
-
- EMIN (output) INT
- The minimum exponent before (gradual) underflow occurs.
-
- RMIN (output) FLOAT
- The smallest normalized number for the machine, given by
- BASE**( EMIN - 1 ), where BASE is the floating point value
-
- of BETA.
-
- EMAX (output) INT
- The maximum exponent before overflow occurs.
-
- RMAX (output) FLOAT
- The largest positive number for the machine, given by
- BASE**EMAX * ( 1 - EPS ), where BASE is the floating point
-
- value of BETA.
-
- Further Details
- ===============
-
- The computation of EPS is based on a routine PARANOIA by
- 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;
-
- /* Initialized data */
- static int first = TRUE_;
- static int iwarn = FALSE_;
- /* System generated locals */
- int i__1;
- float r__1, r__2, r__3, r__4, r__5;
- /* Builtin functions */
- double pow_ri(float *, int *);
- /* Local variables */
- static int ieee;
- static float half;
- static int lrnd;
- static float leps, zero, a, b, c;
- static int i, lbeta;
- static float rbase;
- static int lemin, lemax, gnmin;
- static float small;
- static int gpmin;
- static float third, lrmin, lrmax, sixth;
- static int lieee1;
- extern /* Subroutine */ int slamc1_(int *, int *, int *,
- int *);
- extern double slamc3_(float *, float *);
- extern /* Subroutine */ int slamc4_(int *, float *, int *),
- slamc5_(int *, int *, int *, int *, int *,
- float *);
- static int lt, ngnmin, ngpmin;
- static float one, two;
-
-
-
- if (first) {
- first = FALSE_;
- zero = 0.f;
- one = 1.f;
- two = 2.f;
-
-/* LBETA, LT, LRND, LEPS, LEMIN and LRMIN are the local values
- of
- BETA, T, RND, EPS, EMIN and RMIN.
-
- Throughout this routine we use the function SLAMC3 to ens
-ure
- that relevant values are stored and not held in registers,
- or
- are not affected by optimizers.
-
- SLAMC1 returns the parameters LBETA, LT, LRND and LIEEE1.
-*/
-
- slamc1_(&lbeta, <, &lrnd, &lieee1);
-
-/* Start to find EPS. */
-
- b = (float) lbeta;
- i__1 = -lt;
- a = pow_ri(&b, &i__1);
- leps = a;
-
-/* Try some tricks to see whether or not this is the correct E
-PS. */
-
- b = two / 3;
- half = one / 2;
- r__1 = -(double)half;
- sixth = slamc3_(&b, &r__1);
- third = slamc3_(&sixth, &sixth);
- r__1 = -(double)half;
- b = slamc3_(&third, &r__1);
- b = slamc3_(&b, &sixth);
- b = dabs(b);
- if (b < leps) {
- b = leps;
- }
-
- leps = 1.f;
-
-/* + WHILE( ( LEPS.GT.B ).AND.( B.GT.ZERO ) )LOOP */
-L10:
- if (leps > b && b > zero) {
- leps = b;
- r__1 = half * leps;
-/* Computing 5th power */
- r__3 = two, r__4 = r__3, r__3 *= r__3;
-/* Computing 2nd power */
- r__5 = leps;
- r__2 = r__4 * (r__3 * r__3) * (r__5 * r__5);
- c = slamc3_(&r__1, &r__2);
- r__1 = -(double)c;
- c = slamc3_(&half, &r__1);
- b = slamc3_(&half, &c);
- r__1 = -(double)b;
- c = slamc3_(&half, &r__1);
- b = slamc3_(&half, &c);
- goto L10;
- }
-/* + END WHILE */
-
- if (a < leps) {
- leps = a;
- }
-
-/* Computation of EPS complete.
-
- Now find EMIN. Let A = + or - 1, and + or - (1 + BASE**(-3
-)).
- Keep dividing A by BETA until (gradual) underflow occurs. T
-his
- is detected when we cannot recover the previous A. */
-
- rbase = one / lbeta;
- small = one;
- for (i = 1; i <= 3; ++i) {
- r__1 = small * rbase;
- small = slamc3_(&r__1, &zero);
-/* L20: */
- }
- a = slamc3_(&one, &small);
- slamc4_(&ngpmin, &one, &lbeta);
- r__1 = -(double)one;
- slamc4_(&ngnmin, &r__1, &lbeta);
- slamc4_(&gpmin, &a, &lbeta);
- r__1 = -(double)a;
- slamc4_(&gnmin, &r__1, &lbeta);
- ieee = FALSE_;
-
- if (ngpmin == ngnmin && gpmin == gnmin) {
- if (ngpmin == gpmin) {
- lemin = ngpmin;
-/* ( Non twos-complement machines, no gradual under
-flow;
- e.g., VAX ) */
- } else if (gpmin - ngpmin == 3) {
- lemin = ngpmin - 1 + lt;
- ieee = TRUE_;
-/* ( Non twos-complement machines, with gradual und
-erflow;
- e.g., IEEE standard followers ) */
- } else {
- lemin = min(ngpmin,gpmin);
-/* ( A guess; no known machine ) */
- iwarn = TRUE_;
- }
-
- } else if (ngpmin == gpmin && ngnmin == gnmin) {
- if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1) {
- lemin = max(ngpmin,ngnmin);
-/* ( Twos-complement machines, no gradual underflow
-;
- e.g., CYBER 205 ) */
- } else {
- lemin = min(ngpmin,ngnmin);
-/* ( A guess; no known machine ) */
- iwarn = TRUE_;
- }
-
- } else if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1 && gpmin == gnmin)
- {
- if (gpmin - min(ngpmin,ngnmin) == 3) {
- lemin = max(ngpmin,ngnmin) - 1 + lt;
-/* ( Twos-complement machines with gradual underflo
-w;
- no known machine ) */
- } else {
- lemin = min(ngpmin,ngnmin);
-/* ( A guess; no known machine ) */
- iwarn = TRUE_;
- }
-
- } else {
-/* Computing MIN */
- i__1 = min(ngpmin,ngnmin), i__1 = min(i__1,gpmin);
- lemin = min(i__1,gnmin);
-/* ( A guess; no known machine ) */
- iwarn = TRUE_;
- }
-/* **
- Comment out this if block if EMIN is ok */
- if (iwarn) {
- first = TRUE_;
- printf("\n\n WARNING. The value EMIN may be incorrect:- ");
- printf("EMIN = %8i\n",lemin);
- printf("If, after inspection, the value EMIN looks acceptable");
- printf("please comment out \n the IF block as marked within the");
- printf("code of routine SLAMC2, \n otherwise supply EMIN");
- printf("explicitly.\n");
- }
-/* **
-
- Assume IEEE arithmetic if we found denormalised numbers abo
-ve,
- or if arithmetic seems to round in the IEEE style, determi
-ned
- in routine SLAMC1. A true IEEE machine should have both thi
-ngs
- true; however, faulty machines may have one or the other. */
-
- ieee = ieee || lieee1;
-
-/* Compute RMIN by successive division by BETA. We could comp
-ute
- RMIN as BASE**( EMIN - 1 ), but some machines underflow dur
-ing
- this computation. */
-
- lrmin = 1.f;
- i__1 = 1 - lemin;
- for (i = 1; i <= 1-lemin; ++i) {
- r__1 = lrmin * rbase;
- lrmin = slamc3_(&r__1, &zero);
-/* L30: */
- }
-
-/* Finally, call SLAMC5 to compute EMAX and RMAX. */
-
- slamc5_(&lbeta, <, &lemin, &ieee, &lemax, &lrmax);
- }
-
- *beta = lbeta;
- *t = lt;
- *rnd = lrnd;
- *eps = leps;
- *emin = lemin;
- *rmin = lrmin;
- *emax = lemax;
- *rmax = lrmax;
-
- return 0;
-
-
-/* End of SLAMC2 */
-
-} /* slamc2_ */
-
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- SLAMC3 is intended to force A and B to be stored prior to doing
-
- the addition of A and B , for use in situations where optimizers
-
- might hold one of these in a register.
-
- Arguments
- =========
-
- A, B (input) FLOAT
- The values A and B.
-
- =====================================================================
-</pre>
-*/
-
-double slamc3_(float *a, float *b)
-{
-
-/* >>Start of File<<
- System generated locals */
- float ret_val;
-
-
-
- ret_val = *a + *b;
-
- return ret_val;
-
-/* End of SLAMC3 */
-
-} /* slamc3_ */
-
-
-/* Subroutine */
-
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- SLAMC4 is a service routine for SLAMC2.
-
- Arguments
- =========
-
- EMIN (output) EMIN
- The minimum exponent before (gradual) underflow, computed by
-
- setting A = START and dividing by BASE until the previous A
- can not be recovered.
-
- START (input) FLOAT
- The starting point for determining EMIN.
-
- BASE (input) INT
- The base of the machine.
-
- =====================================================================
-</pre>
-*/
-
-int slamc4_(int *emin, float *start, int *base)
-{
- /* System generated locals */
- int i__1;
- float r__1;
- /* Local variables */
- static float zero, a;
- static int i;
- static float rbase, b1, b2, c1, c2, d1, d2;
- extern double slamc3_(float *, float *);
- static float one;
-
-
-
- a = *start;
- one = 1.f;
- rbase = one / *base;
- zero = 0.f;
- *emin = 1;
- r__1 = a * rbase;
- b1 = slamc3_(&r__1, &zero);
- c1 = a;
- c2 = a;
- d1 = a;
- d2 = a;
-/* + WHILE( ( C1.EQ.A ).AND.( C2.EQ.A ).AND.
- $ ( D1.EQ.A ).AND.( D2.EQ.A ) )LOOP */
-L10:
- if (c1 == a && c2 == a && d1 == a && d2 == a) {
- --(*emin);
- a = b1;
- r__1 = a / *base;
- b1 = slamc3_(&r__1, &zero);
- r__1 = b1 * *base;
- c1 = slamc3_(&r__1, &zero);
- d1 = zero;
- i__1 = *base;
- for (i = 1; i <= *base; ++i) {
- d1 += b1;
-/* L20: */
- }
- r__1 = a * rbase;
- b2 = slamc3_(&r__1, &zero);
- r__1 = b2 / rbase;
- c2 = slamc3_(&r__1, &zero);
- d2 = zero;
- i__1 = *base;
- for (i = 1; i <= *base; ++i) {
- d2 += b2;
-/* L30: */
- }
- goto L10;
- }
-/* + END WHILE */
-
- return 0;
-
-/* End of SLAMC4 */
-
-} /* slamc4_ */
-
-
-/* Subroutine */
-/*! \brief
-
-<pre>
- Purpose
- =======
-
- SLAMC5 attempts to compute RMAX, the largest machine floating-point
- number, without overflow. It assumes that EMAX + abs(EMIN) 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,
-
- EMAX = 28718). It will also fail if the value supplied for EMIN is
- too large (i.e. too close to zero), probably with overflow.
-
- Arguments
- =========
-
- BETA (input) INT
- The base of floating-point arithmetic.
-
- P (input) INT
- The number of base BETA digits in the mantissa of a
- floating-point value.
-
- EMIN (input) INT
- The minimum exponent before (gradual) underflow.
-
- IEEE (input) INT
- A logical flag specifying whether or not the arithmetic
- system is thought to comply with the IEEE standard.
-
- EMAX (output) INT
- The largest exponent before overflow
-
- RMAX (output) FLOAT
- The largest machine floating-point number.
-
- =====================================================================
-
-
-
- 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).
-</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;
-
- /* System generated locals */
- int i__1;
- float r__1;
- /* Local variables */
- static int lexp;
- static float oldy;
- static int uexp, i;
- static float y, z;
- static int nbits;
- extern double slamc3_(float *, float *);
- static float recbas;
- static int exbits, expsum, try__;
-
-
-
- lexp = 1;
- exbits = 1;
-L10:
- try__ = lexp << 1;
- if (try__ <= -(*emin)) {
- lexp = try__;
- ++exbits;
- goto L10;
- }
- if (lexp == -(*emin)) {
- uexp = lexp;
- } else {
- uexp = try__;
- ++exbits;
- }
-
-/* Now -LEXP is less than or equal to EMIN, and -UEXP is greater
- than or equal to EMIN. EXBITS is the number of bits needed to
- store the exponent. */
-
- if (uexp + *emin > -lexp - *emin) {
- expsum = lexp << 1;
- } else {
- expsum = uexp << 1;
- }
-
-/* EXPSUM is the exponent range, approximately equal to
- EMAX - EMIN + 1 . */
-
- *emax = expsum + *emin - 1;
- nbits = exbits + 1 + *p;
-
-/* NBITS is the total number of bits needed to store a
- floating-point number. */
-
- if (nbits % 2 == 1 && *beta == 2) {
-
-/* Either there are an odd number of bits used to store a
- floating-point number, which is unlikely, or some bits are
-
- not used in the representation of numbers, which is possible
-,
- (e.g. Cray machines) or the mantissa has an implicit bit,
- (e.g. IEEE machines, Dec Vax machines), which is perhaps the
-
- most likely. We have to assume the last alternative.
- If this is true, then we need to reduce EMAX by one because
-
- there must be some way of representing zero in an implicit-b
-it
- system. On machines like Cray, we are reducing EMAX by one
-
- unnecessarily. */
-
- --(*emax);
- }
-
- if (*ieee) {
-
-/* Assume we are on an IEEE machine which reserves one exponent
-
- for infinity and NaN. */
-
- --(*emax);
- }
-
-/* Now create RMAX, the largest machine number, which should
- be equal to (1.0 - BETA**(-P)) * BETA**EMAX .
-
- First compute 1.0 - BETA**(-P), being careful that the
- result is less than 1.0 . */
-
- recbas = 1.f / *beta;
- z = *beta - 1.f;
- y = 0.f;
- i__1 = *p;
- for (i = 1; i <= *p; ++i) {
- z *= recbas;
- if (y < 1.f) {
- oldy = y;
- }
- y = slamc3_(&y, &z);
-/* L20: */
- }
- if (y >= 1.f) {
- y = oldy;
- }
-
-/* Now multiply by BETA**EMAX to get RMAX. */
-
- i__1 = *emax;
- for (i = 1; i <= *emax; ++i) {
- r__1 = y * *beta;
- y = slamc3_(&r__1, &c_b5);
-/* L30: */
- }
-
- *rmax = y;
- return 0;
-
-/* End of SLAMC5 */
-
-} /* slamc5_ */
-
-
-double pow_ri(float *ap, int *bp)
-{
-double pow, x;
-int n;
-
-pow = 1;
-x = *ap;
-n = *bp;
-
-if(n != 0)
- {
- if(n < 0)
- {
- n = -n;
- x = 1/x;
- }
- for( ; ; )
- {
- if(n & 01)
- pow *= x;
- if(n >>= 1)
- x *= x;
- else
- break;
- }
- }
-return(pow);
-}
diff --git a/SRC/slangs.c b/SRC/slangs.c
deleted file mode 100644
index d765f2d..0000000
--- a/SRC/slangs.c
+++ /dev/null
@@ -1,119 +0,0 @@
-
-/*! @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
- * History: Modified from lapack routine SLANGE
- */
-#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)
-{
-
- /* Local variables */
- NCformat *Astore;
- float *Aval;
- int i, j, irow;
- float value, sum;
- float *rwork;
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- if ( SUPERLU_MIN(A->nrow, A->ncol) == 0) {
- value = 0.;
-
- } else if (lsame_(norm, "M")) {
- /* Find max(abs(A(i,j))). */
- value = 0.;
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
- value = SUPERLU_MAX( value, fabs( Aval[i]) );
-
- } else if (lsame_(norm, "O") || *(unsigned char *)norm == '1') {
- /* Find norm1(A). */
- value = 0.;
- for (j = 0; j < A->ncol; ++j) {
- sum = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
- sum += fabs(Aval[i]);
- value = SUPERLU_MAX(value,sum);
- }
-
- } else if (lsame_(norm, "I")) {
- /* Find normI(A). */
- if ( !(rwork = (float *) SUPERLU_MALLOC(A->nrow * sizeof(float))) )
- ABORT("SUPERLU_MALLOC fails for rwork.");
- for (i = 0; i < A->nrow; ++i) rwork[i] = 0.;
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++) {
- irow = Astore->rowind[i];
- rwork[irow] += fabs(Aval[i]);
- }
- value = 0.;
- for (i = 0; i < A->nrow; ++i)
- value = SUPERLU_MAX(value, rwork[i]);
-
- SUPERLU_FREE (rwork);
-
- } else if (lsame_(norm, "F") || lsame_(norm, "E")) {
- /* Find normF(A). */
- ABORT("Not implemented.");
- } else
- ABORT("Illegal norm specified.");
-
- return (value);
-
-} /* slangs */
-
diff --git a/SRC/slaqgs.c b/SRC/slaqgs.c
deleted file mode 100644
index dcadea0..0000000
--- a/SRC/slaqgs.c
+++ /dev/null
@@ -1,145 +0,0 @@
-
-/*! @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
- * History: Modified from LAPACK routine SLAQGE
- */
-#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)
-{
-
-
-#define THRESH (0.1)
-
- /* Local variables */
- NCformat *Astore;
- float *Aval;
- int i, j, irow;
- float large, small, cj;
-
-
- /* Quick return if possible */
- if (A->nrow <= 0 || A->ncol <= 0) {
- *(unsigned char *)equed = 'N';
- return;
- }
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Initialize LARGE and SMALL. */
- small = slamch_("Safe minimum") / slamch_("Precision");
- large = 1. / small;
-
- if (rowcnd >= THRESH && amax >= small && amax <= large) {
- if (colcnd >= THRESH)
- *(unsigned char *)equed = 'N';
- else {
- /* Column scaling */
- for (j = 0; j < A->ncol; ++j) {
- cj = c[j];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- Aval[i] *= cj;
- }
- }
- *(unsigned char *)equed = 'C';
- }
- } else if (colcnd >= THRESH) {
- /* Row scaling, no column scaling */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- Aval[i] *= r[irow];
- }
- *(unsigned char *)equed = 'R';
- } else {
- /* Row and column scaling */
- for (j = 0; j < A->ncol; ++j) {
- cj = c[j];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- Aval[i] *= cj * r[irow];
- }
- }
- *(unsigned char *)equed = 'B';
- }
-
- return;
-
-} /* slaqgs */
-
diff --git a/SRC/sldperm.c b/SRC/sldperm.c
deleted file mode 100644
index acb82bc..0000000
--- a/SRC/sldperm.c
+++ /dev/null
@@ -1,168 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 7bcd1bc..0000000
--- a/SRC/slu_Cnames.h
+++ /dev/null
@@ -1,458 +0,0 @@
-/*! @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
- *
- * 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>
- */
-#ifndef __SUPERLU_CNAMES /* allow multiple inclusions */
-#define __SUPERLU_CNAMES
-
-
-#define ADD_ 0
-#define ADD__ 1
-#define NOCHANGE 2
-#define UPCASE 3
-#define OLD_CRAY 4
-#define C_CALL 5
-
-#ifdef UpCase
-#define F77_CALL_C UPCASE
-#endif
-
-#ifdef NoChange
-#define F77_CALL_C NOCHANGE
-#endif
-
-#ifdef Add_
-#define F77_CALL_C ADD_
-#endif
-
-#ifdef 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_
-#endif
-
-
-#if (F77_CALL_C == ADD_)
-/*
- * These defines set up the naming scheme required to have a fortran 77
- * routine call a C routine
- * No redefinition necessary to have following Fortran to C interface:
- * FORTRAN CALL C DECLARATION
- * call dgemm(...) void dgemm_(...)
- *
- * This is the default.
- */
-
-#endif
-
-#if (F77_CALL_C == ADD__)
-/*
- * These defines set up the naming scheme required to have a fortran 77
- * routine call a C routine
- * for following Fortran to C interface:
- * FORTRAN CALL C DECLARATION
- * call dgemm(...) void dgemm__(...)
- */
-/* 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 saxpy_ saxpy__
-#define ssyr2_ ssyr2__
-#define srot_ srot__
-#define sgemv_ sgemv__
-#define strsv_ strsv__
-#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 caxpy_ caxpy__
-#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 zaxpy_ zaxpy__
-#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 == UPCASE)
-/*
- * 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 DGEMM(...)
- */
-/* 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 saxpy_ SAXPY
-#define ssyr2_ SSYR2
-#define srot_ SROT
-#define sgemv_ SGEMV
-#define strsv_ STRSV
-#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
-#define dscal_ SSCAL
-#define dger_ SGER
-#define dnrm2_ SNRM2
-#define dsymv_ SSYMV
-#define ddot_ SDOT
-#define dsyr2_ SSYR2
-#define drot_ SROT
-#define dgemv_ SGEMV
-#define dtrsv_ STRSV
-#define dgemm_ SGEMM
-#define dtrsm_ STRSM
-
-#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
-#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 == NOCHANGE)
-/*
- * These defines set up the naming scheme required to have a fortran 77
- * routine call a C routine
- * for following Fortran to C interface:
- * FORTRAN CALL C DECLARATION
- * call dgemm(...) void dgemm(...)
- */
-/* 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 saxpy_ saxpy
-#define ssyr2_ ssyr2
-#define srot_ srot
-#define sgemv_ sgemv
-#define strsv_ strsv
-#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
-
-
-#endif /* __SUPERLU_CNAMES */
diff --git a/SRC/slu_cdefs.h b/SRC/slu_cdefs.h
deleted file mode 100644
index 24d1374..0000000
--- a/SRC/slu_cdefs.h
+++ /dev/null
@@ -1,284 +0,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.
- * November, 2010
- *
- * Global data structures used in LU factorization -
- *
- * 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
- *
- * (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
- *
- * 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.
- *
- * 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.
- *
- * The last column structures (for pruning) will be removed
- * after the numercial LU factorization phase.
- *
- * (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.
- *
- * (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>
- */
-#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;
- int *lsub; /* compressed L subscripts */
- int *xlsub;
- complex *lusup; /* L supernodes */
- int *xlusup;
- complex *ucol; /* U columns */
- int *usub;
- int *xusub;
- int nzlmax; /* current max size of lsub */
- int nzumax; /* " " " ucol */
- 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;
-
-
-/* -------- Prototypes -------- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*! \brief Driver routines */
-extern void
-cgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
- SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
-extern void
-cgssvx(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 *);
- /* 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 *);
-
-
-/*! \brief Supernodal LU factor related */
-extern void
-cCreate_CompCol_Matrix(SuperMatrix *, int, int, int, complex *,
- int *, int *, Stype_t, Dtype_t, Mtype_t);
-extern void
-cCreate_CompRow_Matrix(SuperMatrix *, int, int, int, complex *,
- int *, int *, Stype_t, Dtype_t, Mtype_t);
-extern void
-cCopy_CompCol_Matrix(SuperMatrix *, SuperMatrix *);
-extern void
-cCreate_Dense_Matrix(SuperMatrix *, int, int, complex *, int,
- Stype_t, Dtype_t, Mtype_t);
-extern void
-cCreate_SuperNode_Matrix(SuperMatrix *, int, int, int, complex *,
- int *, int *, int *, int *, int *,
- Stype_t, Dtype_t, Mtype_t);
-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*,
- int, int, int*, void *, int, int *, int *,
- SuperMatrix *, SuperMatrix *, SuperLUStat_t*, int *);
-extern int csnode_dfs (const int, const int, const int *, const int *,
- const int *, int *, int *, GlobalLU_t *);
-extern int csnode_bmod (const int, const int, const int, complex *,
- complex *, GlobalLU_t *, SuperLUStat_t*);
-extern void cpanel_dfs (const int, const int, const int, SuperMatrix *,
- int *, int *, complex *, int *, int *, int *,
- int *, int *, int *, int *, GlobalLU_t *);
-extern void cpanel_bmod (const int, const int, const int, const int,
- complex *, complex *, int *, int *,
- GlobalLU_t *, SuperLUStat_t*);
-extern int ccolumn_dfs (const int, const int, int *, int *, int *, int *,
- int *, int *, int *, int *, int *, GlobalLU_t *);
-extern int ccolumn_bmod (const int, const int, complex *,
- complex *, int *, int *, int,
- GlobalLU_t *, SuperLUStat_t*);
-extern int ccopy_to_ucol (int, int, int *, int *, int *,
- complex *, GlobalLU_t *);
-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 *);
-extern void creadmt (int *, int *, int *, complex **, int **, int **);
-extern void cGenXtrue (int, int, complex *, int);
-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);
-
-
-/*! \brief Driver related */
-
-extern void cgsequ (SuperMatrix *, float *, float *, float *,
- float *, float *, int *);
-extern void claqgs (SuperMatrix *, float *, float *, float,
- float, float, char *);
-extern void cgscon (char *, SuperMatrix *, SuperMatrix *,
- float, float *, SuperLUStat_t*, int *);
-extern float cPivotGrowth(int, SuperMatrix *, int *,
- SuperMatrix *, SuperMatrix *);
-extern void cgsrfs (trans_t, SuperMatrix *, SuperMatrix *,
- SuperMatrix *, int *, int *, char *, float *,
- float *, SuperMatrix *, SuperMatrix *,
- float *, float *, SuperLUStat_t*, int *);
-
-extern int sp_ctrsv (char *, char *, char *, SuperMatrix *,
- SuperMatrix *, complex *, SuperLUStat_t*, int *);
-extern int sp_cgemv (char *, complex, SuperMatrix *, complex *,
- int, complex, complex *, int);
-
-extern int sp_cgemm (char *, char *, int, int, int, complex,
- SuperMatrix *, complex *, int, complex,
- complex *, int);
-extern float slamch_(char *);
-
-
-/*! \brief Memory-related */
-extern int cLUMemInit (fact_t, void *, int, int, int, int, int,
- 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 *);
-
-extern complex *complexMalloc(int);
-extern complex *complexCalloc(int);
-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 *);
-
-/*! \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);
-
-
-/*! \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 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
- }
-#endif
-
-#endif /* __SUPERLU_cSP_DEFS */
-
diff --git a/SRC/slu_dcomplex.h b/SRC/slu_dcomplex.h
deleted file mode 100644
index 386ad68..0000000
--- a/SRC/slu_dcomplex.h
+++ /dev/null
@@ -1,78 +0,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
-
-
-#ifndef DCOMPLEX_INCLUDE
-#define DCOMPLEX_INCLUDE
-
-typedef struct { double r, i; } doublecomplex;
-
-
-/* Macro definitions */
-
-/*! \brief Complex Addition c = a + b */
-#define z_add(c, a, b) { (c)->r = (a)->r + (b)->r; \
- (c)->i = (a)->i + (b)->i; }
-
-/*! \brief Complex Subtraction c = a - b */
-#define z_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \
- (c)->i = (a)->i - (b)->i; }
-
-/*! \brief Complex-Double Multiplication */
-#define zd_mult(c, a, b) { (c)->r = (a)->r * (b); \
- (c)->i = (a)->i * (b); }
-
-/*! \brief Complex-Complex Multiplication */
-#define zz_mult(c, a, b) { \
- double 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; \
- }
-
-#define zz_conj(a, b) { \
- (a)->r = (b)->r; \
- (a)->i = -((b)->i); \
- }
-
-/*! \brief Complex equality testing */
-#define z_eq(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i )
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Prototypes for functions in dcomplex.c */
-void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
-double z_abs(doublecomplex *); /* exact */
-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
- }
-#endif
-
-#endif
-
-#endif /* __SUPERLU_DCOMPLEX */
diff --git a/SRC/slu_ddefs.h b/SRC/slu_ddefs.h
deleted file mode 100644
index 199fa96..0000000
--- a/SRC/slu_ddefs.h
+++ /dev/null
@@ -1,281 +0,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.
- * November, 2010
- *
- * Global data structures used in LU factorization -
- *
- * 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
- *
- * (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
- *
- * 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.
- *
- * 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.
- *
- * The last column structures (for pruning) will be removed
- * after the numercial LU factorization phase.
- *
- * (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.
- *
- * (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>
- */
-#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;
- int *lsub; /* compressed L subscripts */
- int *xlsub;
- double *lusup; /* L supernodes */
- int *xlusup;
- double *ucol; /* U columns */
- int *usub;
- int *xusub;
- int nzlmax; /* current max size of lsub */
- int nzumax; /* " " " ucol */
- 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;
-
-
-/* -------- Prototypes -------- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*! \brief Driver routines */
-extern void
-dgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
- SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
-extern void
-dgssvx(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 *);
- /* 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 *);
-
-
-/*! \brief Supernodal LU factor related */
-extern void
-dCreate_CompCol_Matrix(SuperMatrix *, int, int, int, double *,
- int *, int *, Stype_t, Dtype_t, Mtype_t);
-extern void
-dCreate_CompRow_Matrix(SuperMatrix *, int, int, int, double *,
- int *, int *, Stype_t, Dtype_t, Mtype_t);
-extern void
-dCopy_CompCol_Matrix(SuperMatrix *, SuperMatrix *);
-extern void
-dCreate_Dense_Matrix(SuperMatrix *, int, int, double *, int,
- Stype_t, Dtype_t, Mtype_t);
-extern void
-dCreate_SuperNode_Matrix(SuperMatrix *, int, int, int, double *,
- int *, int *, int *, int *, int *,
- Stype_t, Dtype_t, Mtype_t);
-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*,
- int, int, int*, void *, int, int *, int *,
- SuperMatrix *, SuperMatrix *, SuperLUStat_t*, int *);
-extern int dsnode_dfs (const int, const int, const int *, const int *,
- const int *, int *, int *, GlobalLU_t *);
-extern int dsnode_bmod (const int, const int, const int, double *,
- double *, GlobalLU_t *, SuperLUStat_t*);
-extern void dpanel_dfs (const int, const int, const int, SuperMatrix *,
- int *, int *, double *, int *, int *, int *,
- int *, int *, int *, int *, GlobalLU_t *);
-extern void dpanel_bmod (const int, const int, const int, const int,
- double *, double *, int *, int *,
- GlobalLU_t *, SuperLUStat_t*);
-extern int dcolumn_dfs (const int, const int, int *, int *, int *, int *,
- int *, int *, int *, int *, int *, GlobalLU_t *);
-extern int dcolumn_bmod (const int, const int, double *,
- double *, int *, int *, int,
- GlobalLU_t *, SuperLUStat_t*);
-extern int dcopy_to_ucol (int, int, int *, int *, int *,
- double *, GlobalLU_t *);
-extern int dpivotL (const int, const double, int *, int *,
- int *, int *, int *, GlobalLU_t *, SuperLUStat_t*);
-extern void dpruneL (const int, const int *, const int, const int,
- const int *, const int *, int *, GlobalLU_t *);
-extern void dreadmt (int *, int *, int *, double **, int **, int **);
-extern void dGenXtrue (int, int, double *, int);
-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);
-
-
-/*! \brief Driver related */
-
-extern void dgsequ (SuperMatrix *, double *, double *, double *,
- double *, double *, int *);
-extern void dlaqgs (SuperMatrix *, double *, double *, double,
- double, double, char *);
-extern void dgscon (char *, SuperMatrix *, SuperMatrix *,
- double, double *, SuperLUStat_t*, int *);
-extern double dPivotGrowth(int, SuperMatrix *, int *,
- SuperMatrix *, SuperMatrix *);
-extern void dgsrfs (trans_t, SuperMatrix *, SuperMatrix *,
- SuperMatrix *, int *, int *, char *, double *,
- double *, SuperMatrix *, SuperMatrix *,
- double *, double *, SuperLUStat_t*, int *);
-
-extern int sp_dtrsv (char *, char *, char *, SuperMatrix *,
- SuperMatrix *, double *, SuperLUStat_t*, int *);
-extern int sp_dgemv (char *, double, SuperMatrix *, double *,
- int, double, double *, int);
-
-extern int sp_dgemm (char *, char *, int, int, int, double,
- SuperMatrix *, double *, int, double,
- double *, int);
-extern double dlamch_(char *);
-
-
-/*! \brief Memory-related */
-extern int dLUMemInit (fact_t, void *, int, int, int, int, int,
- 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 *);
-
-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 *);
-
-/*! \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);
-
-
-/*! \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 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
- }
-#endif
-
-#endif /* __SUPERLU_dSP_DEFS */
-
diff --git a/SRC/slu_scomplex.h b/SRC/slu_scomplex.h
deleted file mode 100644
index c17490d..0000000
--- a/SRC/slu_scomplex.h
+++ /dev/null
@@ -1,78 +0,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
-
-
-#ifndef SCOMPLEX_INCLUDE
-#define SCOMPLEX_INCLUDE
-
-typedef struct { float r, i; } complex;
-
-
-/* Macro definitions */
-
-/*! \brief Complex Addition c = a + b */
-#define c_add(c, a, b) { (c)->r = (a)->r + (b)->r; \
- (c)->i = (a)->i + (b)->i; }
-
-/*! \brief Complex Subtraction c = a - b */
-#define c_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \
- (c)->i = (a)->i - (b)->i; }
-
-/*! \brief Complex-Double Multiplication */
-#define cs_mult(c, a, b) { (c)->r = (a)->r * (b); \
- (c)->i = (a)->i * (b); }
-
-/*! \brief Complex-Complex Multiplication */
-#define cc_mult(c, a, b) { \
- float 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; \
- }
-
-#define cc_conj(a, b) { \
- (a)->r = (b)->r; \
- (a)->i = -((b)->i); \
- }
-
-/*! \brief Complex equality testing */
-#define c_eq(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i )
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Prototypes for functions in scomplex.c */
-void c_div(complex *, complex *, complex *);
-double c_abs(complex *); /* exact */
-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
- }
-#endif
-
-#endif
-
-#endif /* __SUPERLU_SCOMPLEX */
diff --git a/SRC/slu_sdefs.h b/SRC/slu_sdefs.h
deleted file mode 100644
index 745d76f..0000000
--- a/SRC/slu_sdefs.h
+++ /dev/null
@@ -1,281 +0,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.
- * November, 2010
- *
- * Global data structures used in LU factorization -
- *
- * 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
- *
- * (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
- *
- * 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.
- *
- * 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.
- *
- * The last column structures (for pruning) will be removed
- * after the numercial LU factorization phase.
- *
- * (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.
- *
- * (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>
- */
-#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;
- int *lsub; /* compressed L subscripts */
- int *xlsub;
- float *lusup; /* L supernodes */
- int *xlusup;
- float *ucol; /* U columns */
- int *usub;
- int *xusub;
- int nzlmax; /* current max size of lsub */
- int nzumax; /* " " " ucol */
- 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;
-
-
-/* -------- Prototypes -------- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*! \brief Driver routines */
-extern void
-sgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
- SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
-extern void
-sgssvx(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 *);
- /* 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 *);
-
-
-/*! \brief Supernodal LU factor related */
-extern void
-sCreate_CompCol_Matrix(SuperMatrix *, int, int, int, float *,
- int *, int *, Stype_t, Dtype_t, Mtype_t);
-extern void
-sCreate_CompRow_Matrix(SuperMatrix *, int, int, int, float *,
- int *, int *, Stype_t, Dtype_t, Mtype_t);
-extern void
-sCopy_CompCol_Matrix(SuperMatrix *, SuperMatrix *);
-extern void
-sCreate_Dense_Matrix(SuperMatrix *, int, int, float *, int,
- Stype_t, Dtype_t, Mtype_t);
-extern void
-sCreate_SuperNode_Matrix(SuperMatrix *, int, int, int, float *,
- int *, int *, int *, int *, int *,
- Stype_t, Dtype_t, Mtype_t);
-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*,
- int, int, int*, void *, int, int *, int *,
- SuperMatrix *, SuperMatrix *, SuperLUStat_t*, int *);
-extern int ssnode_dfs (const int, const int, const int *, const int *,
- const int *, int *, int *, GlobalLU_t *);
-extern int ssnode_bmod (const int, const int, const int, float *,
- float *, GlobalLU_t *, SuperLUStat_t*);
-extern void spanel_dfs (const int, const int, const int, SuperMatrix *,
- int *, int *, float *, int *, int *, int *,
- int *, int *, int *, int *, GlobalLU_t *);
-extern void spanel_bmod (const int, const int, const int, const int,
- float *, float *, int *, int *,
- GlobalLU_t *, SuperLUStat_t*);
-extern int scolumn_dfs (const int, const int, int *, int *, int *, int *,
- int *, int *, int *, int *, int *, GlobalLU_t *);
-extern int scolumn_bmod (const int, const int, float *,
- float *, int *, int *, int,
- GlobalLU_t *, SuperLUStat_t*);
-extern int scopy_to_ucol (int, int, int *, int *, int *,
- float *, GlobalLU_t *);
-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 *);
-extern void sreadmt (int *, int *, int *, float **, int **, int **);
-extern void sGenXtrue (int, int, float *, int);
-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);
-
-
-/*! \brief Driver related */
-
-extern void sgsequ (SuperMatrix *, float *, float *, float *,
- float *, float *, int *);
-extern void slaqgs (SuperMatrix *, float *, float *, float,
- float, float, char *);
-extern void sgscon (char *, SuperMatrix *, SuperMatrix *,
- float, float *, SuperLUStat_t*, int *);
-extern float sPivotGrowth(int, SuperMatrix *, int *,
- SuperMatrix *, SuperMatrix *);
-extern void sgsrfs (trans_t, SuperMatrix *, SuperMatrix *,
- SuperMatrix *, int *, int *, char *, float *,
- float *, SuperMatrix *, SuperMatrix *,
- float *, float *, SuperLUStat_t*, int *);
-
-extern int sp_strsv (char *, char *, char *, SuperMatrix *,
- SuperMatrix *, float *, SuperLUStat_t*, int *);
-extern int sp_sgemv (char *, float, SuperMatrix *, float *,
- int, float, float *, int);
-
-extern int sp_sgemm (char *, char *, int, int, int, float,
- SuperMatrix *, float *, int, float,
- float *, int);
-extern float slamch_(char *);
-
-
-/*! \brief Memory-related */
-extern int sLUMemInit (fact_t, void *, int, int, int, int, int,
- 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 *);
-
-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 *);
-
-/*! \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);
-
-
-/*! \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 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
- }
-#endif
-
-#endif /* __SUPERLU_sSP_DEFS */
-
diff --git a/SRC/slu_util.h b/SRC/slu_util.h
deleted file mode 100644
index 30b5f9b..0000000
--- a/SRC/slu_util.h
+++ /dev/null
@@ -1,367 +0,0 @@
-/** @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
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-/*
-#ifndef __STDC__
-#include <malloc.h>
-#endif
-*/
-#include <assert.h>
-#include "superlu_enum_consts.h"
-
-/***********************************************************************
- * Macros
- ***********************************************************************/
-#define FIRSTCOL_OF_SNODE(i) (xsup[i])
-/* No of marker arrays used in the symbolic factorization,
- each of size n */
-#define NO_MARKER 3
-#define NUM_TEMPV(m,w,t,b) ( SUPERLU_MAX(m, (t + b)*w) )
-
-#ifndef USER_ABORT
-#define USER_ABORT(msg) superlu_abort_and_exit(msg)
-#endif
-
-#define ABORT(err_msg) \
- { char msg[256];\
- sprintf(msg,"%s at line %d in file %s\n",err_msg,__LINE__, __FILE__);\
- USER_ABORT(msg); }
-
-
-#ifndef USER_MALLOC
-#if 1
-#define USER_MALLOC(size) superlu_malloc(size)
-#else
-/* The following may check out some uninitialized data */
-#define USER_MALLOC(size) memset (superlu_malloc(size), '\x0F', size)
-#endif
-#endif
-
-#define SUPERLU_MALLOC(size) USER_MALLOC(size)
-
-#ifndef USER_FREE
-#define USER_FREE(addr) superlu_free(addr)
-#endif
-
-#define SUPERLU_FREE(addr) USER_FREE(addr)
-
-#define CHECK_MALLOC(where) { \
- extern int superlu_malloc_total; \
- printf("%s: malloc_total %d Bytes\n", \
- where, superlu_malloc_total); \
-}
-
-#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
- ***********************************************************************/
-#define EMPTY (-1)
-/*#define NO (-1)*/
-#define FALSE 0
-#define TRUE 1
-
-#define NO_MEMTYPE 4 /* 0: lusup;
- 1: ucol;
- 2: lsub;
- 3: usub */
-
-#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
-
-
-/***********************************************************************
- * Type definitions
- ***********************************************************************/
-typedef float flops_t;
-typedef unsigned char Logical;
-
-/*
- *-- This contains the options used to control the solution process.
- *
- * Fact (fact_t)
- * Specifies whether or not the factored form of the matrix
- * A is supplied on entry, and if not, how the matrix A should
- * be factorizaed.
- * = DOFACT: The matrix A will be factorized from scratch, and the
- * factors will be stored in L and U.
- * = SamePattern: The matrix A will be factorized assuming
- * that a factorization of a matrix with the same sparsity
- * pattern was performed prior to this one. Therefore, this
- * factorization will reuse column permutation vector
- * ScalePermstruct->perm_c and the column elimination tree
- * LUstruct->etree.
- * = SamePattern_SameRowPerm: The matrix A will be factorized
- * assuming that a factorization of a matrix with the same
- * sparsity pattern and similar numerical values was performed
- * prior to this one. Therefore, this factorization will reuse
- * both row and column scaling factors R and C, both row and
- * column permutation vectors perm_r and perm_c, and the
- * data structure set up from the previous symbolic factorization.
- * = FACTORED: On entry, L, U, perm_r and perm_c contain the
- * factored form of A. If DiagScale is not NOEQUIL, the matrix
- * A has been equilibrated with scaling factors R and C.
- *
- * Equil (yes_no_t)
- * Specifies whether to equilibrate the system (scale A's row and
- * columns to have unit norm).
- *
- * ColPerm (colperm_t)
- * Specifies what type of column permutation to use to reduce fill.
- * = NATURAL: use the natural ordering
- * = 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 by the user
- *
- * Trans (trans_t)
- * Specifies the form of the system of equations:
- * = NOTRANS: A * X = B (No transpose)
- * = TRANS: A**T * X = B (Transpose)
- * = CONJ: A**H * X = B (Transpose)
- *
- * IterRefine (IterRefine_t)
- * Specifies whether to perform iterative refinement.
- * = NO: no iterative refinement
- * = 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 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 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.
- *
- * SolveInitialized (yes_no_t) (only for SuperLU_DIST)
- * Specifies whether the initialization has been performed to the
- * triangular solve.
- *
- * RefineInitialized (yes_no_t) (only for SuperLU_DIST)
- * 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;
- yes_no_t Equil;
- colperm_t ColPerm;
- trans_t Trans;
- IterRefine_t IterRefine;
- double DiagPivotThresh;
- yes_no_t SymmetricMode;
- yes_no_t PivotGrowth;
- yes_no_t ConditionNumber;
- rowperm_t RowPerm;
- 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
- ***********************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void Destroy_SuperMatrix_Store(SuperMatrix *);
-extern void Destroy_CompCol_Matrix(SuperMatrix *);
-extern void Destroy_CompRow_Matrix(SuperMatrix *);
-extern void Destroy_SuperNode_Matrix(SuperMatrix *);
-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*);
-extern void *superlu_malloc (size_t);
-extern int *intMalloc (int);
-extern int *intCalloc (int);
-extern void superlu_free (void*);
-extern void SetIWork (int, int, int, int *, 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 *);
-extern double SuperLU_timer_ ();
-extern int sp_ienv (int);
-extern int lsame_ (char *, char *);
-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 int print_int_vec(char *,int, int *);
-extern int slu_PrintInt10(char *, int, int *);
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* __SUPERLU_UTIL */
diff --git a/SRC/slu_zdefs.h b/SRC/slu_zdefs.h
deleted file mode 100644
index f7ccf87..0000000
--- a/SRC/slu_zdefs.h
+++ /dev/null
@@ -1,284 +0,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.
- * November, 2010
- *
- * Global data structures used in LU factorization -
- *
- * 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
- *
- * (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
- *
- * 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.
- *
- * 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.
- *
- * The last column structures (for pruning) will be removed
- * after the numercial LU factorization phase.
- *
- * (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.
- *
- * (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>
- */
-#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;
- int *lsub; /* compressed L subscripts */
- int *xlsub;
- doublecomplex *lusup; /* L supernodes */
- int *xlusup;
- doublecomplex *ucol; /* U columns */
- int *usub;
- int *xusub;
- int nzlmax; /* current max size of lsub */
- int nzumax; /* " " " ucol */
- 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;
-
-
-/* -------- Prototypes -------- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*! \brief Driver routines */
-extern void
-zgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
- SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
-extern void
-zgssvx(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 *);
- /* 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 *);
-
-
-/*! \brief Supernodal LU factor related */
-extern void
-zCreate_CompCol_Matrix(SuperMatrix *, int, int, int, doublecomplex *,
- int *, int *, Stype_t, Dtype_t, Mtype_t);
-extern void
-zCreate_CompRow_Matrix(SuperMatrix *, int, int, int, doublecomplex *,
- int *, int *, Stype_t, Dtype_t, Mtype_t);
-extern void
-zCopy_CompCol_Matrix(SuperMatrix *, SuperMatrix *);
-extern void
-zCreate_Dense_Matrix(SuperMatrix *, int, int, doublecomplex *, int,
- Stype_t, Dtype_t, Mtype_t);
-extern void
-zCreate_SuperNode_Matrix(SuperMatrix *, int, int, int, doublecomplex *,
- int *, int *, int *, int *, int *,
- Stype_t, Dtype_t, Mtype_t);
-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*,
- int, int, int*, void *, int, int *, int *,
- SuperMatrix *, SuperMatrix *, SuperLUStat_t*, int *);
-extern int zsnode_dfs (const int, const int, const int *, const int *,
- const int *, int *, int *, GlobalLU_t *);
-extern int zsnode_bmod (const int, const int, const int, doublecomplex *,
- doublecomplex *, GlobalLU_t *, SuperLUStat_t*);
-extern void zpanel_dfs (const int, const int, const int, SuperMatrix *,
- int *, int *, doublecomplex *, int *, int *, int *,
- int *, int *, int *, int *, GlobalLU_t *);
-extern void zpanel_bmod (const int, const int, const int, const int,
- doublecomplex *, doublecomplex *, int *, int *,
- GlobalLU_t *, SuperLUStat_t*);
-extern int zcolumn_dfs (const int, const int, int *, int *, int *, int *,
- int *, int *, int *, int *, int *, GlobalLU_t *);
-extern int zcolumn_bmod (const int, const int, doublecomplex *,
- doublecomplex *, int *, int *, int,
- GlobalLU_t *, SuperLUStat_t*);
-extern int zcopy_to_ucol (int, int, int *, int *, int *,
- doublecomplex *, GlobalLU_t *);
-extern int zpivotL (const int, const double, int *, int *,
- int *, int *, int *, GlobalLU_t *, SuperLUStat_t*);
-extern void zpruneL (const int, const int *, const int, const int,
- const int *, const int *, int *, GlobalLU_t *);
-extern void zreadmt (int *, int *, int *, doublecomplex **, int **, int **);
-extern void zGenXtrue (int, int, doublecomplex *, int);
-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);
-
-
-/*! \brief Driver related */
-
-extern void zgsequ (SuperMatrix *, double *, double *, double *,
- double *, double *, int *);
-extern void zlaqgs (SuperMatrix *, double *, double *, double,
- double, double, char *);
-extern void zgscon (char *, SuperMatrix *, SuperMatrix *,
- double, double *, SuperLUStat_t*, int *);
-extern double zPivotGrowth(int, SuperMatrix *, int *,
- SuperMatrix *, SuperMatrix *);
-extern void zgsrfs (trans_t, SuperMatrix *, SuperMatrix *,
- SuperMatrix *, int *, int *, char *, double *,
- double *, SuperMatrix *, SuperMatrix *,
- double *, double *, SuperLUStat_t*, int *);
-
-extern int sp_ztrsv (char *, char *, char *, SuperMatrix *,
- SuperMatrix *, doublecomplex *, SuperLUStat_t*, int *);
-extern int sp_zgemv (char *, doublecomplex, SuperMatrix *, doublecomplex *,
- int, doublecomplex, doublecomplex *, int);
-
-extern int sp_zgemm (char *, char *, int, int, int, doublecomplex,
- SuperMatrix *, doublecomplex *, int, doublecomplex,
- doublecomplex *, int);
-extern double dlamch_(char *);
-
-
-/*! \brief Memory-related */
-extern int zLUMemInit (fact_t, void *, int, int, int, int, int,
- 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 *);
-
-extern doublecomplex *doublecomplexMalloc(int);
-extern doublecomplex *doublecomplexCalloc(int);
-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 *);
-
-/*! \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);
-
-
-/*! \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 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
- }
-#endif
-
-#endif /* __SUPERLU_zSP_DEFS */
-
diff --git a/SRC/smemory.c b/SRC/smemory.c
deleted file mode 100644
index 17cedfd..0000000
--- a/SRC/smemory.c
+++ /dev/null
@@ -1,701 +0,0 @@
-
-/*! @file smemory.c
- * \brief Memory details
- *
- * <pre>
- * -- SuperLU routine (version 4.0) --
- * Lawrence Berkeley National Laboratory.
- * June 30, 2009
- * </pre>
- */
-#include "slu_sdefs.h"
-
-
-/* Internal prototypes */
-void *sexpand (int *, MemType,int, int, GlobalLU_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, GlobalLU_t *);
-void *suser_malloc (int, int, GlobalLU_t *);
-void suser_free (int, int, GlobalLU_t *);
-
-/* External prototypes (in memory.c - prec-independent) */
-extern void copy_mem_int (int, void *, void *);
-extern void user_bcopy (char *, char *, int);
-
-
-/* Macros to manipulate stack */
-#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) + \
- (w + 1) * m * sizeof(float) )
-#define Reduce(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */
-
-
-
-
-/*! \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, GlobalLU_t *Glu)
-{
- if ( lwork == 0 ) {
- Glu->MemModel = SYSTEM; /* malloc/free */
- } else if ( lwork > 0 ) {
- 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, GlobalLU_t *Glu)
-{
- void *buf;
-
- if ( StackFull(bytes) ) return (NULL);
-
- if ( which_end == HEAD ) {
- buf = (char*) Glu->stack.array + Glu->stack.top1;
- Glu->stack.top1 += bytes;
- } else {
- Glu->stack.top2 -= bytes;
- buf = (char*) Glu->stack.array + Glu->stack.top2;
- }
-
- Glu->stack.used += bytes;
- return buf;
-}
-
-
-void suser_free(int bytes, int which_end, GlobalLU_t *Glu)
-{
- if ( which_end == HEAD ) {
- Glu->stack.top1 -= bytes;
- } else {
- Glu->stack.top2 += 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.
- * </pre>
- */
-int sQuerySpace(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(float);
-
- /* For LU factors */
- 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.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
- (panel_size + 1.0) * n * dword );
-
- return 0;
-} /* sQuerySpace */
-
-
-/*! \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, float fill_ratio, SuperMatrix *L, SuperMatrix *U,
- GlobalLU_t *Glu, int **iwork, float **dwork)
-{
- int info, iword, dword;
- SCformat *Lstore;
- NCformat *Ustore;
- int *xsup, *supno;
- int *lsub, *xlsub;
- float *lusup;
- int *xlusup;
- float *ucol;
- int *usub, *xusub;
- int nzlmax, nzumax, nzlumax;
-
- iword = sizeof(int);
- dword = sizeof(float);
- Glu->n = n;
- Glu->num_expansions = 0;
-
- 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_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);
- }
-
-#if ( PRNTlevel >= 1 )
- printf("sLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n",
- fill_ratio, 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 *)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 );
- ucol = (float *) sexpand( &nzumax, UCOL, 0, 0, Glu );
- lsub = (int *) sexpand( &nzlmax, LSUB, 0, 0, Glu );
- usub = (int *) sexpand( &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 {
- suser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
- HEAD, Glu);
- }
- nzlumax /= 2;
- nzumax /= 2;
- nzlmax /= 2;
- if ( nzlumax < annz ) {
- printf("Not enough memory to perform factorization.\n");
- return (smemory_usage(nzlmax, nzumax, nzlumax, n) + n);
- }
-#if ( PRNTlevel >= 1)
- printf("sLUMemInit() reduce size: nzlmax %ld, nzumax %ld\n",
- nzlmax, nzumax);
- fflush(stdout);
-#endif
- lusup = (float *) sexpand( &nzlumax, LUSUP, 0, 0, Glu );
- ucol = (float *) sexpand( &nzumax, UCOL, 0, 0, Glu );
- lsub = (int *) sexpand( &nzlmax, LSUB, 0, 0, Glu );
- usub = (int *) sexpand( &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;
- Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
- Glu->stack.size = Glu->stack.top2;
- }
-
- 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;
- 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 = sLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
- if ( info )
- return ( info + smemory_usage(nzlmax, nzumax, nzlumax, n) + n);
-
- ++Glu->num_expansions;
- return 0;
-
-} /* sLUMemInit */
-
-/*! \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, GlobalLU_t *Glu)
-{
- int isize, dsize, extra;
- float *old_ptr;
- 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 ( Glu->MemModel == SYSTEM )
- *iworkptr = (int *) intCalloc(isize/sizeof(int));
- else
- *iworkptr = (int *) suser_malloc(isize, TAIL, Glu);
- if ( ! *iworkptr ) {
- fprintf(stderr, "sLUWorkInit: malloc fails for local iworkptr[]\n");
- return (isize + n);
- }
-
- if ( Glu->MemModel == SYSTEM )
- *dworkptr = (float *) SUPERLU_MALLOC(dsize);
- else {
- *dworkptr = (float *) suser_malloc(dsize, TAIL, Glu);
- if ( NotDoubleAlign(*dworkptr) ) {
- old_ptr = *dworkptr;
- *dworkptr = (float*) DoubleAlign(*dworkptr);
- *dworkptr = (float*) ((double*)*dworkptr - 1);
- extra = (char*)old_ptr - (char*)*dworkptr;
-#ifdef DEBUG
- printf("sLUWorkInit: not aligned, extra %d\n", extra);
-#endif
- Glu->stack.top2 -= extra;
- Glu->stack.used += extra;
- }
- }
- if ( ! *dworkptr ) {
- fprintf(stderr, "malloc fails for local dworkptr[].");
- return (isize + dsize + n);
- }
-
- return 0;
-}
-
-
-/*! \brief Set up pointers for real working arrays.
- */
-void
-sSetRWork(int m, int panel_size, float *dworkptr,
- float **dense, float **tempv)
-{
- float zero = 0.0;
-
- int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
- rowblk = sp_ienv(4);
- *dense = dworkptr;
- *tempv = *dense + panel_size*m;
- sfill (*dense, m * panel_size, zero);
- sfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);
-}
-
-/*! \brief Free the working storage used by factor routines.
- */
-void sLUWorkFree(int *iwork, float *dwork, GlobalLU_t *Glu)
-{
- if ( Glu->MemModel == SYSTEM ) {
- SUPERLU_FREE (iwork);
- SUPERLU_FREE (dwork);
- } else {
- Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
- Glu->stack.top2 = Glu->stack.size;
-/* sStackCompress(Glu); */
- }
-
- SUPERLU_FREE (Glu->expanders);
- Glu->expanders = NULL;
-}
-
-/*! \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,
- 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("sLUMemXpand(): jcol %d, next %d, maxlen %d, MemType %d\n",
- jcol, next, *maxlen, mem_type);
-#endif
-
- if (mem_type == USUB)
- new_mem = sexpand(maxlen, mem_type, next, 1, Glu);
- else
- new_mem = sexpand(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 (smemory_usage(nzlmax, nzumax, nzlumax, Glu->n) + Glu->n);
- }
-
- switch ( mem_type ) {
- case LUSUP:
- Glu->lusup = (float *) new_mem;
- Glu->nzlumax = *maxlen;
- break;
- case UCOL:
- Glu->ucol = (float *) 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_float(int howmany, void *old, void *new)
-{
- register int i;
- float *dold = old;
- float *dnew = new;
- for (i = 0; i < howmany; i++) dnew[i] = dold[i];
-}
-
-/*! \brief Expand the existing storage to accommodate more fill-ins.
- */
-void
-*sexpand (
- 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;
- ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
-
- alpha = EXPAND;
-
- if ( Glu->num_expansions == 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(float);
-
- if ( Glu->MemModel == SYSTEM ) {
- new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
- if ( Glu->num_expansions != 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((size_t)new_len * lword);
- }
- }
- if ( type == LSUB || type == USUB ) {
- copy_mem_int(len_to_copy, expanders[type].mem, new_mem);
- } else {
- copy_mem_float(len_to_copy, expanders[type].mem, new_mem);
- }
- SUPERLU_FREE (expanders[type].mem);
- }
- expanders[type].mem = (void *) new_mem;
-
- } else { /* MemModel == USER */
- 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;
- new_mem = (void *)DoubleAlign(new_mem);
- extra = (char*)new_mem - (char*)old_mem;
-#ifdef DEBUG
- printf("expand(): not aligned, extra %d\n", extra);
-#endif
- Glu->stack.top1 += extra;
- Glu->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*)Glu->stack.array + Glu->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);
- }
- Glu->stack.top1 += extra;
- Glu->stack.used += extra;
- if ( type == UCOL ) {
- Glu->stack.top1 += extra; /* Add same amount for USUB */
- Glu->stack.used += extra;
- }
-
- } /* if ... */
-
- } /* else ... */
- }
-
- expanders[type].size = new_len;
- *prev_len = new_len;
- if ( Glu->num_expansions ) ++Glu->num_expansions;
-
- return (void *) expanders[type].mem;
-
-} /* sexpand */
-
-
-/*! \brief Compress the work[] array to remove fragmentation.
- */
-void
-sStackCompress(GlobalLU_t *Glu)
-{
- register int iword, dword, ndim;
- char *last, *fragment;
- int *ifrom, *ito;
- float *dfrom, *dto;
- int *xlsub, *lsub, *xusub, *usub, *xlusup;
- float *ucol, *lusup;
-
- iword = sizeof(int);
- dword = sizeof(float);
- 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 = (float *)((char*)lusup + xlusup[ndim] * dword);
- copy_mem_float(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*)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;
- Glu->usub = usub;
-
-#ifdef DEBUG
- printf("sStackCompress: fragment %d\n", fragment);
- /* for (last = 0; last < ndim; ++last)
- print_lu_col("After compress:", last, 0);*/
-#endif
-
-}
-
-/*! \brief Allocate storage for original matrix A
- */
-void
-sallocateA(int n, int nnz, float **a, int **asub, int **xa)
-{
- *a = (float *) floatMalloc(nnz);
- *asub = (int *) intMalloc(nnz);
- *xa = (int *) intMalloc(n+1);
-}
-
-
-float *floatMalloc(int n)
-{
- float *buf;
- buf = (float *) SUPERLU_MALLOC((size_t)n * sizeof(float));
- if ( !buf ) {
- ABORT("SUPERLU_MALLOC failed for buf in floatMalloc()\n");
- }
- return (buf);
-}
-
-float *floatCalloc(int n)
-{
- float *buf;
- register int i;
- float zero = 0.0;
- buf = (float *) SUPERLU_MALLOC((size_t)n * sizeof(float));
- if ( !buf ) {
- ABORT("SUPERLU_MALLOC failed for buf in floatCalloc()\n");
- }
- for (i = 0; i < n; ++i) buf[i] = zero;
- return (buf);
-}
-
-
-int smemory_usage(const int nzlmax, const int nzumax,
- const int nzlumax, const int n)
-{
- register int iword, dword;
-
- iword = sizeof(int);
- dword = sizeof(float);
-
- return (10 * n * iword +
- nzlmax * iword + nzumax * (iword + dword) + nzlumax * dword);
-
-}
diff --git a/SRC/smyblas2.c b/SRC/smyblas2.c
deleted file mode 100644
index 3fd7e5a..0000000
--- a/SRC/smyblas2.c
+++ /dev/null
@@ -1,230 +0,0 @@
-
-/*! @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
- * </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: 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.
- */
-void slsolve ( int ldm, int ncol, float *M, float *rhs )
-{
- int k;
- float x0, x1, x2, x3, x4, x5, x6, x7;
- float *M0;
- register float *Mki0, *Mki1, *Mki2, *Mki3, *Mki4, *Mki5, *Mki6, *Mki7;
- register int firstcol = 0;
-
- M0 = &M[0];
-
- while ( firstcol < ncol - 7 ) { /* Do 8 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
- Mki2 = Mki1 + ldm + 1;
- Mki3 = Mki2 + ldm + 1;
- Mki4 = Mki3 + ldm + 1;
- Mki5 = Mki4 + ldm + 1;
- Mki6 = Mki5 + ldm + 1;
- Mki7 = Mki6 + ldm + 1;
-
- x0 = rhs[firstcol];
- x1 = rhs[firstcol+1] - x0 * *Mki0++;
- x2 = rhs[firstcol+2] - x0 * *Mki0++ - x1 * *Mki1++;
- x3 = rhs[firstcol+3] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++;
- x4 = rhs[firstcol+4] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
- - x3 * *Mki3++;
- x5 = rhs[firstcol+5] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
- - x3 * *Mki3++ - x4 * *Mki4++;
- x6 = rhs[firstcol+6] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
- - x3 * *Mki3++ - x4 * *Mki4++ - x5 * *Mki5++;
- x7 = rhs[firstcol+7] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
- - x3 * *Mki3++ - x4 * *Mki4++ - x5 * *Mki5++
- - x6 * *Mki6++;
-
- rhs[++firstcol] = x1;
- rhs[++firstcol] = x2;
- rhs[++firstcol] = x3;
- rhs[++firstcol] = x4;
- rhs[++firstcol] = x5;
- rhs[++firstcol] = x6;
- rhs[++firstcol] = x7;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++)
- rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++
- - x2 * *Mki2++ - x3 * *Mki3++
- - x4 * *Mki4++ - x5 * *Mki5++
- - x6 * *Mki6++ - x7 * *Mki7++;
-
- M0 += 8 * ldm + 8;
- }
-
- while ( firstcol < ncol - 3 ) { /* Do 4 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
- Mki2 = Mki1 + ldm + 1;
- Mki3 = Mki2 + ldm + 1;
-
- x0 = rhs[firstcol];
- x1 = rhs[firstcol+1] - x0 * *Mki0++;
- x2 = rhs[firstcol+2] - x0 * *Mki0++ - x1 * *Mki1++;
- x3 = rhs[firstcol+3] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++;
-
- rhs[++firstcol] = x1;
- rhs[++firstcol] = x2;
- rhs[++firstcol] = x3;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++)
- rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++
- - x2 * *Mki2++ - x3 * *Mki3++;
-
- M0 += 4 * ldm + 4;
- }
-
- if ( firstcol < ncol - 1 ) { /* Do 2 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
-
- x0 = rhs[firstcol];
- x1 = rhs[firstcol+1] - x0 * *Mki0++;
-
- rhs[++firstcol] = x1;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++)
- rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++;
-
- }
-
-}
-
-/*! \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.
- */
-void
-susolve ( ldm, ncol, M, rhs )
-int ldm; /* in */
-int ncol; /* in */
-float *M; /* in */
-float *rhs; /* modified */
-{
- float xj;
- int jcol, j, irow;
-
- jcol = ncol - 1;
-
- for (j = 0; j < ncol; j++) {
-
- xj = rhs[jcol] / M[jcol + jcol*ldm]; /* M(jcol, jcol) */
- rhs[jcol] = xj;
-
- for (irow = 0; irow < jcol; irow++)
- rhs[irow] -= xj * M[irow + jcol*ldm]; /* M(irow, jcol) */
-
- jcol--;
-
- }
-}
-
-
-/*! \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 )
-
-int ldm; /* in -- leading dimension of M */
-int nrow; /* in */
-int ncol; /* in */
-float *M; /* in */
-float *vec; /* in */
-float *Mxvec; /* in/out */
-
-{
- float vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7;
- float *M0;
- register float *Mki0, *Mki1, *Mki2, *Mki3, *Mki4, *Mki5, *Mki6, *Mki7;
- register int firstcol = 0;
- int k;
-
- M0 = &M[0];
- while ( firstcol < ncol - 7 ) { /* Do 8 columns */
-
- Mki0 = M0;
- Mki1 = Mki0 + ldm;
- Mki2 = Mki1 + ldm;
- Mki3 = Mki2 + ldm;
- Mki4 = Mki3 + ldm;
- Mki5 = Mki4 + ldm;
- Mki6 = Mki5 + ldm;
- Mki7 = Mki6 + ldm;
-
- vi0 = vec[firstcol++];
- vi1 = vec[firstcol++];
- vi2 = vec[firstcol++];
- vi3 = vec[firstcol++];
- vi4 = vec[firstcol++];
- vi5 = vec[firstcol++];
- vi6 = vec[firstcol++];
- vi7 = vec[firstcol++];
-
- for (k = 0; k < nrow; k++)
- Mxvec[k] += vi0 * *Mki0++ + vi1 * *Mki1++
- + vi2 * *Mki2++ + vi3 * *Mki3++
- + vi4 * *Mki4++ + vi5 * *Mki5++
- + vi6 * *Mki6++ + vi7 * *Mki7++;
-
- M0 += 8 * ldm;
- }
-
- while ( firstcol < ncol - 3 ) { /* Do 4 columns */
-
- Mki0 = M0;
- Mki1 = Mki0 + ldm;
- Mki2 = Mki1 + ldm;
- Mki3 = Mki2 + ldm;
-
- vi0 = vec[firstcol++];
- vi1 = vec[firstcol++];
- vi2 = vec[firstcol++];
- vi3 = vec[firstcol++];
- for (k = 0; k < nrow; k++)
- Mxvec[k] += vi0 * *Mki0++ + vi1 * *Mki1++
- + vi2 * *Mki2++ + vi3 * *Mki3++ ;
-
- M0 += 4 * ldm;
- }
-
- while ( firstcol < ncol ) { /* Do 1 column */
-
- Mki0 = M0;
- vi0 = vec[firstcol++];
- for (k = 0; k < nrow; k++)
- Mxvec[k] += vi0 * *Mki0++;
-
- M0 += ldm;
- }
-
-}
-
diff --git a/SRC/sp_coletree.c b/SRC/sp_coletree.c
deleted file mode 100644
index 5d845b0..0000000
--- a/SRC/sp_coletree.c
+++ /dev/null
@@ -1,419 +0,0 @@
-/*! @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 */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "slu_ddefs.h"
-
-/*
- * Implementation of disjoint set union routines.
- * Elements are integers in 0..n-1, and the
- * names of the sets themselves are of type int.
- *
- * Calls are:
- * initialize_disjoint_sets (n) initial call.
- * s = make_set (i) returns a set containing only i.
- * s = link (t, u) returns s = t union u, destroying t and u.
- * s = find (i) return name of set containing i.
- * finalize_disjoint_sets final call.
- *
- * This implementation uses path compression but not weighted union.
- * See Tarjan's book for details.
- * John Gilbert, CMI, 1987.
- *
- * Implemented path-halving by XSL 07/05/95.
- */
-
-
-static
-int *mxCallocInt(int n)
-{
- register int i;
- int *buf;
-
- buf = (int *) SUPERLU_MALLOC( n * sizeof(int) );
- if ( !buf ) {
- ABORT("SUPERLU_MALLOC fails for buf in mxCallocInt()");
- }
- for (i = 0; i < n; i++) buf[i] = 0;
- return (buf);
-}
-
-static
-void initialize_disjoint_sets (
- int n,
- int **pp
- )
-{
- (*pp) = mxCallocInt(n);
-}
-
-
-static
-int make_set (
- int i,
- int *pp
- )
-{
- pp[i] = i;
- return i;
-}
-
-
-static
-int link (
- int s,
- int t,
- int *pp
- )
-{
- pp[s] = t;
- return t;
-}
-
-
-/* PATH HALVING */
-static
-int find (
- int i,
- int *pp
- )
-{
- register int p, gp;
-
- p = pp[i];
- gp = pp[p];
- while (gp != p) {
- pp[i] = gp;
- i = gp;
- p = pp[i];
- gp = pp[p];
- }
- return (p);
-}
-
-#if 0
-/* PATH COMPRESSION */
-static
-int find (
- int i
- )
-{
- if (pp[i] != i)
- pp[i] = find (pp[i]);
- return pp[i];
-}
-#endif
-
-static
-void finalize_disjoint_sets (
- int *pp
- )
-{
- SUPERLU_FREE(pp);
-}
-
-
-/*
- * Find the elimination tree for A'*A.
- * This uses something similar to Liu's algorithm.
- * It runs in time O(nz(A)*log n) and does not form A'*A.
- *
- * Input:
- * Sparse matrix A. Numeric values are ignored, so any
- * explicit zeros are treated as nonzero.
- * Output:
- * Integer array of parents representing the elimination
- * tree of the symbolic product A'*A. Each vertex is a
- * column of A, and nc means a root of the elimination forest.
- *
- * John R. Gilbert, Xerox, 10 Dec 1990
- * Based on code by JRG dated 1987, 1988, and 1990.
- */
-
-/*
- * Nonsymmetric elimination tree
- */
-int
-sp_coletree(
- int *acolst, int *acolend, /* column start and end past 1 */
- int *arow, /* row indices of A */
- int nr, int nc, /* dimension of A */
- int *parent /* parent in elim tree */
- )
-{
- int *root; /* root of subtee of etree */
- int *firstcol; /* first nonzero col in each row*/
- int rset, cset;
- int row, col;
- int rroot;
- int p;
- int *pp;
-
- root = mxCallocInt (nc);
- initialize_disjoint_sets (nc, &pp);
-
- /* Compute firstcol[row] = first nonzero column in row */
-
- firstcol = mxCallocInt (nr);
- for (row = 0; row < nr; firstcol[row++] = nc);
- for (col = 0; col < nc; col++)
- for (p = acolst[col]; p < acolend[col]; p++) {
- row = arow[p];
- firstcol[row] = SUPERLU_MIN(firstcol[row], col);
- }
-
- /* Compute etree by Liu's algorithm for symmetric matrices,
- except use (firstcol[r],c) in place of an edge (r,c) of A.
- Thus each row clique in A'*A is replaced by a star
- centered at its first vertex, which has the same fill. */
-
- for (col = 0; col < nc; 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, pp);
- rroot = root[rset];
- if (rroot != col) {
- parent[rroot] = col;
- cset = link (cset, rset, pp);
- root[cset] = col;
- }
- }
- }
-
- SUPERLU_FREE (root);
- SUPERLU_FREE (firstcol);
- finalize_disjoint_sets (pp);
- return 0;
-}
-
-/*
- * q = TreePostorder (n, p);
- *
- * Postorder a tree.
- * Input:
- * p is a vector of parent pointers for a forest whose
- * vertices are the integers 0 to n-1; p[root]==n.
- * Output:
- * q is a vector indexed by 0..n-1 such that q[i] is the
- * i-th vertex in a postorder numbering of the tree.
- *
- * ( 2/7/95 modified by X.Li:
- * q is a vector indexed by 0:n-1 such that vertex i is the
- * q[i]-th vertex in a postorder numbering of the tree.
- * That is, this is the inverse of the previous q. )
- *
- * In the child structure, lower-numbered children are represented
- * first, so that a tree which is already numbered in postorder
- * will not have its order changed.
- *
- * Written by John Gilbert, Xerox, 10 Dec 1990.
- * Based on code written by John Gilbert at CMI in 1987.
- */
-
-static
-/*
- * Depth-first search from vertex v.
- */
-void etdfs (
- 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, first_kid, next_kid, post, postnum);
- }
- /* post[postnum++] = v; in Matlab */
- 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 *first_kid, *next_kid; /* Linked list of children. */
- int *post, postnum;
- int v, dad;
-
- /* Allocate storage for working arrays and results */
- first_kid = mxCallocInt (n+1);
- next_kid = mxCallocInt (n+1);
- post = mxCallocInt (n+1);
-
- /* Set up structure describing children */
- for (v = 0; v <= n; first_kid[v++] = -1);
- for (v = n-1; v >= 0; v--) {
- dad = parent[v];
- next_kid[v] = first_kid[dad];
- first_kid[dad] = v;
- }
-
- /* Depth-first search from dummy root vertex #n */
- postnum = 0;
-#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);
- return post;
-}
-
-
-/*
- * p = spsymetree (A);
- *
- * Find the elimination tree for symmetric matrix A.
- * This uses Liu's algorithm, and runs in time O(nz*log n).
- *
- * Input:
- * Square sparse matrix A. No check is made for symmetry;
- * elements below and on the diagonal are ignored.
- * Numeric values are ignored, so any explicit zeros are
- * treated as nonzero.
- * Output:
- * Integer array of parents representing the etree, with n
- * meaning a root of the elimination forest.
- * Note:
- * This routine uses only the upper triangle, while sparse
- * Cholesky (as in spchol.c) uses only the lower. Matlab's
- * dense Cholesky uses only the upper. This routine could
- * be modified to use the lower triangle either by transposing
- * the matrix or by traversing it by rows with auxiliary
- * pointer and link arrays.
- *
- * John R. Gilbert, Xerox, 10 Dec 1990
- * Based on code by JRG dated 1987, 1988, and 1990.
- * Modified by X.S. Li, November 1999.
- */
-
-/*
- * Symmetric elimination tree
- */
-int
-sp_symetree(
- int *acolst, int *acolend, /* column starts and ends past 1 */
- int *arow, /* row indices of A */
- int n, /* dimension of A */
- int *parent /* parent in elim tree */
- )
-{
- int *root; /* root of subtree of etree */
- int rset, cset;
- int row, col;
- int rroot;
- int p;
- int *pp;
-
- root = mxCallocInt (n);
- initialize_disjoint_sets (n, &pp);
-
- for (col = 0; col < n; 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, pp);
- rroot = root[rset];
- if (rroot != col) {
- parent[rroot] = col;
- cset = link (cset, rset, pp);
- root[cset] = col;
- }
- }
- }
- SUPERLU_FREE (root);
- finalize_disjoint_sets (pp);
- return 0;
-} /* SP_SYMETREE */
diff --git a/SRC/sp_ienv.c b/SRC/sp_ienv.c
deleted file mode 100644
index d61ef7a..0000000
--- a/SRC/sp_ienv.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*! @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"
-
-/*! \brief
-
- <pre>
- Purpose
- =======
-
- sp_ienv() is inquired to choose machine-dependent parameters for the
- local environment. See ISPEC for a description of the parameters.
-
- 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.
-
- Arguments
- =========
-
- 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.
-
- (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 (12);
- case 2: return (6);
- case 3: return (100);
- case 4: return (200);
- case 5: return (60);
- case 6: return (20);
- case 7: return (10);
- }
-
- /* Invalid value for ISPEC */
- i = 1;
- xerbla_("sp_ienv", &i);
- return 0;
-
-} /* sp_ienv_ */
-
diff --git a/SRC/sp_preorder.c b/SRC/sp_preorder.c
deleted file mode 100644
index abee619..0000000
--- a/SRC/sp_preorder.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/*! @file sp_preorder.c
- * \brief Permute and performs functions on columns of orginal matrix
- */
-#include "slu_ddefs.h"
-
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * sp_preorder() permutes the columns of the original matrix. It performs
- * the following steps:
- *
- * 1. Apply column permutation perm_c[] to A's column pointers to form AC;
- *
- * 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.
- *
- * Arguments
- * =========
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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>
- */
-void
-sp_preorder(superlu_options_t *options, SuperMatrix *A, int *perm_c,
- int *etree, SuperMatrix *AC)
-{
- NCformat *Astore;
- NCPformat *ACstore;
- int *iwork, *post;
- register int n, i;
-
- n = A->ncol;
-
- /* Apply column permutation perm_c to A's column pointers so to
- obtain NCP format in AC = A*Pc. */
- AC->Stype = SLU_NCP;
- AC->Dtype = A->Dtype;
- AC->Mtype = A->Mtype;
- AC->nrow = A->nrow;
- AC->ncol = A->ncol;
- Astore = A->Store;
- ACstore = AC->Store = (void *) SUPERLU_MALLOC( sizeof(NCPformat) );
- if ( !ACstore ) ABORT("SUPERLU_MALLOC fails for ACstore");
- ACstore->nnz = Astore->nnz;
- ACstore->nzval = Astore->nzval;
- ACstore->rowind = Astore->rowind;
- ACstore->colbeg = (int*) SUPERLU_MALLOC(n*sizeof(int));
- if ( !(ACstore->colbeg) ) ABORT("SUPERLU_MALLOC fails for ACstore->colbeg");
- ACstore->colend = (int*) SUPERLU_MALLOC(n*sizeof(int));
- if ( !(ACstore->colend) ) ABORT("SUPERLU_MALLOC fails for ACstore->colend");
-
-#ifdef DEBUG
- print_int_vec("pre_order:", n, perm_c);
- check_perm("Initial perm_c", n, perm_c);
-#endif
-
- for (i = 0; i < n; i++) {
- ACstore->colbeg[perm_c[i]] = Astore->colptr[i];
- ACstore->colend[perm_c[i]] = Astore->colptr[i+1];
- }
-
- if ( options->Fact == DOFACT ) {
-#undef ETREE_ATplusA
-#ifdef ETREE_ATplusA
- /*--------------------------------------------
- COMPUTE THE ETREE OF Pc*(A'+A)*Pc'.
- --------------------------------------------*/
- int *b_colptr, *b_rowind, bnz, j;
- int *c_colbeg, *c_colend;
-
- /*printf("Use etree(A'+A)\n");*/
-
- /* Form B = A + A'. */
- at_plus_a(n, Astore->nnz, Astore->colptr, Astore->rowind,
- &bnz, &b_colptr, &b_rowind);
-
- /* Form C = Pc*B*Pc'. */
- c_colbeg = (int*) SUPERLU_MALLOC(2*n*sizeof(int));
- c_colend = c_colbeg + n;
- if (!c_colbeg ) ABORT("SUPERLU_MALLOC fails for c_colbeg/c_colend");
- for (i = 0; i < n; i++) {
- c_colbeg[perm_c[i]] = b_colptr[i];
- c_colend[perm_c[i]] = b_colptr[i+1];
- }
- for (j = 0; j < n; ++j) {
- for (i = c_colbeg[j]; i < c_colend[j]; ++i) {
- b_rowind[i] = perm_c[b_rowind[i]];
- }
- }
-
- /* Compute etree of C. */
- sp_symetree(c_colbeg, c_colend, b_rowind, n, etree);
-
- SUPERLU_FREE(b_colptr);
- if ( bnz ) SUPERLU_FREE(b_rowind);
- SUPERLU_FREE(c_colbeg);
-
-#else
- /*--------------------------------------------
- COMPUTE THE COLUMN ELIMINATION TREE.
- --------------------------------------------*/
- sp_coletree(ACstore->colbeg, ACstore->colend, ACstore->rowind,
- A->nrow, A->ncol, etree);
-#endif
-#ifdef DEBUG
- print_int_vec("etree:", n, etree);
-#endif
-
- /* In symmetric mode, do not do postorder here. */
- if ( options->SymmetricMode == NO ) {
- /* Post order etree */
- post = (int *) TreePostorder(n, etree);
- /* for (i = 0; i < n+1; ++i) inv_post[post[i]] = i;
- iwork = post; */
-
-#ifdef DEBUG
- print_int_vec("post:", n+1, post);
- check_perm("post", n, post);
-#endif
- iwork = (int*) SUPERLU_MALLOC((n+1)*sizeof(int));
- if ( !iwork ) ABORT("SUPERLU_MALLOC fails for iwork[]");
-
- /* Renumber etree in postorder */
- for (i = 0; i < n; ++i) iwork[post[i]] = post[etree[i]];
- for (i = 0; i < n; ++i) etree[i] = iwork[i];
-
-#ifdef DEBUG
- print_int_vec("postorder etree:", n, etree);
-#endif
-
- /* Postmultiply A*Pc by post[] */
- for (i = 0; i < n; ++i) iwork[post[i]] = ACstore->colbeg[i];
- for (i = 0; i < n; ++i) ACstore->colbeg[i] = iwork[i];
- for (i = 0; i < n; ++i) iwork[post[i]] = ACstore->colend[i];
- for (i = 0; i < n; ++i) ACstore->colend[i] = iwork[i];
-
- for (i = 0; i < n; ++i)
- iwork[i] = post[perm_c[i]]; /* product of perm_c and post */
- for (i = 0; i < n; ++i) perm_c[i] = iwork[i];
-
-#ifdef DEBUG
- print_int_vec("Pc*post:", n, perm_c);
- check_perm("final perm_c", n, perm_c);
-#endif
- SUPERLU_FREE (post);
- SUPERLU_FREE (iwork);
- } /* end postordering */
-
- } /* if options->Fact == DOFACT ... */
-
-}
-
-int check_perm(char *what, int n, int *perm)
-{
- register int i;
- int *marker;
- marker = (int *) calloc(n, sizeof(int));
-
- for (i = 0; i < n; ++i) {
- if ( marker[perm[i]] == 1 || perm[i] >= n ) {
- printf("%s: Not a valid PERM[%d] = %d\n", what, i, perm[i]);
- ABORT("check_perm");
- } else {
- marker[perm[i]] = 1;
- }
- }
-
- SUPERLU_FREE(marker);
- return 0;
-}
diff --git a/SRC/spanel_bmod.c b/SRC/spanel_bmod.c
deleted file mode 100644
index 846cf0f..0000000
--- a/SRC/spanel_bmod.c
+++ /dev/null
@@ -1,459 +0,0 @@
-
-/*! @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>
- */
-/*
-
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "slu_sdefs.h"
-
-/*
- * Function prototypes
- */
-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 */
- const int w, /* in */
- const int jcol, /* in */
- const int nseg, /* in */
- float *dense, /* out, of size n by w */
- float *tempv, /* working array */
- int *segrep, /* in */
- int *repfnz, /* in, of size n by w */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- float alpha, beta;
-#endif
-
- register int k, ksub;
- int fsupc, nsupc, nsupr, nrow;
- int krep, krep_ind;
- float ukj, ukj1, ukj2;
- int luptr, luptr1, luptr2;
- int segsze;
- int block_nrow; /* no of rows in a block row */
- register int lptr; /* Points to the row subscripts of a supernode */
- int kfnz, irow, no_zeros;
- register int isub, isub1, i;
- register int jj; /* Index through each column in the panel */
- int *xsup, *supno;
- int *lsub, *xlsub;
- float *lusup;
- int *xlusup;
- int *repfnz_col; /* repfnz[] for a column in the panel */
- float *dense_col; /* dense[] for a column in the panel */
- float *tempv1; /* Used in 1-D update */
- float *TriTmp, *MatvecTmp; /* used in 2-D update */
- float zero = 0.0;
- float one = 1.0;
- register int ldaTmp;
- register int r_ind, r_hi;
- static int first = 1, maxsuper, rowblk, colblk;
- flops_t *ops = stat->ops;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- if ( first ) {
- maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
- rowblk = sp_ienv(4);
- colblk = sp_ienv(5);
- first = 0;
- }
- ldaTmp = maxsuper + rowblk;
-
- /*
- * For each nonz supernode segment of U[*,j] in topological order
- */
- k = nseg - 1;
- for (ksub = 0; ksub < nseg; ksub++) { /* for each updating supernode */
-
- /* krep = representative of current k-th supernode
- * fsupc = first supernodal column
- * nsupc = no of columns in a supernode
- * nsupr = no of rows in a supernode
- */
- krep = segrep[k--];
- fsupc = xsup[supno[krep]];
- nsupc = krep - fsupc + 1;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc];
- nrow = nsupr - nsupc;
- lptr = xlsub[fsupc];
- krep_ind = lptr + nsupc - 1;
-
- repfnz_col = repfnz;
- dense_col = dense;
-
- if ( nsupc >= colblk && nrow > rowblk ) { /* 2-D block update */
-
- TriTmp = tempv;
-
- /* Sequence through each column in panel -- triangular solves */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp ) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- luptr = xlusup[fsupc];
-
- ops[TRSV] += segsze * (segsze - 1);
- ops[GEMV] += 2 * nrow * segsze;
-
- /* Case 1: Update U-segment of size 1 -- col-col update */
- if ( segsze == 1 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
- irow = lsub[i];
- dense_col[irow] -= ukj * lusup[luptr];
- ++luptr;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense_col[lsub[krep_ind]];
- ukj1 = dense_col[lsub[krep_ind - 1]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) {
- ukj -= ukj1 * lusup[luptr1];
- dense_col[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++; luptr1++;
- dense_col[irow] -= (ukj*lusup[luptr]
- + ukj1*lusup[luptr1]);
- }
- } else {
- ukj2 = dense_col[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- ukj1 -= ukj2 * lusup[luptr2-1];
- ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
- dense_col[lsub[krep_ind]] = ukj;
- dense_col[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++; luptr1++; luptr2++;
- dense_col[irow] -= ( ukj*lusup[luptr]
- + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
- }
- }
-
- } else { /* segsze >= 4 */
-
- /* Copy U[*,j] segment from dense[*] to TriTmp[*], which
- holds the result of triangular solves. */
- no_zeros = kfnz - fsupc;
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; ++i) {
- irow = lsub[isub];
- TriTmp[i] = dense_col[irow]; /* Gather */
- ++isub;
- }
-
- /* start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, TriTmp, &incx );
-#else
- strsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, TriTmp, &incx );
-#endif
-#else
- slsolve ( nsupr, segsze, &lusup[luptr], TriTmp );
-#endif
-
-
- } /* else ... */
-
- } /* for jj ... end tri-solves */
-
- /* Block row updates; push all the way into dense[*] block */
- for ( r_ind = 0; r_ind < nrow; r_ind += rowblk ) {
-
- r_hi = SUPERLU_MIN(nrow, r_ind + rowblk);
- block_nrow = SUPERLU_MIN(rowblk, r_hi - r_ind);
- luptr = xlusup[fsupc] + nsupc + r_ind;
- isub1 = lptr + nsupc + r_ind;
-
- repfnz_col = repfnz;
- TriTmp = tempv;
- dense_col = dense;
-
- /* Sequence through each column in panel -- matrix-vector */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- if ( segsze <= 3 ) continue; /* skip unrolled cases */
-
- /* Perform a block update, and scatter the result of
- matrix-vector to dense[]. */
- no_zeros = kfnz - fsupc;
- luptr1 = luptr + nsupr * no_zeros;
- MatvecTmp = &TriTmp[maxsuper];
-
-#ifdef USE_VENDOR_BLAS
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- SGEMV(ftcs2, &block_nrow, &segsze, &alpha, &lusup[luptr1],
- &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
-#else
- sgemv_("N", &block_nrow, &segsze, &alpha, &lusup[luptr1],
- &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
-#endif
-#else
- smatvec(nsupr, block_nrow, segsze, &lusup[luptr1],
- TriTmp, MatvecTmp);
-#endif
-
- /* Scatter MatvecTmp[*] into SPA dense[*] temporarily
- * such that MatvecTmp[*] can be re-used for the
- * the next blok row update. dense[] will be copied into
- * global store after the whole panel has been finished.
- */
- isub = isub1;
- for (i = 0; i < block_nrow; i++) {
- irow = lsub[isub];
- dense_col[irow] -= MatvecTmp[i];
- MatvecTmp[i] = zero;
- ++isub;
- }
-
- } /* for jj ... */
-
- } /* for each block row ... */
-
- /* Scatter the triangular solves into SPA dense[*] */
- repfnz_col = repfnz;
- TriTmp = tempv;
- dense_col = dense;
-
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- if ( segsze <= 3 ) continue; /* skip unrolled cases */
-
- no_zeros = kfnz - fsupc;
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense_col[irow] = TriTmp[i];
- TriTmp[i] = zero;
- ++isub;
- }
-
- } /* for jj ... */
-
- } else { /* 1-D block modification */
-
-
- /* Sequence through each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- luptr = xlusup[fsupc];
-
- ops[TRSV] += segsze * (segsze - 1);
- ops[GEMV] += 2 * nrow * segsze;
-
- /* Case 1: Update U-segment of size 1 -- col-col update */
- if ( segsze == 1 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
- irow = lsub[i];
- dense_col[irow] -= ukj * lusup[luptr];
- ++luptr;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- ukj1 = dense_col[lsub[krep_ind - 1]];
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) {
- ukj -= ukj1 * lusup[luptr1];
- dense_col[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- ++luptr; ++luptr1;
- dense_col[irow] -= (ukj*lusup[luptr]
- + ukj1*lusup[luptr1]);
- }
- } else {
- ukj2 = dense_col[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- ukj1 -= ukj2 * lusup[luptr2-1];
- ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
- dense_col[lsub[krep_ind]] = ukj;
- dense_col[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- ++luptr; ++luptr1; ++luptr2;
- dense_col[irow] -= ( ukj*lusup[luptr]
- + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
- }
- }
-
- } else { /* segsze >= 4 */
- /*
- * Perform a triangular solve and block update,
- * then scatter the result of sup-col update to dense[].
- */
- no_zeros = kfnz - fsupc;
-
- /* Copy U[*,j] segment from dense[*] to tempv[*]:
- * The result of triangular solve is in tempv[*];
- * The result of matrix vector update is in dense_col[*]
- */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; ++i) {
- irow = lsub[isub];
- tempv[i] = dense_col[irow]; /* Gather */
- ++isub;
- }
-
- /* start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#else
- strsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#endif
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- SGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#else
- sgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#endif
-#else
- slsolve ( nsupr, segsze, &lusup[luptr], tempv );
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- smatvec (nsupr, nrow, segsze, &lusup[luptr], tempv, tempv1);
-#endif
-
- /* Scatter tempv[*] into SPA dense[*] temporarily, such
- * that tempv[*] can be used for the triangular solve of
- * the next column of the panel. They will be copied into
- * ucol[*] after the whole panel has been finished.
- */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense_col[irow] = tempv[i];
- tempv[i] = zero;
- isub++;
- }
-
- /* Scatter the update from tempv1[*] into SPA dense[*] */
- /* Start dense rectangular L */
- for (i = 0; i < nrow; i++) {
- irow = lsub[isub];
- dense_col[irow] -= tempv1[i];
- tempv1[i] = zero;
- ++isub;
- }
-
- } /* else segsze>=4 ... */
-
- } /* for each column in the panel... */
-
- } /* else 1-D update ... */
-
- } /* for each updating supernode ... */
-
-}
-
-
-
diff --git a/SRC/spanel_dfs.c b/SRC/spanel_dfs.c
deleted file mode 100644
index 3f5bb46..0000000
--- a/SRC/spanel_dfs.c
+++ /dev/null
@@ -1,254 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_sdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
- *
- * 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 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.
- *
- * 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;
- *
- * 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>
- */
-
-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;
- int *xa_begin, *xa_end;
- 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 *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;
-
- /* Initialize pointers */
- Astore = A->Store;
- a = Astore->nzval;
- asub = Astore->rowind;
- xa_begin = Astore->colbeg;
- xa_end = Astore->colend;
- marker1 = marker + m;
- repfnz_col = repfnz;
- dense_col = dense;
- *nseg = 0;
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
-
- /* For each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++) {
- nextl_col = (jj - jcol) * m;
-
-#ifdef CHK_DFS
- printf("\npanel col %d: ", jj);
-#endif
-
- /* 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 )
- continue; /* krow visited before, go to the next nonzero */
-
- /* For each unmarked nbr krow of jj
- * krow is in L: place it in structure of L[*,jj]
- */
- 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[*]
- */
- else {
-
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz_col[krep];
-
-#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 > kperm ) repfnz_col[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz_col[krep] = kperm;
- xdfs = xlsub[krep];
- maxdfs = xprune[krep];
-
-#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
- */
- 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
- * been explored, update its repfnz[*]
- */
- else {
-
- chrep = xsup[supno[chperm]+1] - 1;
- myfnz = repfnz_col[chrep];
-#ifdef CHK_DFS
- printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
-#endif
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > chperm )
- repfnz_col[chrep] = chperm;
- }
- else {
- /* Cont. dfs at snode-rep of kchild */
- 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
- printf(" xdfs %d, maxdfs %d: ", xdfs, maxdfs);
- 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
- * segment is seen for the first time. (Note that
- * "repfnz[krep]" may change later.)
- * Backtrack dfs to its parent.
- */
- if ( marker1[krep] < jcol ) {
- segrep[*nseg] = krep;
- ++(*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
- 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;
-
- } /* for jj ... */
-
-}
diff --git a/SRC/spivotL.c b/SRC/spivotL.c
deleted file mode 100644
index 2a6950c..0000000
--- a/SRC/spivotL.c
+++ /dev/null
@@ -1,184 +0,0 @@
-
-/*! @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>
- */
-
-
-#include <math.h>
-#include <stdlib.h>
-#include "slu_sdefs.h"
-
-#undef DEBUG
-
-/*! \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
-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 */
- int lptr; /* points to the starting subscript of the supernode */
- int pivptr, old_pivptr, diag, diagind;
- float pivmax, rtemp, thresh;
- float temp;
- float *lu_sup_ptr;
- float *lu_col_ptr;
- int *lsub_ptr;
- int isub, icol, k, itemp;
- int *lsub, *xlsub;
- float *lusup;
- int *xlusup;
- flops_t *ops = stat->ops;
-
- /* Initialize pointers */
- 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 */
-
-#ifdef DEBUG
-if ( jcol == MIN_COL ) {
- printf("Before cdiv: col %d\n", jcol);
- for (k = nsupc; k < nsupr; k++)
- printf(" lu[%d] %f\n", lsub_ptr[k], lu_col_ptr[k]);
-}
-#endif
-
- /* Determine the largest abs numerical value for partial pivoting;
- Also search for user-specified pivot, and diagonal element. */
- if ( *usepr ) *pivrow = iperm_r[jcol];
- diagind = iperm_c[jcol];
- pivmax = 0.0;
- pivptr = nsupc;
- diag = EMPTY;
- old_pivptr = nsupc;
- for (isub = nsupc; isub < nsupr; ++isub) {
- rtemp = fabs (lu_col_ptr[isub]);
- if ( rtemp > pivmax ) {
- pivmax = rtemp;
- pivptr = isub;
- }
- if ( *usepr && lsub_ptr[isub] == *pivrow ) old_pivptr = isub;
- if ( lsub_ptr[isub] == diagind ) diag = isub;
- }
-
- /* 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);
- }
-
- thresh = u * pivmax;
-
- /* Choose appropriate pivotal element by our policy. */
- if ( *usepr ) {
- rtemp = fabs (lu_col_ptr[old_pivptr]);
- if ( rtemp != 0.0 && rtemp >= thresh )
- pivptr = old_pivptr;
- else
- *usepr = 0;
- }
- if ( *usepr == 0 ) {
- /* Use diagonal pivot? */
- if ( diag >= 0 ) { /* diagonal exists */
- rtemp = fabs (lu_col_ptr[diag]);
- if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
- }
- *pivrow = lsub_ptr[pivptr];
- }
-
- /* Record pivot row */
- perm_r[*pivrow] = jcol;
-
- /* 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 0;
-}
-
diff --git a/SRC/spivotgrowth.c b/SRC/spivotgrowth.c
deleted file mode 100644
index a6e65ec..0000000
--- a/SRC/spivotgrowth.c
+++ /dev/null
@@ -1,113 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Compute the reciprocal pivot growth factor of the leading ncols columns
- * of the matrix, using the formula:
- * min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )
- *
- * Arguments
- * =========
- *
- * ncols (input) int
- * The number of columns of matrices A, L and U.
- *
- * 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.
- *
- * 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.
- *
- * 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>
- */
-
-float
-sPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
- SuperMatrix *L, SuperMatrix *U)
-{
-
- NCformat *Astore;
- SCformat *Lstore;
- NCformat *Ustore;
- float *Aval, *Lval, *Uval;
- int fsupc, nsupr, luptr, nz_in_U;
- int i, j, k, oldcol;
- int *inv_perm_c;
- float rpg, maxaj, maxuj;
- float smlnum;
- float *luval;
-
- /* Get machine constants. */
- smlnum = slamch_("S");
- rpg = 1. / smlnum;
-
- Astore = A->Store;
- Lstore = L->Store;
- Ustore = U->Store;
- Aval = Astore->nzval;
- Lval = Lstore->nzval;
- Uval = Ustore->nzval;
-
- inv_perm_c = (int *) SUPERLU_MALLOC(A->ncol*sizeof(int));
- for (j = 0; j < A->ncol; ++j) inv_perm_c[perm_c[j]] = j;
-
- for (k = 0; k <= Lstore->nsuper; ++k) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- luptr = L_NZ_START(fsupc);
- luval = &Lval[luptr];
- nz_in_U = 1;
-
- for (j = fsupc; j < L_FST_SUPC(k+1) && j < ncols; ++j) {
- maxaj = 0.;
- oldcol = inv_perm_c[j];
- for (i = Astore->colptr[oldcol]; i < Astore->colptr[oldcol+1]; ++i)
- maxaj = SUPERLU_MAX( maxaj, fabs(Aval[i]) );
-
- maxuj = 0.;
- for (i = Ustore->colptr[j]; i < Ustore->colptr[j+1]; i++)
- maxuj = SUPERLU_MAX( maxuj, fabs(Uval[i]) );
-
- /* Supernode */
- for (i = 0; i < nz_in_U; ++i)
- maxuj = SUPERLU_MAX( maxuj, fabs(luval[i]) );
-
- ++nz_in_U;
- luval += nsupr;
-
- if ( maxuj == 0. )
- rpg = SUPERLU_MIN( rpg, 1.);
- else
- rpg = SUPERLU_MIN( rpg, maxaj / maxuj );
- }
-
- if ( j >= ncols ) break;
- }
-
- SUPERLU_FREE(inv_perm_c);
- return (rpg);
-}
diff --git a/SRC/spruneL.c b/SRC/spruneL.c
deleted file mode 100644
index 3301bfa..0000000
--- a/SRC/spruneL.c
+++ /dev/null
@@ -1,154 +0,0 @@
-
-/*! @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>
- */
-
-
-#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 */
- const int *perm_r, /* in */
- const int pivrow, /* in */
- const int nseg, /* in */
- const int *segrep, /* in */
- const int *repfnz, /* in */
- int *xprune, /* out */
- GlobalLU_t *Glu /* modified - global LU data structures */
- )
-{
-
- float utemp;
- int jsupno, irep, irep1, kmin, kmax, krow, movnum;
- int i, ktemp, minloc, maxloc;
- int do_prune; /* logical variable */
- int *xsup, *supno;
- int *lsub, *xlsub;
- float *lusup;
- int *xlusup;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- /*
- * For each supernode-rep irep in U[*,j]
- */
- jsupno = supno[jcol];
- for (i = 0; i < nseg; i++) {
-
- irep = segrep[i];
- irep1 = irep + 1;
- do_prune = FALSE;
-
- /* Don't prune with a zero U-segment */
- if ( repfnz[irep] == EMPTY )
- continue;
-
- /* If a snode overlaps with the next panel, then the U-segment
- * is fragmented into two parts -- irep and irep1. We should let
- * pruning occur at the rep-column in irep1's snode.
- */
- if ( supno[irep] == supno[irep1] ) /* Don't prune */
- continue;
-
- /*
- * If it has not been pruned & it has a nonz in row L[pivrow,i]
- */
- if ( supno[irep] != jsupno ) {
- if ( xprune[irep] >= xlsub[irep1] ) {
- kmin = xlsub[irep];
- kmax = xlsub[irep1] - 1;
- for (krow = kmin; krow <= kmax; krow++)
- if ( lsub[krow] == pivrow ) {
- do_prune = TRUE;
- break;
- }
- }
-
- if ( do_prune ) {
-
- /* Do a quicksort-type partition
- * movnum=TRUE means that the num values have to be exchanged.
- */
- movnum = FALSE;
- if ( irep == xsup[supno[irep]] ) /* Snode of size 1 */
- movnum = TRUE;
-
- while ( kmin <= kmax ) {
-
- if ( perm_r[lsub[kmax]] == EMPTY )
- kmax--;
- else if ( perm_r[lsub[kmin]] != EMPTY )
- kmin++;
- else { /* kmin below pivrow (not yet pivoted), and kmax
- * above pivrow: interchange the two subscripts
- */
- ktemp = lsub[kmin];
- lsub[kmin] = lsub[kmax];
- lsub[kmax] = ktemp;
-
- /* 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.
- */
- if ( movnum ) {
- minloc = xlusup[irep] + (kmin - xlsub[irep]);
- maxloc = xlusup[irep] + (kmax - xlsub[irep]);
- utemp = lusup[minloc];
- lusup[minloc] = lusup[maxloc];
- lusup[maxloc] = utemp;
- }
-
- kmin++;
- kmax--;
-
- }
-
- } /* while */
-
- xprune[irep] = kmin; /* Pruning */
-
-#ifdef CHK_PRUNE
- printf(" After spruneL(),using col %d: xprune[%d] = %d\n",
- jcol, irep, kmin);
-#endif
- } /* if do_prune */
-
- } /* if */
-
- } /* for each U-segment... */
-}
diff --git a/SRC/sreadhb.c b/SRC/sreadhb.c
deleted file mode 100644
index 77f6f19..0000000
--- a/SRC/sreadhb.c
+++ /dev/null
@@ -1,257 +0,0 @@
-
-/*! @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"
-
-
-/*! \brief Eat up the rest of the current line */
-int sDumpLine(FILE *fp)
-{
- register int c;
- while ((c = fgetc(fp)) != '\n') ;
- return 0;
-}
-
-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;
-}
-
-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;
-}
-
-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
-sreadhb(int *nrow, int *ncol, int *nonz,
- float **nzval, int **rowind, int **colptr)
-{
-
- register int i, numer_lines = 0, rhscrd = 0;
- int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
- char buf[100], type[4], key[10];
- FILE *fp;
-
- fp = stdin;
-
- /* Line 1 */
- fgets(buf, 100, fp);
- fputs(buf, stdout);
-#if 0
- fscanf(fp, "%72c", buf); buf[72] = 0;
- printf("Title: %s", buf);
- fscanf(fp, "%8c", key); key[8] = 0;
- printf("Key: %s\n", key);
- sDumpLine(fp);
-#endif
-
- /* Line 2 */
- for (i=0; i<5; i++) {
- fscanf(fp, "%14c", buf); buf[14] = 0;
- sscanf(buf, "%d", &tmp);
- if (i == 3) numer_lines = tmp;
- if (i == 4 && tmp) rhscrd = 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);
- fscanf(fp, "%20c", buf);
- sDumpLine(fp);
-
- /* Line 5: right-hand side */
- if ( rhscrd ) sDumpLine(fp); /* skip RHSFMT */
-
-#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/SRC/sreadrb.c b/SRC/sreadrb.c
deleted file mode 100644
index 00cb8bf..0000000
--- a/SRC/sreadrb.c
+++ /dev/null
@@ -1,237 +0,0 @@
-
-/*! @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/SRC/sreadtriple.c b/SRC/sreadtriple.c
deleted file mode 100644
index ceb1da0..0000000
--- a/SRC/sreadtriple.c
+++ /dev/null
@@ -1,140 +0,0 @@
-
-/*! @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
-sreadtriple(int *m, int *n, int *nonz,
- float **nzval, int **rowind, int **colptr)
-{
-/*
- * Output parameters
- * =================
- * (a,asub,xa): asub[*] contains the row subscripts of nonzeros
- * in columns of matrix A; a[*] the numerical values;
- * row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
- *
- */
- int j, k, jsize, nnz, nz;
- float *a, *val;
- int *asub, *xa, *row, *col;
- int zero_base = 0;
-
- /* Matrix format:
- * First line: #rows, #cols, #non-zero
- * Triplet in the rest of lines:
- * row, col, value
- */
-
- scanf("%d%d", n, nonz);
- *m = *n;
- printf("m %d, n %d, nonz %d\n", *m, *n, *nonz);
- sallocateA(*n, *nonz, nzval, rowind, colptr); /* Allocate storage */
- a = *nzval;
- asub = *rowind;
- xa = *colptr;
-
- val = (float *) SUPERLU_MALLOC(*nonz * sizeof(float));
- 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 (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
- 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",
- nz, row[nz], col[nz], val[nz]);
- exit(-1);
- } else {
- ++xa[col[nz]];
- ++nz;
- }
- }
-
- *nonz = nz;
-
- /* Initialize the array of column pointers */
- k = 0;
- jsize = xa[0];
- xa[0] = 0;
- for (j = 1; j < *n; ++j) {
- k += jsize;
- jsize = xa[j];
- xa[j] = k;
- }
-
- /* Copy the triplets into the column oriented storage */
- for (nz = 0; nz < *nonz; ++nz) {
- j = col[nz];
- k = xa[j];
- asub[k] = row[nz];
- a[k] = val[nz];
- ++xa[j];
- }
-
- /* Reset the column pointers to the beginning of each column */
- for (j = *n; j > 0; --j)
- xa[j] = xa[j-1];
- xa[0] = 0;
-
- SUPERLU_FREE(val);
- SUPERLU_FREE(row);
- SUPERLU_FREE(col);
-
-#ifdef CHK_INPUT
- {
- 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 sreadrhs(int m, float *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, "%f\n", &b[i]);
-
- /* readpair_(j, &b[i]);*/
- fclose(fp);
-}
diff --git a/SRC/ssnode_bmod.c b/SRC/ssnode_bmod.c
deleted file mode 100644
index c6813dd..0000000
--- a/SRC/ssnode_bmod.c
+++ /dev/null
@@ -1,118 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_sdefs.h"
-
-
-/*! \brief Performs numeric block updates within the relaxed snode.
- */
-int
-ssnode_bmod (
- const int jcol, /* in */
- const int jsupno, /* in */
- const int fsupc, /* in */
- float *dense, /* in */
- float *tempv, /* working array */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- float alpha = -1.0, beta = 1.0;
-#endif
-
- int luptr, nsupc, nsupr, nrow;
- int isub, irow, i, iptr;
- register int ufirst, nextlu;
- int *lsub, *xlsub;
- float *lusup;
- int *xlusup;
- flops_t *ops = stat->ops;
-
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- nextlu = xlusup[jcol];
-
- /*
- * Process the supernodal portion of L\U[*,j]
- */
- for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
- irow = lsub[isub];
- lusup[nextlu] = dense[irow];
- dense[irow] = 0;
- ++nextlu;
- }
-
- xlusup[jcol + 1] = nextlu; /* Initialize xlusup for next column */
-
- if ( fsupc < jcol ) {
-
- luptr = xlusup[fsupc];
- nsupr = xlsub[fsupc+1] - xlsub[fsupc];
- nsupc = jcol - fsupc; /* Excluding jcol */
- ufirst = xlusup[jcol]; /* Points to the beginning of column
- jcol in supernode L\U(jsupno). */
- nrow = nsupr - nsupc;
-
- ops[TRSV] += nsupc * (nsupc - 1);
- ops[GEMV] += 2 * nrow * nsupc;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr], &nsupr,
- &lusup[ufirst], &incx );
- SGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#else
- strsv_( "L", "N", "U", &nsupc, &lusup[luptr], &nsupr,
- &lusup[ufirst], &incx );
- sgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#endif
-#else
- slsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
- smatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
- &lusup[ufirst], &tempv[0] );
-
- /* Scatter tempv[*] into lusup[*] */
- iptr = ufirst + nsupc;
- for (i = 0; i < nrow; i++) {
- lusup[iptr++] -= tempv[i];
- tempv[i] = 0.0;
- }
-#endif
-
- }
-
- return 0;
-}
diff --git a/SRC/ssnode_dfs.c b/SRC/ssnode_dfs.c
deleted file mode 100644
index a191bc4..0000000
--- a/SRC/ssnode_dfs.c
+++ /dev/null
@@ -1,112 +0,0 @@
-
-/*! @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>
- */
-
-
-#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 */
- const int kcol, /* in - end of the supernode */
- const int *asub, /* in */
- const int *xa_begin, /* in */
- const int *xa_end, /* in */
- int *xprune, /* out */
- int *marker, /* modified */
- GlobalLU_t *Glu /* modified */
- )
-{
-
- register int i, k, ifrom, ito, nextl, new_next;
- 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) )
- return (mem_error);
- lsub = Glu->lsub;
- }
- }
- }
- supno[i] = nsuper;
- }
-
- /* Supernode > 1, then make a copy of the subscripts for pruning */
- if ( jcol < kcol ) {
- new_next = nextl + (nextl - xlsub[jcol]);
- while ( new_next > nzlmax ) {
- if ( mem_error = sLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
- return (mem_error);
- lsub = Glu->lsub;
- }
- ito = nextl;
- for (ifrom = xlsub[jcol]; ifrom < nextl; )
- lsub[ito++] = lsub[ifrom++];
- for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
- nextl = ito;
- }
-
- xsup[nsuper+1] = kcol + 1;
- supno[kcol+1] = nsuper;
- xprune[kcol] = nextl;
- xlsub[kcol+1] = nextl;
-
- return 0;
-}
-
diff --git a/SRC/ssp_blas2.c b/SRC/ssp_blas2.c
deleted file mode 100644
index 7824be6..0000000
--- a/SRC/ssp_blas2.c
+++ /dev/null
@@ -1,477 +0,0 @@
-
-/*! @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
- * Purpose: Sparse BLAS 2, using some dense BLAS 2 operations.
- */
-
-#include "slu_sdefs.h"
-
-/*
- * Function prototypes
- */
-void susolve(int, int, float*, float*);
-void slsolve(int, int, float*, float*);
-void smatvec(int, int, int, float*, float*, float*);
-
-/*! \brief Solves one of the systems of equations A*x = b, or A'*x = b
- *
- * <pre>
- * Purpose
- * =======
- *
- * sp_strsv() 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.
- *
- * Parameters
- * ==========
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * U - (input) SuperMatrix*
- * The factor U from the factorization Pr*A*Pc=L*U.
- * U has types: Stype = NC, Dtype = SLU_S, Mtype = TRU.
- *
- * 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.
- *
- * 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")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- SCformat *Lstore;
- NCformat *Ustore;
- float *Lval, *Uval;
- int incx = 1, incy = 1;
- float alpha = 1.0, beta = 1.0;
- int nrow;
- int fsupc, nsupr, nsupc, luptr, istart, irow;
- int i, k, iptr, jcol;
- float *work;
- flops_t solve_ops;
-
- /* Test the input parameters */
- *info = 0;
- if ( !lsame_(uplo,"L") && !lsame_(uplo, "U") ) *info = -1;
- else if ( !lsame_(trans, "N") && !lsame_(trans, "T") &&
- !lsame_(trans, "C")) *info = -2;
- else if ( !lsame_(diag, "U") && !lsame_(diag, "N") ) *info = -3;
- else if ( L->nrow != L->ncol || L->nrow < 0 ) *info = -4;
- else if ( U->nrow != U->ncol || U->nrow < 0 ) *info = -5;
- if ( *info ) {
- i = -(*info);
- xerbla_("sp_strsv", &i);
- return 0;
- }
-
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
- solve_ops = 0;
-
- if ( !(work = floatCalloc(L->nrow)) )
- ABORT("Malloc fails for work in sp_strsv().");
-
- if ( lsame_(trans, "N") ) { /* Form x := inv(A)*x. */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := inv(L)*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- 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;
- luptr = L_NZ_START(fsupc);
- nrow = nsupr - nsupc;
-
- solve_ops += nsupc * (nsupc - 1);
- solve_ops += 2 * nrow * nsupc;
-
- if ( nsupc == 1 ) {
- for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
- irow = L_SUB(iptr);
- ++luptr;
- x[irow] -= x[fsupc] * Lval[luptr];
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-
- SGEMV(ftcs2, &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
- &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
-#else
- strsv_("L", "N", "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-
- sgemv_("N", &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
- &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
-#endif
-#else
- slsolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc]);
-
- smatvec ( nsupr, nsupr-nsupc, nsupc, &Lval[luptr+nsupc],
- &x[fsupc], &work[0] );
-#endif
-
- iptr = istart + nsupc;
- for (i = 0; i < nrow; ++i, ++iptr) {
- irow = L_SUB(iptr);
- x[irow] -= work[i]; /* Scatter */
- work[i] = 0.0;
-
- }
- }
- } /* for k ... */
-
- } else {
- /* Form x := inv(U)*x */
-
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; k--) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += nsupc * (nsupc + 1);
-
- if ( nsupc == 1 ) {
- x[fsupc] /= Lval[luptr];
- for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
- irow = U_SUB(i);
- x[irow] -= x[fsupc] * Uval[i];
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- STRSV(ftcs3, ftcs2, ftcs2, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- strsv_("U", "N", "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
-#else
- susolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
-#endif
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1);
- i++) {
- irow = U_SUB(i);
- x[irow] -= x[jcol] * Uval[i];
- }
- }
- }
- } /* for k ... */
-
- }
- } else { /* Form x := inv(A')*x */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := inv(L')*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; --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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += 2 * (nsupr - nsupc) * nsupc;
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- iptr = istart + nsupc;
- for (i = L_NZ_START(jcol) + nsupc;
- i < L_NZ_START(jcol+1); i++) {
- irow = L_SUB(iptr);
- x[jcol] -= x[irow] * Lval[i];
- iptr++;
- }
- }
-
- if ( nsupc > 1 ) {
- solve_ops += nsupc * (nsupc - 1);
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd("T", strlen("T"));
- ftcs3 = _cptofcd("U", strlen("U"));
- STRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- strsv_("L", "T", "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- }
- } else {
- /* Form x := inv(U')*x */
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = 0; k <= Lstore->nsuper; k++) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
- irow = U_SUB(i);
- x[jcol] -= x[irow] * Uval[i];
- }
- }
-
- solve_ops += nsupc * (nsupc + 1);
-
- if ( nsupc == 1 ) {
- x[fsupc] /= Lval[luptr];
- } else {
-#ifdef _CRAY
- ftcs1 = _cptofcd("U", strlen("U"));
- ftcs2 = _cptofcd("T", strlen("T"));
- ftcs3 = _cptofcd("N", strlen("N"));
- STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- strsv_("U", "T", "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- } /* for k ... */
- }
- }
-
- stat->ops[SOLVE] += solve_ops;
- SUPERLU_FREE(work);
- return 0;
-}
-
-
-
-/*! \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)
-{
- /* Local variables */
- NCformat *Astore;
- float *Aval;
- int info;
- float temp;
- int lenx, leny, i, j, irow;
- int iy, jx, jy, kx, ky;
- int notran;
-
- notran = lsame_(trans, "N");
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Test the input parameters */
- info = 0;
- if ( !notran && !lsame_(trans, "T") && !lsame_(trans, "C")) info = 1;
- else if ( A->nrow < 0 || A->ncol < 0 ) info = 3;
- else if (incx == 0) info = 5;
- else if (incy == 0) info = 8;
- if (info != 0) {
- xerbla_("sp_sgemv ", &info);
- return 0;
- }
-
- /* Quick return if possible. */
- if (A->nrow == 0 || A->ncol == 0 || (alpha == 0. && beta == 1.))
- return 0;
-
- /* Set LENX and LENY, the lengths of the vectors x and y, and set
- up the start points in X and Y. */
- if (lsame_(trans, "N")) {
- lenx = A->ncol;
- leny = A->nrow;
- } else {
- lenx = A->nrow;
- leny = A->ncol;
- }
- if (incx > 0) kx = 0;
- else kx = - (lenx - 1) * incx;
- if (incy > 0) ky = 0;
- else ky = - (leny - 1) * incy;
-
- /* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
- /* First form y := beta*y. */
- if (beta != 1.) {
- if (incy == 1) {
- if (beta == 0.)
- for (i = 0; i < leny; ++i) y[i] = 0.;
- else
- for (i = 0; i < leny; ++i) y[i] = beta * y[i];
- } else {
- iy = ky;
- if (beta == 0.)
- for (i = 0; i < leny; ++i) {
- y[iy] = 0.;
- iy += incy;
- }
- else
- for (i = 0; i < leny; ++i) {
- y[iy] = beta * y[iy];
- iy += incy;
- }
- }
- }
-
- if (alpha == 0.) return 0;
-
- if ( notran ) {
- /* Form y := alpha*A*x + y. */
- jx = kx;
- if (incy == 1) {
- for (j = 0; j < A->ncol; ++j) {
- if (x[jx] != 0.) {
- temp = alpha * x[jx];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- y[irow] += temp * Aval[i];
- }
- }
- jx += incx;
- }
- } else {
- ABORT("Not implemented.");
- }
- } else {
- /* Form y := alpha*A'*x + y. */
- jy = ky;
- if (incx == 1) {
- for (j = 0; j < A->ncol; ++j) {
- temp = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- temp += Aval[i] * x[irow];
- }
- y[jy] += alpha * temp;
- jy += incy;
- }
- } else {
- ABORT("Not implemented.");
- }
- }
- return 0;
-} /* sp_sgemv */
-
-
-
diff --git a/SRC/ssp_blas3.c b/SRC/ssp_blas3.c
deleted file mode 100644
index be3148b..0000000
--- a/SRC/ssp_blas3.c
+++ /dev/null
@@ -1,127 +0,0 @@
-
-/*! @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
- * Purpose: Sparse BLAS3, using some dense BLAS3 operations.
- */
-
-#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)
-{
- int incx = 1, incy = 1;
- int j;
-
- for (j = 0; j < n; ++j) {
- sp_sgemv(transa, alpha, A, &b[ldb*j], incx, beta, &c[ldc*j], incy);
- }
- return 0;
-}
diff --git a/SRC/superlu_enum_consts.h b/SRC/superlu_enum_consts.h
deleted file mode 100644
index 62a65aa..0000000
--- a/SRC/superlu_enum_consts.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/** @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
deleted file mode 100644
index e888f08..0000000
--- a/SRC/superlu_timer.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*! @file superlu_timer.c
- * \brief Returns the time used
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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>
- */
-
-
-#ifdef SUN
-/*
- * It uses the system call gethrtime(3C), which is accurate to
- * 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 <sys/time.h>
-#include <unistd.h>
-#endif
-
-/*! \brief Timer function
- */
-
-double SuperLU_timer_()
-{
-#ifdef NO_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;
- 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
-}
-
-#endif
-
diff --git a/SRC/supermatrix.h b/SRC/supermatrix.h
deleted file mode 100644
index 8b8e388..0000000
--- a/SRC/supermatrix.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/*! @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_NCP, /* column-wise, column-permuted, no supernode
- (The consecutive columns of nonzeros, after permutation,
- may not be stored contiguously.) */
- 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 {
- SLU_S, /* single */
- SLU_D, /* double */
- SLU_C, /* single complex */
- SLU_Z /* double complex */
-} Dtype_t;
-
-typedef enum {
- SLU_GE, /* general */
- SLU_TRLU, /* lower triangular, unit diagonal */
- SLU_TRUU, /* upper triangular, unit diagonal */
- SLU_TRL, /* lower triangular */
- SLU_TRU, /* upper triangular */
- SLU_SYL, /* symmetric, store lower half */
- SLU_SYU, /* symmetric, store upper half */
- SLU_HEL, /* Hermitian, store lower half */
- SLU_HEU /* Hermitian, store upper half */
-} Mtype_t;
-
-typedef struct {
- Stype_t Stype; /* Storage type: interprets the storage structure
- pointed to by *Store. */
- Dtype_t Dtype; /* Data type. */
- Mtype_t Mtype; /* Matrix type: describes the mathematical property of
- the matrix. */
- int_t nrow; /* number of rows */
- int_t ncol; /* number of columns */
- void *Store; /* pointer to the actual storage of the matrix */
-} SuperMatrix;
-
-/***********************************************
- * The storage schemes are defined as follows. *
- ***********************************************/
-
-/* 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 */
- 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[] */
- /* Note:
- Zero-based indexing is used;
- colptr[] has ncol+1 entries, the last one pointing
- beyond the last column, so that colptr[ncol] = nnz. */
-} NCformat;
-
-/* Stype == SLU_NR */
-typedef struct {
- 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 == SLU_SC */
-typedef struct {
- int_t nnz; /* number of nonzeros in the matrix */
- int_t nsuper; /* number of supernodes, minus 1 */
- void *nzval; /* pointer to array of nonzero values, packed by column */
- int_t *nzval_colptr;/* pointer to array of beginning of columns in nzval[] */
- 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
- 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
- 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) */
- /* 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.
- For col_to_sup[], only the first ncol entries are
- defined. For sup_to_col[], only the first nsuper+2
- entries are defined. */
-} SCformat;
-
-/* 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 */
- int_t *rowind;/* pointer to array of row indices of the nonzeros */
- /* Note: nzval[]/rowind[] always have the same length */
- int_t *colbeg;/* colbeg[j] points to the beginning of column j in nzval[]
- and rowind[] */
- int_t *colend;/* colend[j] points to one past the last element of column
- j in nzval[] and rowind[] */
- /* Note:
- Zero-based indexing is used;
- The consecutive columns of the nonzeros may not be
- contiguous in storage, because the matrix has been
- postmultiplied by a column permutation matrix. */
-} NCPformat;
-
-/* Stype == SLU_DN */
-typedef struct {
- int_t lda; /* leading dimension */
- void *nzval; /* array of size lda*ncol to represent a dense matrix */
-} DNformat;
-
-/* 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
deleted file mode 100644
index aab65ad..0000000
--- a/SRC/sutil.c
+++ /dev/null
@@ -1,471 +0,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.
- * 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>
- */
-
-
-#include <math.h>
-#include "slu_sdefs.h"
-
-void
-sCreate_CompCol_Matrix(SuperMatrix *A, int m, int n, int nnz,
- float *nzval, int *rowind, int *colptr,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- NCformat *Astore;
-
- A->Stype = stype;
- A->Dtype = dtype;
- A->Mtype = mtype;
- A->nrow = m;
- A->ncol = n;
- A->Store = (void *) SUPERLU_MALLOC( sizeof(NCformat) );
- if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
- Astore = A->Store;
- Astore->nnz = nnz;
- Astore->nzval = nzval;
- Astore->rowind = rowind;
- Astore->colptr = colptr;
-}
-
-void
-sCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
- float *nzval, int *colind, int *rowptr,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- NRformat *Astore;
-
- A->Stype = stype;
- A->Dtype = dtype;
- A->Mtype = mtype;
- A->nrow = m;
- A->ncol = n;
- A->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat) );
- if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
- Astore = A->Store;
- Astore->nnz = nnz;
- Astore->nzval = nzval;
- Astore->colind = colind;
- Astore->rowptr = rowptr;
-}
-
-/*! \brief Copy matrix A into matrix B. */
-void
-sCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
-{
- NCformat *Astore, *Bstore;
- int ncol, nnz, i;
-
- B->Stype = A->Stype;
- B->Dtype = A->Dtype;
- B->Mtype = A->Mtype;
- B->nrow = A->nrow;;
- B->ncol = ncol = A->ncol;
- Astore = (NCformat *) A->Store;
- Bstore = (NCformat *) B->Store;
- Bstore->nnz = nnz = Astore->nnz;
- for (i = 0; i < nnz; ++i)
- ((float *)Bstore->nzval)[i] = ((float *)Astore->nzval)[i];
- for (i = 0; i < nnz; ++i) Bstore->rowind[i] = Astore->rowind[i];
- for (i = 0; i <= ncol; ++i) Bstore->colptr[i] = Astore->colptr[i];
-}
-
-
-void
-sCreate_Dense_Matrix(SuperMatrix *X, int m, int n, float *x, int ldx,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- DNformat *Xstore;
-
- X->Stype = stype;
- X->Dtype = dtype;
- X->Mtype = mtype;
- X->nrow = m;
- X->ncol = n;
- X->Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
- if ( !(X->Store) ) ABORT("SUPERLU_MALLOC fails for X->Store");
- Xstore = (DNformat *) X->Store;
- Xstore->lda = ldx;
- Xstore->nzval = (float *) x;
-}
-
-void
-sCopy_Dense_Matrix(int M, int N, float *X, int ldx,
- float *Y, int ldy)
-{
-/*! \brief Copies a two-dimensional matrix X to another matrix Y.
- */
- int i, j;
-
- for (j = 0; j < N; ++j)
- for (i = 0; i < M; ++i)
- Y[i + j*ldy] = X[i + j*ldx];
-}
-
-void
-sCreate_SuperNode_Matrix(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)
-{
- SCformat *Lstore;
-
- L->Stype = stype;
- L->Dtype = dtype;
- L->Mtype = mtype;
- L->nrow = m;
- L->ncol = n;
- L->Store = (void *) SUPERLU_MALLOC( sizeof(SCformat) );
- if ( !(L->Store) ) ABORT("SUPERLU_MALLOC fails for L->Store");
- Lstore = L->Store;
- Lstore->nnz = nnz;
- Lstore->nsuper = col_to_sup[n];
- Lstore->nzval = nzval;
- Lstore->nzval_colptr = nzval_colptr;
- Lstore->rowind = rowind;
- Lstore->rowind_colptr = rowind_colptr;
- Lstore->col_to_sup = col_to_sup;
- Lstore->sup_to_col = sup_to_col;
-
-}
-
-
-/*! \brief Convert a row compressed storage into a column compressed storage.
- */
-void
-sCompRow_to_CompCol(int m, int n, int nnz,
- float *a, int *colind, int *rowptr,
- float **at, int **rowind, int **colptr)
-{
- register int i, j, col, relpos;
- int *marker;
-
- /* Allocate storage for another copy of the matrix. */
- *at = (float *) floatMalloc(nnz);
- *rowind = (int *) intMalloc(nnz);
- *colptr = (int *) intMalloc(n+1);
- marker = (int *) intCalloc(n);
-
- /* Get counts of each column of A, and set up column pointers */
- for (i = 0; i < m; ++i)
- for (j = rowptr[i]; j < rowptr[i+1]; ++j) ++marker[colind[j]];
- (*colptr)[0] = 0;
- for (j = 0; j < n; ++j) {
- (*colptr)[j+1] = (*colptr)[j] + marker[j];
- marker[j] = (*colptr)[j];
- }
-
- /* Transfer the matrix into the compressed column storage. */
- for (i = 0; i < m; ++i) {
- for (j = rowptr[i]; j < rowptr[i+1]; ++j) {
- col = colind[j];
- relpos = marker[col];
- (*rowind)[relpos] = i;
- (*at)[relpos] = a[j];
- ++marker[col];
- }
- }
-
- SUPERLU_FREE(marker);
-}
-
-
-void
-sPrint_CompCol_Matrix(char *what, SuperMatrix *A)
-{
- NCformat *Astore;
- register int i,n;
- float *dp;
-
- printf("\nCompCol matrix %s:\n", what);
- printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
- n = A->ncol;
- Astore = (NCformat *) A->Store;
- dp = (float *) Astore->nzval;
- printf("nrow %d, ncol %d, nnz %d\n", A->nrow,A->ncol,Astore->nnz);
- printf("nzval: ");
- for (i = 0; i < Astore->colptr[n]; ++i) printf("%f ", dp[i]);
- printf("\nrowind: ");
- for (i = 0; i < Astore->colptr[n]; ++i) printf("%d ", Astore->rowind[i]);
- printf("\ncolptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->colptr[i]);
- printf("\n");
- fflush(stdout);
-}
-
-void
-sPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
-{
- SCformat *Astore;
- register int i, j, k, c, d, n, nsup;
- float *dp;
- int *col_to_sup, *sup_to_col, *rowind, *rowind_colptr;
-
- printf("\nSuperNode matrix %s:\n", what);
- printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
- n = A->ncol;
- Astore = (SCformat *) A->Store;
- dp = (float *) Astore->nzval;
- col_to_sup = Astore->col_to_sup;
- sup_to_col = Astore->sup_to_col;
- rowind_colptr = Astore->rowind_colptr;
- rowind = Astore->rowind;
- printf("nrow %d, ncol %d, nnz %d, nsuper %d\n",
- A->nrow,A->ncol,Astore->nnz,Astore->nsuper);
- printf("nzval:\n");
- for (k = 0; k <= Astore->nsuper; ++k) {
- c = sup_to_col[k];
- nsup = sup_to_col[k+1] - c;
- for (j = c; j < c + nsup; ++j) {
- d = Astore->nzval_colptr[j];
- for (i = rowind_colptr[c]; i < rowind_colptr[c+1]; ++i) {
- printf("%d\t%d\t%e\n", rowind[i], j, dp[d++]);
- }
- }
- }
-#if 0
- for (i = 0; i < Astore->nzval_colptr[n]; ++i) printf("%f ", dp[i]);
-#endif
- printf("\nnzval_colptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->nzval_colptr[i]);
- printf("\nrowind: ");
- for (i = 0; i < Astore->rowind_colptr[n]; ++i)
- printf("%d ", Astore->rowind[i]);
- printf("\nrowind_colptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->rowind_colptr[i]);
- printf("\ncol_to_sup: ");
- for (i = 0; i < n; ++i) printf("%d ", col_to_sup[i]);
- printf("\nsup_to_col: ");
- for (i = 0; i <= Astore->nsuper+1; ++i)
- printf("%d ", sup_to_col[i]);
- printf("\n");
- fflush(stdout);
-}
-
-void
-sPrint_Dense_Matrix(char *what, SuperMatrix *A)
-{
- 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);
- dp = (float *) Astore->nzval;
- printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
- printf("\nnzval: ");
- for (j = 0; j < A->ncol; ++j) {
- for (i = 0; i < A->nrow; ++i) printf("%f ", dp[i + j*lda]);
- printf("\n");
- }
- printf("\n");
- fflush(stdout);
-}
-
-/*! \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)
-{
- int i, k, fsupc;
- int *xsup, *supno;
- int *xlsub, *lsub;
- float *lusup;
- int *xlusup;
- float *ucol;
- int *usub, *xusub;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
- ucol = Glu->ucol;
- usub = Glu->usub;
- xusub = Glu->xusub;
-
- printf("%s", msg);
- printf("col %d: pivrow %d, supno %d, xprune %d\n",
- jcol, pivrow, supno[jcol], xprune[jcol]);
-
- printf("\tU-col:\n");
- for (i = xusub[jcol]; i < xusub[jcol+1]; i++)
- printf("\t%d%10.4f\n", usub[i], ucol[i]);
- printf("\tL-col in rectangular snode:\n");
- fsupc = xsup[supno[jcol]]; /* first col of the snode */
- i = xlsub[fsupc];
- k = xlusup[jcol];
- while ( i < xlsub[fsupc+1] && k < xlusup[jcol+1] ) {
- printf("\t%d\t%10.4f\n", lsub[i], lusup[k]);
- i++; k++;
- }
- fflush(stdout);
-}
-
-
-/*! \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)
-{
- int i;
-
- for (i = 0; i < n; i++) {
- if (tempv[i] != 0.0)
- {
- fprintf(stderr,"tempv[%d] = %f\n", i,tempv[i]);
- ABORT("scheck_tempv");
- }
- }
-}
-
-
-void
-sGenXtrue(int n, int nrhs, float *x, int ldx)
-{
- int i, j;
- for (j = 0; j < nrhs; ++j)
- for (i = 0; i < n; ++i) {
- x[i + j*ldx] = 1.0;/* + (float)(i+1.)/n;*/
- }
-}
-
-/*! \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,
- SuperMatrix *A, SuperMatrix *B)
-{
- NCformat *Astore;
- float *Aval;
- DNformat *Bstore;
- float *rhs;
- float one = 1.0;
- float zero = 0.0;
- int ldc;
- char transc[1];
-
- Astore = A->Store;
- Aval = (float *) Astore->nzval;
- Bstore = B->Store;
- rhs = Bstore->nzval;
- ldc = Bstore->lda;
-
- if ( trans == NOTRANS ) *(unsigned char *)transc = 'N';
- else *(unsigned char *)transc = 'T';
-
- sp_sgemm(transc, "N", A->nrow, nrhs, A->ncol, one, A,
- x, ldx, zero, rhs, ldc);
-
-}
-
-/*! \brief Fills a float precision array with a given value.
- */
-void
-sfill(float *a, int alen, float dval)
-{
- register int i;
- for (i = 0; i < alen; i++) a[i] = dval;
-}
-
-
-
-/*! \brief Check the inf-norm of the error vector
- */
-void sinf_norm_error(int nrhs, SuperMatrix *X, float *xtrue)
-{
- DNformat *Xstore;
- float err, xnorm;
- float *Xmat, *soln_work;
- int i, j;
-
- Xstore = X->Store;
- Xmat = Xstore->nzval;
-
- for (j = 0; j < nrhs; j++) {
- soln_work = &Xmat[j*Xstore->lda];
- err = xnorm = 0.0;
- for (i = 0; i < X->nrow; i++) {
- err = SUPERLU_MAX(err, fabs(soln_work[i] - xtrue[i]));
- xnorm = SUPERLU_MAX(xnorm, fabs(soln_work[i]));
- }
- err = err / xnorm;
- printf("||X - Xtrue||/||X|| = %e\n", err);
- }
-}
-
-
-
-/*! \brief Print performance of the code. */
-void
-sPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
- float rpg, float rcond, float *ferr,
- float *berr, char *equed, SuperLUStat_t *stat)
-{
- SCformat *Lstore;
- NCformat *Ustore;
- double *utime;
- flops_t *ops;
-
- utime = stat->utime;
- ops = stat->ops;
-
- if ( utime[FACT] != 0. )
- printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
- ops[FACT]*1e-6/utime[FACT]);
- printf("Identify relaxed snodes = %8.2f\n", utime[RELAX]);
- if ( utime[SOLVE] != 0. )
- printf("Solve flops = %.0f, Mflops = %8.2f\n", ops[SOLVE],
- ops[SOLVE]*1e-6/utime[SOLVE]);
-
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- printf("\tNo of nonzeros in factor L = %d\n", Lstore->nnz);
- 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\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",
- utime[FACT], ops[FACT]*1e-6/utime[FACT],
- utime[SOLVE], ops[SOLVE]*1e-6/utime[SOLVE],
- utime[ETREE], utime[EQUIL], utime[RCOND], utime[REFINE]);
-
- printf("\tRpg\t\tRcond\t\tFerr\t\tBerr\t\tEquil?\n");
- printf("NUM:\t%e\t%e\t%e\t%e\t%s\n",
- rpg, rcond, ferr[0], berr[0], equed);
-
-}
-
-
-
-
-print_float_vec(char *what, int n, float *vec)
-{
- int i;
- printf("%s: n %d\n", what, n);
- for (i = 0; i < n; ++i) printf("%d\t%f\n", i, vec[i]);
- return 0;
-}
-
diff --git a/SRC/temp b/SRC/temp
deleted file mode 100644
index c5f6049..0000000
--- a/SRC/temp
+++ /dev/null
@@ -1,445 +0,0 @@
-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
deleted file mode 100644
index 858fbbc..0000000
--- a/SRC/util.c
+++ /dev/null
@@ -1,495 +0,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.
- * 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>
- */
-
-
-#include <math.h>
-#include "slu_ddefs.h"
-
-/*! \brief Global statistics variale
- */
-
-void superlu_abort_and_exit(char* msg)
-{
- fprintf(stderr, msg);
- exit (-1);
-}
-
-/*! \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->Trans = NOTRANS;
- options->IterRefine = NOREFINE;
- options->DiagPivotThresh = 1.0;
- options->SymmetricMode = NO;
- options->PivotGrowth = NO;
- options->ConditionNumber = NO;
- options->PrintStat = YES;
-}
-
-/*! \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)
-{
- printf(".. options:\n");
- printf("\tFact\t %8d\n", options->Fact);
- printf("\tEquil\t %8d\n", options->Equil);
- printf("\tColPerm\t %8d\n", options->ColPerm);
- printf("\tDiagPivotThresh %8.4f\n", options->DiagPivotThresh);
- printf("\tTrans\t %8d\n", options->Trans);
- printf("\tIterRefine\t%4d\n", options->IterRefine);
- printf("\tSymmetricMode\t%4d\n", options->SymmetricMode);
- printf("\tPivotGrowth\t%4d\n", options->PivotGrowth);
- printf("\tConditionNumber\t%4d\n", options->ConditionNumber);
- printf("..\n");
-}
-
-/*! \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)
-{
- SUPERLU_FREE ( A->Store );
-}
-
-void
-Destroy_CompCol_Matrix(SuperMatrix *A)
-{
- SUPERLU_FREE( ((NCformat *)A->Store)->rowind );
- SUPERLU_FREE( ((NCformat *)A->Store)->colptr );
- SUPERLU_FREE( ((NCformat *)A->Store)->nzval );
- SUPERLU_FREE( A->Store );
-}
-
-void
-Destroy_CompRow_Matrix(SuperMatrix *A)
-{
- SUPERLU_FREE( ((NRformat *)A->Store)->colind );
- SUPERLU_FREE( ((NRformat *)A->Store)->rowptr );
- SUPERLU_FREE( ((NRformat *)A->Store)->nzval );
- SUPERLU_FREE( A->Store );
-}
-
-void
-Destroy_SuperNode_Matrix(SuperMatrix *A)
-{
- SUPERLU_FREE ( ((SCformat *)A->Store)->rowind );
- SUPERLU_FREE ( ((SCformat *)A->Store)->rowind_colptr );
- SUPERLU_FREE ( ((SCformat *)A->Store)->nzval );
- SUPERLU_FREE ( ((SCformat *)A->Store)->nzval_colptr );
- SUPERLU_FREE ( ((SCformat *)A->Store)->col_to_sup );
- SUPERLU_FREE ( ((SCformat *)A->Store)->sup_to_col );
- SUPERLU_FREE ( A->Store );
-}
-
-/*! \brief A is of type Stype==NCP */
-void
-Destroy_CompCol_Permuted(SuperMatrix *A)
-{
- SUPERLU_FREE ( ((NCPformat *)A->Store)->colbeg );
- SUPERLU_FREE ( ((NCPformat *)A->Store)->colend );
- SUPERLU_FREE ( A->Store );
-}
-
-/*! \brief A is of type Stype==DN */
-void
-Destroy_Dense_Matrix(SuperMatrix *A)
-{
- DNformat* Astore = A->Store;
- SUPERLU_FREE (Astore->nzval);
- SUPERLU_FREE ( A->Store );
-}
-
-/*! \brief Reset repfnz[] for the current column
- */
-void
-resetrep_col (const int nseg, const int *segrep, int *repfnz)
-{
- int i, irep;
-
- for (i = 0; i < nseg; i++) {
- irep = segrep[i];
- repfnz[irep] = EMPTY;
- }
-}
-
-
-/*! \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)
-{
- int nsuper, fsupc, i, j;
- int nnzL0, jlen, irep;
- int *xsup, *xlsub;
-
- xsup = Glu->xsup;
- xlsub = Glu->xlsub;
- *nnzL = 0;
- *nnzU = (Glu->xusub)[n];
- nnzL0 = 0;
- 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;
- nnzL0 += xprune[irep] - xlsub[irep];
- }
-
- /* 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;
- }
-}
-
-
-/*! \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)
-{
- register int nsuper, fsupc, nextl, i, j, k, jstrt;
- int *xsup, *lsub, *xlsub;
-
- if ( n <= 1 ) return;
-
- xsup = Glu->xsup;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- nextl = 0;
- nsuper = (Glu->supno)[n];
-
- /*
- * For each supernode ...
- */
- for (i = 0; i <= nsuper; i++) {
- fsupc = xsup[i];
- jstrt = xlsub[fsupc];
- xlsub[fsupc] = nextl;
- for (j = jstrt; j < xlsub[fsupc+1]; j++) {
- lsub[nextl] = perm_r[lsub[j]]; /* Now indexed into P*A */
- nextl++;
- }
- for (k = fsupc+1; k < xsup[i+1]; k++)
- xlsub[k] = nextl; /* Other columns in supernode i */
-
- }
-
- xlsub[n] = nextl;
-}
-
-
-/*! \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)
-{
- int j, k;
-
- for (j = jcol; j < jcol+w; j++) {
- printf("\tcol %d:\n", j);
- for (k = 0; k < nseg; k++)
- printf("\t\tseg %d, segrep %d, repfnz %d\n", k,
- segrep[k], repfnz[(j-jcol)*n + segrep[k]]);
- }
-
-}
-
-
-void
-StatInit(SuperLUStat_t *stat)
-{
- register int i, w, panel_size, relax;
-
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
- w = SUPERLU_MAX(panel_size, relax);
- stat->panel_histo = intCalloc(w+1);
- stat->utime = (double *) SUPERLU_MALLOC(NPHASES * sizeof(double));
- if (!stat->utime) ABORT("SUPERLU_MALLOC fails for stat->utime");
- stat->ops = (flops_t *) SUPERLU_MALLOC(NPHASES * sizeof(flops_t));
- if (!stat->ops) ABORT("SUPERLU_MALLOC fails for stat->ops");
- for (i = 0; i < NPHASES; ++i) {
- 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
-}
-
-
-void
-StatPrint(SuperLUStat_t *stat)
-{
- double *utime;
- flops_t *ops;
-
- utime = stat->utime;
- ops = stat->ops;
- printf("Factor time = %8.2f\n", utime[FACT]);
- if ( utime[FACT] != 0.0 )
- printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
- ops[FACT]*1e-6/utime[FACT]);
-
- printf("Solve time = %8.2f\n", utime[SOLVE]);
- if ( utime[SOLVE] != 0.0 )
- 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);
-
-}
-
-
-void
-StatFree(SuperLUStat_t *stat)
-{
- SUPERLU_FREE(stat->panel_histo);
- SUPERLU_FREE(stat->utime);
- SUPERLU_FREE(stat->ops);
-}
-
-
-flops_t
-LUFactFlops(SuperLUStat_t *stat)
-{
- return (stat->ops[FACT]);
-}
-
-flops_t
-LUSolveFlops(SuperLUStat_t *stat)
-{
- return (stat->ops[SOLVE]);
-}
-
-
-
-
-
-/*! \brief Fills an integer array with a given value.
- */
-void ifill(int *a, int alen, int ival)
-{
- register int i;
- for (i = 0; i < alen; i++) a[i] = ival;
-}
-
-
-
-/*! \brief Get the statistics of the supernodes
- */
-#define NBUCKS 10
-static int max_sup_size;
-
-void super_stats(int nsuper, int *xsup)
-{
- register int nsup1 = 0;
- int i, isize, whichb, bl, bh;
- int bucket[NBUCKS];
-
- max_sup_size = 0;
-
- for (i = 0; i <= nsuper; i++) {
- isize = xsup[i+1] - xsup[i];
- if ( isize == 1 ) nsup1++;
- if ( max_sup_size < isize ) max_sup_size = isize;
- }
-
- printf(" Supernode statistics:\n\tno of super = %d\n", nsuper+1);
- printf("\tmax supernode size = %d\n", max_sup_size);
- printf("\tno of size 1 supernodes = %d\n", nsup1);
-
- /* Histogram of the supernode sizes */
- ifill (bucket, NBUCKS, 0);
-
- for (i = 0; i <= nsuper; i++) {
- isize = xsup[i+1] - xsup[i];
- whichb = (float) isize / max_sup_size * NBUCKS;
- if (whichb >= NBUCKS) whichb = NBUCKS - 1;
- bucket[whichb]++;
- }
-
- printf("\tHistogram of supernode sizes:\n");
- for (i = 0; i < NBUCKS; i++) {
- bl = (float) i * max_sup_size / NBUCKS;
- bh = (float) (i+1) * max_sup_size / NBUCKS;
- printf("\tsnode: %d-%d\t\t%d\n", bl+1, bh, bucket[i]);
- }
-
-}
-
-
-float SpaSize(int n, int np, float sum_npw)
-{
- return (sum_npw*8 + np*8 + n*4)/1024.;
-}
-
-float DenseSize(int n, float sum_nw)
-{
- return (sum_nw*8 + n*8)/1024.;;
-}
-
-
-
-/*! \brief Check whether repfnz[] == EMPTY after reset.
- */
-void check_repfnz(int n, int w, int jcol, int *repfnz)
-{
- int jj, k;
-
- for (jj = jcol; jj < jcol+w; jj++)
- for (k = 0; k < n; k++)
- if ( repfnz[(jj-jcol)*n + k] != EMPTY ) {
- fprintf(stderr, "col %d, repfnz_col[%d] = %d\n", jj,
- k, repfnz[(jj-jcol)*n + k]);
- ABORT("check_repfnz");
- }
-}
-
-
-/*! \brief Print a summary of the testing results. */
-void
-PrintSumm(char *type, int nfail, int nrun, int nerrs)
-{
- if ( nfail > 0 )
- printf("%3s driver: %d out of %d tests failed to pass the threshold\n",
- type, nfail, nrun);
- else
- printf("All tests for %3s driver passed the threshold (%6d tests run)\n", type, nrun);
-
- if ( nerrs > 0 )
- printf("%6d error messages recorded\n", nerrs);
-}
-
-
-int print_int_vec(char *what, int n, int *vec)
-{
- int i;
- printf("%s\n", what);
- 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/xerbla.c b/SRC/xerbla.c
deleted file mode 100644
index bffd66b..0000000
--- a/SRC/xerbla.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <stdio.h>
-#include "slu_Cnames.h"
-
-/* Subroutine */ int xerbla_(char *srname, int *info)
-{
-/* -- 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
-
-
- Purpose
- =======
-
- XERBLA is an error handler for the LAPACK routines.
- It is called by an LAPACK routine if an input parameter has an
- invalid value. A message is printed and execution stops.
-
- Installers may consider modifying the STOP statement in order to
- call system-specific exception-handling facilities.
-
- Arguments
- =========
-
- SRNAME (input) CHARACTER*6
- The name of the routine which called XERBLA.
-
- INFO (input) INT
- The position of the invalid parameter in the parameter list
-
- of the calling routine.
-
- =====================================================================
-*/
-
- printf("** On entry to %6s, parameter number %2d had an illegal value\n",
- srname, *info);
-
-/* End of XERBLA */
-
- return 0;
-} /* xerbla_ */
-
diff --git a/SRC/zcolumn_bmod.c b/SRC/zcolumn_bmod.c
deleted file mode 100644
index c50e761..0000000
--- a/SRC/zcolumn_bmod.c
+++ /dev/null
@@ -1,367 +0,0 @@
-
-/*! @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.
- * </pre>
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "slu_zdefs.h"
-
-/*
- * Function prototypes
- */
-void zusolve(int, int, doublecomplex*, doublecomplex*);
-void zlsolve(int, int, doublecomplex*, doublecomplex*);
-void zmatvec(int, int, int, doublecomplex*, doublecomplex*, doublecomplex*);
-
-
-
-/*! \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 (
- const int jcol, /* in */
- const int nseg, /* in */
- doublecomplex *dense, /* in */
- doublecomplex *tempv, /* working array */
- int *segrep, /* in */
- int *repfnz, /* in */
- int fpanelc, /* in -- first column in the current panel */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- doublecomplex alpha, beta;
-
- /* krep = representative of current k-th supernode
- * fsupc = first supernodal column
- * nsupc = no of columns in supernode
- * nsupr = no of rows in supernode (used as leading dimension)
- * luptr = location of supernodal LU-block in storage
- * kfnz = first nonz in the k-th supernodal segment
- * no_zeros = no of leading zeros in a supernodal U-segment
- */
- doublecomplex ukj, ukj1, ukj2;
- int luptr, luptr1, luptr2;
- int fsupc, nsupc, nsupr, segsze;
- int nrow; /* No of rows in the matrix of matrix-vector */
- int jcolp1, jsupno, k, ksub, krep, krep_ind, ksupno;
- register int lptr, kfnz, isub, irow, i;
- register int no_zeros, new_next;
- int ufirst, nextlu;
- int fst_col; /* First column within small LU update */
- int d_fsupc; /* Distance between the first column of the current
- panel and the first column of the current snode. */
- int *xsup, *supno;
- int *lsub, *xlsub;
- doublecomplex *lusup;
- int *xlusup;
- int nzlumax;
- doublecomplex *tempv1;
- doublecomplex zero = {0.0, 0.0};
- doublecomplex one = {1.0, 0.0};
- doublecomplex none = {-1.0, 0.0};
- doublecomplex comp_temp, comp_temp1;
- int mem_error;
- flops_t *ops = stat->ops;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
- nzlumax = Glu->nzlumax;
- jcolp1 = jcol + 1;
- jsupno = supno[jcol];
-
- /*
- * For each nonz supernode segment of U[*,j] in topological order
- */
- k = nseg - 1;
- for (ksub = 0; ksub < nseg; ksub++) {
-
- krep = segrep[k];
- k--;
- ksupno = supno[krep];
- if ( jsupno != ksupno ) { /* Outside the rectangular supernode */
-
- fsupc = xsup[ksupno];
- fst_col = SUPERLU_MAX ( fsupc, fpanelc );
-
- /* Distance from the current supernode to the current panel;
- d_fsupc=0 if fsupc > fpanelc. */
- d_fsupc = fst_col - fsupc;
-
- luptr = xlusup[fst_col] + d_fsupc;
- lptr = xlsub[fsupc] + d_fsupc;
-
- kfnz = repfnz[krep];
- kfnz = SUPERLU_MAX ( kfnz, fpanelc );
-
- segsze = krep - kfnz + 1;
- nsupc = krep - fst_col + 1;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
- nrow = nsupr - d_fsupc - nsupc;
- krep_ind = lptr + nsupc - 1;
-
- ops[TRSV] += 4 * segsze * (segsze - 1);
- ops[GEMV] += 8 * nrow * segsze;
-
-
-
- /*
- * Case 1: Update U-segment of size 1 -- col-col update
- */
- if ( segsze == 1 ) {
- ukj = dense[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- zz_mult(&comp_temp, &ukj, &lusup[luptr]);
- z_sub(&dense[irow], &dense[irow], &comp_temp);
- luptr++;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- ukj1 = dense[lsub[krep_ind - 1]];
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) { /* Case 2: 2cols-col update */
- zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- z_sub(&ukj, &ukj, &comp_temp);
- dense[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++;
- luptr1++;
- zz_mult(&comp_temp, &ukj, &lusup[luptr]);
- zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- z_sub(&dense[irow], &dense[irow], &comp_temp);
- }
- } else { /* Case 3: 3cols-col update */
- ukj2 = dense[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- zz_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
- z_sub(&ukj1, &ukj1, &comp_temp);
-
- zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- z_sub(&ukj, &ukj, &comp_temp);
-
- dense[lsub[krep_ind]] = ukj;
- dense[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++;
- luptr1++;
- luptr2++;
- zz_mult(&comp_temp, &ukj, &lusup[luptr]);
- zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- z_sub(&dense[irow], &dense[irow], &comp_temp);
- }
- }
-
-
- } else {
- /*
- * Case: sup-col update
- * Perform a triangular solve and block update,
- * then scatter the result of sup-col update to dense
- */
-
- no_zeros = kfnz - fst_col;
-
- /* Copy U[*,j] segment from dense[*] to tempv[*] */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- tempv[i] = dense[irow];
- ++isub;
- }
-
- /* Dense triangular solve -- start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#else
- ztrsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#endif
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- CGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#else
- zgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#endif
-#else
- zlsolve ( nsupr, segsze, &lusup[luptr], tempv );
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- zmatvec (nsupr, nrow , segsze, &lusup[luptr], tempv, tempv1);
-#endif
-
-
- /* Scatter tempv[] into SPA dense[] as a temporary storage */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense[irow] = tempv[i];
- tempv[i] = zero;
- ++isub;
- }
-
- /* Scatter tempv1[] into SPA dense[] */
- for (i = 0; i < nrow; i++) {
- irow = lsub[isub];
- z_sub(&dense[irow], &dense[irow], &tempv1[i]);
- tempv1[i] = zero;
- ++isub;
- }
- }
-
- } /* if jsupno ... */
-
- } /* for each segment... */
-
- /*
- * Process the supernodal portion of L\U[*,j]
- */
- nextlu = xlusup[jcol];
- fsupc = xsup[jsupno];
-
- /* Copy the SPA dense into L\U[*,j] */
- new_next = nextlu + xlsub[fsupc+1] - xlsub[fsupc];
- while ( new_next > nzlumax ) {
- if (mem_error = zLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, Glu))
- return (mem_error);
- lusup = Glu->lusup;
- lsub = Glu->lsub;
- }
-
- for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
- irow = lsub[isub];
- lusup[nextlu] = dense[irow];
- dense[irow] = zero;
- ++nextlu;
- }
-
- xlusup[jcolp1] = nextlu; /* Close L\U[*,jcol] */
-
- /* For more updates within the panel (also within the current supernode),
- * should start from the first column of the panel, or the first column
- * of the supernode, whichever is bigger. There are 2 cases:
- * 1) fsupc < fpanelc, then fst_col := fpanelc
- * 2) fsupc >= fpanelc, then fst_col := fsupc
- */
- fst_col = SUPERLU_MAX ( fsupc, fpanelc );
-
- if ( fst_col < jcol ) {
-
- /* Distance between the current supernode and the current panel.
- d_fsupc=0 if fsupc >= fpanelc. */
- d_fsupc = fst_col - fsupc;
-
- lptr = xlsub[fsupc] + d_fsupc;
- luptr = xlusup[fst_col] + d_fsupc;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
- nsupc = jcol - fst_col; /* Excluding jcol */
- nrow = nsupr - d_fsupc - nsupc;
-
- /* Points to the beginning of jcol in snode L\U(jsupno) */
- ufirst = xlusup[jcol] + d_fsupc;
-
- ops[TRSV] += 4 * nsupc * (nsupc - 1);
- ops[GEMV] += 8 * nrow * nsupc;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr],
- &nsupr, &lusup[ufirst], &incx );
-#else
- ztrsv_( "L", "N", "U", &nsupc, &lusup[luptr],
- &nsupr, &lusup[ufirst], &incx );
-#endif
-
- alpha = none; beta = one; /* y := beta*y + alpha*A*x */
-
-#ifdef _CRAY
- CGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#else
- zgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#endif
-#else
- zlsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
-
- zmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
- &lusup[ufirst], tempv );
-
- /* Copy updates from tempv[*] into lusup[*] */
- isub = ufirst + nsupc;
- for (i = 0; i < nrow; i++) {
- z_sub(&lusup[isub], &lusup[isub], &tempv[i]);
- tempv[i] = zero;
- ++isub;
- }
-
-#endif
-
-
- } /* if fst_col < jcol ... */
-
- return 0;
-}
diff --git a/SRC/zcolumn_dfs.c b/SRC/zcolumn_dfs.c
deleted file mode 100644
index 0f8c6ed..0000000
--- a/SRC/zcolumn_dfs.c
+++ /dev/null
@@ -1,275 +0,0 @@
-
-/*! @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.
- * </pre>
-*/
-
-#include "slu_zdefs.h"
-
-/*! \brief What type of supernodes we want */
-#define T2_SUPER
-
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- * 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
- * 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 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.
- *
- * 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.
- *
- * 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
- *
- * Return value
- * ============
- * 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 */
- int fsupc; /* First column of a snode */
- int myfnz; /* First nonz column of a U-segment */
- int chperm, chmark, chrep, kchild;
- int xdfs, maxdfs, kpar, oldrep;
- int jptr, jm1ptr;
- int ito, ifrom, istop; /* 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;
- xlsub = Glu->xlsub;
- nzlmax = Glu->nzlmax;
-
- if ( first ) {
- maxsuper = sp_ienv(3);
- first = 0;
- }
- jcolp1 = jcol + 1;
- jcolm1 = jcol - 1;
- nsuper = supno[jcol];
- jsuper = nsuper;
- nextl = xlsub[jcol];
- marker2 = &marker[2*m];
-
-
- /* For each nonzero in A[*,jcol] do dfs */
- for (k = 0; lsub_col[k] != EMPTY; k++) {
-
- krow = lsub_col[k];
- lsub_col[k] = EMPTY;
- kmark = marker2[krow];
-
- /* krow was visited before, go to the next nonz */
- if ( kmark == jcol ) continue;
-
- /* For each unmarked nbr krow of jcol
- * krow is in L: place it in structure of L[*,jcol]
- */
- marker2[krow] = jcol;
- kperm = perm_r[krow];
-
- if ( kperm == EMPTY ) {
- lsub[nextl++] = krow; /* krow is indexed into A */
- if ( nextl >= nzlmax ) {
- 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 {
- /* krow is in U: if its supernode-rep krep
- * has been explored, update repfnz[*]
- */
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz[krep];
-
- if ( myfnz != EMPTY ) { /* Visited before */
- 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];
-
- do {
- /*
- * For each unmarked kchild of krep
- */
- while ( xdfs < maxdfs ) {
-
- kchild = lsub[xdfs];
- xdfs++;
- chmark = marker2[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;
- if ( nextl >= nzlmax ) {
- 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 */
- if ( myfnz > 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) */
- parent[krep] = oldrep;
- repfnz[krep] = chperm;
- xdfs = xlsub[krep];
- maxdfs = xprune[krep];
- } /* else */
-
- } /* else */
-
- } /* if */
-
- } /* while */
-
- /* krow has no more unexplored nbrs;
- * place supernode-rep krep in postorder DFS.
- * backtrack dfs to its parent
- */
- segrep[*nseg] = krep;
- ++(*nseg);
- kpar = parent[krep]; /* Pop from stack, mimic recursion */
- if ( kpar == EMPTY ) break; /* dfs done */
- krep = kpar;
- xdfs = xplore[krep];
- maxdfs = xprune[krep];
-
- } while ( kpar != EMPTY ); /* Until empty stack */
-
- } /* else */
-
- } /* else */
-
- } /* for each nonzero ... */
-
- /* Check to see if j belongs in the same supernode as j-1 */
- if ( jcol == 0 ) { /* Do nothing for column 0 */
- nsuper = supno[0] = 0;
- } else {
- fsupc = xsup[nsuper];
- jptr = xlsub[jcol]; /* Not compressed yet */
- jm1ptr = xlsub[jcolm1];
-
-#ifdef T2_SUPER
- if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
-#endif
- /* 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)
- */
- if ( jsuper == EMPTY ) { /* starts a new supernode */
- if ( (fsupc < jcolm1-1) ) { /* >= 3 columns in nsuper */
-#ifdef CHK_COMPRESS
- printf(" Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
-#endif
- 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)
- lsub[ito] = lsub[ifrom];
- nextl = ito; /* = istop + length(jcol) */
- }
- nsuper++;
- supno[jcol] = nsuper;
- } /* if a new supernode */
-
- } /* 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/zcopy_to_ucol.c b/SRC/zcopy_to_ucol.c
deleted file mode 100644
index 8f5a051..0000000
--- a/SRC/zcopy_to_ucol.c
+++ /dev/null
@@ -1,103 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_zdefs.h"
-
-int
-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 */
- GlobalLU_t *Glu /* modified */
- )
-{
-/*
- * 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;
- 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;
-
- 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))
- return (mem_error);
- ucol = Glu->ucol;
- if (mem_error = zLUMemXpand(jcol, nextu, USUB, &nzumax, Glu))
- return (mem_error);
- usub = Glu->usub;
- lsub = Glu->lsub;
- }
-
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- usub[nextu] = perm_r[irow];
- ucol[nextu] = dense[irow];
- dense[irow] = zero;
- nextu++;
- isub++;
- }
-
- }
-
- }
-
- } /* for each segment... */
-
- xusub[jcol + 1] = nextu; /* Close U[*,jcol] */
- return 0;
-}
diff --git a/SRC/zdiagonal.c b/SRC/zdiagonal.c
deleted file mode 100644
index ddd9c32..0000000
--- a/SRC/zdiagonal.c
+++ /dev/null
@@ -1,133 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 8bb95aa..0000000
--- a/SRC/zgscon.c
+++ /dev/null
@@ -1,154 +0,0 @@
-
-/*! @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.
- */
-#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)
-{
-
-
- /* Local variables */
- int kase, kase1, onenrm, i;
- double ainvnm;
- doublecomplex *work;
- extern int zrscl_(int *, doublecomplex *, doublecomplex *, int *);
-
- extern int zlacon_(int *, doublecomplex *, doublecomplex *, double *, int *);
-
-
- /* Test the input parameters. */
- *info = 0;
- onenrm = *(unsigned char *)norm == '1' || lsame_(norm, "O");
- if (! onenrm && ! lsame_(norm, "I")) *info = -1;
- else if (L->nrow < 0 || L->nrow != L->ncol ||
- L->Stype != SLU_SC || L->Dtype != SLU_Z || L->Mtype != SLU_TRLU)
- *info = -2;
- else if (U->nrow < 0 || U->nrow != U->ncol ||
- U->Stype != SLU_NC || U->Dtype != SLU_Z || U->Mtype != SLU_TRU)
- *info = -3;
- if (*info != 0) {
- i = -(*info);
- xerbla_("zgscon", &i);
- return;
- }
-
- /* Quick return if possible */
- *rcond = 0.;
- if ( L->nrow == 0 || U->nrow == 0) {
- *rcond = 1.;
- return;
- }
-
- work = doublecomplexCalloc( 3*L->nrow );
-
-
- if ( !work )
- ABORT("Malloc fails for work arrays in zgscon.");
-
- /* Estimate the norm of inv(A). */
- ainvnm = 0.;
- if ( onenrm ) kase1 = 1;
- else kase1 = 2;
- kase = 0;
-
- do {
- zlacon_(&L->nrow, &work[L->nrow], &work[0], &ainvnm, &kase);
-
- if (kase == 0) break;
-
- if (kase == kase1) {
- /* Multiply by inv(L). */
- sp_ztrsv("L", "No trans", "Unit", L, U, &work[0], stat, info);
-
- /* Multiply by inv(U). */
- sp_ztrsv("U", "No trans", "Non-unit", L, U, &work[0], stat, info);
-
- } else {
-
- /* Multiply by inv(U'). */
- sp_ztrsv("U", "Transpose", "Non-unit", L, U, &work[0], stat, info);
-
- /* Multiply by inv(L'). */
- sp_ztrsv("L", "Transpose", "Unit", L, U, &work[0], stat, info);
-
- }
-
- } while ( kase != 0 );
-
- /* Compute the estimate of the reciprocal condition number. */
- if (ainvnm != 0.) *rcond = (1. / ainvnm) / anorm;
-
- SUPERLU_FREE (work);
- return;
-
-} /* zgscon */
-
diff --git a/SRC/zgsequ.c b/SRC/zgsequ.c
deleted file mode 100644
index 657637d..0000000
--- a/SRC/zgsequ.c
+++ /dev/null
@@ -1,195 +0,0 @@
-
-/*! @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
- * History: Modified from LAPACK routine ZGEEQU
- */
-#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)
-{
-
-
- /* Local variables */
- NCformat *Astore;
- doublecomplex *Aval;
- int i, j, irow;
- double rcmin, rcmax;
- double bignum, smlnum;
- extern double dlamch_(char *);
-
- /* Test the input parameters. */
- *info = 0;
- if ( A->nrow < 0 || A->ncol < 0 ||
- A->Stype != SLU_NC || A->Dtype != SLU_Z || A->Mtype != SLU_GE )
- *info = -1;
- if (*info != 0) {
- i = -(*info);
- xerbla_("zgsequ", &i);
- return;
- }
-
- /* Quick return if possible */
- if ( A->nrow == 0 || A->ncol == 0 ) {
- *rowcnd = 1.;
- *colcnd = 1.;
- *amax = 0.;
- return;
- }
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Get machine constants. */
- smlnum = dlamch_("S");
- bignum = 1. / smlnum;
-
- /* Compute row scale factors. */
- for (i = 0; i < A->nrow; ++i) r[i] = 0.;
-
- /* Find the maximum element in each row. */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- r[irow] = SUPERLU_MAX( r[irow], z_abs1(&Aval[i]) );
- }
-
- /* Find the maximum and minimum scale factors. */
- rcmin = bignum;
- rcmax = 0.;
- for (i = 0; i < A->nrow; ++i) {
- rcmax = SUPERLU_MAX(rcmax, r[i]);
- rcmin = SUPERLU_MIN(rcmin, r[i]);
- }
- *amax = rcmax;
-
- if (rcmin == 0.) {
- /* Find the first zero scale factor and return an error code. */
- for (i = 0; i < A->nrow; ++i)
- if (r[i] == 0.) {
- *info = i + 1;
- return;
- }
- } else {
- /* Invert the scale factors. */
- for (i = 0; i < A->nrow; ++i)
- r[i] = 1. / SUPERLU_MIN( SUPERLU_MAX( r[i], smlnum ), bignum );
- /* Compute ROWCND = min(R(I)) / max(R(I)) */
- *rowcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
- }
-
- /* Compute column scale factors */
- for (j = 0; j < A->ncol; ++j) c[j] = 0.;
-
- /* Find the maximum element in each column, assuming the row
- scalings computed above. */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- c[j] = SUPERLU_MAX( c[j], z_abs1(&Aval[i]) * r[irow] );
- }
-
- /* Find the maximum and minimum scale factors. */
- rcmin = bignum;
- rcmax = 0.;
- for (j = 0; j < A->ncol; ++j) {
- rcmax = SUPERLU_MAX(rcmax, c[j]);
- rcmin = SUPERLU_MIN(rcmin, c[j]);
- }
-
- if (rcmin == 0.) {
- /* Find the first zero scale factor and return an error code. */
- for (j = 0; j < A->ncol; ++j)
- if ( c[j] == 0. ) {
- *info = A->nrow + j + 1;
- return;
- }
- } else {
- /* Invert the scale factors. */
- for (j = 0; j < A->ncol; ++j)
- c[j] = 1. / SUPERLU_MIN( SUPERLU_MAX( c[j], smlnum ), bignum);
- /* Compute COLCND = min(C(J)) / max(C(J)) */
- *colcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
- }
-
- return;
-
-} /* zgsequ */
-
-
diff --git a/SRC/zgsisx.c b/SRC/zgsisx.c
deleted file mode 100644
index 25d9098..0000000
--- a/SRC/zgsisx.c
+++ /dev/null
@@ -1,727 +0,0 @@
-
-/*! @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
deleted file mode 100644
index e7e7055..0000000
--- a/SRC/zgsisx.c.bak
+++ /dev/null
@@ -1,723 +0,0 @@
-
-/*! @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
deleted file mode 100644
index b4b13de..0000000
--- a/SRC/zgsitrf.c
+++ /dev/null
@@ -1,637 +0,0 @@
-
-/*! @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
deleted file mode 100644
index a763c98..0000000
--- a/SRC/zgsitrf.c.bak
+++ /dev/null
@@ -1,629 +0,0 @@
-
-/*! @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
deleted file mode 100644
index 2ed0481..0000000
--- a/SRC/zgsrfs.c
+++ /dev/null
@@ -1,460 +0,0 @@
-
-/*! @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
- * History: Modified from lapack routine ZGERFS
- */
-#include <math.h>
-#include "slu_zdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * ZGSRFS improves the computed solution to a system of linear
- * equations and provides error bounds and backward error estimates for
- * the solution.
- *
- * If equilibration was performed, the system becomes:
- * (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.
- *
- * See supermatrix.h for the definition of 'SuperMatrix' structure.
- *
- * Arguments
- * =========
- *
- * 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)
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * 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 zgstrs().
- * 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.
- *
- * 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.
- *
- * 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).
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See 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
- *
- * Internal Parameters
- * ===================
- *
- * 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
-
- /* Table of constant values */
- int ione = 1;
- doublecomplex ndone = {-1., 0.};
- doublecomplex done = {1., 0.};
-
- /* Local variables */
- NCformat *Astore;
- doublecomplex *Aval;
- SuperMatrix Bjcol;
- DNformat *Bstore, *Xstore, *Bjcol_store;
- doublecomplex *Bmat, *Xmat, *Bptr, *Xptr;
- int kase;
- double safe1, safe2;
- int i, j, k, irow, nz, count, notran, rowequ, colequ;
- int ldb, ldx, nrhs;
- double s, xk, lstres, eps, safmin;
- char transc[1];
- trans_t transt;
- doublecomplex *work;
- double *rwork;
- int *iwork;
-
- extern int zlacon_(int *, doublecomplex *, doublecomplex *, double *, int *);
-#ifdef _CRAY
- extern int CCOPY(int *, doublecomplex *, int *, doublecomplex *, int *);
- extern int CSAXPY(int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *);
-#else
- extern int zcopy_(int *, doublecomplex *, int *, doublecomplex *, int *);
- extern int zaxpy_(int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *);
-#endif
-
- Astore = A->Store;
- Aval = Astore->nzval;
- Bstore = B->Store;
- Xstore = X->Store;
- Bmat = Bstore->nzval;
- Xmat = Xstore->nzval;
- ldb = Bstore->lda;
- ldx = Xstore->lda;
- nrhs = B->ncol;
-
- /* Test the input parameters */
- *info = 0;
- notran = (trans == NOTRANS);
- if ( !notran && trans != TRANS && trans != CONJ ) *info = -1;
- else if ( A->nrow != A->ncol || A->nrow < 0 ||
- A->Stype != SLU_NC || A->Dtype != SLU_Z || A->Mtype != SLU_GE )
- *info = -2;
- else if ( L->nrow != L->ncol || L->nrow < 0 ||
- L->Stype != SLU_SC || L->Dtype != SLU_Z || L->Mtype != SLU_TRLU )
- *info = -3;
- else if ( U->nrow != U->ncol || U->nrow < 0 ||
- U->Stype != SLU_NC || U->Dtype != SLU_Z || U->Mtype != SLU_TRU )
- *info = -4;
- else if ( ldb < SUPERLU_MAX(0, A->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_Z || B->Mtype != SLU_GE )
- *info = -10;
- else if ( ldx < SUPERLU_MAX(0, A->nrow) ||
- X->Stype != SLU_DN || X->Dtype != SLU_Z || X->Mtype != SLU_GE )
- *info = -11;
- if (*info != 0) {
- i = -(*info);
- xerbla_("zgsrfs", &i);
- return;
- }
-
- /* Quick return if possible */
- if ( A->nrow == 0 || nrhs == 0) {
- for (j = 0; j < nrhs; ++j) {
- ferr[j] = 0.;
- berr[j] = 0.;
- }
- return;
- }
-
- rowequ = lsame_(equed, "R") || lsame_(equed, "B");
- colequ = lsame_(equed, "C") || lsame_(equed, "B");
-
- /* Allocate working space */
- work = doublecomplexMalloc(2*A->nrow);
- rwork = (double *) SUPERLU_MALLOC( A->nrow * sizeof(double) );
- iwork = intMalloc(A->nrow);
- if ( !work || !rwork || !iwork )
- ABORT("Malloc fails for work/rwork/iwork.");
-
- if ( notran ) {
- *(unsigned char *)transc = 'N';
- transt = TRANS;
- } else {
- *(unsigned char *)transc = 'T';
- transt = NOTRANS;
- }
-
- /* NZ = maximum number of nonzero elements in each row of A, plus 1 */
- 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;
-
- /* Compute the number of nonzeros in each row (or column) of A */
- for (i = 0; i < A->nrow; ++i) iwork[i] = 0;
- if ( notran ) {
- for (k = 0; k < A->ncol; ++k)
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- ++iwork[Astore->rowind[i]];
- } else {
- for (k = 0; k < A->ncol; ++k)
- iwork[k] = Astore->colptr[k+1] - Astore->colptr[k];
- }
-
- /* Copy one column of RHS B into Bjcol. */
- Bjcol.Stype = B->Stype;
- Bjcol.Dtype = B->Dtype;
- Bjcol.Mtype = B->Mtype;
- Bjcol.nrow = B->nrow;
- Bjcol.ncol = 1;
- Bjcol.Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
- if ( !Bjcol.Store ) ABORT("SUPERLU_MALLOC fails for Bjcol.Store");
- Bjcol_store = Bjcol.Store;
- Bjcol_store->lda = ldb;
- Bjcol_store->nzval = work; /* address aliasing */
-
- /* Do for each right hand side ... */
- for (j = 0; j < nrhs; ++j) {
- count = 0;
- lstres = 3.;
- Bptr = &Bmat[j*ldb];
- Xptr = &Xmat[j*ldx];
-
- while (1) { /* Loop until stopping criterion is satisfied. */
-
- /* Compute residual R = B - op(A) * X,
- where op(A) = A, A**T, or A**H, depending on TRANS. */
-
-#ifdef _CRAY
- CCOPY(&A->nrow, Bptr, &ione, work, &ione);
-#else
- zcopy_(&A->nrow, Bptr, &ione, work, &ione);
-#endif
- sp_zgemv(transc, ndone, A, Xptr, ione, done, work, ione);
-
- /* Compute componentwise relative backward error from formula
- max(i) ( abs(R(i)) / ( abs(op(A))*abs(X) + abs(B) )(i) )
- 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 before dividing. */
-
- for (i = 0; i < A->nrow; ++i) rwork[i] = z_abs1( &Bptr[i] );
-
- /* Compute abs(op(A))*abs(X) + abs(B). */
- if (notran) {
- for (k = 0; k < A->ncol; ++k) {
- xk = z_abs1( &Xptr[k] );
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- rwork[Astore->rowind[i]] += z_abs1(&Aval[i]) * xk;
- }
- } else {
- for (k = 0; k < A->ncol; ++k) {
- s = 0.;
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
- irow = Astore->rowind[i];
- s += z_abs1(&Aval[i]) * z_abs1(&Xptr[irow]);
- }
- rwork[k] += s;
- }
- }
- s = 0.;
- for (i = 0; i < A->nrow; ++i) {
- if (rwork[i] > safe2) {
- s = SUPERLU_MAX( s, z_abs1(&work[i]) / rwork[i] );
- } 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;
-
- /* Test stopping criterion. Continue iterating if
- 1) The residual BERR(J) is larger than machine epsilon, and
- 2) BERR(J) decreased by at least a factor of 2 during the
- last iteration, and
- 3) At most ITMAX iterations tried. */
-
- if (berr[j] > eps && berr[j] * 2. <= lstres && count < ITMAX) {
- /* Update solution and try again. */
- zgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
-#ifdef _CRAY
- CAXPY(&A->nrow, &done, work, &ione,
- &Xmat[j*ldx], &ione);
-#else
- zaxpy_(&A->nrow, &done, work, &ione,
- &Xmat[j*ldx], &ione);
-#endif
- lstres = berr[j];
- ++count;
- } else {
- break;
- }
-
- } /* end while */
-
- stat->RefineSteps = count;
-
- /* Bound error from formula:
- norm(X - XTRUE) / norm(X) .le. FERR = norm( abs(inv(op(A)))*
- ( abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) / norm(X)
- where
- norm(Z) is the magnitude of the largest component of Z
- inv(op(A)) is the inverse of op(A)
- abs(Z) is the componentwise absolute value of the matrix or
- vector Z
- NZ is the maximum number of nonzeros in any row of A, plus 1
- EPS is machine epsilon
-
- The i-th component of abs(R)+NZ*EPS*(abs(op(A))*abs(X)+abs(B))
- is incremented by SAFE1 if the i-th component of
- abs(op(A))*abs(X) + abs(B) is less than SAFE2.
-
- Use ZLACON to estimate the infinity-norm of the matrix
- inv(op(A)) * diag(W),
- where W = abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) */
-
- for (i = 0; i < A->nrow; ++i) rwork[i] = z_abs1( &Bptr[i] );
-
- /* Compute abs(op(A))*abs(X) + abs(B). */
- if ( notran ) {
- for (k = 0; k < A->ncol; ++k) {
- xk = z_abs1( &Xptr[k] );
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
- rwork[Astore->rowind[i]] += z_abs1(&Aval[i]) * xk;
- }
- } else {
- for (k = 0; k < A->ncol; ++k) {
- s = 0.;
- for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
- irow = Astore->rowind[i];
- xk = z_abs1( &Xptr[irow] );
- s += z_abs1(&Aval[i]) * xk;
- }
- rwork[k] += s;
- }
- }
-
- for (i = 0; i < A->nrow; ++i)
- if (rwork[i] > safe2)
- rwork[i] = z_abs(&work[i]) + (iwork[i]+1)*eps*rwork[i];
- else
- rwork[i] = z_abs(&work[i])+(iwork[i]+1)*eps*rwork[i]+safe1;
- kase = 0;
-
- do {
- zlacon_(&A->nrow, &work[A->nrow], work,
- &ferr[j], &kase);
- if (kase == 0) break;
-
- if (kase == 1) {
- /* Multiply by diag(W)*inv(op(A)**T)*(diag(C) or diag(R)). */
- if ( notran && colequ )
- for (i = 0; i < A->ncol; ++i) {
- zd_mult(&work[i], &work[i], C[i]);
- }
- else if ( !notran && rowequ )
- for (i = 0; i < A->nrow; ++i) {
- zd_mult(&work[i], &work[i], R[i]);
- }
-
- zgstrs (transt, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
- for (i = 0; i < A->nrow; ++i) {
- zd_mult(&work[i], &work[i], rwork[i]);
- }
- } else {
- /* Multiply by (diag(C) or diag(R))*inv(op(A))*diag(W). */
- for (i = 0; i < A->nrow; ++i) {
- zd_mult(&work[i], &work[i], rwork[i]);
- }
-
- zgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
-
- if ( notran && colequ )
- for (i = 0; i < A->ncol; ++i) {
- zd_mult(&work[i], &work[i], C[i]);
- }
- else if ( !notran && rowequ )
- for (i = 0; i < A->ncol; ++i) {
- zd_mult(&work[i], &work[i], R[i]);
- }
- }
-
- } while ( kase != 0 );
-
- /* Normalize error. */
- lstres = 0.;
- if ( notran && colequ ) {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, C[i] * z_abs1( &Xptr[i]) );
- } else if ( !notran && rowequ ) {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, R[i] * z_abs1( &Xptr[i]) );
- } else {
- for (i = 0; i < A->nrow; ++i)
- lstres = SUPERLU_MAX( lstres, z_abs1( &Xptr[i]) );
- }
- if ( lstres != 0. )
- ferr[j] /= lstres;
-
- } /* for each RHS j ... */
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(rwork);
- SUPERLU_FREE(iwork);
- SUPERLU_FREE(Bjcol.Store);
-
- return;
-
-} /* zgsrfs */
diff --git a/SRC/zgssv.c b/SRC/zgssv.c
deleted file mode 100644
index aceb10d..0000000
--- a/SRC/zgssv.c
+++ /dev/null
@@ -1,227 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * ZGSSV solves the system of linear equations A*X=B, using the
- * LU factorization from ZGSTRF. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 1.1. Permute the columns of A, forming A*Pc, where Pc
- * is a permutation matrix. For more details of this step,
- * see sp_preorder.c.
- *
- * 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.
- *
- * 1.3. Solve the system of equations A*X=B using the factored
- * form of A.
- *
- * 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
- * above algorithm to the transpose of A:
- *
- * 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 sp_preorder.c.
- *
- * 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.
- *
- * 2.3. Solve the system of equations A*X=B using the factored
- * form of A.
- *
- * 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) 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.
- *
- * 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.
- *
- * 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.
- *
- * 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->RowPerm = MY_PERMR or
- * options->Fact = SamePattern_SameRowPerm, perm_r is an
- * input argument.
- * otherwise it is an output argument.
- *
- * 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.
- *
- * 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;
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See util.h for the definition of 'SuperLUStat_t'.
- *
- * 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>
- */
-
-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 */
- int panel_size; /* panel size */
- int relax; /* no of columns in a relaxed snodes */
- int permc_spec;
- trans_t trans = NOTRANS;
- double *utime;
- double t; /* Temporary time */
-
- /* Test the input parameters ... */
- *info = 0;
- Bstore = B->Store;
- if ( options->Fact != DOFACT ) *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 ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_Z || B->Mtype != SLU_GE )
- *info = -7;
- if ( *info != 0 ) {
- i = -(*info);
- xerbla_("zgssv", &i);
- return;
- }
-
- 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);
- trans = TRANS;
- } else {
- if ( A->Stype == SLU_NC ) AA = A;
- }
-
- t = SuperLU_timer_();
- /*
- * Get 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_() - t;
-
- etree = intMalloc(A->ncol);
-
- t = SuperLU_timer_();
- sp_preorder(options, AA, perm_c, etree, &AC);
- utime[ETREE] = SuperLU_timer_() - t;
-
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
-
- /*printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));*/
- t = SuperLU_timer_();
- /* Compute the LU factorization of A. */
- 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_();
- if ( *info == 0 ) {
- /* Solve the system A*X=B, overwriting B with X. */
- zgstrs (trans, L, U, perm_c, perm_r, B, stat, info);
- }
- utime[SOLVE] = SuperLU_timer_() - t;
-
- SUPERLU_FREE (etree);
- Destroy_CompCol_Permuted(&AC);
- if ( A->Stype == SLU_NR ) {
- Destroy_SuperMatrix_Store(AA);
- SUPERLU_FREE(AA);
- }
-
-}
diff --git a/SRC/zgssvx.c b/SRC/zgssvx.c
deleted file mode 100644
index 5ee349d..0000000
--- a/SRC/zgssvx.c
+++ /dev/null
@@ -1,622 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * ZGSSVX solves the system of linear equations A*X=B or A'*X=B, using
- * the LU factorization from zgstrf(). Error bounds on the solution and
- * a condition estimate are also provided. It performs the following steps:
- *
- * 1. If A is stored column-wise (A->Stype = SLU_NC):
- *
- * 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).
- *
- * 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 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.
- *
- * 1.6. The system of equations is solved for X using the factored form
- * of A.
- *
- * 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.
- *
- * 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.
- *
- * 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, 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 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.
- *
- * 2.6. The system of equations is solved for X using the factored form
- * of transpose(A).
- *
- * 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.
- *
- * 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.
- * 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).
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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: 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>
- */
-
-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;
- 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;
- 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;
-
- /* 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);
- 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;
- }
-
-#if 0
-printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
- options->Fact, options->Trans, *equed);
-#endif
-
- /* 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 ) *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;
- }
- 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) {
- i = -(*info);
- xerbla_("zgssvx", &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 && 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;
-
-/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
- relax, panel_size, sp_ienv(3), sp_ienv(4));
- fflush(stdout); */
-
- /* Compute the LU factorization of A*Pc. */
- t0 = SuperLU_timer_();
- 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 ) {
- mem_usage->total_needed = *info - A->ncol;
- return;
- }
- }
-
- if ( options->PivotGrowth ) {
- if ( *info > 0 ) {
- if ( *info <= A->ncol ) {
- /* Compute the reciprocal pivot growth factor of the leading
- rank-deficient *info columns of A. */
- *recip_pivot_growth = zPivotGrowth(*info, AA, perm_c, L, U);
- }
- 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, info);
- utime[RCOND] = 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]);
- }
-
- /* 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, info);
- utime[SOLVE] = SuperLU_timer_() - t0;
-
- /* Use iterative refinement to improve the computed solution and compute
- error bounds and backward error estimates for it. */
- t0 = SuperLU_timer_();
- if ( options->IterRefine != NOREFINE ) {
- zgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
- X, ferr, berr, stat, info);
- } else {
- for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
- }
- utime[REFINE] = 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 < 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)
- zd_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
- }
- } /* 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 = A->ncol + 1;
- }
-
- if ( nofact ) {
- 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/zgstrf.c b/SRC/zgstrf.c
deleted file mode 100644
index e3c22f0..0000000
--- a/SRC/zgstrf.c
+++ /dev/null
@@ -1,436 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_zdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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).
- *
- * 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.
- *
- * 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: 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.
- *
- * ======================================================================
- *
- * Local Working Arrays:
- * ======================
- * m = number of rows in the matrix
- * n = number of columns in the matrix
- *
- * 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.
- *
- * 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 zpanel_dfs.c; marker2 is used for inner-factorization,
- * see zcolumn_dfs.c.
- *
- * 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 zpanel_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_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
- options->Fact == SamePattern_SameRowPerm */
- int *iperm_c; /* inverse of perm_c */
- int *iwork;
- doublecomplex *zwork;
- int *segrep, *repfnz, *parent, *xplore;
- int *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
- int *xprune;
- int *marker;
- doublecomplex *dense, *tempv;
- int *relax_end;
- doublecomplex *a;
- int *asub;
- int *xa_begin, *xa_end;
- int *xsup, *supno;
- int *xlsub, *xlusup, *xusub;
- int nzlumax;
- 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;
- double diag_pivot_thresh = options->DiagPivotThresh;
- 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;
-
- 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, fill_ratio, 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, &xprune, &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;
-
- /* Identify relaxed snodes */
- relax_end = (int *) intMalloc(n);
- if ( options->SymmetricMode == YES ) {
- heap_relax_snode(n, etree, relax, marker, relax_end);
- } else {
- relax_snode(n, etree, relax, marker, relax_end);
- }
-
- 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;
-
- /*
- * 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]++;
-
- /* --------------------------------------
- * Factorize the relaxed supernode(jcol:kcol)
- * -------------------------------------- */
- /* Determine the union of the row structure of the snode */
- if ( (*info = zsnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
- xprune, 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;
-
- /* Scatter into SPA dense[*] */
- for (k = xa_begin[icol]; k < xa_end[icol]; k++)
- dense[asub[k]] = a[k];
-
- /* Numeric update within the snode */
- zsnode_bmod(icol, jsupno, fsupc, dense, tempv, &Glu, stat);
-
- if ( (*info = zpivotL(icol, diag_pivot_thresh, &usepr, perm_r,
- iperm_r, iperm_c, &pivrow, &Glu, stat)) )
- if ( iinfo == 0 ) iinfo = *info;
-
-#ifdef DEBUG
- zprint_lu_col("[1]: ", icol, pivrow, xprune, &Glu);
-#endif
-
- }
-
- jcol = icol;
-
- } 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 */
- zpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
- dense, panel_lsub, segrep, repfnz, xprune,
- 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 */
-
- if ((*info = zcolumn_dfs(m, jj, perm_r, &nseg, &panel_lsub[k],
- segrep, &repfnz[k], xprune, marker,
- parent, xplore, &Glu)) != 0) return;
-
- /* Numeric updates */
- if ((*info = zcolumn_bmod(jj, (nseg - nseg1), &dense[k],
- tempv, &segrep[nseg1], &repfnz[k],
- jcol, &Glu, stat)) != 0) return;
-
- /* Copy the U-segments to ucol[*] */
- if ((*info = zcopy_to_ucol(jj, nseg, segrep, &repfnz[k],
- perm_r, &dense[k], &Glu)) != 0)
- return;
-
- if ( (*info = zpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
- iperm_r, iperm_c, &pivrow, &Glu, stat)) )
- if ( iinfo == 0 ) iinfo = *info;
-
- /* Prune columns (0:jj-1) using column jj */
- zpruneL(jj, perm_r, pivrow, nseg, segrep,
- &repfnz[k], xprune, &Glu);
-
- /* Reset repfnz[] for this column */
- resetrep_col (nseg, segrep, &repfnz[k]);
-
-#ifdef DEBUG
- zprint_lu_col("[2]: ", jj, pivrow, xprune, &Glu);
-#endif
-
- }
-
- 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;
- }
- }
-
- countnz(min_mn, xprune, &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);
-
-}
diff --git a/SRC/zgstrs.c b/SRC/zgstrs.c
deleted file mode 100644
index 0a86e60..0000000
--- a/SRC/zgstrs.c
+++ /dev/null
@@ -1,350 +0,0 @@
-
-/*! @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>
- */
-
-#include "slu_zdefs.h"
-
-
-/*
- * Function prototypes
- */
-void zusolve(int, int, doublecomplex*, doublecomplex*);
-void zlsolve(int, int, doublecomplex*, doublecomplex*);
-void zmatvec(int, int, int, doublecomplex*, doublecomplex*, doublecomplex*);
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * 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.
- *
- * See supermatrix.h for the definition of 'SuperMatrix' structure.
- *
- * Arguments
- * =========
- *
- * 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)
- *
- * 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.
- *
- * 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.
- *
- * 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_Z, Mtype = SLU_GE.
- * On entry, the right hand side matrix.
- * On exit, the solution matrix if info = 0;
- *
- * stat (output) SuperLUStat_t*
- * Record the statistics on runtime and floating-point operation count.
- * See 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
- * </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
- int incx = 1, incy = 1;
-#ifdef USE_VENDOR_BLAS
- doublecomplex alpha = {1.0, 0.0}, beta = {1.0, 0.0};
- doublecomplex *work_col;
-#endif
- doublecomplex temp_comp;
- DNformat *Bstore;
- doublecomplex *Bmat;
- SCformat *Lstore;
- NCformat *Ustore;
- doublecomplex *Lval, *Uval;
- int fsupc, nrow, nsupr, nsupc, luptr, istart, irow;
- int i, j, k, iptr, jcol, n, ldb, nrhs;
- doublecomplex *work, *rhs_work, *soln;
- flops_t solve_ops;
- void zprint_soln();
-
- /* Test input parameters ... */
- *info = 0;
- Bstore = B->Store;
- ldb = Bstore->lda;
- nrhs = B->ncol;
- if ( trans != NOTRANS && trans != TRANS && trans != CONJ ) *info = -1;
- else if ( L->nrow != L->ncol || L->nrow < 0 ||
- L->Stype != SLU_SC || L->Dtype != SLU_Z || L->Mtype != SLU_TRLU )
- *info = -2;
- else if ( U->nrow != U->ncol || U->nrow < 0 ||
- U->Stype != SLU_NC || U->Dtype != SLU_Z || U->Mtype != SLU_TRU )
- *info = -3;
- else if ( ldb < SUPERLU_MAX(0, L->nrow) ||
- B->Stype != SLU_DN || B->Dtype != SLU_Z || B->Mtype != SLU_GE )
- *info = -6;
- if ( *info ) {
- i = -(*info);
- xerbla_("zgstrs", &i);
- return;
- }
-
- n = L->nrow;
- work = doublecomplexCalloc(n * nrhs);
- if ( !work ) ABORT("Malloc fails for local work[].");
- soln = doublecomplexMalloc(n);
- if ( !soln ) ABORT("Malloc fails for local soln[].");
-
- Bmat = Bstore->nzval;
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
- solve_ops = 0;
-
- if ( trans == NOTRANS ) {
- /* 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 += 4 * nsupc * (nsupc - 1) * nrhs;
- solve_ops += 8 * 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;
- zz_mult(&temp_comp, &rhs_work[fsupc], &Lval[luptr]);
- z_sub(&rhs_work[irow], &rhs_work[irow], &temp_comp);
- }
- }
- } 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"));
- CTRSM( ftcs1, ftcs1, ftcs2, ftcs3, &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-
- CGEMM( ftcs2, ftcs2, &nrow, &nrhs, &nsupc, &alpha,
- &Lval[luptr+nsupc], &nsupr, &Bmat[fsupc], &ldb,
- &beta, &work[0], &n );
-#else
- ztrsm_("L", "L", "N", "U", &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-
- zgemm_( "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);
- z_sub(&rhs_work[irow], &rhs_work[irow], &work_col[i]);
- work_col[i].r = 0.0;
- work_col[i].i = 0.0;
- iptr++;
- }
- }
-#else
- for (j = 0; j < nrhs; j++) {
- rhs_work = &Bmat[j*ldb];
- zlsolve (nsupr, nsupc, &Lval[luptr], &rhs_work[fsupc]);
- zmatvec (nsupr, nrow, nsupc, &Lval[luptr+nsupc],
- &rhs_work[fsupc], &work[0] );
-
- iptr = istart + nsupc;
- for (i = 0; i < nrow; i++) {
- irow = L_SUB(iptr);
- z_sub(&rhs_work[irow], &rhs_work[irow], &work[i]);
- work[i].r = 0.;
- work[i].i = 0.;
- iptr++;
- }
- }
-#endif
- } /* else ... */
- } /* for L-solve */
-
-#ifdef DEBUG
- printf("After L-solve: y=\n");
- zprint_soln(n, nrhs, Bmat);
-#endif
-
- /*
- * Back solve Ux=y.
- */
- for (k = Lstore->nsuper; k >= 0; 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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += 4 * nsupc * (nsupc + 1) * nrhs;
-
- if ( nsupc == 1 ) {
- rhs_work = &Bmat[0];
- for (j = 0; j < nrhs; j++) {
- z_div(&rhs_work[fsupc], &rhs_work[fsupc], &Lval[luptr]);
- rhs_work += ldb;
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd("U", strlen("U"));
- ftcs3 = _cptofcd("N", strlen("N"));
- CTRSM( ftcs1, ftcs2, ftcs3, ftcs3, &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-#else
- ztrsm_("L", "U", "N", "N", &nsupc, &nrhs, &alpha,
- &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
-#endif
-#else
- for (j = 0; j < nrhs; j++)
- zusolve ( nsupr, nsupc, &Lval[luptr], &Bmat[fsupc+j*ldb] );
-#endif
- }
-
- for (j = 0; j < nrhs; ++j) {
- rhs_work = &Bmat[j*ldb];
- for (jcol = fsupc; jcol < fsupc + nsupc; jcol++) {
- solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++ ){
- irow = U_SUB(i);
- zz_mult(&temp_comp, &rhs_work[jcol], &Uval[i]);
- z_sub(&rhs_work[irow], &rhs_work[irow], &temp_comp);
- }
- }
- }
-
- } /* for U-solve */
-
-#ifdef DEBUG
- printf("After U-solve: x=\n");
- zprint_soln(n, nrhs, Bmat);
-#endif
-
- /* Compute the final solution X := Pc*X. */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[k] = rhs_work[perm_c[k]];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- stat->ops[SOLVE] = solve_ops;
-
- } else { /* Solve A'*X=B or CONJ(A)*X=B */
- /* Permute right hand sides to form Pc'*B. */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[perm_c[k]] = rhs_work[k];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- stat->ops[SOLVE] = 0;
- if (trans == TRANS) {
- for (k = 0; k < nrhs; ++k) {
- /* Multiply by inv(U'). */
- sp_ztrsv("U", "T", "N", L, U, &Bmat[k*ldb], stat, info);
-
- /* Multiply by inv(L'). */
- sp_ztrsv("L", "T", "U", L, U, &Bmat[k*ldb], stat, info);
- }
- } else { /* trans == CONJ */
- for (k = 0; k < nrhs; ++k) {
- /* Multiply by conj(inv(U')). */
- sp_ztrsv("U", "C", "N", L, U, &Bmat[k*ldb], stat, info);
-
- /* Multiply by conj(inv(L')). */
- sp_ztrsv("L", "C", "U", L, U, &Bmat[k*ldb], stat, info);
- }
- }
- /* Compute the final solution X := Pr'*X (=inv(Pr)*X) */
- for (i = 0; i < nrhs; i++) {
- rhs_work = &Bmat[i*ldb];
- for (k = 0; k < n; k++) soln[k] = rhs_work[perm_r[k]];
- for (k = 0; k < n; k++) rhs_work[k] = soln[k];
- }
-
- }
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(soln);
-}
-
-/*
- * Diagnostic print of the solution vector
- */
-void
-zprint_soln(int n, int nrhs, doublecomplex *soln)
-{
- int i;
-
- for (i = 0; i < n; i++)
- printf("\t%d: %.4f\n", i, soln[i]);
-}
diff --git a/SRC/zlacon.c b/SRC/zlacon.c
deleted file mode 100644
index b2cd1ed..0000000
--- a/SRC/zlacon.c
+++ /dev/null
@@ -1,221 +0,0 @@
-
-/*! @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)
-
-{
-
-
- /* Table of constant values */
- int c__1 = 1;
- doublecomplex zero = {0.0, 0.0};
- doublecomplex one = {1.0, 0.0};
-
- /* System generated locals */
- double d__1;
-
- /* Local variables */
- static int iter;
- static int jump, jlast;
- static double altsgn, estold;
- static int i, j;
- double temp;
- double safmin;
- extern double dlamch_(char *);
- extern int izmax1_(int *, doublecomplex *, int *);
- extern double dzsum1_(int *, doublecomplex *, int *);
-
- safmin = dlamch_("Safe minimum");
- if ( *kase == 0 ) {
- for (i = 0; i < *n; ++i) {
- x[i].r = 1. / (double) (*n);
- x[i].i = 0.;
- }
- *kase = 1;
- jump = 1;
- return 0;
- }
-
- switch (jump) {
- case 1: goto L20;
- case 2: goto L40;
- case 3: goto L70;
- case 4: goto L110;
- case 5: goto L140;
- }
-
- /* ................ ENTRY (JUMP = 1)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
- L20:
- if (*n == 1) {
- v[0] = x[0];
- *est = z_abs(&v[0]);
- /* ... QUIT */
- goto L150;
- }
- *est = dzsum1_(n, x, &c__1);
-
- for (i = 0; i < *n; ++i) {
- d__1 = z_abs(&x[i]);
- if (d__1 > safmin) {
- d__1 = 1 / d__1;
- x[i].r *= d__1;
- x[i].i *= d__1;
- } else {
- x[i] = one;
- }
- }
- *kase = 2;
- jump = 2;
- return 0;
-
- /* ................ ENTRY (JUMP = 2)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
-L40:
- j = izmax1_(n, &x[0], &c__1);
- --j;
- iter = 2;
-
- /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
-L50:
- for (i = 0; i < *n; ++i) x[i] = zero;
- x[j] = one;
- *kase = 1;
- jump = 3;
- return 0;
-
- /* ................ ENTRY (JUMP = 3)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L70:
-#ifdef _CRAY
- CCOPY(n, x, &c__1, v, &c__1);
-#else
- zcopy_(n, x, &c__1, v, &c__1);
-#endif
- estold = *est;
- *est = dzsum1_(n, v, &c__1);
-
-
-L90:
- /* TEST FOR CYCLING. */
- if (*est <= estold) goto L120;
-
- for (i = 0; i < *n; ++i) {
- d__1 = z_abs(&x[i]);
- if (d__1 > safmin) {
- d__1 = 1 / d__1;
- x[i].r *= d__1;
- x[i].i *= d__1;
- } else {
- x[i] = one;
- }
- }
- *kase = 2;
- jump = 4;
- return 0;
-
- /* ................ ENTRY (JUMP = 4)
- X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
-L110:
- jlast = j;
- j = izmax1_(n, &x[0], &c__1);
- --j;
- if (x[jlast].r != (d__1 = x[j].r, fabs(d__1)) && iter < 5) {
- ++iter;
- goto L50;
- }
-
- /* ITERATION COMPLETE. FINAL STAGE. */
-L120:
- altsgn = 1.;
- for (i = 1; i <= *n; ++i) {
- x[i-1].r = altsgn * ((double)(i - 1) / (double)(*n - 1) + 1.);
- x[i-1].i = 0.;
- altsgn = -altsgn;
- }
- *kase = 1;
- jump = 5;
- return 0;
-
- /* ................ ENTRY (JUMP = 5)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L140:
- temp = dzsum1_(n, x, &c__1) / (double)(*n * 3) * 2.;
- if (temp > *est) {
-#ifdef _CRAY
- CCOPY(n, &x[0], &c__1, &v[0], &c__1);
-#else
- zcopy_(n, &x[0], &c__1, &v[0], &c__1);
-#endif
- *est = temp;
- }
-
-L150:
- *kase = 0;
- return 0;
-
-} /* zlacon_ */
diff --git a/SRC/zlacon.c.bak b/SRC/zlacon.c.bak
deleted file mode 100644
index b2cd1ed..0000000
--- a/SRC/zlacon.c.bak
+++ /dev/null
@@ -1,221 +0,0 @@
-
-/*! @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)
-
-{
-
-
- /* Table of constant values */
- int c__1 = 1;
- doublecomplex zero = {0.0, 0.0};
- doublecomplex one = {1.0, 0.0};
-
- /* System generated locals */
- double d__1;
-
- /* Local variables */
- static int iter;
- static int jump, jlast;
- static double altsgn, estold;
- static int i, j;
- double temp;
- double safmin;
- extern double dlamch_(char *);
- extern int izmax1_(int *, doublecomplex *, int *);
- extern double dzsum1_(int *, doublecomplex *, int *);
-
- safmin = dlamch_("Safe minimum");
- if ( *kase == 0 ) {
- for (i = 0; i < *n; ++i) {
- x[i].r = 1. / (double) (*n);
- x[i].i = 0.;
- }
- *kase = 1;
- jump = 1;
- return 0;
- }
-
- switch (jump) {
- case 1: goto L20;
- case 2: goto L40;
- case 3: goto L70;
- case 4: goto L110;
- case 5: goto L140;
- }
-
- /* ................ ENTRY (JUMP = 1)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
- L20:
- if (*n == 1) {
- v[0] = x[0];
- *est = z_abs(&v[0]);
- /* ... QUIT */
- goto L150;
- }
- *est = dzsum1_(n, x, &c__1);
-
- for (i = 0; i < *n; ++i) {
- d__1 = z_abs(&x[i]);
- if (d__1 > safmin) {
- d__1 = 1 / d__1;
- x[i].r *= d__1;
- x[i].i *= d__1;
- } else {
- x[i] = one;
- }
- }
- *kase = 2;
- jump = 2;
- return 0;
-
- /* ................ ENTRY (JUMP = 2)
- FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
-L40:
- j = izmax1_(n, &x[0], &c__1);
- --j;
- iter = 2;
-
- /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
-L50:
- for (i = 0; i < *n; ++i) x[i] = zero;
- x[j] = one;
- *kase = 1;
- jump = 3;
- return 0;
-
- /* ................ ENTRY (JUMP = 3)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L70:
-#ifdef _CRAY
- CCOPY(n, x, &c__1, v, &c__1);
-#else
- zcopy_(n, x, &c__1, v, &c__1);
-#endif
- estold = *est;
- *est = dzsum1_(n, v, &c__1);
-
-
-L90:
- /* TEST FOR CYCLING. */
- if (*est <= estold) goto L120;
-
- for (i = 0; i < *n; ++i) {
- d__1 = z_abs(&x[i]);
- if (d__1 > safmin) {
- d__1 = 1 / d__1;
- x[i].r *= d__1;
- x[i].i *= d__1;
- } else {
- x[i] = one;
- }
- }
- *kase = 2;
- jump = 4;
- return 0;
-
- /* ................ ENTRY (JUMP = 4)
- X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
-L110:
- jlast = j;
- j = izmax1_(n, &x[0], &c__1);
- --j;
- if (x[jlast].r != (d__1 = x[j].r, fabs(d__1)) && iter < 5) {
- ++iter;
- goto L50;
- }
-
- /* ITERATION COMPLETE. FINAL STAGE. */
-L120:
- altsgn = 1.;
- for (i = 1; i <= *n; ++i) {
- x[i-1].r = altsgn * ((double)(i - 1) / (double)(*n - 1) + 1.);
- x[i-1].i = 0.;
- altsgn = -altsgn;
- }
- *kase = 1;
- jump = 5;
- return 0;
-
- /* ................ ENTRY (JUMP = 5)
- X HAS BEEN OVERWRITTEN BY A*X. */
-L140:
- temp = dzsum1_(n, x, &c__1) / (double)(*n * 3) * 2.;
- if (temp > *est) {
-#ifdef _CRAY
- CCOPY(n, &x[0], &c__1, &v[0], &c__1);
-#else
- zcopy_(n, &x[0], &c__1, &v[0], &c__1);
-#endif
- *est = temp;
- }
-
-L150:
- *kase = 0;
- return 0;
-
-} /* zlacon_ */
diff --git a/SRC/zlangs.c b/SRC/zlangs.c
deleted file mode 100644
index b86ddaa..0000000
--- a/SRC/zlangs.c
+++ /dev/null
@@ -1,119 +0,0 @@
-
-/*! @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
- * History: Modified from lapack routine ZLANGE
- */
-#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)
-{
-
- /* Local variables */
- NCformat *Astore;
- doublecomplex *Aval;
- int i, j, irow;
- double value, sum;
- double *rwork;
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- if ( SUPERLU_MIN(A->nrow, A->ncol) == 0) {
- value = 0.;
-
- } else if (lsame_(norm, "M")) {
- /* Find max(abs(A(i,j))). */
- value = 0.;
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
- value = SUPERLU_MAX( value, z_abs( &Aval[i]) );
-
- } else if (lsame_(norm, "O") || *(unsigned char *)norm == '1') {
- /* Find norm1(A). */
- value = 0.;
- for (j = 0; j < A->ncol; ++j) {
- sum = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
- sum += z_abs( &Aval[i] );
- value = SUPERLU_MAX(value,sum);
- }
-
- } else if (lsame_(norm, "I")) {
- /* Find normI(A). */
- if ( !(rwork = (double *) SUPERLU_MALLOC(A->nrow * sizeof(double))) )
- ABORT("SUPERLU_MALLOC fails for rwork.");
- for (i = 0; i < A->nrow; ++i) rwork[i] = 0.;
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++) {
- irow = Astore->rowind[i];
- rwork[irow] += z_abs( &Aval[i] );
- }
- value = 0.;
- for (i = 0; i < A->nrow; ++i)
- value = SUPERLU_MAX(value, rwork[i]);
-
- SUPERLU_FREE (rwork);
-
- } else if (lsame_(norm, "F") || lsame_(norm, "E")) {
- /* Find normF(A). */
- ABORT("Not implemented.");
- } else
- ABORT("Illegal norm specified.");
-
- return (value);
-
-} /* zlangs */
-
diff --git a/SRC/zlaqgs.c b/SRC/zlaqgs.c
deleted file mode 100644
index 781c28b..0000000
--- a/SRC/zlaqgs.c
+++ /dev/null
@@ -1,147 +0,0 @@
-
-/*! @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
- * History: Modified from LAPACK routine ZLAQGE
- */
-#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)
-{
-
-
-#define THRESH (0.1)
-
- /* Local variables */
- NCformat *Astore;
- doublecomplex *Aval;
- int i, j, irow;
- double large, small, cj;
- double temp;
-
-
- /* Quick return if possible */
- if (A->nrow <= 0 || A->ncol <= 0) {
- *(unsigned char *)equed = 'N';
- return;
- }
-
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Initialize LARGE and SMALL. */
- small = dlamch_("Safe minimum") / dlamch_("Precision");
- large = 1. / small;
-
- if (rowcnd >= THRESH && amax >= small && amax <= large) {
- if (colcnd >= THRESH)
- *(unsigned char *)equed = 'N';
- else {
- /* Column scaling */
- for (j = 0; j < A->ncol; ++j) {
- cj = c[j];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- zd_mult(&Aval[i], &Aval[i], cj);
- }
- }
- *(unsigned char *)equed = 'C';
- }
- } else if (colcnd >= THRESH) {
- /* Row scaling, no column scaling */
- for (j = 0; j < A->ncol; ++j)
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- zd_mult(&Aval[i], &Aval[i], r[irow]);
- }
- *(unsigned char *)equed = 'R';
- } else {
- /* Row and column scaling */
- for (j = 0; j < A->ncol; ++j) {
- cj = c[j];
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- temp = cj * r[irow];
- zd_mult(&Aval[i], &Aval[i], temp);
- }
- }
- *(unsigned char *)equed = 'B';
- }
-
- return;
-
-} /* zlaqgs */
-
diff --git a/SRC/zldperm.c b/SRC/zldperm.c
deleted file mode 100644
index fb72a60..0000000
--- a/SRC/zldperm.c
+++ /dev/null
@@ -1,168 +0,0 @@
-
-/*! @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
deleted file mode 100644
index c14a910..0000000
--- a/SRC/zmemory.c
+++ /dev/null
@@ -1,701 +0,0 @@
-
-/*! @file zmemory.c
- * \brief Memory details
- *
- * <pre>
- * -- SuperLU routine (version 4.0) --
- * Lawrence Berkeley National Laboratory.
- * June 30, 2009
- * </pre>
- */
-#include "slu_zdefs.h"
-
-
-/* Internal prototypes */
-void *zexpand (int *, MemType,int, int, GlobalLU_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, GlobalLU_t *);
-void *zuser_malloc (int, int, GlobalLU_t *);
-void zuser_free (int, int, GlobalLU_t *);
-
-/* External prototypes (in memory.c - prec-independent) */
-extern void copy_mem_int (int, void *, void *);
-extern void user_bcopy (char *, char *, int);
-
-
-/* Macros to manipulate stack */
-#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) + \
- (w + 1) * m * sizeof(doublecomplex) )
-#define Reduce(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */
-
-
-
-
-/*! \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, GlobalLU_t *Glu)
-{
- if ( lwork == 0 ) {
- Glu->MemModel = SYSTEM; /* malloc/free */
- } else if ( lwork > 0 ) {
- 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, GlobalLU_t *Glu)
-{
- void *buf;
-
- if ( StackFull(bytes) ) return (NULL);
-
- if ( which_end == HEAD ) {
- buf = (char*) Glu->stack.array + Glu->stack.top1;
- Glu->stack.top1 += bytes;
- } else {
- Glu->stack.top2 -= bytes;
- buf = (char*) Glu->stack.array + Glu->stack.top2;
- }
-
- Glu->stack.used += bytes;
- return buf;
-}
-
-
-void zuser_free(int bytes, int which_end, GlobalLU_t *Glu)
-{
- if ( which_end == HEAD ) {
- Glu->stack.top1 -= bytes;
- } else {
- Glu->stack.top2 += 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.
- * </pre>
- */
-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.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.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
- (panel_size + 1.0) * n * dword );
-
- return 0;
-} /* zQuerySpace */
-
-
-/*! \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, double fill_ratio, 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;
-
- iword = sizeof(int);
- dword = sizeof(doublecomplex);
- Glu->n = n;
- Glu->num_expansions = 0;
-
- 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_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);
- }
-
-#if ( PRNTlevel >= 1 )
- printf("zLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n",
- fill_ratio, 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, 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 );
- 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, Glu);
- }
- 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("zLUMemInit() 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;
- Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
- Glu->stack.size = Glu->stack.top2;
- }
-
- 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;
- 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);
- if ( info )
- return ( info + zmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
-
- ++Glu->num_expansions;
- return 0;
-
-} /* zLUMemInit */
-
-/*! \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, GlobalLU_t *Glu)
-{
- int isize, dsize, extra;
- doublecomplex *old_ptr;
- 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 ( Glu->MemModel == SYSTEM )
- *iworkptr = (int *) intCalloc(isize/sizeof(int));
- else
- *iworkptr = (int *) zuser_malloc(isize, TAIL, Glu);
- if ( ! *iworkptr ) {
- fprintf(stderr, "zLUWorkInit: malloc fails for local iworkptr[]\n");
- return (isize + n);
- }
-
- if ( Glu->MemModel == SYSTEM )
- *dworkptr = (doublecomplex *) SUPERLU_MALLOC(dsize);
- else {
- *dworkptr = (doublecomplex *) zuser_malloc(dsize, TAIL, Glu);
- 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
- Glu->stack.top2 -= extra;
- Glu->stack.used += extra;
- }
- }
- if ( ! *dworkptr ) {
- fprintf(stderr, "malloc fails for local dworkptr[].");
- return (isize + dsize + n);
- }
-
- return 0;
-}
-
-
-/*! \brief 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 = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
- 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);
-}
-
-/*! \brief 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 {
- Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
- Glu->stack.top2 = Glu->stack.size;
-/* zStackCompress(Glu); */
- }
-
- SUPERLU_FREE (Glu->expanders);
- Glu->expanders = NULL;
-}
-
-/*! \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,
- 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];
-}
-
-/*! \brief 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;
- ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
-
- alpha = EXPAND;
-
- if ( Glu->num_expansions == 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((size_t)new_len * lword);
- if ( Glu->num_expansions != 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((size_t)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 ( 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;
- new_mem = (void *)DoubleAlign(new_mem);
- extra = (char*)new_mem - (char*)old_mem;
-#ifdef DEBUG
- printf("expand(): not aligned, extra %d\n", extra);
-#endif
- Glu->stack.top1 += extra;
- Glu->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*)Glu->stack.array + Glu->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);
- }
- Glu->stack.top1 += extra;
- Glu->stack.used += extra;
- if ( type == UCOL ) {
- Glu->stack.top1 += extra; /* Add same amount for USUB */
- Glu->stack.used += extra;
- }
-
- } /* if ... */
-
- } /* else ... */
- }
-
- expanders[type].size = new_len;
- *prev_len = new_len;
- if ( Glu->num_expansions ) ++Glu->num_expansions;
-
- return (void *) expanders[type].mem;
-
-} /* zexpand */
-
-
-/*! \brief 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*)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;
- 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
-
-}
-
-/*! \brief 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((size_t)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((size_t)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
deleted file mode 100644
index eae1c5a..0000000
--- a/SRC/zmyblas2.c
+++ /dev/null
@@ -1,188 +0,0 @@
-
-/*! @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
- * </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"
-
-/*! \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.
- */
-void zlsolve ( int ldm, int ncol, doublecomplex *M, doublecomplex *rhs )
-{
- int k;
- doublecomplex x0, x1, x2, x3, temp;
- doublecomplex *M0;
- doublecomplex *Mki0, *Mki1, *Mki2, *Mki3;
- register int firstcol = 0;
-
- M0 = &M[0];
-
-
- while ( firstcol < ncol - 3 ) { /* Do 4 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
- Mki2 = Mki1 + ldm + 1;
- Mki3 = Mki2 + ldm + 1;
-
- x0 = rhs[firstcol];
- zz_mult(&temp, &x0, Mki0); Mki0++;
- z_sub(&x1, &rhs[firstcol+1], &temp);
- zz_mult(&temp, &x0, Mki0); Mki0++;
- z_sub(&x2, &rhs[firstcol+2], &temp);
- zz_mult(&temp, &x1, Mki1); Mki1++;
- z_sub(&x2, &x2, &temp);
- zz_mult(&temp, &x0, Mki0); Mki0++;
- z_sub(&x3, &rhs[firstcol+3], &temp);
- zz_mult(&temp, &x1, Mki1); Mki1++;
- z_sub(&x3, &x3, &temp);
- zz_mult(&temp, &x2, Mki2); Mki2++;
- z_sub(&x3, &x3, &temp);
-
- rhs[++firstcol] = x1;
- rhs[++firstcol] = x2;
- rhs[++firstcol] = x3;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++) {
- zz_mult(&temp, &x0, Mki0); Mki0++;
- z_sub(&rhs[k], &rhs[k], &temp);
- zz_mult(&temp, &x1, Mki1); Mki1++;
- z_sub(&rhs[k], &rhs[k], &temp);
- zz_mult(&temp, &x2, Mki2); Mki2++;
- z_sub(&rhs[k], &rhs[k], &temp);
- zz_mult(&temp, &x3, Mki3); Mki3++;
- z_sub(&rhs[k], &rhs[k], &temp);
- }
-
- M0 += 4 * ldm + 4;
- }
-
- if ( firstcol < ncol - 1 ) { /* Do 2 columns */
- Mki0 = M0 + 1;
- Mki1 = Mki0 + ldm + 1;
-
- x0 = rhs[firstcol];
- zz_mult(&temp, &x0, Mki0); Mki0++;
- z_sub(&x1, &rhs[firstcol+1], &temp);
-
- rhs[++firstcol] = x1;
- ++firstcol;
-
- for (k = firstcol; k < ncol; k++) {
- zz_mult(&temp, &x0, Mki0); Mki0++;
- z_sub(&rhs[k], &rhs[k], &temp);
- zz_mult(&temp, &x1, Mki1); Mki1++;
- z_sub(&rhs[k], &rhs[k], &temp);
- }
- }
-
-}
-
-/*! \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.
- */
-void
-zusolve ( ldm, ncol, M, rhs )
-int ldm; /* in */
-int ncol; /* in */
-doublecomplex *M; /* in */
-doublecomplex *rhs; /* modified */
-{
- doublecomplex xj, temp;
- int jcol, j, irow;
-
- jcol = ncol - 1;
-
- for (j = 0; j < ncol; j++) {
-
- z_div(&xj, &rhs[jcol], &M[jcol + jcol*ldm]); /* M(jcol, jcol) */
- rhs[jcol] = xj;
-
- for (irow = 0; irow < jcol; irow++) {
- zz_mult(&temp, &xj, &M[irow+jcol*ldm]); /* M(irow, jcol) */
- z_sub(&rhs[irow], &rhs[irow], &temp);
- }
-
- jcol--;
-
- }
-}
-
-
-/*! \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 )
-int ldm; /* in -- leading dimension of M */
-int nrow; /* in */
-int ncol; /* in */
-doublecomplex *M; /* in */
-doublecomplex *vec; /* in */
-doublecomplex *Mxvec; /* in/out */
-{
- doublecomplex vi0, vi1, vi2, vi3;
- doublecomplex *M0, temp;
- doublecomplex *Mki0, *Mki1, *Mki2, *Mki3;
- register int firstcol = 0;
- int k;
-
- M0 = &M[0];
-
- while ( firstcol < ncol - 3 ) { /* Do 4 columns */
- Mki0 = M0;
- Mki1 = Mki0 + ldm;
- Mki2 = Mki1 + ldm;
- Mki3 = Mki2 + ldm;
-
- vi0 = vec[firstcol++];
- vi1 = vec[firstcol++];
- vi2 = vec[firstcol++];
- vi3 = vec[firstcol++];
- for (k = 0; k < nrow; k++) {
- zz_mult(&temp, &vi0, Mki0); Mki0++;
- z_add(&Mxvec[k], &Mxvec[k], &temp);
- zz_mult(&temp, &vi1, Mki1); Mki1++;
- z_add(&Mxvec[k], &Mxvec[k], &temp);
- zz_mult(&temp, &vi2, Mki2); Mki2++;
- z_add(&Mxvec[k], &Mxvec[k], &temp);
- zz_mult(&temp, &vi3, Mki3); Mki3++;
- z_add(&Mxvec[k], &Mxvec[k], &temp);
- }
-
- M0 += 4 * ldm;
- }
-
- while ( firstcol < ncol ) { /* Do 1 column */
- Mki0 = M0;
- vi0 = vec[firstcol++];
- for (k = 0; k < nrow; k++) {
- zz_mult(&temp, &vi0, Mki0); Mki0++;
- z_add(&Mxvec[k], &Mxvec[k], &temp);
- }
- M0 += ldm;
- }
-
-}
-
diff --git a/SRC/zpanel_bmod.c b/SRC/zpanel_bmod.c
deleted file mode 100644
index 7893277..0000000
--- a/SRC/zpanel_bmod.c
+++ /dev/null
@@ -1,487 +0,0 @@
-
-/*! @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>
- */
-/*
-
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "slu_zdefs.h"
-
-/*
- * Function prototypes
- */
-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 */
- const int w, /* in */
- const int jcol, /* in */
- const int nseg, /* in */
- doublecomplex *dense, /* out, of size n by w */
- doublecomplex *tempv, /* working array */
- int *segrep, /* in */
- int *repfnz, /* in, of size n by w */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- doublecomplex alpha, beta;
-#endif
-
- register int k, ksub;
- int fsupc, nsupc, nsupr, nrow;
- int krep, krep_ind;
- doublecomplex ukj, ukj1, ukj2;
- int luptr, luptr1, luptr2;
- int segsze;
- int block_nrow; /* no of rows in a block row */
- register int lptr; /* Points to the row subscripts of a supernode */
- int kfnz, irow, no_zeros;
- register int isub, isub1, i;
- register int jj; /* Index through each column in the panel */
- int *xsup, *supno;
- int *lsub, *xlsub;
- doublecomplex *lusup;
- int *xlusup;
- int *repfnz_col; /* repfnz[] for a column in the panel */
- doublecomplex *dense_col; /* dense[] for a column in the panel */
- doublecomplex *tempv1; /* Used in 1-D update */
- doublecomplex *TriTmp, *MatvecTmp; /* used in 2-D update */
- doublecomplex zero = {0.0, 0.0};
- doublecomplex one = {1.0, 0.0};
- doublecomplex comp_temp, comp_temp1;
- register int ldaTmp;
- register int r_ind, r_hi;
- static int first = 1, maxsuper, rowblk, colblk;
- flops_t *ops = stat->ops;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- if ( first ) {
- maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
- rowblk = sp_ienv(4);
- colblk = sp_ienv(5);
- first = 0;
- }
- ldaTmp = maxsuper + rowblk;
-
- /*
- * For each nonz supernode segment of U[*,j] in topological order
- */
- k = nseg - 1;
- for (ksub = 0; ksub < nseg; ksub++) { /* for each updating supernode */
-
- /* krep = representative of current k-th supernode
- * fsupc = first supernodal column
- * nsupc = no of columns in a supernode
- * nsupr = no of rows in a supernode
- */
- krep = segrep[k--];
- fsupc = xsup[supno[krep]];
- nsupc = krep - fsupc + 1;
- nsupr = xlsub[fsupc+1] - xlsub[fsupc];
- nrow = nsupr - nsupc;
- lptr = xlsub[fsupc];
- krep_ind = lptr + nsupc - 1;
-
- repfnz_col = repfnz;
- dense_col = dense;
-
- if ( nsupc >= colblk && nrow > rowblk ) { /* 2-D block update */
-
- TriTmp = tempv;
-
- /* Sequence through each column in panel -- triangular solves */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp ) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- luptr = xlusup[fsupc];
-
- ops[TRSV] += 4 * segsze * (segsze - 1);
- ops[GEMV] += 8 * nrow * segsze;
-
- /* Case 1: Update U-segment of size 1 -- col-col update */
- if ( segsze == 1 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
- irow = lsub[i];
- zz_mult(&comp_temp, &ukj, &lusup[luptr]);
- z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- ++luptr;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense_col[lsub[krep_ind]];
- ukj1 = dense_col[lsub[krep_ind - 1]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) {
- zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- z_sub(&ukj, &ukj, &comp_temp);
- dense_col[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++; luptr1++;
- zz_mult(&comp_temp, &ukj, &lusup[luptr]);
- zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- }
- } else {
- ukj2 = dense_col[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- zz_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
- z_sub(&ukj1, &ukj1, &comp_temp);
-
- zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- z_sub(&ukj, &ukj, &comp_temp);
- dense_col[lsub[krep_ind]] = ukj;
- dense_col[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- luptr++; luptr1++; luptr2++;
- zz_mult(&comp_temp, &ukj, &lusup[luptr]);
- zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- }
- }
-
- } else { /* segsze >= 4 */
-
- /* Copy U[*,j] segment from dense[*] to TriTmp[*], which
- holds the result of triangular solves. */
- no_zeros = kfnz - fsupc;
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; ++i) {
- irow = lsub[isub];
- TriTmp[i] = dense_col[irow]; /* Gather */
- ++isub;
- }
-
- /* start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, TriTmp, &incx );
-#else
- ztrsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, TriTmp, &incx );
-#endif
-#else
- zlsolve ( nsupr, segsze, &lusup[luptr], TriTmp );
-#endif
-
-
- } /* else ... */
-
- } /* for jj ... end tri-solves */
-
- /* Block row updates; push all the way into dense[*] block */
- for ( r_ind = 0; r_ind < nrow; r_ind += rowblk ) {
-
- r_hi = SUPERLU_MIN(nrow, r_ind + rowblk);
- block_nrow = SUPERLU_MIN(rowblk, r_hi - r_ind);
- luptr = xlusup[fsupc] + nsupc + r_ind;
- isub1 = lptr + nsupc + r_ind;
-
- repfnz_col = repfnz;
- TriTmp = tempv;
- dense_col = dense;
-
- /* Sequence through each column in panel -- matrix-vector */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- if ( segsze <= 3 ) continue; /* skip unrolled cases */
-
- /* Perform a block update, and scatter the result of
- matrix-vector to dense[]. */
- no_zeros = kfnz - fsupc;
- luptr1 = luptr + nsupr * no_zeros;
- MatvecTmp = &TriTmp[maxsuper];
-
-#ifdef USE_VENDOR_BLAS
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- CGEMV(ftcs2, &block_nrow, &segsze, &alpha, &lusup[luptr1],
- &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
-#else
- zgemv_("N", &block_nrow, &segsze, &alpha, &lusup[luptr1],
- &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
-#endif
-#else
- zmatvec(nsupr, block_nrow, segsze, &lusup[luptr1],
- TriTmp, MatvecTmp);
-#endif
-
- /* Scatter MatvecTmp[*] into SPA dense[*] temporarily
- * such that MatvecTmp[*] can be re-used for the
- * the next blok row update. dense[] will be copied into
- * global store after the whole panel has been finished.
- */
- isub = isub1;
- for (i = 0; i < block_nrow; i++) {
- irow = lsub[isub];
- z_sub(&dense_col[irow], &dense_col[irow],
- &MatvecTmp[i]);
- MatvecTmp[i] = zero;
- ++isub;
- }
-
- } /* for jj ... */
-
- } /* for each block row ... */
-
- /* Scatter the triangular solves into SPA dense[*] */
- repfnz_col = repfnz;
- TriTmp = tempv;
- dense_col = dense;
-
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- if ( segsze <= 3 ) continue; /* skip unrolled cases */
-
- no_zeros = kfnz - fsupc;
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense_col[irow] = TriTmp[i];
- TriTmp[i] = zero;
- ++isub;
- }
-
- } /* for jj ... */
-
- } else { /* 1-D block modification */
-
-
- /* Sequence through each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++,
- repfnz_col += m, dense_col += m) {
-
- kfnz = repfnz_col[krep];
- if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
-
- segsze = krep - kfnz + 1;
- luptr = xlusup[fsupc];
-
- ops[TRSV] += 4 * segsze * (segsze - 1);
- ops[GEMV] += 8 * nrow * segsze;
-
- /* Case 1: Update U-segment of size 1 -- col-col update */
- if ( segsze == 1 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc;
-
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
- irow = lsub[i];
- zz_mult(&comp_temp, &ukj, &lusup[luptr]);
- z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- ++luptr;
- }
-
- } else if ( segsze <= 3 ) {
- ukj = dense_col[lsub[krep_ind]];
- luptr += nsupr*(nsupc-1) + nsupc-1;
- ukj1 = dense_col[lsub[krep_ind - 1]];
- luptr1 = luptr - nsupr;
-
- if ( segsze == 2 ) {
- zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- z_sub(&ukj, &ukj, &comp_temp);
- dense_col[lsub[krep_ind]] = ukj;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- ++luptr; ++luptr1;
- zz_mult(&comp_temp, &ukj, &lusup[luptr]);
- zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- }
- } else {
- ukj2 = dense_col[lsub[krep_ind - 2]];
- luptr2 = luptr1 - nsupr;
- zz_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
- z_sub(&ukj1, &ukj1, &comp_temp);
-
- zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
- zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- z_sub(&ukj, &ukj, &comp_temp);
- dense_col[lsub[krep_ind]] = ukj;
- dense_col[lsub[krep_ind-1]] = ukj1;
- for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
- irow = lsub[i];
- ++luptr; ++luptr1; ++luptr2;
- zz_mult(&comp_temp, &ukj, &lusup[luptr]);
- zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
- z_add(&comp_temp, &comp_temp, &comp_temp1);
- z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
- }
- }
-
- } else { /* segsze >= 4 */
- /*
- * Perform a triangular solve and block update,
- * then scatter the result of sup-col update to dense[].
- */
- no_zeros = kfnz - fsupc;
-
- /* Copy U[*,j] segment from dense[*] to tempv[*]:
- * The result of triangular solve is in tempv[*];
- * The result of matrix vector update is in dense_col[*]
- */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; ++i) {
- irow = lsub[isub];
- tempv[i] = dense_col[irow]; /* Gather */
- ++isub;
- }
-
- /* start effective triangle */
- luptr += nsupr * no_zeros + no_zeros;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#else
- ztrsv_( "L", "N", "U", &segsze, &lusup[luptr],
- &nsupr, tempv, &incx );
-#endif
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- alpha = one;
- beta = zero;
-#ifdef _CRAY
- CGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#else
- zgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
- &nsupr, tempv, &incx, &beta, tempv1, &incy );
-#endif
-#else
- zlsolve ( nsupr, segsze, &lusup[luptr], tempv );
-
- luptr += segsze; /* Dense matrix-vector */
- tempv1 = &tempv[segsze];
- zmatvec (nsupr, nrow, segsze, &lusup[luptr], tempv, tempv1);
-#endif
-
- /* Scatter tempv[*] into SPA dense[*] temporarily, such
- * that tempv[*] can be used for the triangular solve of
- * the next column of the panel. They will be copied into
- * ucol[*] after the whole panel has been finished.
- */
- isub = lptr + no_zeros;
- for (i = 0; i < segsze; i++) {
- irow = lsub[isub];
- dense_col[irow] = tempv[i];
- tempv[i] = zero;
- isub++;
- }
-
- /* Scatter the update from tempv1[*] into SPA dense[*] */
- /* Start dense rectangular L */
- for (i = 0; i < nrow; i++) {
- irow = lsub[isub];
- z_sub(&dense_col[irow], &dense_col[irow], &tempv1[i]);
- tempv1[i] = zero;
- ++isub;
- }
-
- } /* else segsze>=4 ... */
-
- } /* for each column in the panel... */
-
- } /* else 1-D update ... */
-
- } /* for each updating supernode ... */
-
-}
-
-
-
diff --git a/SRC/zpanel_dfs.c b/SRC/zpanel_dfs.c
deleted file mode 100644
index e05766f..0000000
--- a/SRC/zpanel_dfs.c
+++ /dev/null
@@ -1,254 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_zdefs.h"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
- *
- * 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 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.
- *
- * 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;
- *
- * 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>
- */
-
-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;
- int *xa_begin, *xa_end;
- 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 *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;
-
- /* Initialize pointers */
- Astore = A->Store;
- a = Astore->nzval;
- asub = Astore->rowind;
- xa_begin = Astore->colbeg;
- xa_end = Astore->colend;
- marker1 = marker + m;
- repfnz_col = repfnz;
- dense_col = dense;
- *nseg = 0;
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
-
- /* For each column in the panel */
- for (jj = jcol; jj < jcol + w; jj++) {
- nextl_col = (jj - jcol) * m;
-
-#ifdef CHK_DFS
- printf("\npanel col %d: ", jj);
-#endif
-
- /* 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 )
- continue; /* krow visited before, go to the next nonzero */
-
- /* For each unmarked nbr krow of jj
- * krow is in L: place it in structure of L[*,jj]
- */
- 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[*]
- */
- else {
-
- krep = xsup[supno[kperm]+1] - 1;
- myfnz = repfnz_col[krep];
-
-#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 > kperm ) repfnz_col[krep] = kperm;
- /* continue; */
- }
- else {
- /* Otherwise, perform dfs starting at krep */
- oldrep = EMPTY;
- parent[krep] = oldrep;
- repfnz_col[krep] = kperm;
- xdfs = xlsub[krep];
- maxdfs = xprune[krep];
-
-#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
- */
- 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
- * been explored, update its repfnz[*]
- */
- else {
-
- chrep = xsup[supno[chperm]+1] - 1;
- myfnz = repfnz_col[chrep];
-#ifdef CHK_DFS
- printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
-#endif
- if ( myfnz != EMPTY ) { /* Visited before */
- if ( myfnz > chperm )
- repfnz_col[chrep] = chperm;
- }
- else {
- /* Cont. dfs at snode-rep of kchild */
- 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
- printf(" xdfs %d, maxdfs %d: ", xdfs, maxdfs);
- 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
- * segment is seen for the first time. (Note that
- * "repfnz[krep]" may change later.)
- * Backtrack dfs to its parent.
- */
- if ( marker1[krep] < jcol ) {
- segrep[*nseg] = krep;
- ++(*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
- 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;
-
- } /* for jj ... */
-
-}
diff --git a/SRC/zpivotL.c b/SRC/zpivotL.c
deleted file mode 100644
index ce4f513..0000000
--- a/SRC/zpivotL.c
+++ /dev/null
@@ -1,185 +0,0 @@
-
-/*! @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>
- */
-
-
-#include <math.h>
-#include <stdlib.h>
-#include "slu_zdefs.h"
-
-#undef DEBUG
-
-/*! \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
-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 */
- int nsupr; /* no of rows in the supernode */
- int lptr; /* points to the starting subscript of the supernode */
- int pivptr, old_pivptr, diag, diagind;
- double pivmax, rtemp, thresh;
- doublecomplex temp;
- doublecomplex *lu_sup_ptr;
- doublecomplex *lu_col_ptr;
- int *lsub_ptr;
- int isub, icol, k, itemp;
- int *lsub, *xlsub;
- doublecomplex *lusup;
- int *xlusup;
- flops_t *ops = stat->ops;
-
- /* Initialize pointers */
- 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 */
-
-#ifdef DEBUG
-if ( jcol == MIN_COL ) {
- printf("Before cdiv: col %d\n", jcol);
- for (k = nsupc; k < nsupr; k++)
- printf(" lu[%d] %f\n", lsub_ptr[k], lu_col_ptr[k]);
-}
-#endif
-
- /* Determine the largest abs numerical value for partial pivoting;
- Also search for user-specified pivot, and diagonal element. */
- if ( *usepr ) *pivrow = iperm_r[jcol];
- diagind = iperm_c[jcol];
- pivmax = 0.0;
- pivptr = nsupc;
- diag = EMPTY;
- old_pivptr = nsupc;
- for (isub = nsupc; isub < nsupr; ++isub) {
- rtemp = z_abs1 (&lu_col_ptr[isub]);
- if ( rtemp > pivmax ) {
- pivmax = rtemp;
- pivptr = isub;
- }
- if ( *usepr && lsub_ptr[isub] == *pivrow ) old_pivptr = isub;
- if ( lsub_ptr[isub] == diagind ) diag = isub;
- }
-
- /* 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);
- }
-
- thresh = u * pivmax;
-
- /* Choose appropriate pivotal element by our policy. */
- if ( *usepr ) {
- rtemp = z_abs1 (&lu_col_ptr[old_pivptr]);
- if ( rtemp != 0.0 && rtemp >= thresh )
- pivptr = old_pivptr;
- else
- *usepr = 0;
- }
- if ( *usepr == 0 ) {
- /* Use diagonal pivot? */
- if ( diag >= 0 ) { /* diagonal exists */
- rtemp = z_abs1 (&lu_col_ptr[diag]);
- if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
- }
- *pivrow = lsub_ptr[pivptr];
- }
-
- /* Record pivot row */
- perm_r[*pivrow] = jcol;
-
- /* 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 0;
-}
-
diff --git a/SRC/zpivotgrowth.c b/SRC/zpivotgrowth.c
deleted file mode 100644
index 1b3ebed..0000000
--- a/SRC/zpivotgrowth.c
+++ /dev/null
@@ -1,114 +0,0 @@
-
-/*! @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"
-
-/*! \brief
- *
- * <pre>
- * Purpose
- * =======
- *
- * Compute the reciprocal pivot growth factor of the leading ncols columns
- * of the matrix, using the formula:
- * min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )
- *
- * Arguments
- * =========
- *
- * ncols (input) int
- * The number of columns of matrices A, L and U.
- *
- * 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.
- *
- * 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.
- *
- * 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>
- */
-
-double
-zPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
- SuperMatrix *L, SuperMatrix *U)
-{
-
- NCformat *Astore;
- SCformat *Lstore;
- NCformat *Ustore;
- doublecomplex *Aval, *Lval, *Uval;
- int fsupc, nsupr, luptr, nz_in_U;
- int i, j, k, oldcol;
- int *inv_perm_c;
- double rpg, maxaj, maxuj;
- double smlnum;
- doublecomplex *luval;
- doublecomplex temp_comp;
-
- /* Get machine constants. */
- smlnum = dlamch_("S");
- rpg = 1. / smlnum;
-
- Astore = A->Store;
- Lstore = L->Store;
- Ustore = U->Store;
- Aval = Astore->nzval;
- Lval = Lstore->nzval;
- Uval = Ustore->nzval;
-
- inv_perm_c = (int *) SUPERLU_MALLOC(A->ncol*sizeof(int));
- for (j = 0; j < A->ncol; ++j) inv_perm_c[perm_c[j]] = j;
-
- for (k = 0; k <= Lstore->nsuper; ++k) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- luptr = L_NZ_START(fsupc);
- luval = &Lval[luptr];
- nz_in_U = 1;
-
- for (j = fsupc; j < L_FST_SUPC(k+1) && j < ncols; ++j) {
- maxaj = 0.;
- oldcol = inv_perm_c[j];
- for (i = Astore->colptr[oldcol]; i < Astore->colptr[oldcol+1]; ++i)
- maxaj = SUPERLU_MAX( maxaj, z_abs1( &Aval[i]) );
-
- maxuj = 0.;
- for (i = Ustore->colptr[j]; i < Ustore->colptr[j+1]; i++)
- maxuj = SUPERLU_MAX( maxuj, z_abs1( &Uval[i]) );
-
- /* Supernode */
- for (i = 0; i < nz_in_U; ++i)
- maxuj = SUPERLU_MAX( maxuj, z_abs1( &luval[i]) );
-
- ++nz_in_U;
- luval += nsupr;
-
- if ( maxuj == 0. )
- rpg = SUPERLU_MIN( rpg, 1.);
- else
- rpg = SUPERLU_MIN( rpg, maxaj / maxuj );
- }
-
- if ( j >= ncols ) break;
- }
-
- SUPERLU_FREE(inv_perm_c);
- return (rpg);
-}
diff --git a/SRC/zpruneL.c b/SRC/zpruneL.c
deleted file mode 100644
index 8aa7081..0000000
--- a/SRC/zpruneL.c
+++ /dev/null
@@ -1,154 +0,0 @@
-
-/*! @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>
- */
-
-
-#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 */
- const int *perm_r, /* in */
- const int pivrow, /* in */
- const int nseg, /* in */
- const int *segrep, /* in */
- const int *repfnz, /* in */
- int *xprune, /* out */
- GlobalLU_t *Glu /* modified - global LU data structures */
- )
-{
-
- doublecomplex utemp;
- int jsupno, irep, irep1, kmin, kmax, krow, movnum;
- int i, ktemp, minloc, maxloc;
- int do_prune; /* logical variable */
- int *xsup, *supno;
- int *lsub, *xlsub;
- doublecomplex *lusup;
- int *xlusup;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- /*
- * For each supernode-rep irep in U[*,j]
- */
- jsupno = supno[jcol];
- for (i = 0; i < nseg; i++) {
-
- irep = segrep[i];
- irep1 = irep + 1;
- do_prune = FALSE;
-
- /* Don't prune with a zero U-segment */
- if ( repfnz[irep] == EMPTY )
- continue;
-
- /* If a snode overlaps with the next panel, then the U-segment
- * is fragmented into two parts -- irep and irep1. We should let
- * pruning occur at the rep-column in irep1's snode.
- */
- if ( supno[irep] == supno[irep1] ) /* Don't prune */
- continue;
-
- /*
- * If it has not been pruned & it has a nonz in row L[pivrow,i]
- */
- if ( supno[irep] != jsupno ) {
- if ( xprune[irep] >= xlsub[irep1] ) {
- kmin = xlsub[irep];
- kmax = xlsub[irep1] - 1;
- for (krow = kmin; krow <= kmax; krow++)
- if ( lsub[krow] == pivrow ) {
- do_prune = TRUE;
- break;
- }
- }
-
- if ( do_prune ) {
-
- /* Do a quicksort-type partition
- * movnum=TRUE means that the num values have to be exchanged.
- */
- movnum = FALSE;
- if ( irep == xsup[supno[irep]] ) /* Snode of size 1 */
- movnum = TRUE;
-
- while ( kmin <= kmax ) {
-
- if ( perm_r[lsub[kmax]] == EMPTY )
- kmax--;
- else if ( perm_r[lsub[kmin]] != EMPTY )
- kmin++;
- else { /* kmin below pivrow (not yet pivoted), and kmax
- * above pivrow: interchange the two subscripts
- */
- ktemp = lsub[kmin];
- lsub[kmin] = lsub[kmax];
- lsub[kmax] = ktemp;
-
- /* 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.
- */
- if ( movnum ) {
- minloc = xlusup[irep] + (kmin - xlsub[irep]);
- maxloc = xlusup[irep] + (kmax - xlsub[irep]);
- utemp = lusup[minloc];
- lusup[minloc] = lusup[maxloc];
- lusup[maxloc] = utemp;
- }
-
- kmin++;
- kmax--;
-
- }
-
- } /* while */
-
- xprune[irep] = kmin; /* Pruning */
-
-#ifdef CHK_PRUNE
- printf(" After zpruneL(),using col %d: xprune[%d] = %d\n",
- jcol, irep, kmin);
-#endif
- } /* if do_prune */
-
- } /* if */
-
- } /* for each U-segment... */
-}
diff --git a/SRC/zreadhb.c b/SRC/zreadhb.c
deleted file mode 100644
index 3128228..0000000
--- a/SRC/zreadhb.c
+++ /dev/null
@@ -1,267 +0,0 @@
-
-/*! @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"
-
-
-/*! \brief Eat up the rest of the current line */
-int zDumpLine(FILE *fp)
-{
- register int c;
- while ((c = fgetc(fp)) != '\n') ;
- return 0;
-}
-
-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;
-}
-
-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) */
-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
-zreadhb(int *nrow, int *ncol, int *nonz,
- doublecomplex **nzval, int **rowind, int **colptr)
-{
-
- register int i, numer_lines = 0, rhscrd = 0;
- int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
- char buf[100], type[4], key[10];
- FILE *fp;
-
- fp = stdin;
-
- /* Line 1 */
- fgets(buf, 100, fp);
- fputs(buf, stdout);
-#if 0
- fscanf(fp, "%72c", buf); buf[72] = 0;
- printf("Title: %s", buf);
- fscanf(fp, "%8c", key); key[8] = 0;
- printf("Key: %s\n", key);
- zDumpLine(fp);
-#endif
-
- /* Line 2 */
- for (i=0; i<5; i++) {
- fscanf(fp, "%14c", buf); buf[14] = 0;
- sscanf(buf, "%d", &tmp);
- if (i == 3) numer_lines = tmp;
- if (i == 4 && tmp) rhscrd = 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);
- fscanf(fp, "%20c", buf);
- zDumpLine(fp);
-
- /* Line 5: right-hand side */
- if ( rhscrd ) zDumpLine(fp); /* skip RHSFMT */
-
-#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/SRC/zreadrb.c b/SRC/zreadrb.c
deleted file mode 100644
index e297e26..0000000
--- a/SRC/zreadrb.c
+++ /dev/null
@@ -1,246 +0,0 @@
-
-/*! @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/SRC/zreadtriple.c b/SRC/zreadtriple.c
deleted file mode 100644
index 624b85b..0000000
--- a/SRC/zreadtriple.c
+++ /dev/null
@@ -1,140 +0,0 @@
-
-/*! @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
-zreadtriple(int *m, int *n, int *nonz,
- doublecomplex **nzval, int **rowind, int **colptr)
-{
-/*
- * Output parameters
- * =================
- * (a,asub,xa): asub[*] contains the row subscripts of nonzeros
- * in columns of matrix A; a[*] the numerical values;
- * row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
- *
- */
- int j, k, jsize, nnz, nz;
- doublecomplex *a, *val;
- int *asub, *xa, *row, *col;
- int zero_base = 0;
-
- /* Matrix format:
- * First line: #rows, #cols, #non-zero
- * Triplet in the rest of lines:
- * row, col, value
- */
-
- 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;
- xa = *colptr;
-
- val = (doublecomplex *) SUPERLU_MALLOC(*nonz * sizeof(doublecomplex));
- 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 (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
- scanf("%d%d%lf%lf\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,%e) out of bound, removed\n",
- nz, row[nz], col[nz], val[nz].r, val[nz].i);
- exit(-1);
- } else {
- ++xa[col[nz]];
- ++nz;
- }
- }
-
- *nonz = nz;
-
- /* Initialize the array of column pointers */
- k = 0;
- jsize = xa[0];
- xa[0] = 0;
- for (j = 1; j < *n; ++j) {
- k += jsize;
- jsize = xa[j];
- xa[j] = k;
- }
-
- /* Copy the triplets into the column oriented storage */
- for (nz = 0; nz < *nonz; ++nz) {
- j = col[nz];
- k = xa[j];
- asub[k] = row[nz];
- a[k] = val[nz];
- ++xa[j];
- }
-
- /* Reset the column pointers to the beginning of each column */
- for (j = *n; j > 0; --j)
- xa[j] = xa[j-1];
- xa[0] = 0;
-
- SUPERLU_FREE(val);
- SUPERLU_FREE(row);
- SUPERLU_FREE(col);
-
-#ifdef CHK_INPUT
- {
- 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
deleted file mode 100644
index f760517..0000000
--- a/SRC/zsnode_bmod.c
+++ /dev/null
@@ -1,120 +0,0 @@
-
-/*! @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>
- */
-
-
-#include "slu_zdefs.h"
-
-
-/*! \brief Performs numeric block updates within the relaxed snode.
- */
-int
-zsnode_bmod (
- const int jcol, /* in */
- const int jsupno, /* in */
- const int fsupc, /* in */
- doublecomplex *dense, /* in */
- doublecomplex *tempv, /* working array */
- GlobalLU_t *Glu, /* modified */
- SuperLUStat_t *stat /* output */
- )
-{
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- _fcd ftcs1 = _cptofcd("L", strlen("L")),
- ftcs2 = _cptofcd("N", strlen("N")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- int incx = 1, incy = 1;
- doublecomplex alpha = {-1.0, 0.0}, beta = {1.0, 0.0};
-#endif
-
- doublecomplex comp_zero = {0.0, 0.0};
- int luptr, nsupc, nsupr, nrow;
- int isub, irow, i, iptr;
- register int ufirst, nextlu;
- int *lsub, *xlsub;
- doublecomplex *lusup;
- int *xlusup;
- flops_t *ops = stat->ops;
-
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
-
- nextlu = xlusup[jcol];
-
- /*
- * Process the supernodal portion of L\U[*,j]
- */
- for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
- irow = lsub[isub];
- lusup[nextlu] = dense[irow];
- dense[irow] = comp_zero;
- ++nextlu;
- }
-
- xlusup[jcol + 1] = nextlu; /* Initialize xlusup for next column */
-
- if ( fsupc < jcol ) {
-
- luptr = xlusup[fsupc];
- nsupr = xlsub[fsupc+1] - xlsub[fsupc];
- nsupc = jcol - fsupc; /* Excluding jcol */
- ufirst = xlusup[jcol]; /* Points to the beginning of column
- jcol in supernode L\U(jsupno). */
- nrow = nsupr - nsupc;
-
- ops[TRSV] += 4 * nsupc * (nsupc - 1);
- ops[GEMV] += 8 * nrow * nsupc;
-
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr], &nsupr,
- &lusup[ufirst], &incx );
- CGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#else
- ztrsv_( "L", "N", "U", &nsupc, &lusup[luptr], &nsupr,
- &lusup[ufirst], &incx );
- zgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
- &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
-#endif
-#else
- zlsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
- zmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
- &lusup[ufirst], &tempv[0] );
-
- /* Scatter tempv[*] into lusup[*] */
- iptr = ufirst + nsupc;
- for (i = 0; i < nrow; i++) {
- z_sub(&lusup[iptr], &lusup[iptr], &tempv[i]);
- ++iptr;
- tempv[i] = comp_zero;
- }
-#endif
-
- }
-
- return 0;
-}
diff --git a/SRC/zsnode_dfs.c b/SRC/zsnode_dfs.c
deleted file mode 100644
index 247b1a4..0000000
--- a/SRC/zsnode_dfs.c
+++ /dev/null
@@ -1,112 +0,0 @@
-
-/*! @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>
- */
-
-
-#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 */
- const int kcol, /* in - end of the supernode */
- const int *asub, /* in */
- const int *xa_begin, /* in */
- const int *xa_end, /* in */
- int *xprune, /* out */
- int *marker, /* modified */
- GlobalLU_t *Glu /* modified */
- )
-{
-
- register int i, k, ifrom, ito, nextl, new_next;
- 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) )
- return (mem_error);
- lsub = Glu->lsub;
- }
- }
- }
- supno[i] = nsuper;
- }
-
- /* Supernode > 1, then make a copy of the subscripts for pruning */
- if ( jcol < kcol ) {
- new_next = nextl + (nextl - xlsub[jcol]);
- while ( new_next > nzlmax ) {
- if ( mem_error = zLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
- return (mem_error);
- lsub = Glu->lsub;
- }
- ito = nextl;
- for (ifrom = xlsub[jcol]; ifrom < nextl; )
- lsub[ito++] = lsub[ifrom++];
- for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
- nextl = ito;
- }
-
- xsup[nsuper+1] = kcol + 1;
- supno[kcol+1] = nsuper;
- xprune[kcol] = nextl;
- xlsub[kcol+1] = nextl;
-
- return 0;
-}
-
diff --git a/SRC/zsp_blas2.c b/SRC/zsp_blas2.c
deleted file mode 100644
index 58500fd..0000000
--- a/SRC/zsp_blas2.c
+++ /dev/null
@@ -1,573 +0,0 @@
-
-/*! @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
- * Purpose: Sparse BLAS 2, using some dense BLAS 2 operations.
- */
-
-#include "slu_zdefs.h"
-
-/*
- * Function prototypes
- */
-void zusolve(int, int, doublecomplex*, doublecomplex*);
-void zlsolve(int, int, doublecomplex*, doublecomplex*);
-void zmatvec(int, int, int, doublecomplex*, doublecomplex*, doublecomplex*);
-
-/*! \brief Solves one of the systems of equations A*x = b, or A'*x = b
- *
- * <pre>
- * Purpose
- * =======
- *
- * sp_ztrsv() 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.
- *
- * Parameters
- * ==========
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * 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.
- *
- * U - (input) SuperMatrix*
- * The factor U from the factorization Pr*A*Pc=L*U.
- * U has types: Stype = NC, Dtype = SLU_Z, Mtype = TRU.
- *
- * 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.
- *
- * 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")),
- ftcs3 = _cptofcd("U", strlen("U"));
-#endif
- SCformat *Lstore;
- NCformat *Ustore;
- doublecomplex *Lval, *Uval;
- int incx = 1, incy = 1;
- doublecomplex temp;
- doublecomplex alpha = {1.0, 0.0}, beta = {1.0, 0.0};
- doublecomplex comp_zero = {0.0, 0.0};
- int nrow;
- int fsupc, nsupr, nsupc, luptr, istart, irow;
- int i, k, iptr, jcol;
- doublecomplex *work;
- flops_t solve_ops;
-
- /* Test the input parameters */
- *info = 0;
- if ( !lsame_(uplo,"L") && !lsame_(uplo, "U") ) *info = -1;
- else if ( !lsame_(trans, "N") && !lsame_(trans, "T") &&
- !lsame_(trans, "C")) *info = -2;
- else if ( !lsame_(diag, "U") && !lsame_(diag, "N") ) *info = -3;
- else if ( L->nrow != L->ncol || L->nrow < 0 ) *info = -4;
- else if ( U->nrow != U->ncol || U->nrow < 0 ) *info = -5;
- if ( *info ) {
- i = -(*info);
- xerbla_("sp_ztrsv", &i);
- return 0;
- }
-
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
- solve_ops = 0;
-
- if ( !(work = doublecomplexCalloc(L->nrow)) )
- ABORT("Malloc fails for work in sp_ztrsv().");
-
- if ( lsame_(trans, "N") ) { /* Form x := inv(A)*x. */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := inv(L)*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- 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;
- luptr = L_NZ_START(fsupc);
- nrow = nsupr - nsupc;
-
- /* 1 z_div costs 10 flops */
- solve_ops += 4 * nsupc * (nsupc - 1) + 10 * nsupc;
- solve_ops += 8 * nrow * nsupc;
-
- if ( nsupc == 1 ) {
- for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
- irow = L_SUB(iptr);
- ++luptr;
- zz_mult(&comp_zero, &x[fsupc], &Lval[luptr]);
- z_sub(&x[irow], &x[irow], &comp_zero);
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-
- CGEMV(ftcs2, &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
- &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
-#else
- ztrsv_("L", "N", "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-
- zgemv_("N", &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
- &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
-#endif
-#else
- zlsolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc]);
-
- zmatvec ( nsupr, nsupr-nsupc, nsupc, &Lval[luptr+nsupc],
- &x[fsupc], &work[0] );
-#endif
-
- iptr = istart + nsupc;
- for (i = 0; i < nrow; ++i, ++iptr) {
- irow = L_SUB(iptr);
- z_sub(&x[irow], &x[irow], &work[i]); /* Scatter */
- work[i] = comp_zero;
-
- }
- }
- } /* for k ... */
-
- } else {
- /* Form x := inv(U)*x */
-
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; k--) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- /* 1 z_div costs 10 flops */
- solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
-
- if ( nsupc == 1 ) {
- z_div(&x[fsupc], &x[fsupc], &Lval[luptr]);
- for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
- irow = U_SUB(i);
- zz_mult(&comp_zero, &x[fsupc], &Uval[i]);
- z_sub(&x[irow], &x[irow], &comp_zero);
- }
- } else {
-#ifdef USE_VENDOR_BLAS
-#ifdef _CRAY
- CTRSV(ftcs3, ftcs2, ftcs2, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ztrsv_("U", "N", "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
-#else
- zusolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
-#endif
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1);
- i++) {
- irow = U_SUB(i);
- zz_mult(&comp_zero, &x[jcol], &Uval[i]);
- z_sub(&x[irow], &x[irow], &comp_zero);
- }
- }
- }
- } /* for k ... */
-
- }
- } else if ( lsame_(trans, "T") ) { /* Form x := inv(A')*x */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := inv(L')*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; --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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += 8 * (nsupr - nsupc) * nsupc;
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- iptr = istart + nsupc;
- for (i = L_NZ_START(jcol) + nsupc;
- i < L_NZ_START(jcol+1); i++) {
- irow = L_SUB(iptr);
- zz_mult(&comp_zero, &x[irow], &Lval[i]);
- z_sub(&x[jcol], &x[jcol], &comp_zero);
- iptr++;
- }
- }
-
- if ( nsupc > 1 ) {
- solve_ops += 4 * nsupc * (nsupc - 1);
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd("T", strlen("T"));
- ftcs3 = _cptofcd("U", strlen("U"));
- CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ztrsv_("L", "T", "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- }
- } else {
- /* Form x := inv(U')*x */
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = 0; k <= Lstore->nsuper; k++) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
- irow = U_SUB(i);
- zz_mult(&comp_zero, &x[irow], &Uval[i]);
- z_sub(&x[jcol], &x[jcol], &comp_zero);
- }
- }
-
- /* 1 z_div costs 10 flops */
- solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
-
- if ( nsupc == 1 ) {
- z_div(&x[fsupc], &x[fsupc], &Lval[luptr]);
- } else {
-#ifdef _CRAY
- ftcs1 = _cptofcd("U", strlen("U"));
- ftcs2 = _cptofcd("T", strlen("T"));
- ftcs3 = _cptofcd("N", strlen("N"));
- CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ztrsv_("U", "T", "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- } /* for k ... */
- }
- } else { /* Form x := conj(inv(A'))*x */
-
- if ( lsame_(uplo, "L") ) {
- /* Form x := conj(inv(L'))*x */
- if ( L->nrow == 0 ) return 0; /* Quick return */
-
- for (k = Lstore->nsuper; k >= 0; --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;
- luptr = L_NZ_START(fsupc);
-
- solve_ops += 8 * (nsupr - nsupc) * nsupc;
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- iptr = istart + nsupc;
- for (i = L_NZ_START(jcol) + nsupc;
- i < L_NZ_START(jcol+1); i++) {
- irow = L_SUB(iptr);
- zz_conj(&temp, &Lval[i]);
- zz_mult(&comp_zero, &x[irow], &temp);
- z_sub(&x[jcol], &x[jcol], &comp_zero);
- iptr++;
- }
- }
-
- if ( nsupc > 1 ) {
- solve_ops += 4 * nsupc * (nsupc - 1);
-#ifdef _CRAY
- ftcs1 = _cptofcd("L", strlen("L"));
- ftcs2 = _cptofcd(trans, strlen("T"));
- ftcs3 = _cptofcd("U", strlen("U"));
- ZTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ztrsv_("L", trans, "U", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- }
- } else {
- /* Form x := conj(inv(U'))*x */
- if ( U->nrow == 0 ) return 0; /* Quick return */
-
- for (k = 0; k <= Lstore->nsuper; k++) {
- fsupc = L_FST_SUPC(k);
- nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
- nsupc = L_FST_SUPC(k+1) - fsupc;
- luptr = L_NZ_START(fsupc);
-
- for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
- solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
- for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
- irow = U_SUB(i);
- zz_conj(&temp, &Uval[i]);
- zz_mult(&comp_zero, &x[irow], &temp);
- z_sub(&x[jcol], &x[jcol], &comp_zero);
- }
- }
-
- /* 1 z_div costs 10 flops */
- solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
-
- if ( nsupc == 1 ) {
- zz_conj(&temp, &Lval[luptr]);
- z_div(&x[fsupc], &x[fsupc], &temp);
- } else {
-#ifdef _CRAY
- ftcs1 = _cptofcd("U", strlen("U"));
- ftcs2 = _cptofcd(trans, strlen("T"));
- ftcs3 = _cptofcd("N", strlen("N"));
- ZTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#else
- ztrsv_("U", trans, "N", &nsupc, &Lval[luptr], &nsupr,
- &x[fsupc], &incx);
-#endif
- }
- } /* for k ... */
- }
- }
-
- stat->ops[SOLVE] += solve_ops;
- SUPERLU_FREE(work);
- return 0;
-}
-
-
-
-/*! \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)
-{
-
- /* Local variables */
- NCformat *Astore;
- doublecomplex *Aval;
- int info;
- doublecomplex temp, temp1;
- int lenx, leny, i, j, irow;
- int iy, jx, jy, kx, ky;
- int notran;
- doublecomplex comp_zero = {0.0, 0.0};
- doublecomplex comp_one = {1.0, 0.0};
-
- notran = lsame_(trans, "N");
- Astore = A->Store;
- Aval = Astore->nzval;
-
- /* Test the input parameters */
- info = 0;
- if ( !notran && !lsame_(trans, "T") && !lsame_(trans, "C")) info = 1;
- else if ( A->nrow < 0 || A->ncol < 0 ) info = 3;
- else if (incx == 0) info = 5;
- else if (incy == 0) info = 8;
- if (info != 0) {
- xerbla_("sp_zgemv ", &info);
- return 0;
- }
-
- /* Quick return if possible. */
- if (A->nrow == 0 || A->ncol == 0 ||
- z_eq(&alpha, &comp_zero) &&
- z_eq(&beta, &comp_one))
- return 0;
-
-
- /* Set LENX and LENY, the lengths of the vectors x and y, and set
- up the start points in X and Y. */
- if (lsame_(trans, "N")) {
- lenx = A->ncol;
- leny = A->nrow;
- } else {
- lenx = A->nrow;
- leny = A->ncol;
- }
- if (incx > 0) kx = 0;
- else kx = - (lenx - 1) * incx;
- if (incy > 0) ky = 0;
- else ky = - (leny - 1) * incy;
-
- /* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through A. */
- /* First form y := beta*y. */
- if ( !z_eq(&beta, &comp_one) ) {
- if (incy == 1) {
- if ( z_eq(&beta, &comp_zero) )
- for (i = 0; i < leny; ++i) y[i] = comp_zero;
- else
- for (i = 0; i < leny; ++i)
- zz_mult(&y[i], &beta, &y[i]);
- } else {
- iy = ky;
- if ( z_eq(&beta, &comp_zero) )
- for (i = 0; i < leny; ++i) {
- y[iy] = comp_zero;
- iy += incy;
- }
- else
- for (i = 0; i < leny; ++i) {
- zz_mult(&y[iy], &beta, &y[iy]);
- iy += incy;
- }
- }
- }
-
- if ( z_eq(&alpha, &comp_zero) ) return 0;
-
- if ( notran ) {
- /* Form y := alpha*A*x + y. */
- jx = kx;
- if (incy == 1) {
- for (j = 0; j < A->ncol; ++j) {
- if ( !z_eq(&x[jx], &comp_zero) ) {
- zz_mult(&temp, &alpha, &x[jx]);
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- zz_mult(&temp1, &temp, &Aval[i]);
- z_add(&y[irow], &y[irow], &temp1);
- }
- }
- jx += incx;
- }
- } else {
- ABORT("Not implemented.");
- }
- } else {
- /* Form y := alpha*A'*x + y. */
- jy = ky;
- if (incx == 1) {
- for (j = 0; j < A->ncol; ++j) {
- temp = comp_zero;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- zz_mult(&temp1, &Aval[i], &x[irow]);
- z_add(&temp, &temp, &temp1);
- }
- zz_mult(&temp1, &alpha, &temp);
- z_add(&y[jy], &y[jy], &temp1);
- jy += incy;
- }
- } else {
- ABORT("Not implemented.");
- }
- }
- return 0;
-} /* sp_zgemv */
-
diff --git a/SRC/zsp_blas3.c b/SRC/zsp_blas3.c
deleted file mode 100644
index 0e1a5c2..0000000
--- a/SRC/zsp_blas3.c
+++ /dev/null
@@ -1,127 +0,0 @@
-
-/*! @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
- * Purpose: Sparse BLAS3, using some dense BLAS3 operations.
- */
-
-#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)
-{
- int incx = 1, incy = 1;
- int j;
-
- for (j = 0; j < n; ++j) {
- sp_zgemv(transa, alpha, A, &b[ldb*j], incx, beta, &c[ldc*j], incy);
- }
- return 0;
-}
diff --git a/SRC/zutil.c b/SRC/zutil.c
deleted file mode 100644
index f3c06cb..0000000
--- a/SRC/zutil.c
+++ /dev/null
@@ -1,475 +0,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.
- * 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>
- */
-
-
-#include <math.h>
-#include "slu_zdefs.h"
-
-void
-zCreate_CompCol_Matrix(SuperMatrix *A, int m, int n, int nnz,
- doublecomplex *nzval, int *rowind, int *colptr,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- NCformat *Astore;
-
- A->Stype = stype;
- A->Dtype = dtype;
- A->Mtype = mtype;
- A->nrow = m;
- A->ncol = n;
- A->Store = (void *) SUPERLU_MALLOC( sizeof(NCformat) );
- if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
- Astore = A->Store;
- Astore->nnz = nnz;
- Astore->nzval = nzval;
- Astore->rowind = rowind;
- Astore->colptr = colptr;
-}
-
-void
-zCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
- doublecomplex *nzval, int *colind, int *rowptr,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- NRformat *Astore;
-
- A->Stype = stype;
- A->Dtype = dtype;
- A->Mtype = mtype;
- A->nrow = m;
- A->ncol = n;
- A->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat) );
- if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
- Astore = A->Store;
- Astore->nnz = nnz;
- Astore->nzval = nzval;
- Astore->colind = colind;
- Astore->rowptr = rowptr;
-}
-
-/*! \brief Copy matrix A into matrix B. */
-void
-zCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
-{
- NCformat *Astore, *Bstore;
- int ncol, nnz, i;
-
- B->Stype = A->Stype;
- B->Dtype = A->Dtype;
- B->Mtype = A->Mtype;
- B->nrow = A->nrow;;
- B->ncol = ncol = A->ncol;
- Astore = (NCformat *) A->Store;
- Bstore = (NCformat *) B->Store;
- Bstore->nnz = nnz = Astore->nnz;
- for (i = 0; i < nnz; ++i)
- ((doublecomplex *)Bstore->nzval)[i] = ((doublecomplex *)Astore->nzval)[i];
- for (i = 0; i < nnz; ++i) Bstore->rowind[i] = Astore->rowind[i];
- for (i = 0; i <= ncol; ++i) Bstore->colptr[i] = Astore->colptr[i];
-}
-
-
-void
-zCreate_Dense_Matrix(SuperMatrix *X, int m, int n, doublecomplex *x, int ldx,
- Stype_t stype, Dtype_t dtype, Mtype_t mtype)
-{
- DNformat *Xstore;
-
- X->Stype = stype;
- X->Dtype = dtype;
- X->Mtype = mtype;
- X->nrow = m;
- X->ncol = n;
- X->Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
- if ( !(X->Store) ) ABORT("SUPERLU_MALLOC fails for X->Store");
- Xstore = (DNformat *) X->Store;
- Xstore->lda = ldx;
- Xstore->nzval = (doublecomplex *) x;
-}
-
-void
-zCopy_Dense_Matrix(int M, int N, doublecomplex *X, int ldx,
- doublecomplex *Y, int ldy)
-{
-/*! \brief Copies a two-dimensional matrix X to another matrix Y.
- */
- int i, j;
-
- for (j = 0; j < N; ++j)
- for (i = 0; i < M; ++i)
- Y[i + j*ldy] = X[i + j*ldx];
-}
-
-void
-zCreate_SuperNode_Matrix(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)
-{
- SCformat *Lstore;
-
- L->Stype = stype;
- L->Dtype = dtype;
- L->Mtype = mtype;
- L->nrow = m;
- L->ncol = n;
- L->Store = (void *) SUPERLU_MALLOC( sizeof(SCformat) );
- if ( !(L->Store) ) ABORT("SUPERLU_MALLOC fails for L->Store");
- Lstore = L->Store;
- Lstore->nnz = nnz;
- Lstore->nsuper = col_to_sup[n];
- Lstore->nzval = nzval;
- Lstore->nzval_colptr = nzval_colptr;
- Lstore->rowind = rowind;
- Lstore->rowind_colptr = rowind_colptr;
- Lstore->col_to_sup = col_to_sup;
- Lstore->sup_to_col = sup_to_col;
-
-}
-
-
-/*! \brief Convert a row compressed storage into a column compressed storage.
- */
-void
-zCompRow_to_CompCol(int m, int n, int nnz,
- doublecomplex *a, int *colind, int *rowptr,
- doublecomplex **at, int **rowind, int **colptr)
-{
- register int i, j, col, relpos;
- int *marker;
-
- /* Allocate storage for another copy of the matrix. */
- *at = (doublecomplex *) doublecomplexMalloc(nnz);
- *rowind = (int *) intMalloc(nnz);
- *colptr = (int *) intMalloc(n+1);
- marker = (int *) intCalloc(n);
-
- /* Get counts of each column of A, and set up column pointers */
- for (i = 0; i < m; ++i)
- for (j = rowptr[i]; j < rowptr[i+1]; ++j) ++marker[colind[j]];
- (*colptr)[0] = 0;
- for (j = 0; j < n; ++j) {
- (*colptr)[j+1] = (*colptr)[j] + marker[j];
- marker[j] = (*colptr)[j];
- }
-
- /* Transfer the matrix into the compressed column storage. */
- for (i = 0; i < m; ++i) {
- for (j = rowptr[i]; j < rowptr[i+1]; ++j) {
- col = colind[j];
- relpos = marker[col];
- (*rowind)[relpos] = i;
- (*at)[relpos] = a[j];
- ++marker[col];
- }
- }
-
- SUPERLU_FREE(marker);
-}
-
-
-void
-zPrint_CompCol_Matrix(char *what, SuperMatrix *A)
-{
- NCformat *Astore;
- register int i,n;
- double *dp;
-
- printf("\nCompCol matrix %s:\n", what);
- printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
- n = A->ncol;
- Astore = (NCformat *) A->Store;
- dp = (double *) Astore->nzval;
- printf("nrow %d, ncol %d, nnz %d\n", A->nrow,A->ncol,Astore->nnz);
- printf("nzval: ");
- for (i = 0; i < 2*Astore->colptr[n]; ++i) printf("%f ", dp[i]);
- printf("\nrowind: ");
- for (i = 0; i < Astore->colptr[n]; ++i) printf("%d ", Astore->rowind[i]);
- printf("\ncolptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->colptr[i]);
- printf("\n");
- fflush(stdout);
-}
-
-void
-zPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
-{
- SCformat *Astore;
- register int i, j, k, c, d, n, nsup;
- double *dp;
- int *col_to_sup, *sup_to_col, *rowind, *rowind_colptr;
-
- printf("\nSuperNode matrix %s:\n", what);
- printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
- n = A->ncol;
- Astore = (SCformat *) A->Store;
- dp = (double *) Astore->nzval;
- col_to_sup = Astore->col_to_sup;
- sup_to_col = Astore->sup_to_col;
- rowind_colptr = Astore->rowind_colptr;
- rowind = Astore->rowind;
- printf("nrow %d, ncol %d, nnz %d, nsuper %d\n",
- A->nrow,A->ncol,Astore->nnz,Astore->nsuper);
- printf("nzval:\n");
- for (k = 0; k <= Astore->nsuper; ++k) {
- c = sup_to_col[k];
- nsup = sup_to_col[k+1] - c;
- for (j = c; j < c + nsup; ++j) {
- d = Astore->nzval_colptr[j];
- for (i = rowind_colptr[c]; i < rowind_colptr[c+1]; ++i) {
- printf("%d\t%d\t%e\t%e\n", rowind[i], j, dp[d], dp[d+1]);
- d += 2;
- }
- }
- }
-#if 0
- for (i = 0; i < 2*Astore->nzval_colptr[n]; ++i) printf("%f ", dp[i]);
-#endif
- printf("\nnzval_colptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->nzval_colptr[i]);
- printf("\nrowind: ");
- for (i = 0; i < Astore->rowind_colptr[n]; ++i)
- printf("%d ", Astore->rowind[i]);
- printf("\nrowind_colptr: ");
- for (i = 0; i <= n; ++i) printf("%d ", Astore->rowind_colptr[i]);
- printf("\ncol_to_sup: ");
- for (i = 0; i < n; ++i) printf("%d ", col_to_sup[i]);
- printf("\nsup_to_col: ");
- for (i = 0; i <= Astore->nsuper+1; ++i)
- printf("%d ", sup_to_col[i]);
- printf("\n");
- fflush(stdout);
-}
-
-void
-zPrint_Dense_Matrix(char *what, SuperMatrix *A)
-{
- 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);
- dp = (double *) Astore->nzval;
- printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
- printf("\nnzval: ");
- for (j = 0; j < A->ncol; ++j) {
- for (i = 0; i < 2*A->nrow; ++i) printf("%f ", dp[i + j*2*lda]);
- printf("\n");
- }
- printf("\n");
- fflush(stdout);
-}
-
-/*! \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)
-{
- int i, k, fsupc;
- int *xsup, *supno;
- int *xlsub, *lsub;
- doublecomplex *lusup;
- int *xlusup;
- doublecomplex *ucol;
- int *usub, *xusub;
-
- xsup = Glu->xsup;
- supno = Glu->supno;
- lsub = Glu->lsub;
- xlsub = Glu->xlsub;
- lusup = Glu->lusup;
- xlusup = Glu->xlusup;
- ucol = Glu->ucol;
- usub = Glu->usub;
- xusub = Glu->xusub;
-
- printf("%s", msg);
- printf("col %d: pivrow %d, supno %d, xprune %d\n",
- jcol, pivrow, supno[jcol], xprune[jcol]);
-
- printf("\tU-col:\n");
- for (i = xusub[jcol]; i < xusub[jcol+1]; i++)
- printf("\t%d%10.4f, %10.4f\n", usub[i], ucol[i].r, ucol[i].i);
- printf("\tL-col in rectangular snode:\n");
- fsupc = xsup[supno[jcol]]; /* first col of the snode */
- i = xlsub[fsupc];
- k = xlusup[jcol];
- while ( i < xlsub[fsupc+1] && k < xlusup[jcol+1] ) {
- printf("\t%d\t%10.4f, %10.4f\n", lsub[i], lusup[k].r, lusup[k].i);
- i++; k++;
- }
- fflush(stdout);
-}
-
-
-/*! \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)
-{
- int i;
-
- for (i = 0; i < n; i++) {
- if ((tempv[i].r != 0.0) || (tempv[i].i != 0.0))
- {
- fprintf(stderr,"tempv[%d] = {%f, %f}\n", i, tempv[i].r, tempv[i].i);
- ABORT("zcheck_tempv");
- }
- }
-}
-
-
-void
-zGenXtrue(int n, int nrhs, doublecomplex *x, int ldx)
-{
- int i, j;
- for (j = 0; j < nrhs; ++j)
- for (i = 0; i < n; ++i) {
- x[i + j*ldx].r = 1.0;
- x[i + j*ldx].i = 0.0;
- }
-}
-
-/*! \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,
- SuperMatrix *A, SuperMatrix *B)
-{
- NCformat *Astore;
- doublecomplex *Aval;
- DNformat *Bstore;
- doublecomplex *rhs;
- doublecomplex one = {1.0, 0.0};
- doublecomplex zero = {0.0, 0.0};
- int ldc;
- char transc[1];
-
- Astore = A->Store;
- Aval = (doublecomplex *) Astore->nzval;
- Bstore = B->Store;
- rhs = Bstore->nzval;
- ldc = Bstore->lda;
-
- if ( trans == NOTRANS ) *(unsigned char *)transc = 'N';
- else *(unsigned char *)transc = 'T';
-
- sp_zgemm(transc, "N", A->nrow, nrhs, A->ncol, one, A,
- x, ldx, zero, rhs, ldc);
-
-}
-
-/*! \brief Fills a doublecomplex precision array with a given value.
- */
-void
-zfill(doublecomplex *a, int alen, doublecomplex dval)
-{
- register int i;
- for (i = 0; i < alen; i++) a[i] = dval;
-}
-
-
-
-/*! \brief Check the inf-norm of the error vector
- */
-void zinf_norm_error(int nrhs, SuperMatrix *X, doublecomplex *xtrue)
-{
- DNformat *Xstore;
- double err, xnorm;
- doublecomplex *Xmat, *soln_work;
- doublecomplex temp;
- int i, j;
-
- Xstore = X->Store;
- Xmat = Xstore->nzval;
-
- for (j = 0; j < nrhs; j++) {
- soln_work = &Xmat[j*Xstore->lda];
- err = xnorm = 0.0;
- for (i = 0; i < X->nrow; i++) {
- z_sub(&temp, &soln_work[i], &xtrue[i]);
- err = SUPERLU_MAX(err, z_abs(&temp));
- xnorm = SUPERLU_MAX(xnorm, z_abs(&soln_work[i]));
- }
- err = err / xnorm;
- printf("||X - Xtrue||/||X|| = %e\n", err);
- }
-}
-
-
-
-/*! \brief Print performance of the code. */
-void
-zPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
- double rpg, double rcond, double *ferr,
- double *berr, char *equed, SuperLUStat_t *stat)
-{
- SCformat *Lstore;
- NCformat *Ustore;
- double *utime;
- flops_t *ops;
-
- utime = stat->utime;
- ops = stat->ops;
-
- if ( utime[FACT] != 0. )
- printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
- ops[FACT]*1e-6/utime[FACT]);
- printf("Identify relaxed snodes = %8.2f\n", utime[RELAX]);
- if ( utime[SOLVE] != 0. )
- printf("Solve flops = %.0f, Mflops = %8.2f\n", ops[SOLVE],
- ops[SOLVE]*1e-6/utime[SOLVE]);
-
- Lstore = (SCformat *) L->Store;
- Ustore = (NCformat *) U->Store;
- printf("\tNo of nonzeros in factor L = %d\n", Lstore->nnz);
- 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\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",
- utime[FACT], ops[FACT]*1e-6/utime[FACT],
- utime[SOLVE], ops[SOLVE]*1e-6/utime[SOLVE],
- utime[ETREE], utime[EQUIL], utime[RCOND], utime[REFINE]);
-
- printf("\tRpg\t\tRcond\t\tFerr\t\tBerr\t\tEquil?\n");
- printf("NUM:\t%e\t%e\t%e\t%e\t%s\n",
- rpg, rcond, ferr[0], berr[0], equed);
-
-}
-
-
-
-
-print_doublecomplex_vec(char *what, int n, doublecomplex *vec)
-{
- int i;
- printf("%s: n %d\n", what, n);
- for (i = 0; i < n; ++i) printf("%d\t%f%f\n", i, vec[i].r, vec[i].i);
- return 0;
-}
-
diff --git a/SuperLU_5.2.0/._.gitignore b/SuperLU_5.2.0/._.gitignore
new file mode 100644
index 0000000..7507fb5
Binary files /dev/null and b/SuperLU_5.2.0/._.gitignore differ
diff --git a/SuperLU_5.2.0/._CBLAS b/SuperLU_5.2.0/._CBLAS
new file mode 100755
index 0000000..f242c33
Binary files /dev/null and b/SuperLU_5.2.0/._CBLAS differ
diff --git a/SuperLU_5.2.0/._CMakeLists.txt b/SuperLU_5.2.0/._CMakeLists.txt
new file mode 100644
index 0000000..34020ba
Binary files /dev/null and b/SuperLU_5.2.0/._CMakeLists.txt differ
diff --git a/SuperLU_5.2.0/._DOC b/SuperLU_5.2.0/._DOC
new file mode 100755
index 0000000..1663956
Binary files /dev/null and b/SuperLU_5.2.0/._DOC differ
diff --git a/SuperLU_5.2.0/._DoxyConfig b/SuperLU_5.2.0/._DoxyConfig
new file mode 100644
index 0000000..05ab113
Binary files /dev/null and b/SuperLU_5.2.0/._DoxyConfig differ
diff --git a/SuperLU_5.2.0/._EXAMPLE b/SuperLU_5.2.0/._EXAMPLE
new file mode 100755
index 0000000..8a57dc4
Binary files /dev/null and b/SuperLU_5.2.0/._EXAMPLE differ
diff --git a/SuperLU_5.2.0/._FORTRAN b/SuperLU_5.2.0/._FORTRAN
new file mode 100755
index 0000000..0032ceb
Binary files /dev/null and b/SuperLU_5.2.0/._FORTRAN differ
diff --git a/SuperLU_5.2.0/._INSTALL b/SuperLU_5.2.0/._INSTALL
new file mode 100755
index 0000000..9cf6279
Binary files /dev/null and b/SuperLU_5.2.0/._INSTALL differ
diff --git a/SuperLU_5.2.0/._License.txt b/SuperLU_5.2.0/._License.txt
new file mode 100644
index 0000000..f546659
Binary files /dev/null and b/SuperLU_5.2.0/._License.txt differ
diff --git a/SuperLU_5.2.0/._MAKE_INC b/SuperLU_5.2.0/._MAKE_INC
new file mode 100755
index 0000000..6a4c8f6
Binary files /dev/null and b/SuperLU_5.2.0/._MAKE_INC differ
diff --git a/SuperLU_5.2.0/._MATLAB b/SuperLU_5.2.0/._MATLAB
new file mode 100755
index 0000000..4539469
Binary files /dev/null and b/SuperLU_5.2.0/._MATLAB differ
diff --git a/SuperLU_5.2.0/._Makefile b/SuperLU_5.2.0/._Makefile
new file mode 100644
index 0000000..bbce4e7
Binary files /dev/null and b/SuperLU_5.2.0/._Makefile differ
diff --git a/SuperLU_5.2.0/._README b/SuperLU_5.2.0/._README
new file mode 100644
index 0000000..67c87e3
Binary files /dev/null and b/SuperLU_5.2.0/._README differ
diff --git a/SuperLU_5.2.0/._SRC b/SuperLU_5.2.0/._SRC
new file mode 100755
index 0000000..45c5e2e
Binary files /dev/null and b/SuperLU_5.2.0/._SRC differ
diff --git a/SuperLU_5.2.0/._TESTING b/SuperLU_5.2.0/._TESTING
new file mode 100755
index 0000000..92f49ba
Binary files /dev/null and b/SuperLU_5.2.0/._TESTING differ
diff --git a/SuperLU_5.2.0/._cmake b/SuperLU_5.2.0/._cmake
new file mode 100755
index 0000000..4699faa
Binary files /dev/null and b/SuperLU_5.2.0/._cmake differ
diff --git a/SuperLU_5.2.0/._lib b/SuperLU_5.2.0/._lib
new file mode 100755
index 0000000..c136b4e
Binary files /dev/null and b/SuperLU_5.2.0/._lib differ
diff --git a/SuperLU_5.2.0/._make.inc.in b/SuperLU_5.2.0/._make.inc.in
new file mode 100644
index 0000000..37fc294
Binary files /dev/null and b/SuperLU_5.2.0/._make.inc.in differ
diff --git a/SuperLU_5.2.0/.gitignore b/SuperLU_5.2.0/.gitignore
new file mode 100644
index 0000000..2eb65d5
--- /dev/null
+++ b/SuperLU_5.2.0/.gitignore
@@ -0,0 +1,9 @@
+*~
+
+# You have to ignore this genrated file or git will complain that it is an
+# unknown file!
+/make.inc
+
+# If the instructions are telling people to create this build dir under the
+# source tree, you had better put in an ignore for this.
+/build/
diff --git a/SuperLU_5.2.0/CBLAS/._CMakeLists.txt b/SuperLU_5.2.0/CBLAS/._CMakeLists.txt
new file mode 100644
index 0000000..d40cc9c
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._CMakeLists.txt differ
diff --git a/SuperLU_5.2.0/CBLAS/._Makefile b/SuperLU_5.2.0/CBLAS/._Makefile
new file mode 100644
index 0000000..b41cf0e
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._Makefile differ
diff --git a/SuperLU_5.2.0/CBLAS/._caxpy.c b/SuperLU_5.2.0/CBLAS/._caxpy.c
new file mode 100644
index 0000000..c524eb9
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._caxpy.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._ccopy.c b/SuperLU_5.2.0/CBLAS/._ccopy.c
new file mode 100644
index 0000000..e3d0bcc
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._ccopy.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._cdotc.c b/SuperLU_5.2.0/CBLAS/._cdotc.c
new file mode 100644
index 0000000..469b72e
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._cdotc.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._cgemv.c b/SuperLU_5.2.0/CBLAS/._cgemv.c
new file mode 100644
index 0000000..f783414
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._cgemv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._cgerc.c b/SuperLU_5.2.0/CBLAS/._cgerc.c
new file mode 100644
index 0000000..be06519
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._cgerc.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._chemv.c b/SuperLU_5.2.0/CBLAS/._chemv.c
new file mode 100644
index 0000000..da6e806
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._chemv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._cher2.c b/SuperLU_5.2.0/CBLAS/._cher2.c
new file mode 100644
index 0000000..fc2b7d4
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._cher2.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._cscal.c b/SuperLU_5.2.0/CBLAS/._cscal.c
new file mode 100644
index 0000000..7727ede
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._cscal.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._cswap.c b/SuperLU_5.2.0/CBLAS/._cswap.c
new file mode 100644
index 0000000..a607d6a
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._cswap.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._ctrsv.c b/SuperLU_5.2.0/CBLAS/._ctrsv.c
new file mode 100644
index 0000000..c52138c
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._ctrsv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dasum.c b/SuperLU_5.2.0/CBLAS/._dasum.c
new file mode 100644
index 0000000..c7a4260
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dasum.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._daxpy.c b/SuperLU_5.2.0/CBLAS/._daxpy.c
new file mode 100644
index 0000000..4630e69
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._daxpy.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dcabs1.c b/SuperLU_5.2.0/CBLAS/._dcabs1.c
new file mode 100644
index 0000000..0c58f85
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dcabs1.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dcopy.c b/SuperLU_5.2.0/CBLAS/._dcopy.c
new file mode 100644
index 0000000..6ec922f
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dcopy.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._ddot.c b/SuperLU_5.2.0/CBLAS/._ddot.c
new file mode 100644
index 0000000..f2938e0
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._ddot.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dgemv.c b/SuperLU_5.2.0/CBLAS/._dgemv.c
new file mode 100644
index 0000000..157d13c
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dgemv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dger.c b/SuperLU_5.2.0/CBLAS/._dger.c
new file mode 100644
index 0000000..3d1a1e1
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dger.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dnrm2.c b/SuperLU_5.2.0/CBLAS/._dnrm2.c
new file mode 100644
index 0000000..58207d9
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dnrm2.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._drot.c b/SuperLU_5.2.0/CBLAS/._drot.c
new file mode 100644
index 0000000..71cfd1e
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._drot.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dscal.c b/SuperLU_5.2.0/CBLAS/._dscal.c
new file mode 100644
index 0000000..fd2323f
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dscal.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dswap.c b/SuperLU_5.2.0/CBLAS/._dswap.c
new file mode 100644
index 0000000..734b6a0
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dswap.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dsymv.c b/SuperLU_5.2.0/CBLAS/._dsymv.c
new file mode 100644
index 0000000..cbf6f26
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dsymv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dsyr2.c b/SuperLU_5.2.0/CBLAS/._dsyr2.c
new file mode 100644
index 0000000..91a22a3
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dsyr2.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dtrsv.c b/SuperLU_5.2.0/CBLAS/._dtrsv.c
new file mode 100644
index 0000000..df67fbc
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dtrsv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dzasum.c b/SuperLU_5.2.0/CBLAS/._dzasum.c
new file mode 100644
index 0000000..02dc5a9
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dzasum.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._dznrm2.c b/SuperLU_5.2.0/CBLAS/._dznrm2.c
new file mode 100644
index 0000000..689d827
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._dznrm2.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._f2c.h b/SuperLU_5.2.0/CBLAS/._f2c.h
new file mode 100644
index 0000000..80168fc
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._f2c.h differ
diff --git a/SuperLU_5.2.0/CBLAS/._icamax.c b/SuperLU_5.2.0/CBLAS/._icamax.c
new file mode 100644
index 0000000..dc3a6b7
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._icamax.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._idamax.c b/SuperLU_5.2.0/CBLAS/._idamax.c
new file mode 100644
index 0000000..82d4a23
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._idamax.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._isamax.c b/SuperLU_5.2.0/CBLAS/._isamax.c
new file mode 100644
index 0000000..e66bb6d
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._isamax.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._izamax.c b/SuperLU_5.2.0/CBLAS/._izamax.c
new file mode 100644
index 0000000..2f5b804
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._izamax.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._sasum.c b/SuperLU_5.2.0/CBLAS/._sasum.c
new file mode 100644
index 0000000..3c35c9a
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._sasum.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._saxpy.c b/SuperLU_5.2.0/CBLAS/._saxpy.c
new file mode 100644
index 0000000..baf6c62
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._saxpy.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._scasum.c b/SuperLU_5.2.0/CBLAS/._scasum.c
new file mode 100644
index 0000000..745900f
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._scasum.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._scnrm2.c b/SuperLU_5.2.0/CBLAS/._scnrm2.c
new file mode 100644
index 0000000..22ea8d9
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._scnrm2.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._scopy.c b/SuperLU_5.2.0/CBLAS/._scopy.c
new file mode 100644
index 0000000..799918d
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._scopy.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._sdot.c b/SuperLU_5.2.0/CBLAS/._sdot.c
new file mode 100644
index 0000000..8a2e782
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._sdot.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._sgemv.c b/SuperLU_5.2.0/CBLAS/._sgemv.c
new file mode 100644
index 0000000..289da54
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._sgemv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._sger.c b/SuperLU_5.2.0/CBLAS/._sger.c
new file mode 100644
index 0000000..84be916
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._sger.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._slu_Cnames.h b/SuperLU_5.2.0/CBLAS/._slu_Cnames.h
new file mode 100644
index 0000000..15ba35e
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._slu_Cnames.h differ
diff --git a/SuperLU_5.2.0/CBLAS/._snrm2.c b/SuperLU_5.2.0/CBLAS/._snrm2.c
new file mode 100644
index 0000000..6c0e28e
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._snrm2.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._srot.c b/SuperLU_5.2.0/CBLAS/._srot.c
new file mode 100644
index 0000000..0d4e966
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._srot.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._sscal.c b/SuperLU_5.2.0/CBLAS/._sscal.c
new file mode 100644
index 0000000..339d794
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._sscal.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._sswap.c b/SuperLU_5.2.0/CBLAS/._sswap.c
new file mode 100644
index 0000000..95bd338
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._sswap.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._ssymv.c b/SuperLU_5.2.0/CBLAS/._ssymv.c
new file mode 100644
index 0000000..21002d3
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._ssymv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._ssyr2.c b/SuperLU_5.2.0/CBLAS/._ssyr2.c
new file mode 100644
index 0000000..c5c1926
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._ssyr2.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._strsv.c b/SuperLU_5.2.0/CBLAS/._strsv.c
new file mode 100644
index 0000000..114b478
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._strsv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._superlu_f2c.h b/SuperLU_5.2.0/CBLAS/._superlu_f2c.h
new file mode 100644
index 0000000..5ee278e
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._superlu_f2c.h differ
diff --git a/SuperLU_5.2.0/CBLAS/._zaxpy.c b/SuperLU_5.2.0/CBLAS/._zaxpy.c
new file mode 100644
index 0000000..fc949a7
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._zaxpy.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._zcopy.c b/SuperLU_5.2.0/CBLAS/._zcopy.c
new file mode 100644
index 0000000..89fbfd1
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._zcopy.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._zdotc.c b/SuperLU_5.2.0/CBLAS/._zdotc.c
new file mode 100644
index 0000000..57060ea
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._zdotc.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._zgemv.c b/SuperLU_5.2.0/CBLAS/._zgemv.c
new file mode 100644
index 0000000..2b017ba
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._zgemv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._zgerc.c b/SuperLU_5.2.0/CBLAS/._zgerc.c
new file mode 100644
index 0000000..c33376c
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._zgerc.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._zhemv.c b/SuperLU_5.2.0/CBLAS/._zhemv.c
new file mode 100644
index 0000000..a42e843
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._zhemv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._zher2.c b/SuperLU_5.2.0/CBLAS/._zher2.c
new file mode 100644
index 0000000..a540666
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._zher2.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._zscal.c b/SuperLU_5.2.0/CBLAS/._zscal.c
new file mode 100644
index 0000000..eaf7426
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._zscal.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._zswap.c b/SuperLU_5.2.0/CBLAS/._zswap.c
new file mode 100644
index 0000000..f44a0f5
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._zswap.c differ
diff --git a/SuperLU_5.2.0/CBLAS/._ztrsv.c b/SuperLU_5.2.0/CBLAS/._ztrsv.c
new file mode 100644
index 0000000..0969290
Binary files /dev/null and b/SuperLU_5.2.0/CBLAS/._ztrsv.c differ
diff --git a/SuperLU_5.2.0/CBLAS/CMakeLists.txt b/SuperLU_5.2.0/CBLAS/CMakeLists.txt
new file mode 100644
index 0000000..c778a4f
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/CMakeLists.txt
@@ -0,0 +1,82 @@
+set(headers
+ f2c.h
+ slu_Cnames.h
+)
+set(sources "")
+
+if (enable_single)
+ list(APPEND sources
+ isamax.c
+ sasum.c
+ saxpy.c
+ scopy.c
+ sdot.c
+ snrm2.c
+ srot.c
+ sscal.c
+ sswap.c
+ sgemv
+ ssymv
+ strsv
+ sger
+ ssyr2
+ )
+endif()
+
+if (enable_double)
+ list(APPEND sources
+ idamax.c
+ dasum.c
+ daxpy.c
+ dcopy.c
+ ddot.c
+ dnrm2.c
+ drot.c
+ dscal.c
+ dswap.c
+ dgemv.c
+ dsymv.c
+ dtrsv.c
+ dger.c
+ dsyr2.c
+ )
+endif()
+
+if (enable_complex)
+ list(APPEND sources
+ icamax.c
+ scasum.c
+ caxpy.c
+ ccopy.c
+ scnrm2.c
+ cscal.c
+ cswap.c
+ cdotc.c
+ cgemv.c
+ chemv.c
+ ctrsv.c
+ cgerc.c
+ cher2.c
+ )
+endif()
+
+if (enable_complex16)
+ list(APPEND sources
+ izamax.c
+ dzasum.c
+ zaxpy.c
+ zcopy.c
+ dznrm2.c
+ zscal.c
+ dcabs1.c
+ zswap.c
+ zdotc.c
+ zgemv.c
+ zhemv.c
+ ztrsv.c
+ zgerc.c
+ zher2.c
+ )
+endif()
+
+add_library(blas ${sources} ${HEADERS})
diff --git a/SuperLU_5.2.0/CBLAS/Makefile b/SuperLU_5.2.0/CBLAS/Makefile
new file mode 100644
index 0000000..7474412
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/Makefile
@@ -0,0 +1,86 @@
+include ../make.inc
+HEADER = ../SRC
+
+#######################################################################
+# This is the makefile to create a library for C-BLAS.
+# The files are organized as follows:
+#
+# SBLAS1 -- Single precision real BLAS routines
+# CBLAS1 -- Single precision complex BLAS routines
+# DBLAS1 -- Double precision real BLAS routines
+# ZBLAS1 -- Double precision complex BLAS routines
+#
+# CB1AUX -- Real BLAS routines called by complex routines
+# ZB1AUX -- D.P. real BLAS routines called by d.p. complex
+# routines
+#
+# ALLBLAS -- Auxiliary routines for Level 2 and 3 BLAS
+#
+# SBLAS2 -- Single precision real BLAS2 routines
+# CBLAS2 -- Single precision complex BLAS2 routines
+# DBLAS2 -- Double precision real BLAS2 routines
+# ZBLAS2 -- Double precision complex BLAS2 routines
+#
+# SBLAS3 -- Single precision real BLAS3 routines
+# CBLAS3 -- Single precision complex BLAS3 routines
+# DBLAS3 -- Double precision real BLAS3 routines
+# ZBLAS3 -- Double precision complex BLAS3 routines
+#
+# The library can be set up to include routines for any combination
+# of the four precisions. To create or add to the library, enter make
+# followed by one or more of the precisions desired. Some examples:
+# make single
+# make single complex
+# make single double complex complex16
+# Alternatively, the command
+# make
+# without any arguments creates a library of all four precisions.
+# The library is called
+# blas.a
+# and is created at the next higher directory level.
+#
+# To remove the object files after the library is created, enter
+# make clean
+#
+#######################################################################
+
+SBLAS1 = isamax.o sasum.o saxpy.o scopy.o sdot.o snrm2.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 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 cswap.o cdotc.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 zswap.o zdotc.o
+ZBLAS2 = zgemv.o zhemv.o ztrsv.o zgerc.o zher2.o
+
+
+all: single double complex complex16
+
+single: $(SBLAS1) $(SBLAS2) $(SBLAS3)
+ $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(SBLAS1) $(ALLBLAS) $(SBLAS2) $(SBLAS3)
+ $(RANLIB) $(BLASLIB)
+
+double: $(DBLAS1) $(DBLAS2) $(DBLAS3)
+ $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(DBLAS1) $(ALLBLAS) $(DBLAS2) $(DBLAS3)
+ $(RANLIB) $(BLASLIB)
+
+complex: $(CBLAS1) $(CBLAS2) $(CBLAS3)
+ $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(CBLAS1) $(ALLBLAS) $(CBLAS2) $(CBLAS3)
+ $(RANLIB) $(BLASLIB)
+
+complex16: $(ZBLAS1) $(ZBLAS2) $(ZBLAS3)
+ $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(ZBLAS1) $(ALLBLAS) $(ZBLAS2) $(ZBLAS3)
+ $(RANLIB) $(BLASLIB)
+
+.c.o:
+ $(CC) $(CFLAGS) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
+
+clean:
+ rm -f *.o ../lib/libblas.a
diff --git a/CBLAS/caxpy.c b/SuperLU_5.2.0/CBLAS/caxpy.c
similarity index 100%
rename from CBLAS/caxpy.c
rename to SuperLU_5.2.0/CBLAS/caxpy.c
diff --git a/CBLAS/ccopy.c b/SuperLU_5.2.0/CBLAS/ccopy.c
similarity index 100%
rename from CBLAS/ccopy.c
rename to SuperLU_5.2.0/CBLAS/ccopy.c
diff --git a/CBLAS/cdotc.c b/SuperLU_5.2.0/CBLAS/cdotc.c
similarity index 100%
rename from CBLAS/cdotc.c
rename to SuperLU_5.2.0/CBLAS/cdotc.c
diff --git a/SuperLU_5.2.0/CBLAS/cgemv.c b/SuperLU_5.2.0/CBLAS/cgemv.c
new file mode 100644
index 0000000..44a01f0
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/cgemv.c
@@ -0,0 +1,394 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int cgemv_(char *trans, integer *m, integer *n, complex *
+ alpha, complex *a, integer *lda, complex *x, integer *incx, complex *
+ beta, complex *y, integer *incy)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ complex q__1, q__2, q__3;
+
+ /* Builtin functions */
+ void r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static integer info;
+ static complex temp;
+ static integer lenx, leny, i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+ static logical noconj;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ CGEMV performs one of the matrix-vector operations
+
+ y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y, or
+
+ y := alpha*conjg( A' )*x + beta*y,
+
+ where alpha and beta are scalars, x and y are vectors and A is an
+ m by n matrix.
+
+ Parameters
+ ==========
+
+ TRANS - CHARACTER*1.
+ 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*conjg( A' )*x + beta*y.
+
+ Unchanged on exit.
+
+ M - INTEGER.
+ On entry, M specifies the number of rows of the matrix A.
+ M must be at least zero.
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the number of columns of the matrix A.
+
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - COMPLEX array of DIMENSION ( LDA, n ).
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, m ).
+ Unchanged on exit.
+
+ X - 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.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - COMPLEX .
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - 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 - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+ Test the input parameters.
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1) != 0) {
+ info = 1;
+ } else if (*m < 0) {
+ info = 2;
+ } else if (*n < 0) {
+ info = 3;
+ } else if (*lda < max(1,*m)) {
+ info = 6;
+ } else if (*incx == 0) {
+ info = 8;
+ } else if (*incy == 0) {
+ info = 11;
+ }
+ if (info != 0) {
+ input_error("CGEMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*m == 0 || *n == 0 || alpha->r == 0.f && alpha->i == 0.f && (beta->r
+ == 1.f && beta->i == 0.f)) {
+ return 0;
+ }
+
+ noconj = (strncmp(trans, "T", 1)==0);
+
+/* Set LENX and LENY, the lengths of the vectors x and y, and set
+ up the start points in X and Y. */
+
+ if (strncmp(trans, "N", 1)==0) {
+ lenx = *n;
+ leny = *m;
+ } else {
+ lenx = *m;
+ leny = *n;
+ }
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (lenx - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (leny - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A.
+
+ First form y := beta*y. */
+
+ if (beta->r != 1.f || beta->i != 0.f) {
+ if (*incy == 1) {
+ if (beta->r == 0.f && beta->i == 0.f) {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ i__2 = i;
+ Y(i).r = 0.f, Y(i).i = 0.f;
+/* L10: */
+ }
+ } else {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ i__2 = i;
+ i__3 = i;
+ q__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
+ q__1.i = beta->r * Y(i).i + beta->i * Y(i)
+ .r;
+ Y(i).r = q__1.r, Y(i).i = q__1.i;
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (beta->r == 0.f && beta->i == 0.f) {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ i__2 = iy;
+ Y(iy).r = 0.f, Y(iy).i = 0.f;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ i__2 = iy;
+ i__3 = iy;
+ q__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
+ q__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
+ .r;
+ Y(iy).r = q__1.r, Y(iy).i = q__1.i;
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (alpha->r == 0.f && alpha->i == 0.f) {
+ return 0;
+ }
+ if (strncmp(trans, "N", 1)==0) {
+
+/* Form y := alpha*A*x + y. */
+
+ jx = kx;
+ if (*incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ if (X(jx).r != 0.f || X(jx).i != 0.f) {
+ i__2 = jx;
+ q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
+ q__1.i = alpha->r * X(jx).i + alpha->i * X(jx)
+ .r;
+ temp.r = q__1.r, temp.i = q__1.i;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ q__2.i = temp.r * A(i,j).i + temp.i * A(i,j)
+ .r;
+ q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i +
+ q__2.i;
+ Y(i).r = q__1.r, Y(i).i = q__1.i;
+/* L50: */
+ }
+ }
+ jx += *incx;
+/* L60: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ if (X(jx).r != 0.f || X(jx).i != 0.f) {
+ i__2 = jx;
+ q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
+ q__1.i = alpha->r * X(jx).i + alpha->i * X(jx)
+ .r;
+ temp.r = q__1.r, temp.i = q__1.i;
+ iy = ky;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ q__2.i = temp.r * A(i,j).i + temp.i * A(i,j)
+ .r;
+ q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i +
+ q__2.i;
+ Y(iy).r = q__1.r, Y(iy).i = q__1.i;
+ iy += *incy;
+/* L70: */
+ }
+ }
+ jx += *incx;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y := alpha*A'*x + y or y := alpha*conjg( A' )*x + y.
+ */
+
+ jy = ky;
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp.r = 0.f, temp.i = 0.f;
+ if (noconj) {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i;
+ q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i)
+ .i, q__2.i = A(i,j).r * X(i).i + A(i,j)
+ .i * X(i).r;
+ q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+/* L90: */
+ }
+ } else {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ r_cnjg(&q__3, &A(i,j));
+ i__3 = i;
+ q__2.r = q__3.r * X(i).r - q__3.i * X(i).i,
+ q__2.i = q__3.r * X(i).i + q__3.i * X(i)
+ .r;
+ q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+/* L100: */
+ }
+ }
+ i__2 = jy;
+ i__3 = jy;
+ q__2.r = alpha->r * temp.r - alpha->i * temp.i, q__2.i =
+ alpha->r * temp.i + alpha->i * temp.r;
+ q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
+ Y(jy).r = q__1.r, Y(jy).i = q__1.i;
+ jy += *incy;
+/* L110: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp.r = 0.f, temp.i = 0.f;
+ ix = kx;
+ if (noconj) {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = ix;
+ q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix)
+ .i, q__2.i = A(i,j).r * X(ix).i + A(i,j)
+ .i * X(ix).r;
+ q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+ ix += *incx;
+/* L120: */
+ }
+ } else {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ r_cnjg(&q__3, &A(i,j));
+ i__3 = ix;
+ q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i,
+ q__2.i = q__3.r * X(ix).i + q__3.i * X(ix)
+ .r;
+ q__1.r = temp.r + q__2.r, q__1.i = temp.i + q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+ ix += *incx;
+/* L130: */
+ }
+ }
+ i__2 = jy;
+ i__3 = jy;
+ q__2.r = alpha->r * temp.r - alpha->i * temp.i, q__2.i =
+ alpha->r * temp.i + alpha->i * temp.r;
+ q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
+ Y(jy).r = q__1.r, Y(jy).i = q__1.i;
+ jy += *incy;
+/* L140: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of CGEMV . */
+
+} /* cgemv_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/cgerc.c b/SuperLU_5.2.0/CBLAS/cgerc.c
new file mode 100644
index 0000000..cf40fa4
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/cgerc.c
@@ -0,0 +1,205 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Subroutine */ int cgerc_(integer *m, integer *n, complex *alpha, complex *
+ x, integer *incx, complex *y, integer *incy, complex *a, integer *lda)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ complex q__1, q__2;
+
+ /* Builtin functions */
+ void r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static integer info;
+ static complex temp;
+ static integer i, j, ix, jy, kx;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ CGERC performs the rank 1 operation
+
+ A := alpha*x*conjg( y' ) + A,
+
+ where alpha is a scalar, x is an m element vector, y is an n element
+
+ vector and A is an m by n matrix.
+
+ Parameters
+ ==========
+
+ M - INTEGER.
+ On entry, M specifies the number of rows of the matrix A.
+ M must be at least zero.
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the number of columns of the matrix A.
+
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ X - COMPLEX array of dimension at least
+ ( 1 + ( m - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the m
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ Y - COMPLEX array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y.
+ Unchanged on exit.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ A - COMPLEX array of DIMENSION ( LDA, n ).
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients. On exit, A is
+ overwritten by the updated matrix.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, m ).
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if (*m < 0) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*incx == 0) {
+ info = 5;
+ } else if (*incy == 0) {
+ info = 7;
+ } else if (*lda < max(1,*m)) {
+ info = 9;
+ }
+ if (info != 0) {
+ input_error("CGERC ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*m == 0 || *n == 0 || alpha->r == 0.f && alpha->i == 0.f) {
+ return 0;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+
+ if (*incy > 0) {
+ jy = 1;
+ } else {
+ jy = 1 - (*n - 1) * *incy;
+ }
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jy;
+ if (Y(jy).r != 0.f || Y(jy).i != 0.f) {
+ r_cnjg(&q__2, &Y(jy));
+ q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
+ alpha->r * q__2.i + alpha->i * q__2.r;
+ temp.r = q__1.r, temp.i = q__1.i;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = i;
+ q__2.r = X(i).r * temp.r - X(i).i * temp.i, q__2.i =
+ X(i).r * temp.i + X(i).i * temp.r;
+ q__1.r = A(i,j).r + q__2.r, q__1.i = A(i,j).i + q__2.i;
+ A(i,j).r = q__1.r, A(i,j).i = q__1.i;
+/* L10: */
+ }
+ }
+ jy += *incy;
+/* L20: */
+ }
+ } else {
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*m - 1) * *incx;
+ }
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jy;
+ if (Y(jy).r != 0.f || Y(jy).i != 0.f) {
+ r_cnjg(&q__2, &Y(jy));
+ q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
+ alpha->r * q__2.i + alpha->i * q__2.r;
+ temp.r = q__1.r, temp.i = q__1.i;
+ ix = kx;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = ix;
+ q__2.r = X(ix).r * temp.r - X(ix).i * temp.i, q__2.i =
+ X(ix).r * temp.i + X(ix).i * temp.r;
+ q__1.r = A(i,j).r + q__2.r, q__1.i = A(i,j).i + q__2.i;
+ A(i,j).r = q__1.r, A(i,j).i = q__1.i;
+ ix += *incx;
+/* L30: */
+ }
+ }
+ jy += *incy;
+/* L40: */
+ }
+ }
+
+ return 0;
+
+/* End of CGERC . */
+
+} /* cgerc_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/chemv.c b/SuperLU_5.2.0/CBLAS/chemv.c
new file mode 100644
index 0000000..a0d0871
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/chemv.c
@@ -0,0 +1,420 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int chemv_(char *uplo, integer *n, complex *alpha, complex *
+ a, integer *lda, complex *x, integer *incx, complex *beta, complex *y,
+ integer *incy)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ doublereal d__1;
+ complex q__1, q__2, q__3, q__4;
+
+ /* Builtin functions */
+ void r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static integer info;
+ static complex temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ CHEMV performs the matrix-vector operation
+
+ y := alpha*A*x + beta*y,
+
+ where alpha and beta are scalars, x and y are n element vectors and
+ A is an n by n hermitian matrix.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - COMPLEX array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the hermitian matrix and the strictly
+ lower triangular part of A is not referenced.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the hermitian matrix and the strictly
+ upper triangular part of A is not referenced.
+ Note that the imaginary parts of the diagonal elements need
+
+ not be set and are assumed to be zero.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+ X - COMPLEX array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the n
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - COMPLEX .
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - COMPLEX array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y. On exit, Y is overwritten by the updated
+ vector y.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*lda < max(1,*n)) {
+ info = 5;
+ } else if (*incx == 0) {
+ info = 7;
+ } else if (*incy == 0) {
+ info = 10;
+ }
+ if (info != 0) {
+ input_error("CHEMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || alpha->r == 0.f && alpha->i == 0.f && (beta->r == 1.f &&
+ beta->i == 0.f)) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y. */
+
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A.
+
+ First form y := beta*y. */
+
+ if (beta->r != 1.f || beta->i != 0.f) {
+ if (*incy == 1) {
+ if (beta->r == 0.f && beta->i == 0.f) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ Y(i).r = 0.f, Y(i).i = 0.f;
+/* L10: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ i__3 = i;
+ q__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
+ q__1.i = beta->r * Y(i).i + beta->i * Y(i)
+ .r;
+ Y(i).r = q__1.r, Y(i).i = q__1.i;
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (beta->r == 0.f && beta->i == 0.f) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = iy;
+ Y(iy).r = 0.f, Y(iy).i = 0.f;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = iy;
+ i__3 = iy;
+ q__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
+ q__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
+ .r;
+ Y(iy).r = q__1.r, Y(iy).i = q__1.i;
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (alpha->r == 0.f && alpha->i == 0.f) {
+ return 0;
+ }
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form y when A is stored in upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ q__1.r = alpha->r * X(j).r - alpha->i * X(j).i, q__1.i =
+ alpha->r * X(j).i + alpha->i * X(j).r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ temp2.r = 0.f, temp2.i = 0.f;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i + q__2.i;
+ Y(i).r = q__1.r, Y(i).i = q__1.i;
+ r_cnjg(&q__3, &A(i,j));
+ i__3 = i;
+ q__2.r = q__3.r * X(i).r - q__3.i * X(i).i, q__2.i =
+ q__3.r * X(i).i + q__3.i * X(i).r;
+ q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
+ temp2.r = q__1.r, temp2.i = q__1.i;
+/* L50: */
+ }
+ i__2 = j;
+ i__3 = j;
+ i__4 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ q__3.r = d__1 * temp1.r, q__3.i = d__1 * temp1.i;
+ q__2.r = Y(j).r + q__3.r, q__2.i = Y(j).i + q__3.i;
+ q__4.r = alpha->r * temp2.r - alpha->i * temp2.i, q__4.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
+ Y(j).r = q__1.r, Y(j).i = q__1.i;
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, q__1.i =
+ alpha->r * X(jx).i + alpha->i * X(jx).r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ temp2.r = 0.f, temp2.i = 0.f;
+ ix = kx;
+ iy = ky;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i + q__2.i;
+ Y(iy).r = q__1.r, Y(iy).i = q__1.i;
+ r_cnjg(&q__3, &A(i,j));
+ i__3 = ix;
+ q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i, q__2.i =
+ q__3.r * X(ix).i + q__3.i * X(ix).r;
+ q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
+ temp2.r = q__1.r, temp2.i = q__1.i;
+ ix += *incx;
+ iy += *incy;
+/* L70: */
+ }
+ i__2 = jy;
+ i__3 = jy;
+ i__4 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ q__3.r = d__1 * temp1.r, q__3.i = d__1 * temp1.i;
+ q__2.r = Y(jy).r + q__3.r, q__2.i = Y(jy).i + q__3.i;
+ q__4.r = alpha->r * temp2.r - alpha->i * temp2.i, q__4.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
+ Y(jy).r = q__1.r, Y(jy).i = q__1.i;
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y when A is stored in lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ q__1.r = alpha->r * X(j).r - alpha->i * X(j).i, q__1.i =
+ alpha->r * X(j).i + alpha->i * X(j).r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ temp2.r = 0.f, temp2.i = 0.f;
+ i__2 = j;
+ i__3 = j;
+ i__4 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ q__2.r = d__1 * temp1.r, q__2.i = d__1 * temp1.i;
+ q__1.r = Y(j).r + q__2.r, q__1.i = Y(j).i + q__2.i;
+ Y(j).r = q__1.r, Y(j).i = q__1.i;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i + q__2.i;
+ Y(i).r = q__1.r, Y(i).i = q__1.i;
+ r_cnjg(&q__3, &A(i,j));
+ i__3 = i;
+ q__2.r = q__3.r * X(i).r - q__3.i * X(i).i, q__2.i =
+ q__3.r * X(i).i + q__3.i * X(i).r;
+ q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
+ temp2.r = q__1.r, temp2.i = q__1.i;
+/* L90: */
+ }
+ i__2 = j;
+ i__3 = j;
+ q__2.r = alpha->r * temp2.r - alpha->i * temp2.i, q__2.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ q__1.r = Y(j).r + q__2.r, q__1.i = Y(j).i + q__2.i;
+ Y(j).r = q__1.r, Y(j).i = q__1.i;
+/* L100: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, q__1.i =
+ alpha->r * X(jx).i + alpha->i * X(jx).r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ temp2.r = 0.f, temp2.i = 0.f;
+ i__2 = jy;
+ i__3 = jy;
+ i__4 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ q__2.r = d__1 * temp1.r, q__2.i = d__1 * temp1.i;
+ q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
+ Y(jy).r = q__1.r, Y(jy).i = q__1.i;
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ iy += *incy;
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i + q__2.i;
+ Y(iy).r = q__1.r, Y(iy).i = q__1.i;
+ r_cnjg(&q__3, &A(i,j));
+ i__3 = ix;
+ q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i, q__2.i =
+ q__3.r * X(ix).i + q__3.i * X(ix).r;
+ q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
+ temp2.r = q__1.r, temp2.i = q__1.i;
+/* L110: */
+ }
+ i__2 = jy;
+ i__3 = jy;
+ q__2.r = alpha->r * temp2.r - alpha->i * temp2.i, q__2.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
+ Y(jy).r = q__1.r, Y(jy).i = q__1.i;
+ jx += *incx;
+ jy += *incy;
+/* L120: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of CHEMV . */
+
+} /* chemv_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/cher2.c b/SuperLU_5.2.0/CBLAS/cher2.c
new file mode 100644
index 0000000..3b894e1
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/cher2.c
@@ -0,0 +1,435 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int cher2_(char *uplo, integer *n, complex *alpha, complex *
+ x, integer *incx, complex *y, integer *incy, complex *a, integer *lda)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
+ doublereal d__1;
+ complex q__1, q__2, q__3, q__4;
+
+ /* Builtin functions */
+ void r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static integer info;
+ static complex temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ CHER2 performs the hermitian rank 2 operation
+
+ A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + A,
+
+ where alpha is a scalar, x and y are n element vectors and A is an n
+
+ by n hermitian matrix.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ X - COMPLEX array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the n
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ Y - COMPLEX array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y.
+ Unchanged on exit.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ A - COMPLEX array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the hermitian matrix and the strictly
+ lower triangular part of A is not referenced. On exit, the
+ upper triangular part of the array A is overwritten by the
+ upper triangular part of the updated matrix.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the hermitian matrix and the strictly
+ upper triangular part of A is not referenced. On exit, the
+ lower triangular part of the array A is overwritten by the
+ lower triangular part of the updated matrix.
+ Note that the imaginary parts of the diagonal elements need
+
+ not be set, they are assumed to be zero, and on exit they
+ are set to zero.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*incx == 0) {
+ info = 5;
+ } else if (*incy == 0) {
+ info = 7;
+ } else if (*lda < max(1,*n)) {
+ info = 9;
+ }
+ if (info != 0) {
+ input_error("CHER2 ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || alpha->r == 0.f && alpha->i == 0.f) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y if the increments are not both
+
+ unity. */
+
+ if (*incx != 1 || *incy != 1) {
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+ jx = kx;
+ jy = ky;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form A when A is stored in the upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ i__3 = j;
+ if (X(j).r != 0.f || X(j).i != 0.f || (Y(j).r != 0.f
+ || Y(j).i != 0.f)) {
+ r_cnjg(&q__2, &Y(j));
+ q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
+ alpha->r * q__2.i + alpha->i * q__2.r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ i__2 = j;
+ q__2.r = alpha->r * X(j).r - alpha->i * X(j).i,
+ q__2.i = alpha->r * X(j).i + alpha->i * X(j)
+ .r;
+ r_cnjg(&q__1, &q__2);
+ temp2.r = q__1.r, temp2.i = q__1.i;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = i;
+ q__3.r = X(i).r * temp1.r - X(i).i * temp1.i,
+ q__3.i = X(i).r * temp1.i + X(i).i *
+ temp1.r;
+ q__2.r = A(i,j).r + q__3.r, q__2.i = A(i,j).i +
+ q__3.i;
+ i__6 = i;
+ q__4.r = Y(i).r * temp2.r - Y(i).i * temp2.i,
+ q__4.i = Y(i).r * temp2.i + Y(i).i *
+ temp2.r;
+ q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
+ A(i,j).r = q__1.r, A(i,j).i = q__1.i;
+/* L10: */
+ }
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ i__4 = j;
+ q__2.r = X(j).r * temp1.r - X(j).i * temp1.i,
+ q__2.i = X(j).r * temp1.i + X(j).i *
+ temp1.r;
+ i__5 = j;
+ q__3.r = Y(j).r * temp2.r - Y(j).i * temp2.i,
+ q__3.i = Y(j).r * temp2.i + Y(j).i *
+ temp2.r;
+ q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
+ d__1 = A(j,j).r + q__1.r;
+ A(j,j).r = d__1, A(j,j).i = 0.f;
+ } else {
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ A(j,j).r = d__1, A(j,j).i = 0.f;
+ }
+/* L20: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ i__3 = jy;
+ if (X(jx).r != 0.f || X(jx).i != 0.f || (Y(jy).r != 0.f
+ || Y(jy).i != 0.f)) {
+ r_cnjg(&q__2, &Y(jy));
+ q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
+ alpha->r * q__2.i + alpha->i * q__2.r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ i__2 = jx;
+ q__2.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
+ q__2.i = alpha->r * X(jx).i + alpha->i * X(jx)
+ .r;
+ r_cnjg(&q__1, &q__2);
+ temp2.r = q__1.r, temp2.i = q__1.i;
+ ix = kx;
+ iy = ky;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = ix;
+ q__3.r = X(ix).r * temp1.r - X(ix).i * temp1.i,
+ q__3.i = X(ix).r * temp1.i + X(ix).i *
+ temp1.r;
+ q__2.r = A(i,j).r + q__3.r, q__2.i = A(i,j).i +
+ q__3.i;
+ i__6 = iy;
+ q__4.r = Y(iy).r * temp2.r - Y(iy).i * temp2.i,
+ q__4.i = Y(iy).r * temp2.i + Y(iy).i *
+ temp2.r;
+ q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
+ A(i,j).r = q__1.r, A(i,j).i = q__1.i;
+ ix += *incx;
+ iy += *incy;
+/* L30: */
+ }
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ i__4 = jx;
+ q__2.r = X(jx).r * temp1.r - X(jx).i * temp1.i,
+ q__2.i = X(jx).r * temp1.i + X(jx).i *
+ temp1.r;
+ i__5 = jy;
+ q__3.r = Y(jy).r * temp2.r - Y(jy).i * temp2.i,
+ q__3.i = Y(jy).r * temp2.i + Y(jy).i *
+ temp2.r;
+ q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
+ d__1 = A(j,j).r + q__1.r;
+ A(j,j).r = d__1, A(j,j).i = 0.f;
+ } else {
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ A(j,j).r = d__1, A(j,j).i = 0.f;
+ }
+ jx += *incx;
+ jy += *incy;
+/* L40: */
+ }
+ }
+ } else {
+
+/* Form A when A is stored in the lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ i__3 = j;
+ if (X(j).r != 0.f || X(j).i != 0.f || (Y(j).r != 0.f
+ || Y(j).i != 0.f)) {
+ r_cnjg(&q__2, &Y(j));
+ q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
+ alpha->r * q__2.i + alpha->i * q__2.r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ i__2 = j;
+ q__2.r = alpha->r * X(j).r - alpha->i * X(j).i,
+ q__2.i = alpha->r * X(j).i + alpha->i * X(j)
+ .r;
+ r_cnjg(&q__1, &q__2);
+ temp2.r = q__1.r, temp2.i = q__1.i;
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ i__4 = j;
+ q__2.r = X(j).r * temp1.r - X(j).i * temp1.i,
+ q__2.i = X(j).r * temp1.i + X(j).i *
+ temp1.r;
+ i__5 = j;
+ q__3.r = Y(j).r * temp2.r - Y(j).i * temp2.i,
+ q__3.i = Y(j).r * temp2.i + Y(j).i *
+ temp2.r;
+ q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
+ d__1 = A(j,j).r + q__1.r;
+ A(j,j).r = d__1, A(j,j).i = 0.f;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = i;
+ q__3.r = X(i).r * temp1.r - X(i).i * temp1.i,
+ q__3.i = X(i).r * temp1.i + X(i).i *
+ temp1.r;
+ q__2.r = A(i,j).r + q__3.r, q__2.i = A(i,j).i +
+ q__3.i;
+ i__6 = i;
+ q__4.r = Y(i).r * temp2.r - Y(i).i * temp2.i,
+ q__4.i = Y(i).r * temp2.i + Y(i).i *
+ temp2.r;
+ q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
+ A(i,j).r = q__1.r, A(i,j).i = q__1.i;
+/* L50: */
+ }
+ } else {
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ A(j,j).r = d__1, A(j,j).i = 0.f;
+ }
+/* L60: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ i__3 = jy;
+ if (X(jx).r != 0.f || X(jx).i != 0.f || (Y(jy).r != 0.f
+ || Y(jy).i != 0.f)) {
+ r_cnjg(&q__2, &Y(jy));
+ q__1.r = alpha->r * q__2.r - alpha->i * q__2.i, q__1.i =
+ alpha->r * q__2.i + alpha->i * q__2.r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ i__2 = jx;
+ q__2.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
+ q__2.i = alpha->r * X(jx).i + alpha->i * X(jx)
+ .r;
+ r_cnjg(&q__1, &q__2);
+ temp2.r = q__1.r, temp2.i = q__1.i;
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ i__4 = jx;
+ q__2.r = X(jx).r * temp1.r - X(jx).i * temp1.i,
+ q__2.i = X(jx).r * temp1.i + X(jx).i *
+ temp1.r;
+ i__5 = jy;
+ q__3.r = Y(jy).r * temp2.r - Y(jy).i * temp2.i,
+ q__3.i = Y(jy).r * temp2.i + Y(jy).i *
+ temp2.r;
+ q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
+ d__1 = A(j,j).r + q__1.r;
+ A(j,j).r = d__1, A(j,j).i = 0.f;
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ iy += *incy;
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = ix;
+ q__3.r = X(ix).r * temp1.r - X(ix).i * temp1.i,
+ q__3.i = X(ix).r * temp1.i + X(ix).i *
+ temp1.r;
+ q__2.r = A(i,j).r + q__3.r, q__2.i = A(i,j).i +
+ q__3.i;
+ i__6 = iy;
+ q__4.r = Y(iy).r * temp2.r - Y(iy).i * temp2.i,
+ q__4.i = Y(iy).r * temp2.i + Y(iy).i *
+ temp2.r;
+ q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
+ A(i,j).r = q__1.r, A(i,j).i = q__1.i;
+/* L70: */
+ }
+ } else {
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ A(j,j).r = d__1, A(j,j).i = 0.f;
+ }
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of CHER2 . */
+
+} /* cher2_ */
+
diff --git a/CBLAS/cscal.c b/SuperLU_5.2.0/CBLAS/cscal.c
similarity index 100%
rename from CBLAS/cscal.c
rename to SuperLU_5.2.0/CBLAS/cscal.c
diff --git a/CBLAS/cswap.c b/SuperLU_5.2.0/CBLAS/cswap.c
similarity index 100%
rename from CBLAS/cswap.c
rename to SuperLU_5.2.0/CBLAS/cswap.c
diff --git a/SuperLU_5.2.0/CBLAS/ctrsv.c b/SuperLU_5.2.0/CBLAS/ctrsv.c
new file mode 100644
index 0000000..ebb61f5
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/ctrsv.c
@@ -0,0 +1,508 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int ctrsv_(char *uplo, char *trans, char *diag, integer *n,
+ complex *a, integer *lda, complex *x, integer *incx)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ complex q__1, q__2, q__3;
+
+ /* Builtin functions */
+ void c_div(complex *, complex *, complex *), r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static integer info;
+ static complex temp;
+ static integer i, j;
+ static integer ix, jx, kx;
+ static logical noconj, nounit;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ CTRSV solves one of the systems of equations
+
+ A*x = b, or A'*x = b, or conjg( A' )*x = b,
+
+ where b and x are n element vectors and A is an n by n 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.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ TRANS - CHARACTER*1.
+ 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' conjg( A' )*x = b.
+
+ Unchanged on exit.
+
+ DIAG - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ A - COMPLEX array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular matrix and the strictly lower triangular part of
+
+ A is not referenced.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular matrix and the strictly upper triangular part of
+
+ A is not referenced.
+ Note that when DIAG = 'U' or 'u', the diagonal elements of
+
+ A are not referenced either, but are assumed to be unity.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+ X - COMPLEX array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ 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.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0 ) {
+ info = 2;
+ } else if ( strncmp(diag, "U", 1)!=0 && strncmp(diag, "N", 1)!=0 ) {
+ info = 3;
+ } else if (*n < 0) {
+ info = 4;
+ } else if (*lda < max(1,*n)) {
+ info = 6;
+ } else if (*incx == 0) {
+ info = 8;
+ }
+ if (info != 0) {
+ input_error("CTRSV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0) {
+ return 0;
+ }
+
+ noconj = (strncmp(trans, "T", 1)==0);
+ nounit = (strncmp(diag, "N", 1)==0);
+
+/* Set up the start point in X if the increment is not unity. This
+ will be ( N - 1 )*INCX too small for descending loops. */
+
+ if (*incx <= 0) {
+ kx = 1 - (*n - 1) * *incx;
+ } else if (*incx != 1) {
+ kx = 1;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+
+ if (strncmp(trans, "N", 1)==0) {
+
+/* Form x := inv( A )*x. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+ if (*incx == 1) {
+ for (j = *n; j >= 1; --j) {
+ i__1 = j;
+ if (X(j).r != 0.f || X(j).i != 0.f) {
+ if (nounit) {
+ i__1 = j;
+ c_div(&q__1, &X(j), &A(j,j));
+ X(j).r = q__1.r, X(j).i = q__1.i;
+ }
+ i__1 = j;
+ temp.r = X(j).r, temp.i = X(j).i;
+ for (i = j - 1; i >= 1; --i) {
+ i__1 = i;
+ i__2 = i;
+ i__3 = i + j * a_dim1;
+ q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ q__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
+ q__1.r = X(i).r - q__2.r, q__1.i = X(i).i -
+ q__2.i;
+ X(i).r = q__1.r, X(i).i = q__1.i;
+/* L10: */
+ }
+ }
+/* L20: */
+ }
+ } else {
+ jx = kx + (*n - 1) * *incx;
+ for (j = *n; j >= 1; --j) {
+ i__1 = jx;
+ if (X(jx).r != 0.f || X(jx).i != 0.f) {
+ if (nounit) {
+ i__1 = jx;
+ c_div(&q__1, &X(jx), &A(j,j));
+ X(jx).r = q__1.r, X(jx).i = q__1.i;
+ }
+ i__1 = jx;
+ temp.r = X(jx).r, temp.i = X(jx).i;
+ ix = jx;
+ for (i = j - 1; i >= 1; --i) {
+ ix -= *incx;
+ i__1 = ix;
+ i__2 = ix;
+ i__3 = i + j * a_dim1;
+ q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ q__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
+ q__1.r = X(ix).r - q__2.r, q__1.i = X(ix).i -
+ q__2.i;
+ X(ix).r = q__1.r, X(ix).i = q__1.i;
+/* L30: */
+ }
+ }
+ jx -= *incx;
+/* L40: */
+ }
+ }
+ } else {
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ if (X(j).r != 0.f || X(j).i != 0.f) {
+ if (nounit) {
+ i__2 = j;
+ c_div(&q__1, &X(j), &A(j,j));
+ X(j).r = q__1.r, X(j).i = q__1.i;
+ }
+ i__2 = j;
+ temp.r = X(j).r, temp.i = X(j).i;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ q__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
+ q__1.r = X(i).r - q__2.r, q__1.i = X(i).i -
+ q__2.i;
+ X(i).r = q__1.r, X(i).i = q__1.i;
+/* L50: */
+ }
+ }
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ if (X(jx).r != 0.f || X(jx).i != 0.f) {
+ if (nounit) {
+ i__2 = jx;
+ c_div(&q__1, &X(jx), &A(j,j));
+ X(jx).r = q__1.r, X(jx).i = q__1.i;
+ }
+ i__2 = jx;
+ temp.r = X(jx).r, temp.i = X(jx).i;
+ ix = jx;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ i__3 = ix;
+ i__4 = ix;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ q__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
+ q__1.r = X(ix).r - q__2.r, q__1.i = X(ix).i -
+ q__2.i;
+ X(ix).r = q__1.r, X(ix).i = q__1.i;
+/* L70: */
+ }
+ }
+ jx += *incx;
+/* L80: */
+ }
+ }
+ }
+ } else {
+
+/* Form x := inv( A' )*x or x := inv( conjg( A' ) )*x. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ temp.r = X(j).r, temp.i = X(j).i;
+ if (noconj) {
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i;
+ q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(
+ i).i, q__2.i = A(i,j).r * X(i).i +
+ A(i,j).i * X(i).r;
+ q__1.r = temp.r - q__2.r, q__1.i = temp.i -
+ q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+/* L90: */
+ }
+ if (nounit) {
+ c_div(&q__1, &temp, &A(j,j));
+ temp.r = q__1.r, temp.i = q__1.i;
+ }
+ } else {
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ r_cnjg(&q__3, &A(i,j));
+ i__3 = i;
+ q__2.r = q__3.r * X(i).r - q__3.i * X(i).i,
+ q__2.i = q__3.r * X(i).i + q__3.i * X(
+ i).r;
+ q__1.r = temp.r - q__2.r, q__1.i = temp.i -
+ q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+/* L100: */
+ }
+ if (nounit) {
+ r_cnjg(&q__2, &A(j,j));
+ c_div(&q__1, &temp, &q__2);
+ temp.r = q__1.r, temp.i = q__1.i;
+ }
+ }
+ i__2 = j;
+ X(j).r = temp.r, X(j).i = temp.i;
+/* L110: */
+ }
+ } else {
+ jx = kx;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ ix = kx;
+ i__2 = jx;
+ temp.r = X(jx).r, temp.i = X(jx).i;
+ if (noconj) {
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = ix;
+ q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(
+ ix).i, q__2.i = A(i,j).r * X(ix).i +
+ A(i,j).i * X(ix).r;
+ q__1.r = temp.r - q__2.r, q__1.i = temp.i -
+ q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+ ix += *incx;
+/* L120: */
+ }
+ if (nounit) {
+ c_div(&q__1, &temp, &A(j,j));
+ temp.r = q__1.r, temp.i = q__1.i;
+ }
+ } else {
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ r_cnjg(&q__3, &A(i,j));
+ i__3 = ix;
+ q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i,
+ q__2.i = q__3.r * X(ix).i + q__3.i * X(
+ ix).r;
+ q__1.r = temp.r - q__2.r, q__1.i = temp.i -
+ q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+ ix += *incx;
+/* L130: */
+ }
+ if (nounit) {
+ r_cnjg(&q__2, &A(j,j));
+ c_div(&q__1, &temp, &q__2);
+ temp.r = q__1.r, temp.i = q__1.i;
+ }
+ }
+ i__2 = jx;
+ X(jx).r = temp.r, X(jx).i = temp.i;
+ jx += *incx;
+/* L140: */
+ }
+ }
+ } else {
+ if (*incx == 1) {
+ for (j = *n; j >= 1; --j) {
+ i__1 = j;
+ temp.r = X(j).r, temp.i = X(j).i;
+ if (noconj) {
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ i__2 = i + j * a_dim1;
+ i__3 = i;
+ q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(
+ i).i, q__2.i = A(i,j).r * X(i).i +
+ A(i,j).i * X(i).r;
+ q__1.r = temp.r - q__2.r, q__1.i = temp.i -
+ q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+/* L150: */
+ }
+ if (nounit) {
+ c_div(&q__1, &temp, &A(j,j));
+ temp.r = q__1.r, temp.i = q__1.i;
+ }
+ } else {
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ r_cnjg(&q__3, &A(i,j));
+ i__2 = i;
+ q__2.r = q__3.r * X(i).r - q__3.i * X(i).i,
+ q__2.i = q__3.r * X(i).i + q__3.i * X(
+ i).r;
+ q__1.r = temp.r - q__2.r, q__1.i = temp.i -
+ q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+/* L160: */
+ }
+ if (nounit) {
+ r_cnjg(&q__2, &A(j,j));
+ c_div(&q__1, &temp, &q__2);
+ temp.r = q__1.r, temp.i = q__1.i;
+ }
+ }
+ i__1 = j;
+ X(j).r = temp.r, X(j).i = temp.i;
+/* L170: */
+ }
+ } else {
+ kx += (*n - 1) * *incx;
+ jx = kx;
+ for (j = *n; j >= 1; --j) {
+ ix = kx;
+ i__1 = jx;
+ temp.r = X(jx).r, temp.i = X(jx).i;
+ if (noconj) {
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ i__2 = i + j * a_dim1;
+ i__3 = ix;
+ q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(
+ ix).i, q__2.i = A(i,j).r * X(ix).i +
+ A(i,j).i * X(ix).r;
+ q__1.r = temp.r - q__2.r, q__1.i = temp.i -
+ q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+ ix -= *incx;
+/* L180: */
+ }
+ if (nounit) {
+ c_div(&q__1, &temp, &A(j,j));
+ temp.r = q__1.r, temp.i = q__1.i;
+ }
+ } else {
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ r_cnjg(&q__3, &A(i,j));
+ i__2 = ix;
+ q__2.r = q__3.r * X(ix).r - q__3.i * X(ix).i,
+ q__2.i = q__3.r * X(ix).i + q__3.i * X(
+ ix).r;
+ q__1.r = temp.r - q__2.r, q__1.i = temp.i -
+ q__2.i;
+ temp.r = q__1.r, temp.i = q__1.i;
+ ix -= *incx;
+/* L190: */
+ }
+ if (nounit) {
+ r_cnjg(&q__2, &A(j,j));
+ c_div(&q__1, &temp, &q__2);
+ temp.r = q__1.r, temp.i = q__1.i;
+ }
+ }
+ i__1 = jx;
+ X(jx).r = temp.r, X(jx).i = temp.i;
+ jx -= *incx;
+/* L200: */
+ }
+ }
+ }
+ }
+
+ return 0;
+
+/* End of CTRSV . */
+
+} /* ctrsv_ */
+
diff --git a/CBLAS/dasum.c b/SuperLU_5.2.0/CBLAS/dasum.c
similarity index 100%
rename from CBLAS/dasum.c
rename to SuperLU_5.2.0/CBLAS/dasum.c
diff --git a/CBLAS/daxpy.c b/SuperLU_5.2.0/CBLAS/daxpy.c
similarity index 100%
rename from CBLAS/daxpy.c
rename to SuperLU_5.2.0/CBLAS/daxpy.c
diff --git a/CBLAS/dcabs1.c b/SuperLU_5.2.0/CBLAS/dcabs1.c
similarity index 100%
rename from CBLAS/dcabs1.c
rename to SuperLU_5.2.0/CBLAS/dcabs1.c
diff --git a/CBLAS/dcopy.c b/SuperLU_5.2.0/CBLAS/dcopy.c
similarity index 100%
rename from CBLAS/dcopy.c
rename to SuperLU_5.2.0/CBLAS/dcopy.c
diff --git a/CBLAS/ddot.c b/SuperLU_5.2.0/CBLAS/ddot.c
similarity index 100%
rename from CBLAS/ddot.c
rename to SuperLU_5.2.0/CBLAS/ddot.c
diff --git a/SuperLU_5.2.0/CBLAS/dgemv.c b/SuperLU_5.2.0/CBLAS/dgemv.c
new file mode 100644
index 0000000..9afef69
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/dgemv.c
@@ -0,0 +1,295 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int dgemv_(char *trans, integer *m, integer *n, doublereal *
+ alpha, doublereal *a, integer *lda, doublereal *x, integer *incx,
+ doublereal *beta, doublereal *y, integer *incy)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static doublereal temp;
+ static integer lenx, leny, i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ 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 an
+ m by n matrix.
+
+ Parameters
+ ==========
+
+ TRANS - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ M - INTEGER.
+ On entry, M specifies the number of rows of the matrix A.
+ M must be at least zero.
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the number of columns of the matrix A.
+
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - DOUBLE PRECISION.
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, m ).
+ Unchanged on exit.
+
+ X - DOUBLE PRECISION 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.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - DOUBLE PRECISION.
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - DOUBLE PRECISION 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 - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+ Test the input parameters.
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)==0 ) {
+ info = 1;
+ } else if (*m < 0) {
+ info = 2;
+ } else if (*n < 0) {
+ info = 3;
+ } else if (*lda < max(1,*m)) {
+ info = 6;
+ } else if (*incx == 0) {
+ info = 8;
+ } else if (*incy == 0) {
+ info = 11;
+ }
+ if (info != 0) {
+ input_error("DGEMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*m == 0 || *n == 0 || *alpha == 0. && *beta == 1.) {
+ return 0;
+ }
+
+/* Set LENX and LENY, the lengths of the vectors x and y, and set
+
+ up the start points in X and Y. */
+
+ if (strncmp(trans, "N", 1)==0) {
+ lenx = *n;
+ leny = *m;
+ } else {
+ lenx = *m;
+ leny = *n;
+ }
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (lenx - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (leny - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A.
+
+ First form y := beta*y. */
+
+ if (*beta != 1.) {
+ if (*incy == 1) {
+ if (*beta == 0.) {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ Y(i) = 0.;
+/* L10: */
+ }
+ } else {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ Y(i) = *beta * Y(i);
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (*beta == 0.) {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ Y(iy) = 0.;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ Y(iy) = *beta * Y(iy);
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (*alpha == 0.) {
+ return 0;
+ }
+ if (strncmp(trans, "N", 1)==0) {
+
+/* Form y := alpha*A*x + y. */
+
+ jx = kx;
+ if (*incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0.) {
+ temp = *alpha * X(jx);
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ Y(i) += temp * A(i,j);
+/* L50: */
+ }
+ }
+ jx += *incx;
+/* L60: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0.) {
+ temp = *alpha * X(jx);
+ iy = ky;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ Y(iy) += temp * A(i,j);
+ iy += *incy;
+/* L70: */
+ }
+ }
+ jx += *incx;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y := alpha*A'*x + y. */
+
+ jy = ky;
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp = 0.;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ temp += A(i,j) * X(i);
+/* L90: */
+ }
+ Y(jy) += *alpha * temp;
+ jy += *incy;
+/* L100: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp = 0.;
+ ix = kx;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ temp += A(i,j) * X(ix);
+ ix += *incx;
+/* L110: */
+ }
+ Y(jy) += *alpha * temp;
+ jy += *incy;
+/* L120: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of DGEMV . */
+
+} /* dgemv_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/dger.c b/SuperLU_5.2.0/CBLAS/dger.c
new file mode 100644
index 0000000..c68ccac
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/dger.c
@@ -0,0 +1,180 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Subroutine */ int dger_(integer *m, integer *n, doublereal *alpha,
+ doublereal *x, integer *incx, doublereal *y, integer *incy,
+ doublereal *a, integer *lda)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static doublereal temp;
+ static integer i, j, ix, jy, kx;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ DGER performs the rank 1 operation
+
+ A := alpha*x*y' + A,
+
+ where alpha is a scalar, x is an m element vector, y is an n element
+
+ vector and A is an m by n matrix.
+
+ Parameters
+ ==========
+
+ M - INTEGER.
+ On entry, M specifies the number of rows of the matrix A.
+ M must be at least zero.
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the number of columns of the matrix A.
+
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - DOUBLE PRECISION.
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ X - DOUBLE PRECISION array of dimension at least
+ ( 1 + ( m - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the m
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ Y - DOUBLE PRECISION array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y.
+ Unchanged on exit.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients. On exit, A is
+ overwritten by the updated matrix.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, m ).
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+ Test the input parameters.
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if (*m < 0) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*incx == 0) {
+ info = 5;
+ } else if (*incy == 0) {
+ info = 7;
+ } else if (*lda < max(1,*m)) {
+ info = 9;
+ }
+ if (info != 0) {
+ input_error("DGER ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*m == 0 || *n == 0 || *alpha == 0.) {
+ return 0;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+
+ if (*incy > 0) {
+ jy = 1;
+ } else {
+ jy = 1 - (*n - 1) * *incy;
+ }
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (Y(jy) != 0.) {
+ temp = *alpha * Y(jy);
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ A(i,j) += X(i) * temp;
+/* L10: */
+ }
+ }
+ jy += *incy;
+/* L20: */
+ }
+ } else {
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*m - 1) * *incx;
+ }
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (Y(jy) != 0.) {
+ temp = *alpha * Y(jy);
+ ix = kx;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ A(i,j) += X(ix) * temp;
+ ix += *incx;
+/* L30: */
+ }
+ }
+ jy += *incy;
+/* L40: */
+ }
+ }
+
+ return 0;
+
+/* End of DGER . */
+
+} /* dger_ */
+
diff --git a/CBLAS/dnrm2.c b/SuperLU_5.2.0/CBLAS/dnrm2.c
similarity index 100%
rename from CBLAS/dnrm2.c
rename to SuperLU_5.2.0/CBLAS/dnrm2.c
diff --git a/CBLAS/drot.c b/SuperLU_5.2.0/CBLAS/drot.c
similarity index 100%
rename from CBLAS/drot.c
rename to SuperLU_5.2.0/CBLAS/drot.c
diff --git a/CBLAS/dscal.c b/SuperLU_5.2.0/CBLAS/dscal.c
similarity index 100%
rename from CBLAS/dscal.c
rename to SuperLU_5.2.0/CBLAS/dscal.c
diff --git a/CBLAS/dswap.c b/SuperLU_5.2.0/CBLAS/dswap.c
similarity index 100%
rename from CBLAS/dswap.c
rename to SuperLU_5.2.0/CBLAS/dswap.c
diff --git a/SuperLU_5.2.0/CBLAS/dsymv.c b/SuperLU_5.2.0/CBLAS/dsymv.c
new file mode 100644
index 0000000..25eb049
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/dsymv.c
@@ -0,0 +1,299 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int dsymv_(char *uplo, integer *n, doublereal *alpha,
+ doublereal *a, integer *lda, doublereal *x, integer *incx, doublereal
+ *beta, doublereal *y, integer *incy)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static doublereal temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ DSYMV performs the matrix-vector operation
+
+ y := alpha*A*x + beta*y,
+
+ where alpha and beta are scalars, x and y are n element vectors and
+ A is an n by n symmetric matrix.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - DOUBLE PRECISION.
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the symmetric matrix and the strictly
+ lower triangular part of A is not referenced.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the symmetric matrix and the strictly
+ upper triangular part of A is not referenced.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+ X - DOUBLE PRECISION array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the n
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - DOUBLE PRECISION.
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - DOUBLE PRECISION array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y. On exit, Y is overwritten by the updated
+ vector y.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*lda < max(1,*n)) {
+ info = 5;
+ } else if (*incx == 0) {
+ info = 7;
+ } else if (*incy == 0) {
+ info = 10;
+ }
+ if (info != 0) {
+ input_error("DSYMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || *alpha == 0. && *beta == 1.) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y. */
+
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A.
+
+ First form y := beta*y. */
+
+ if (*beta != 1.) {
+ if (*incy == 1) {
+ if (*beta == 0.) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ Y(i) = 0.;
+/* L10: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ Y(i) = *beta * Y(i);
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (*beta == 0.) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ Y(iy) = 0.;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ Y(iy) = *beta * Y(iy);
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (*alpha == 0.) {
+ return 0;
+ }
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form y when A is stored in upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp1 = *alpha * X(j);
+ temp2 = 0.;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ Y(i) += temp1 * A(i,j);
+ temp2 += A(i,j) * X(i);
+/* L50: */
+ }
+ Y(j) = Y(j) + temp1 * A(j,j) + *alpha * temp2;
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp1 = *alpha * X(jx);
+ temp2 = 0.;
+ ix = kx;
+ iy = ky;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ Y(iy) += temp1 * A(i,j);
+ temp2 += A(i,j) * X(ix);
+ ix += *incx;
+ iy += *incy;
+/* L70: */
+ }
+ Y(jy) = Y(jy) + temp1 * A(j,j) + *alpha * temp2;
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y when A is stored in lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp1 = *alpha * X(j);
+ temp2 = 0.;
+ Y(j) += temp1 * A(j,j);
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ Y(i) += temp1 * A(i,j);
+ temp2 += A(i,j) * X(i);
+/* L90: */
+ }
+ Y(j) += *alpha * temp2;
+/* L100: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp1 = *alpha * X(jx);
+ temp2 = 0.;
+ Y(jy) += temp1 * A(j,j);
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ iy += *incy;
+ Y(iy) += temp1 * A(i,j);
+ temp2 += A(i,j) * X(ix);
+/* L110: */
+ }
+ Y(jy) += *alpha * temp2;
+ jx += *incx;
+ jy += *incy;
+/* L120: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of DSYMV . */
+
+} /* dsymv_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/dsyr2.c b/SuperLU_5.2.0/CBLAS/dsyr2.c
new file mode 100644
index 0000000..7a79c82
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/dsyr2.c
@@ -0,0 +1,262 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int dsyr2_(char *uplo, integer *n, doublereal *alpha,
+ doublereal *x, integer *incx, doublereal *y, integer *incy,
+ doublereal *a, integer *lda)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static doublereal temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ DSYR2 performs the symmetric rank 2 operation
+
+ A := alpha*x*y' + alpha*y*x' + A,
+
+ where alpha is a scalar, x and y are n element vectors and A is an n
+
+ by n symmetric matrix.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - DOUBLE PRECISION.
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ X - DOUBLE PRECISION array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the n
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ Y - DOUBLE PRECISION array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y.
+ Unchanged on exit.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the symmetric matrix and the strictly
+ lower triangular part of A is not referenced. On exit, the
+ upper triangular part of the array A is overwritten by the
+ upper triangular part of the updated matrix.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the symmetric matrix and the strictly
+ upper triangular part of A is not referenced. On exit, the
+ lower triangular part of the array A is overwritten by the
+ lower triangular part of the updated matrix.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*incx == 0) {
+ info = 5;
+ } else if (*incy == 0) {
+ info = 7;
+ } else if (*lda < max(1,*n)) {
+ info = 9;
+ }
+ if (info != 0) {
+ input_error("DSYR2 ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || *alpha == 0.) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y if the increments are not both
+
+ unity. */
+
+ if (*incx != 1 || *incy != 1) {
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+ jx = kx;
+ jy = ky;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form A when A is stored in the upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(j) != 0. || Y(j) != 0.) {
+ temp1 = *alpha * Y(j);
+ temp2 = *alpha * X(j);
+ i__2 = j;
+ for (i = 1; i <= j; ++i) {
+ A(i,j) = A(i,j) + X(i) * temp1
+ + Y(i) * temp2;
+/* L10: */
+ }
+ }
+/* L20: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0. || Y(jy) != 0.) {
+ temp1 = *alpha * Y(jy);
+ temp2 = *alpha * X(jx);
+ ix = kx;
+ iy = ky;
+ i__2 = j;
+ for (i = 1; i <= j; ++i) {
+ A(i,j) = A(i,j) + X(ix) * temp1
+ + Y(iy) * temp2;
+ ix += *incx;
+ iy += *incy;
+/* L30: */
+ }
+ }
+ jx += *incx;
+ jy += *incy;
+/* L40: */
+ }
+ }
+ } else {
+
+/* Form A when A is stored in the lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(j) != 0. || Y(j) != 0.) {
+ temp1 = *alpha * Y(j);
+ temp2 = *alpha * X(j);
+ i__2 = *n;
+ for (i = j; i <= *n; ++i) {
+ A(i,j) = A(i,j) + X(i) * temp1
+ + Y(i) * temp2;
+/* L50: */
+ }
+ }
+/* L60: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0. || Y(jy) != 0.) {
+ temp1 = *alpha * Y(jy);
+ temp2 = *alpha * X(jx);
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j; i <= *n; ++i) {
+ A(i,j) = A(i,j) + X(ix) * temp1
+ + Y(iy) * temp2;
+ ix += *incx;
+ iy += *incy;
+/* L70: */
+ }
+ }
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of DSYR2 . */
+
+} /* dsyr2_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/dtrsv.c b/SuperLU_5.2.0/CBLAS/dtrsv.c
new file mode 100644
index 0000000..769f024
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/dtrsv.c
@@ -0,0 +1,337 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int dtrsv_(char *uplo, char *trans, char *diag, integer *n,
+ doublereal *a, integer *lda, doublereal *x, integer *incx)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static doublereal temp;
+ static integer i, j;
+ static integer ix, jx, kx;
+ static logical nounit;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ DTRSV 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 an n by n 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.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ TRANS - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ DIAG - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ A - DOUBLE PRECISION array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular matrix and the strictly lower triangular part of
+
+ A is not referenced.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular matrix and the strictly upper triangular part of
+
+ A is not referenced.
+ Note that when DIAG = 'U' or 'u', the diagonal elements of
+
+ A are not referenced either, but are assumed to be unity.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+ X - DOUBLE PRECISION array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ 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.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0 ) {
+ info = 2;
+ } else if ( strncmp(diag, "U", 1)!=0 && strncmp(diag, "N", 1)!=0 ) {
+ info = 3;
+ } else if (*n < 0) {
+ info = 4;
+ } else if (*lda < max(1,*n)) {
+ info = 6;
+ } else if (*incx == 0) {
+ info = 8;
+ }
+ if (info != 0) {
+ input_error("DTRSV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0) {
+ return 0;
+ }
+
+ nounit = (strncmp(diag, "N", 1)==0);
+
+/* Set up the start point in X if the increment is not unity. This
+ will be ( N - 1 )*INCX too small for descending loops. */
+
+ if (*incx <= 0) {
+ kx = 1 - (*n - 1) * *incx;
+ } else if (*incx != 1) {
+ kx = 1;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+
+ if (strncmp(trans, "N", 1)==0) {
+
+/* Form x := inv( A )*x. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+ if (*incx == 1) {
+ for (j = *n; j >= 1; --j) {
+ if (X(j) != 0.) {
+ if (nounit) {
+ X(j) /= A(j,j);
+ }
+ temp = X(j);
+ for (i = j - 1; i >= 1; --i) {
+ X(i) -= temp * A(i,j);
+/* L10: */
+ }
+ }
+/* L20: */
+ }
+ } else {
+ jx = kx + (*n - 1) * *incx;
+ for (j = *n; j >= 1; --j) {
+ if (X(jx) != 0.) {
+ if (nounit) {
+ X(jx) /= A(j,j);
+ }
+ temp = X(jx);
+ ix = jx;
+ for (i = j - 1; i >= 1; --i) {
+ ix -= *incx;
+ X(ix) -= temp * A(i,j);
+/* L30: */
+ }
+ }
+ jx -= *incx;
+/* L40: */
+ }
+ }
+ } else {
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(j) != 0.) {
+ if (nounit) {
+ X(j) /= A(j,j);
+ }
+ temp = X(j);
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ X(i) -= temp * A(i,j);
+/* L50: */
+ }
+ }
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0.) {
+ if (nounit) {
+ X(jx) /= A(j,j);
+ }
+ temp = X(jx);
+ ix = jx;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ X(ix) -= temp * A(i,j);
+/* L70: */
+ }
+ }
+ jx += *incx;
+/* L80: */
+ }
+ }
+ }
+ } else {
+
+/* Form x := inv( A' )*x. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp = X(j);
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ temp -= A(i,j) * X(i);
+/* L90: */
+ }
+ if (nounit) {
+ temp /= A(j,j);
+ }
+ X(j) = temp;
+/* L100: */
+ }
+ } else {
+ jx = kx;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp = X(jx);
+ ix = kx;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ temp -= A(i,j) * X(ix);
+ ix += *incx;
+/* L110: */
+ }
+ if (nounit) {
+ temp /= A(j,j);
+ }
+ X(jx) = temp;
+ jx += *incx;
+/* L120: */
+ }
+ }
+ } else {
+ if (*incx == 1) {
+ for (j = *n; j >= 1; --j) {
+ temp = X(j);
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ temp -= A(i,j) * X(i);
+/* L130: */
+ }
+ if (nounit) {
+ temp /= A(j,j);
+ }
+ X(j) = temp;
+/* L140: */
+ }
+ } else {
+ kx += (*n - 1) * *incx;
+ jx = kx;
+ for (j = *n; j >= 1; --j) {
+ temp = X(jx);
+ ix = kx;
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ temp -= A(i,j) * X(ix);
+ ix -= *incx;
+/* L150: */
+ }
+ if (nounit) {
+ temp /= A(j,j);
+ }
+ X(jx) = temp;
+ jx -= *incx;
+/* L160: */
+ }
+ }
+ }
+ }
+
+ return 0;
+
+/* End of DTRSV . */
+
+} /* dtrsv_ */
+
diff --git a/CBLAS/dzasum.c b/SuperLU_5.2.0/CBLAS/dzasum.c
similarity index 100%
rename from CBLAS/dzasum.c
rename to SuperLU_5.2.0/CBLAS/dzasum.c
diff --git a/CBLAS/dznrm2.c b/SuperLU_5.2.0/CBLAS/dznrm2.c
similarity index 100%
rename from CBLAS/dznrm2.c
rename to SuperLU_5.2.0/CBLAS/dznrm2.c
diff --git a/CBLAS/f2c.h b/SuperLU_5.2.0/CBLAS/f2c.h
similarity index 100%
rename from CBLAS/f2c.h
rename to SuperLU_5.2.0/CBLAS/f2c.h
diff --git a/CBLAS/icamax.c b/SuperLU_5.2.0/CBLAS/icamax.c
similarity index 100%
rename from CBLAS/icamax.c
rename to SuperLU_5.2.0/CBLAS/icamax.c
diff --git a/CBLAS/idamax.c b/SuperLU_5.2.0/CBLAS/idamax.c
similarity index 100%
rename from CBLAS/idamax.c
rename to SuperLU_5.2.0/CBLAS/idamax.c
diff --git a/CBLAS/isamax.c b/SuperLU_5.2.0/CBLAS/isamax.c
similarity index 100%
rename from CBLAS/isamax.c
rename to SuperLU_5.2.0/CBLAS/isamax.c
diff --git a/CBLAS/izamax.c b/SuperLU_5.2.0/CBLAS/izamax.c
similarity index 100%
rename from CBLAS/izamax.c
rename to SuperLU_5.2.0/CBLAS/izamax.c
diff --git a/CBLAS/sasum.c b/SuperLU_5.2.0/CBLAS/sasum.c
similarity index 100%
rename from CBLAS/sasum.c
rename to SuperLU_5.2.0/CBLAS/sasum.c
diff --git a/CBLAS/saxpy.c b/SuperLU_5.2.0/CBLAS/saxpy.c
similarity index 100%
rename from CBLAS/saxpy.c
rename to SuperLU_5.2.0/CBLAS/saxpy.c
diff --git a/CBLAS/scasum.c b/SuperLU_5.2.0/CBLAS/scasum.c
similarity index 100%
rename from CBLAS/scasum.c
rename to SuperLU_5.2.0/CBLAS/scasum.c
diff --git a/CBLAS/scnrm2.c b/SuperLU_5.2.0/CBLAS/scnrm2.c
similarity index 100%
rename from CBLAS/scnrm2.c
rename to SuperLU_5.2.0/CBLAS/scnrm2.c
diff --git a/CBLAS/scopy.c b/SuperLU_5.2.0/CBLAS/scopy.c
similarity index 100%
rename from CBLAS/scopy.c
rename to SuperLU_5.2.0/CBLAS/scopy.c
diff --git a/CBLAS/sdot.c b/SuperLU_5.2.0/CBLAS/sdot.c
similarity index 100%
rename from CBLAS/sdot.c
rename to SuperLU_5.2.0/CBLAS/sdot.c
diff --git a/SuperLU_5.2.0/CBLAS/sgemv.c b/SuperLU_5.2.0/CBLAS/sgemv.c
new file mode 100644
index 0000000..e79a77c
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/sgemv.c
@@ -0,0 +1,298 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int sgemv_(char *trans, integer *m, integer *n, real *alpha,
+ real *a, integer *lda, real *x, integer *incx, real *beta, real *y,
+ integer *incy)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static real temp;
+ static integer lenx, leny, i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ 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 an
+ m by n matrix.
+
+ Parameters
+ ==========
+
+ TRANS - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ M - INTEGER.
+ On entry, M specifies the number of rows of the matrix A.
+ M must be at least zero.
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the number of columns of the matrix A.
+
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - REAL .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - REAL array of DIMENSION ( LDA, n ).
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, m ).
+ Unchanged on exit.
+
+ X - REAL 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.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - REAL .
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - REAL 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 - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0 ) {
+ info = 1;
+ } else if (*m < 0) {
+ info = 2;
+ } else if (*n < 0) {
+ info = 3;
+ } else if (*lda < max(1,*m)) {
+ info = 6;
+ } else if (*incx == 0) {
+ info = 8;
+ } else if (*incy == 0) {
+ info = 11;
+ }
+ if (info != 0) {
+ input_error("SGEMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*m == 0 || *n == 0 || *alpha == 0.f && *beta == 1.f) {
+ return 0;
+ }
+
+/* Set LENX and LENY, the lengths of the vectors x and y, and set
+
+ up the start points in X and Y. */
+
+ if (strncmp(trans, "N", 1)==0) {
+ lenx = *n;
+ leny = *m;
+ } else {
+ lenx = *m;
+ leny = *n;
+ }
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (lenx - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (leny - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A.
+
+ First form y := beta*y. */
+
+ if (*beta != 1.f) {
+ if (*incy == 1) {
+ if (*beta == 0.f) {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ Y(i) = 0.f;
+/* L10: */
+ }
+ } else {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ Y(i) = *beta * Y(i);
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (*beta == 0.f) {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ Y(iy) = 0.f;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ Y(iy) = *beta * Y(iy);
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (*alpha == 0.f) {
+ return 0;
+ }
+ if (strncmp(trans, "N", 1)==0) {
+
+/* Form y := alpha*A*x + y. */
+
+ jx = kx;
+ if (*incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0.f) {
+ temp = *alpha * X(jx);
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ Y(i) += temp * A(i,j);
+/* L50: */
+ }
+ }
+ jx += *incx;
+/* L60: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0.f) {
+ temp = *alpha * X(jx);
+ iy = ky;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ Y(iy) += temp * A(i,j);
+ iy += *incy;
+/* L70: */
+ }
+ }
+ jx += *incx;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y := alpha*A'*x + y. */
+
+ jy = ky;
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp = 0.f;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ temp += A(i,j) * X(i);
+/* L90: */
+ }
+ Y(jy) += *alpha * temp;
+ jy += *incy;
+/* L100: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp = 0.f;
+ ix = kx;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ temp += A(i,j) * X(ix);
+ ix += *incx;
+/* L110: */
+ }
+ Y(jy) += *alpha * temp;
+ jy += *incy;
+/* L120: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of SGEMV . */
+
+} /* sgemv_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/sger.c b/SuperLU_5.2.0/CBLAS/sger.c
new file mode 100644
index 0000000..ce03f52
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/sger.c
@@ -0,0 +1,181 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Subroutine */ int sger_(integer *m, integer *n, real *alpha, real *x,
+ integer *incx, real *y, integer *incy, real *a, integer *lda)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static real temp;
+ static integer i, j, ix, jy, kx;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ SGER performs the rank 1 operation
+
+ A := alpha*x*y' + A,
+
+ where alpha is a scalar, x is an m element vector, y is an n element
+
+ vector and A is an m by n matrix.
+
+ Parameters
+ ==========
+
+ M - INTEGER.
+ On entry, M specifies the number of rows of the matrix A.
+ M must be at least zero.
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the number of columns of the matrix A.
+
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - REAL .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ X - REAL array of dimension at least
+ ( 1 + ( m - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the m
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ Y - REAL array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y.
+ Unchanged on exit.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ A - REAL array of DIMENSION ( LDA, n ).
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients. On exit, A is
+ overwritten by the updated matrix.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, m ).
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if (*m < 0) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*incx == 0) {
+ info = 5;
+ } else if (*incy == 0) {
+ info = 7;
+ } else if (*lda < max(1,*m)) {
+ info = 9;
+ }
+ if (info != 0) {
+ input_error("SGER ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*m == 0 || *n == 0 || *alpha == 0.f) {
+ return 0;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+
+ if (*incy > 0) {
+ jy = 1;
+ } else {
+ jy = 1 - (*n - 1) * *incy;
+ }
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (Y(jy) != 0.f) {
+ temp = *alpha * Y(jy);
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ A(i,j) += X(i) * temp;
+/* L10: */
+ }
+ }
+ jy += *incy;
+/* L20: */
+ }
+ } else {
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*m - 1) * *incx;
+ }
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (Y(jy) != 0.f) {
+ temp = *alpha * Y(jy);
+ ix = kx;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ A(i,j) += X(ix) * temp;
+ ix += *incx;
+/* L30: */
+ }
+ }
+ jy += *incy;
+/* L40: */
+ }
+ }
+
+ return 0;
+
+/* End of SGER . */
+
+} /* sger_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/slu_Cnames.h b/SuperLU_5.2.0/CBLAS/slu_Cnames.h
new file mode 100644
index 0000000..9f42608
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/slu_Cnames.h
@@ -0,0 +1,442 @@
+/*! @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
+ *
+ * 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>
+ */
+#ifndef __SUPERLU_CNAMES /* allow multiple inclusions */
+#define __SUPERLU_CNAMES
+
+
+#define ADD_ 0
+#define ADD__ 1
+#define NOCHANGE 2
+#define UPCASE 3
+#define OLD_CRAY 4
+#define C_CALL 5
+
+#ifdef UpCase
+#define F77_CALL_C UPCASE
+#endif
+
+#ifdef NoChange
+#define F77_CALL_C NOCHANGE
+#endif
+
+#ifdef Add_
+#define F77_CALL_C ADD_
+#endif
+
+#ifdef 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_
+#endif
+
+
+#if (F77_CALL_C == ADD_)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine
+ * No redefinition necessary to have following Fortran to C interface:
+ * FORTRAN CALL C DECLARATION
+ * call dgemm(...) void dgemm_(...)
+ *
+ * This is the default.
+ */
+
+#endif
+
+#if (F77_CALL_C == ADD__)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine
+ * for following Fortran to C interface:
+ * FORTRAN CALL C DECLARATION
+ * call dgemm(...) void dgemm__(...)
+ */
+/* 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 saxpy_ saxpy__
+#define ssyr2_ ssyr2__
+#define srot_ srot__
+#define sgemv_ sgemv__
+#define strsv_ strsv__
+#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 caxpy_ caxpy__
+#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 zaxpy_ zaxpy__
+#define zgemv_ zgemv__
+#define ztrsv_ ztrsv__
+#define zgemm_ zgemm__
+#define ztrsm_ ztrsm__
+#define zgerc_ zgerc__
+#define zhemv_ zhemv__
+#define zher2_ zher2__
+
+/* LAPACK */
+#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 == UPCASE)
+/*
+ * 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 DGEMM(...)
+ */
+/* 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 saxpy_ SAXPY
+#define ssyr2_ SSYR2
+#define srot_ SROT
+#define sgemv_ SGEMV
+#define strsv_ STRSV
+#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 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
+#define dscal_ SSCAL
+#define dger_ SGER
+#define dnrm2_ SNRM2
+#define dsymv_ SSYMV
+#define ddot_ SDOT
+#define dsyr2_ SSYR2
+#define drot_ SROT
+#define dgemv_ SGEMV
+#define dtrsv_ STRSV
+#define dgemm_ SGEMM
+#define dtrsm_ STRSM
+
+#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
+#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 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 == NOCHANGE)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine
+ * for following Fortran to C interface:
+ * FORTRAN CALL C DECLARATION
+ * call dgemm(...) void dgemm(...)
+ */
+/* 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 saxpy_ saxpy
+#define ssyr2_ ssyr2
+#define srot_ srot
+#define sgemv_ sgemv
+#define strsv_ strsv
+#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 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
+
+
+#endif /* __SUPERLU_CNAMES */
diff --git a/CBLAS/snrm2.c b/SuperLU_5.2.0/CBLAS/snrm2.c
similarity index 100%
rename from CBLAS/snrm2.c
rename to SuperLU_5.2.0/CBLAS/snrm2.c
diff --git a/CBLAS/srot.c b/SuperLU_5.2.0/CBLAS/srot.c
similarity index 100%
rename from CBLAS/srot.c
rename to SuperLU_5.2.0/CBLAS/srot.c
diff --git a/CBLAS/sscal.c b/SuperLU_5.2.0/CBLAS/sscal.c
similarity index 100%
rename from CBLAS/sscal.c
rename to SuperLU_5.2.0/CBLAS/sscal.c
diff --git a/CBLAS/sswap.c b/SuperLU_5.2.0/CBLAS/sswap.c
similarity index 100%
rename from CBLAS/sswap.c
rename to SuperLU_5.2.0/CBLAS/sswap.c
diff --git a/SuperLU_5.2.0/CBLAS/ssymv.c b/SuperLU_5.2.0/CBLAS/ssymv.c
new file mode 100644
index 0000000..64bdbf5
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/ssymv.c
@@ -0,0 +1,299 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int ssymv_(char *uplo, integer *n, real *alpha, real *a,
+ integer *lda, real *x, integer *incx, real *beta, real *y, integer *
+ incy)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static real temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ SSYMV performs the matrix-vector operation
+
+ y := alpha*A*x + beta*y,
+
+ where alpha and beta are scalars, x and y are n element vectors and
+ A is an n by n symmetric matrix.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - REAL .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - REAL array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the symmetric matrix and the strictly
+ lower triangular part of A is not referenced.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the symmetric matrix and the strictly
+ upper triangular part of A is not referenced.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+ X - REAL array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the n
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - REAL .
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - REAL array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y. On exit, Y is overwritten by the updated
+ vector y.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*lda < max(1,*n)) {
+ info = 5;
+ } else if (*incx == 0) {
+ info = 7;
+ } else if (*incy == 0) {
+ info = 10;
+ }
+ if (info != 0) {
+ input_error("SSYMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || *alpha == 0.f && *beta == 1.f) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y. */
+
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A.
+
+ First form y := beta*y. */
+
+ if (*beta != 1.f) {
+ if (*incy == 1) {
+ if (*beta == 0.f) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ Y(i) = 0.f;
+/* L10: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ Y(i) = *beta * Y(i);
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (*beta == 0.f) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ Y(iy) = 0.f;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ Y(iy) = *beta * Y(iy);
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (*alpha == 0.f) {
+ return 0;
+ }
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form y when A is stored in upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp1 = *alpha * X(j);
+ temp2 = 0.f;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ Y(i) += temp1 * A(i,j);
+ temp2 += A(i,j) * X(i);
+/* L50: */
+ }
+ Y(j) = Y(j) + temp1 * A(j,j) + *alpha * temp2;
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp1 = *alpha * X(jx);
+ temp2 = 0.f;
+ ix = kx;
+ iy = ky;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ Y(iy) += temp1 * A(i,j);
+ temp2 += A(i,j) * X(ix);
+ ix += *incx;
+ iy += *incy;
+/* L70: */
+ }
+ Y(jy) = Y(jy) + temp1 * A(j,j) + *alpha * temp2;
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y when A is stored in lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp1 = *alpha * X(j);
+ temp2 = 0.f;
+ Y(j) += temp1 * A(j,j);
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ Y(i) += temp1 * A(i,j);
+ temp2 += A(i,j) * X(i);
+/* L90: */
+ }
+ Y(j) += *alpha * temp2;
+/* L100: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp1 = *alpha * X(jx);
+ temp2 = 0.f;
+ Y(jy) += temp1 * A(j,j);
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ iy += *incy;
+ Y(iy) += temp1 * A(i,j);
+ temp2 += A(i,j) * X(ix);
+/* L110: */
+ }
+ Y(jy) += *alpha * temp2;
+ jx += *incx;
+ jy += *incy;
+/* L120: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of SSYMV . */
+
+} /* ssymv_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/ssyr2.c b/SuperLU_5.2.0/CBLAS/ssyr2.c
new file mode 100644
index 0000000..4c9b36e
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/ssyr2.c
@@ -0,0 +1,261 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int ssyr2_(char *uplo, integer *n, real *alpha, real *x,
+ integer *incx, real *y, integer *incy, real *a, integer *lda)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static real temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ SSYR2 performs the symmetric rank 2 operation
+
+ A := alpha*x*y' + alpha*y*x' + A,
+
+ where alpha is a scalar, x and y are n element vectors and A is an n
+
+ by n symmetric matrix.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - REAL .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ X - REAL array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the n
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ Y - REAL array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y.
+ Unchanged on exit.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ A - REAL array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the symmetric matrix and the strictly
+ lower triangular part of A is not referenced. On exit, the
+ upper triangular part of the array A is overwritten by the
+ upper triangular part of the updated matrix.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the symmetric matrix and the strictly
+ upper triangular part of A is not referenced. On exit, the
+ lower triangular part of the array A is overwritten by the
+ lower triangular part of the updated matrix.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*incx == 0) {
+ info = 5;
+ } else if (*incy == 0) {
+ info = 7;
+ } else if (*lda < max(1,*n)) {
+ info = 9;
+ }
+ if (info != 0) {
+ input_error("SSYR2 ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || *alpha == 0.f) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y if the increments are not both
+
+ unity. */
+
+ if (*incx != 1 || *incy != 1) {
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+ jx = kx;
+ jy = ky;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form A when A is stored in the upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(j) != 0.f || Y(j) != 0.f) {
+ temp1 = *alpha * Y(j);
+ temp2 = *alpha * X(j);
+ i__2 = j;
+ for (i = 1; i <= j; ++i) {
+ A(i,j) = A(i,j) + X(i) * temp1
+ + Y(i) * temp2;
+/* L10: */
+ }
+ }
+/* L20: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0.f || Y(jy) != 0.f) {
+ temp1 = *alpha * Y(jy);
+ temp2 = *alpha * X(jx);
+ ix = kx;
+ iy = ky;
+ i__2 = j;
+ for (i = 1; i <= j; ++i) {
+ A(i,j) = A(i,j) + X(ix) * temp1
+ + Y(iy) * temp2;
+ ix += *incx;
+ iy += *incy;
+/* L30: */
+ }
+ }
+ jx += *incx;
+ jy += *incy;
+/* L40: */
+ }
+ }
+ } else {
+
+/* Form A when A is stored in the lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(j) != 0.f || Y(j) != 0.f) {
+ temp1 = *alpha * Y(j);
+ temp2 = *alpha * X(j);
+ i__2 = *n;
+ for (i = j; i <= *n; ++i) {
+ A(i,j) = A(i,j) + X(i) * temp1
+ + Y(i) * temp2;
+/* L50: */
+ }
+ }
+/* L60: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0.f || Y(jy) != 0.f) {
+ temp1 = *alpha * Y(jy);
+ temp2 = *alpha * X(jx);
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j; i <= *n; ++i) {
+ A(i,j) = A(i,j) + X(ix) * temp1
+ + Y(iy) * temp2;
+ ix += *incx;
+ iy += *incy;
+/* L70: */
+ }
+ }
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of SSYR2 . */
+
+} /* ssyr2_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/strsv.c b/SuperLU_5.2.0/CBLAS/strsv.c
new file mode 100644
index 0000000..513ede7
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/strsv.c
@@ -0,0 +1,334 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int strsv_(char *uplo, char *trans, char *diag, integer *n,
+ real *a, integer *lda, real *x, integer *incx)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer info;
+ static real temp;
+ static integer i, j;
+ static integer ix, jx, kx;
+ static logical nounit;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ STRSV 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 an n by n 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.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ TRANS - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ DIAG - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ A - REAL array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular matrix and the strictly lower triangular part of
+
+ A is not referenced.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular matrix and the strictly upper triangular part of
+
+ A is not referenced.
+ Note that when DIAG = 'U' or 'u', the diagonal elements of
+
+ A are not referenced either, but are assumed to be unity.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+ X - REAL array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ 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.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+ Test the input parameters.
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0 ) {
+ info = 2;
+ } else if ( strncmp(diag, "U", 1)!=0 && strncmp(diag, "N", 1)!=0 ) {
+ info = 3;
+ } else if (*n < 0) {
+ info = 4;
+ } else if (*lda < max(1,*n)) {
+ info = 6;
+ } else if (*incx == 0) {
+ info = 8;
+ }
+ if (info != 0) {
+ input_error("STRSV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0) {
+ return 0;
+ }
+
+ nounit = (strncmp(diag, "N", 1)==0);
+
+/* Set up the start point in X if the increment is not unity. This
+ will be ( N - 1 )*INCX too small for descending loops. */
+
+ if (*incx <= 0) {
+ kx = 1 - (*n - 1) * *incx;
+ } else if (*incx != 1) {
+ kx = 1;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+
+ if (strncmp(trans, "N", 1)==0) {
+
+/* Form x := inv( A )*x. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+ if (*incx == 1) {
+ for (j = *n; j >= 1; --j) {
+ if (X(j) != 0.f) {
+ if (nounit) {
+ X(j) /= A(j,j);
+ }
+ temp = X(j);
+ for (i = j - 1; i >= 1; --i) {
+ X(i) -= temp * A(i,j);
+/* L10: */
+ }
+ }
+/* L20: */
+ }
+ } else {
+ jx = kx + (*n - 1) * *incx;
+ for (j = *n; j >= 1; --j) {
+ if (X(jx) != 0.f) {
+ if (nounit) {
+ X(jx) /= A(j,j);
+ }
+ temp = X(jx);
+ ix = jx;
+ for (i = j - 1; i >= 1; --i) {
+ ix -= *incx;
+ X(ix) -= temp * A(i,j);
+/* L30: */
+ }
+ }
+ jx -= *incx;
+/* L40: */
+ }
+ }
+ } else {
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(j) != 0.f) {
+ if (nounit) {
+ X(j) /= A(j,j);
+ }
+ temp = X(j);
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ X(i) -= temp * A(i,j);
+/* L50: */
+ }
+ }
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ if (X(jx) != 0.f) {
+ if (nounit) {
+ X(jx) /= A(j,j);
+ }
+ temp = X(jx);
+ ix = jx;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ X(ix) -= temp * A(i,j);
+/* L70: */
+ }
+ }
+ jx += *incx;
+/* L80: */
+ }
+ }
+ }
+ } else {
+
+/* Form x := inv( A' )*x. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp = X(j);
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ temp -= A(i,j) * X(i);
+/* L90: */
+ }
+ if (nounit) {
+ temp /= A(j,j);
+ }
+ X(j) = temp;
+/* L100: */
+ }
+ } else {
+ jx = kx;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp = X(jx);
+ ix = kx;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ temp -= A(i,j) * X(ix);
+ ix += *incx;
+/* L110: */
+ }
+ if (nounit) {
+ temp /= A(j,j);
+ }
+ X(jx) = temp;
+ jx += *incx;
+/* L120: */
+ }
+ }
+ } else {
+ if (*incx == 1) {
+ for (j = *n; j >= 1; --j) {
+ temp = X(j);
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ temp -= A(i,j) * X(i);
+/* L130: */
+ }
+ if (nounit) {
+ temp /= A(j,j);
+ }
+ X(j) = temp;
+/* L140: */
+ }
+ } else {
+ kx += (*n - 1) * *incx;
+ jx = kx;
+ for (j = *n; j >= 1; --j) {
+ temp = X(jx);
+ ix = kx;
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ temp -= A(i,j) * X(ix);
+ ix -= *incx;
+/* L150: */
+ }
+ if (nounit) {
+ temp /= A(j,j);
+ }
+ X(jx) = temp;
+ jx -= *incx;
+/* L160: */
+ }
+ }
+ }
+ }
+
+ return 0;
+
+/* End of STRSV . */
+
+} /* strsv_ */
+
diff --git a/CBLAS/superlu_f2c.h b/SuperLU_5.2.0/CBLAS/superlu_f2c.h
similarity index 100%
rename from CBLAS/superlu_f2c.h
rename to SuperLU_5.2.0/CBLAS/superlu_f2c.h
diff --git a/CBLAS/zaxpy.c b/SuperLU_5.2.0/CBLAS/zaxpy.c
similarity index 100%
rename from CBLAS/zaxpy.c
rename to SuperLU_5.2.0/CBLAS/zaxpy.c
diff --git a/CBLAS/zcopy.c b/SuperLU_5.2.0/CBLAS/zcopy.c
similarity index 100%
rename from CBLAS/zcopy.c
rename to SuperLU_5.2.0/CBLAS/zcopy.c
diff --git a/CBLAS/zdotc.c b/SuperLU_5.2.0/CBLAS/zdotc.c
similarity index 100%
rename from CBLAS/zdotc.c
rename to SuperLU_5.2.0/CBLAS/zdotc.c
diff --git a/SuperLU_5.2.0/CBLAS/zgemv.c b/SuperLU_5.2.0/CBLAS/zgemv.c
new file mode 100644
index 0000000..58cfe03
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/zgemv.c
@@ -0,0 +1,396 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int zgemv_(char *trans, integer *m, integer *n,
+ doublecomplex *alpha, doublecomplex *a, integer *lda, doublecomplex *
+ x, integer *incx, doublecomplex *beta, doublecomplex *y, integer *
+ incy)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ doublecomplex z__1, z__2, z__3;
+
+ /* Builtin functions */
+ void d_cnjg(doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer info;
+ static doublecomplex temp;
+ static integer lenx, leny, i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+ static logical noconj;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ ZGEMV performs one of the matrix-vector operations
+
+ y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y, or
+
+ y := alpha*conjg( A' )*x + beta*y,
+
+ where alpha and beta are scalars, x and y are vectors and A is an
+ m by n matrix.
+
+ Parameters
+ ==========
+
+ TRANS - CHARACTER*1.
+ 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*conjg( A' )*x + beta*y.
+
+ Unchanged on exit.
+
+ M - INTEGER.
+ On entry, M specifies the number of rows of the matrix A.
+ M must be at least zero.
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the number of columns of the matrix A.
+
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX*16 .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - COMPLEX*16 array of DIMENSION ( LDA, n ).
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, m ).
+ Unchanged on exit.
+
+ X - COMPLEX*16 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.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - COMPLEX*16 .
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - COMPLEX*16 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 - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0 ) {
+ info = 1;
+ } else if (*m < 0) {
+ info = 2;
+ } else if (*n < 0) {
+ info = 3;
+ } else if (*lda < max(1,*m)) {
+ info = 6;
+ } else if (*incx == 0) {
+ info = 8;
+ } else if (*incy == 0) {
+ info = 11;
+ }
+ if (info != 0) {
+ input_error("ZGEMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*m == 0 || *n == 0 || alpha->r == 0. && alpha->i == 0. && (beta->r ==
+ 1. && beta->i == 0.)) {
+ return 0;
+ }
+
+ noconj = ( strncmp(trans, "T", 1)==0 );
+
+/* Set LENX and LENY, the lengths of the vectors x and y, and set
+ up the start points in X and Y. */
+
+ if (strncmp(trans, "N", 1)==0) {
+ lenx = *n;
+ leny = *m;
+ } else {
+ lenx = *m;
+ leny = *n;
+ }
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (lenx - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (leny - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A.
+
+ First form y := beta*y. */
+
+ if (beta->r != 1. || beta->i != 0.) {
+ if (*incy == 1) {
+ if (beta->r == 0. && beta->i == 0.) {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ i__2 = i;
+ Y(i).r = 0., Y(i).i = 0.;
+/* L10: */
+ }
+ } else {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ i__2 = i;
+ i__3 = i;
+ z__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
+ z__1.i = beta->r * Y(i).i + beta->i * Y(i)
+ .r;
+ Y(i).r = z__1.r, Y(i).i = z__1.i;
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (beta->r == 0. && beta->i == 0.) {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ i__2 = iy;
+ Y(iy).r = 0., Y(iy).i = 0.;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = leny;
+ for (i = 1; i <= leny; ++i) {
+ i__2 = iy;
+ i__3 = iy;
+ z__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
+ z__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
+ .r;
+ Y(iy).r = z__1.r, Y(iy).i = z__1.i;
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (alpha->r == 0. && alpha->i == 0.) {
+ return 0;
+ }
+ if (strncmp(trans, "N", 1)==0) {
+
+/* Form y := alpha*A*x + y. */
+
+ jx = kx;
+ if (*incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ if (X(jx).r != 0. || X(jx).i != 0.) {
+ i__2 = jx;
+ z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
+ z__1.i = alpha->r * X(jx).i + alpha->i * X(jx)
+ .r;
+ temp.r = z__1.r, temp.i = z__1.i;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ z__2.i = temp.r * A(i,j).i + temp.i * A(i,j)
+ .r;
+ z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i +
+ z__2.i;
+ Y(i).r = z__1.r, Y(i).i = z__1.i;
+/* L50: */
+ }
+ }
+ jx += *incx;
+/* L60: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ if (X(jx).r != 0. || X(jx).i != 0.) {
+ i__2 = jx;
+ z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
+ z__1.i = alpha->r * X(jx).i + alpha->i * X(jx)
+ .r;
+ temp.r = z__1.r, temp.i = z__1.i;
+ iy = ky;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ z__2.i = temp.r * A(i,j).i + temp.i * A(i,j)
+ .r;
+ z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i +
+ z__2.i;
+ Y(iy).r = z__1.r, Y(iy).i = z__1.i;
+ iy += *incy;
+/* L70: */
+ }
+ }
+ jx += *incx;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y := alpha*A'*x + y or y := alpha*conjg( A' )*x + y.
+ */
+
+ jy = ky;
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp.r = 0., temp.i = 0.;
+ if (noconj) {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i;
+ z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i)
+ .i, z__2.i = A(i,j).r * X(i).i + A(i,j)
+ .i * X(i).r;
+ z__1.r = temp.r + z__2.r, z__1.i = temp.i + z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+/* L90: */
+ }
+ } else {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ d_cnjg(&z__3, &A(i,j));
+ i__3 = i;
+ z__2.r = z__3.r * X(i).r - z__3.i * X(i).i,
+ z__2.i = z__3.r * X(i).i + z__3.i * X(i)
+ .r;
+ z__1.r = temp.r + z__2.r, z__1.i = temp.i + z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+/* L100: */
+ }
+ }
+ i__2 = jy;
+ i__3 = jy;
+ z__2.r = alpha->r * temp.r - alpha->i * temp.i, z__2.i =
+ alpha->r * temp.i + alpha->i * temp.r;
+ z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
+ Y(jy).r = z__1.r, Y(jy).i = z__1.i;
+ jy += *incy;
+/* L110: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ temp.r = 0., temp.i = 0.;
+ ix = kx;
+ if (noconj) {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = ix;
+ z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix)
+ .i, z__2.i = A(i,j).r * X(ix).i + A(i,j)
+ .i * X(ix).r;
+ z__1.r = temp.r + z__2.r, z__1.i = temp.i + z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+ ix += *incx;
+/* L120: */
+ }
+ } else {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ d_cnjg(&z__3, &A(i,j));
+ i__3 = ix;
+ z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i,
+ z__2.i = z__3.r * X(ix).i + z__3.i * X(ix)
+ .r;
+ z__1.r = temp.r + z__2.r, z__1.i = temp.i + z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+ ix += *incx;
+/* L130: */
+ }
+ }
+ i__2 = jy;
+ i__3 = jy;
+ z__2.r = alpha->r * temp.r - alpha->i * temp.i, z__2.i =
+ alpha->r * temp.i + alpha->i * temp.r;
+ z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
+ Y(jy).r = z__1.r, Y(jy).i = z__1.i;
+ jy += *incy;
+/* L140: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of ZGEMV . */
+
+} /* zgemv_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/zgerc.c b/SuperLU_5.2.0/CBLAS/zgerc.c
new file mode 100644
index 0000000..d5562d0
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/zgerc.c
@@ -0,0 +1,207 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Subroutine */ int zgerc_(integer *m, integer *n, doublecomplex *alpha,
+ doublecomplex *x, integer *incx, doublecomplex *y, integer *incy,
+ doublecomplex *a, integer *lda)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ doublecomplex z__1, z__2;
+
+ /* Builtin functions */
+ void d_cnjg(doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer info;
+ static doublecomplex temp;
+ static integer i, j, ix, jy, kx;
+
+ extern int input_error(char *, int *);
+
+
+/* Purpose
+ =======
+
+ ZGERC performs the rank 1 operation
+
+ A := alpha*x*conjg( y' ) + A,
+
+ where alpha is a scalar, x is an m element vector, y is an n element
+
+ vector and A is an m by n matrix.
+
+ Parameters
+ ==========
+
+ M - INTEGER.
+ On entry, M specifies the number of rows of the matrix A.
+ M must be at least zero.
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the number of columns of the matrix A.
+
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX*16 .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ X - COMPLEX*16 array of dimension at least
+ ( 1 + ( m - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the m
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ Y - COMPLEX*16 array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y.
+ Unchanged on exit.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ A - COMPLEX*16 array of DIMENSION ( LDA, n ).
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients. On exit, A is
+ overwritten by the updated matrix.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, m ).
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if (*m < 0) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*incx == 0) {
+ info = 5;
+ } else if (*incy == 0) {
+ info = 7;
+ } else if (*lda < max(1,*m)) {
+ info = 9;
+ }
+ if (info != 0) {
+ input_error("ZGERC ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*m == 0 || *n == 0 || alpha->r == 0. && alpha->i == 0.) {
+ return 0;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+
+ if (*incy > 0) {
+ jy = 1;
+ } else {
+ jy = 1 - (*n - 1) * *incy;
+ }
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jy;
+ if (Y(jy).r != 0. || Y(jy).i != 0.) {
+ d_cnjg(&z__2, &Y(jy));
+ z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
+ alpha->r * z__2.i + alpha->i * z__2.r;
+ temp.r = z__1.r, temp.i = z__1.i;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = i;
+ z__2.r = X(i).r * temp.r - X(i).i * temp.i, z__2.i =
+ X(i).r * temp.i + X(i).i * temp.r;
+ z__1.r = A(i,j).r + z__2.r, z__1.i = A(i,j).i + z__2.i;
+ A(i,j).r = z__1.r, A(i,j).i = z__1.i;
+/* L10: */
+ }
+ }
+ jy += *incy;
+/* L20: */
+ }
+ } else {
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*m - 1) * *incx;
+ }
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jy;
+ if (Y(jy).r != 0. || Y(jy).i != 0.) {
+ d_cnjg(&z__2, &Y(jy));
+ z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
+ alpha->r * z__2.i + alpha->i * z__2.r;
+ temp.r = z__1.r, temp.i = z__1.i;
+ ix = kx;
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = ix;
+ z__2.r = X(ix).r * temp.r - X(ix).i * temp.i, z__2.i =
+ X(ix).r * temp.i + X(ix).i * temp.r;
+ z__1.r = A(i,j).r + z__2.r, z__1.i = A(i,j).i + z__2.i;
+ A(i,j).r = z__1.r, A(i,j).i = z__1.i;
+ ix += *incx;
+/* L30: */
+ }
+ }
+ jy += *incy;
+/* L40: */
+ }
+ }
+
+ return 0;
+
+/* End of ZGERC . */
+
+} /* zgerc_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/zhemv.c b/SuperLU_5.2.0/CBLAS/zhemv.c
new file mode 100644
index 0000000..14e3961
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/zhemv.c
@@ -0,0 +1,417 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int zhemv_(char *uplo, integer *n, doublecomplex *alpha,
+ doublecomplex *a, integer *lda, doublecomplex *x, integer *incx,
+ doublecomplex *beta, doublecomplex *y, integer *incy)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ doublereal d__1;
+ doublecomplex z__1, z__2, z__3, z__4;
+
+ /* Builtin functions */
+ void d_cnjg(doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer info;
+ static doublecomplex temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ ZHEMV performs the matrix-vector operation
+
+ y := alpha*A*x + beta*y,
+
+ where alpha and beta are scalars, x and y are n element vectors and
+ A is an n by n hermitian matrix.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX*16 .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - COMPLEX*16 array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the hermitian matrix and the strictly
+ lower triangular part of A is not referenced.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the hermitian matrix and the strictly
+ upper triangular part of A is not referenced.
+ Note that the imaginary parts of the diagonal elements need
+
+ not be set and are assumed to be zero.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+ X - COMPLEX*16 array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the n
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - COMPLEX*16 .
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - COMPLEX*16 array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y. On exit, Y is overwritten by the updated
+ vector y.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+ Test the input parameters.
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*lda < max(1,*n)) {
+ info = 5;
+ } else if (*incx == 0) {
+ info = 7;
+ } else if (*incy == 0) {
+ info = 10;
+ }
+ if (info != 0) {
+ input_error("ZHEMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || alpha->r == 0. && alpha->i == 0. && (beta->r == 1. &&
+ beta->i == 0.)) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y. */
+
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A.
+
+ First form y := beta*y. */
+
+ if (beta->r != 1. || beta->i != 0.) {
+ if (*incy == 1) {
+ if (beta->r == 0. && beta->i == 0.) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ Y(i).r = 0., Y(i).i = 0.;
+/* L10: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ i__3 = i;
+ z__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
+ z__1.i = beta->r * Y(i).i + beta->i * Y(i)
+ .r;
+ Y(i).r = z__1.r, Y(i).i = z__1.i;
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (beta->r == 0. && beta->i == 0.) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = iy;
+ Y(iy).r = 0., Y(iy).i = 0.;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = iy;
+ i__3 = iy;
+ z__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
+ z__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
+ .r;
+ Y(iy).r = z__1.r, Y(iy).i = z__1.i;
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (alpha->r == 0. && alpha->i == 0.) {
+ return 0;
+ }
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form y when A is stored in upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ z__1.r = alpha->r * X(j).r - alpha->i * X(j).i, z__1.i =
+ alpha->r * X(j).i + alpha->i * X(j).r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ temp2.r = 0., temp2.i = 0.;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i + z__2.i;
+ Y(i).r = z__1.r, Y(i).i = z__1.i;
+ d_cnjg(&z__3, &A(i,j));
+ i__3 = i;
+ z__2.r = z__3.r * X(i).r - z__3.i * X(i).i, z__2.i =
+ z__3.r * X(i).i + z__3.i * X(i).r;
+ z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
+ temp2.r = z__1.r, temp2.i = z__1.i;
+/* L50: */
+ }
+ i__2 = j;
+ i__3 = j;
+ i__4 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ z__3.r = d__1 * temp1.r, z__3.i = d__1 * temp1.i;
+ z__2.r = Y(j).r + z__3.r, z__2.i = Y(j).i + z__3.i;
+ z__4.r = alpha->r * temp2.r - alpha->i * temp2.i, z__4.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
+ Y(j).r = z__1.r, Y(j).i = z__1.i;
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, z__1.i =
+ alpha->r * X(jx).i + alpha->i * X(jx).r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ temp2.r = 0., temp2.i = 0.;
+ ix = kx;
+ iy = ky;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i + z__2.i;
+ Y(iy).r = z__1.r, Y(iy).i = z__1.i;
+ d_cnjg(&z__3, &A(i,j));
+ i__3 = ix;
+ z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i, z__2.i =
+ z__3.r * X(ix).i + z__3.i * X(ix).r;
+ z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
+ temp2.r = z__1.r, temp2.i = z__1.i;
+ ix += *incx;
+ iy += *incy;
+/* L70: */
+ }
+ i__2 = jy;
+ i__3 = jy;
+ i__4 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ z__3.r = d__1 * temp1.r, z__3.i = d__1 * temp1.i;
+ z__2.r = Y(jy).r + z__3.r, z__2.i = Y(jy).i + z__3.i;
+ z__4.r = alpha->r * temp2.r - alpha->i * temp2.i, z__4.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
+ Y(jy).r = z__1.r, Y(jy).i = z__1.i;
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y when A is stored in lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ z__1.r = alpha->r * X(j).r - alpha->i * X(j).i, z__1.i =
+ alpha->r * X(j).i + alpha->i * X(j).r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ temp2.r = 0., temp2.i = 0.;
+ i__2 = j;
+ i__3 = j;
+ i__4 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ z__2.r = d__1 * temp1.r, z__2.i = d__1 * temp1.i;
+ z__1.r = Y(j).r + z__2.r, z__1.i = Y(j).i + z__2.i;
+ Y(j).r = z__1.r, Y(j).i = z__1.i;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i + z__2.i;
+ Y(i).r = z__1.r, Y(i).i = z__1.i;
+ d_cnjg(&z__3, &A(i,j));
+ i__3 = i;
+ z__2.r = z__3.r * X(i).r - z__3.i * X(i).i, z__2.i =
+ z__3.r * X(i).i + z__3.i * X(i).r;
+ z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
+ temp2.r = z__1.r, temp2.i = z__1.i;
+/* L90: */
+ }
+ i__2 = j;
+ i__3 = j;
+ z__2.r = alpha->r * temp2.r - alpha->i * temp2.i, z__2.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ z__1.r = Y(j).r + z__2.r, z__1.i = Y(j).i + z__2.i;
+ Y(j).r = z__1.r, Y(j).i = z__1.i;
+/* L100: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, z__1.i =
+ alpha->r * X(jx).i + alpha->i * X(jx).r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ temp2.r = 0., temp2.i = 0.;
+ i__2 = jy;
+ i__3 = jy;
+ i__4 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ z__2.r = d__1 * temp1.r, z__2.i = d__1 * temp1.i;
+ z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
+ Y(jy).r = z__1.r, Y(jy).i = z__1.i;
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ iy += *incy;
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i + z__2.i;
+ Y(iy).r = z__1.r, Y(iy).i = z__1.i;
+ d_cnjg(&z__3, &A(i,j));
+ i__3 = ix;
+ z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i, z__2.i =
+ z__3.r * X(ix).i + z__3.i * X(ix).r;
+ z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
+ temp2.r = z__1.r, temp2.i = z__1.i;
+/* L110: */
+ }
+ i__2 = jy;
+ i__3 = jy;
+ z__2.r = alpha->r * temp2.r - alpha->i * temp2.i, z__2.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
+ Y(jy).r = z__1.r, Y(jy).i = z__1.i;
+ jx += *incx;
+ jy += *incy;
+/* L120: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of ZHEMV . */
+
+} /* zhemv_ */
+
diff --git a/SuperLU_5.2.0/CBLAS/zher2.c b/SuperLU_5.2.0/CBLAS/zher2.c
new file mode 100644
index 0000000..098219a
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/zher2.c
@@ -0,0 +1,436 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int zher2_(char *uplo, integer *n, doublecomplex *alpha,
+ doublecomplex *x, integer *incx, doublecomplex *y, integer *incy,
+ doublecomplex *a, integer *lda)
+{
+
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
+ doublereal d__1;
+ doublecomplex z__1, z__2, z__3, z__4;
+
+ /* Builtin functions */
+ void d_cnjg(doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer info;
+ static doublecomplex temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ ZHER2 performs the hermitian rank 2 operation
+
+ A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + A,
+
+ where alpha is a scalar, x and y are n element vectors and A is an n
+
+ by n hermitian matrix.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX*16 .
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ X - COMPLEX*16 array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the n
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ Y - COMPLEX*16 array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y.
+ Unchanged on exit.
+
+ INCY - INTEGER.
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ A - COMPLEX*16 array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the hermitian matrix and the strictly
+ lower triangular part of A is not referenced. On exit, the
+ upper triangular part of the array A is overwritten by the
+ upper triangular part of the updated matrix.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the hermitian matrix and the strictly
+ upper triangular part of A is not referenced. On exit, the
+ lower triangular part of the array A is overwritten by the
+ lower triangular part of the updated matrix.
+ Note that the imaginary parts of the diagonal elements need
+
+ not be set, they are assumed to be zero, and on exit they
+ are set to zero.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*incx == 0) {
+ info = 5;
+ } else if (*incy == 0) {
+ info = 7;
+ } else if (*lda < max(1,*n)) {
+ info = 9;
+ }
+ if (info != 0) {
+ input_error("ZHER2 ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || alpha->r == 0. && alpha->i == 0.) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y if the increments are not both
+
+ unity. */
+
+ if (*incx != 1 || *incy != 1) {
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+ jx = kx;
+ jy = ky;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form A when A is stored in the upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ i__3 = j;
+ if (X(j).r != 0. || X(j).i != 0. || (Y(j).r != 0. ||
+ Y(j).i != 0.)) {
+ d_cnjg(&z__2, &Y(j));
+ z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
+ alpha->r * z__2.i + alpha->i * z__2.r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ i__2 = j;
+ z__2.r = alpha->r * X(j).r - alpha->i * X(j).i,
+ z__2.i = alpha->r * X(j).i + alpha->i * X(j)
+ .r;
+ d_cnjg(&z__1, &z__2);
+ temp2.r = z__1.r, temp2.i = z__1.i;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = i;
+ z__3.r = X(i).r * temp1.r - X(i).i * temp1.i,
+ z__3.i = X(i).r * temp1.i + X(i).i *
+ temp1.r;
+ z__2.r = A(i,j).r + z__3.r, z__2.i = A(i,j).i +
+ z__3.i;
+ i__6 = i;
+ z__4.r = Y(i).r * temp2.r - Y(i).i * temp2.i,
+ z__4.i = Y(i).r * temp2.i + Y(i).i *
+ temp2.r;
+ z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
+ A(i,j).r = z__1.r, A(i,j).i = z__1.i;
+/* L10: */
+ }
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ i__4 = j;
+ z__2.r = X(j).r * temp1.r - X(j).i * temp1.i,
+ z__2.i = X(j).r * temp1.i + X(j).i *
+ temp1.r;
+ i__5 = j;
+ z__3.r = Y(j).r * temp2.r - Y(j).i * temp2.i,
+ z__3.i = Y(j).r * temp2.i + Y(j).i *
+ temp2.r;
+ z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
+ d__1 = A(j,j).r + z__1.r;
+ A(j,j).r = d__1, A(j,j).i = 0.;
+ } else {
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ A(j,j).r = d__1, A(j,j).i = 0.;
+ }
+/* L20: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ i__3 = jy;
+ if (X(jx).r != 0. || X(jx).i != 0. || (Y(jy).r != 0. ||
+ Y(jy).i != 0.)) {
+ d_cnjg(&z__2, &Y(jy));
+ z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
+ alpha->r * z__2.i + alpha->i * z__2.r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ i__2 = jx;
+ z__2.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
+ z__2.i = alpha->r * X(jx).i + alpha->i * X(jx)
+ .r;
+ d_cnjg(&z__1, &z__2);
+ temp2.r = z__1.r, temp2.i = z__1.i;
+ ix = kx;
+ iy = ky;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = ix;
+ z__3.r = X(ix).r * temp1.r - X(ix).i * temp1.i,
+ z__3.i = X(ix).r * temp1.i + X(ix).i *
+ temp1.r;
+ z__2.r = A(i,j).r + z__3.r, z__2.i = A(i,j).i +
+ z__3.i;
+ i__6 = iy;
+ z__4.r = Y(iy).r * temp2.r - Y(iy).i * temp2.i,
+ z__4.i = Y(iy).r * temp2.i + Y(iy).i *
+ temp2.r;
+ z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
+ A(i,j).r = z__1.r, A(i,j).i = z__1.i;
+ ix += *incx;
+ iy += *incy;
+/* L30: */
+ }
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ i__4 = jx;
+ z__2.r = X(jx).r * temp1.r - X(jx).i * temp1.i,
+ z__2.i = X(jx).r * temp1.i + X(jx).i *
+ temp1.r;
+ i__5 = jy;
+ z__3.r = Y(jy).r * temp2.r - Y(jy).i * temp2.i,
+ z__3.i = Y(jy).r * temp2.i + Y(jy).i *
+ temp2.r;
+ z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
+ d__1 = A(j,j).r + z__1.r;
+ A(j,j).r = d__1, A(j,j).i = 0.;
+ } else {
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ A(j,j).r = d__1, A(j,j).i = 0.;
+ }
+ jx += *incx;
+ jy += *incy;
+/* L40: */
+ }
+ }
+ } else {
+
+/* Form A when A is stored in the lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ i__3 = j;
+ if (X(j).r != 0. || X(j).i != 0. || (Y(j).r != 0. ||
+ Y(j).i != 0.)) {
+ d_cnjg(&z__2, &Y(j));
+ z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
+ alpha->r * z__2.i + alpha->i * z__2.r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ i__2 = j;
+ z__2.r = alpha->r * X(j).r - alpha->i * X(j).i,
+ z__2.i = alpha->r * X(j).i + alpha->i * X(j)
+ .r;
+ d_cnjg(&z__1, &z__2);
+ temp2.r = z__1.r, temp2.i = z__1.i;
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ i__4 = j;
+ z__2.r = X(j).r * temp1.r - X(j).i * temp1.i,
+ z__2.i = X(j).r * temp1.i + X(j).i *
+ temp1.r;
+ i__5 = j;
+ z__3.r = Y(j).r * temp2.r - Y(j).i * temp2.i,
+ z__3.i = Y(j).r * temp2.i + Y(j).i *
+ temp2.r;
+ z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
+ d__1 = A(j,j).r + z__1.r;
+ A(j,j).r = d__1, A(j,j).i = 0.;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = i;
+ z__3.r = X(i).r * temp1.r - X(i).i * temp1.i,
+ z__3.i = X(i).r * temp1.i + X(i).i *
+ temp1.r;
+ z__2.r = A(i,j).r + z__3.r, z__2.i = A(i,j).i +
+ z__3.i;
+ i__6 = i;
+ z__4.r = Y(i).r * temp2.r - Y(i).i * temp2.i,
+ z__4.i = Y(i).r * temp2.i + Y(i).i *
+ temp2.r;
+ z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
+ A(i,j).r = z__1.r, A(i,j).i = z__1.i;
+/* L50: */
+ }
+ } else {
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ A(j,j).r = d__1, A(j,j).i = 0.;
+ }
+/* L60: */
+ }
+ } else {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ i__3 = jy;
+ if (X(jx).r != 0. || X(jx).i != 0. || (Y(jy).r != 0. ||
+ Y(jy).i != 0.)) {
+ d_cnjg(&z__2, &Y(jy));
+ z__1.r = alpha->r * z__2.r - alpha->i * z__2.i, z__1.i =
+ alpha->r * z__2.i + alpha->i * z__2.r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ i__2 = jx;
+ z__2.r = alpha->r * X(jx).r - alpha->i * X(jx).i,
+ z__2.i = alpha->r * X(jx).i + alpha->i * X(jx)
+ .r;
+ d_cnjg(&z__1, &z__2);
+ temp2.r = z__1.r, temp2.i = z__1.i;
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ i__4 = jx;
+ z__2.r = X(jx).r * temp1.r - X(jx).i * temp1.i,
+ z__2.i = X(jx).r * temp1.i + X(jx).i *
+ temp1.r;
+ i__5 = jy;
+ z__3.r = Y(jy).r * temp2.r - Y(jy).i * temp2.i,
+ z__3.i = Y(jy).r * temp2.i + Y(jy).i *
+ temp2.r;
+ z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
+ d__1 = A(j,j).r + z__1.r;
+ A(j,j).r = d__1, A(j,j).i = 0.;
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ iy += *incy;
+ i__3 = i + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ i__5 = ix;
+ z__3.r = X(ix).r * temp1.r - X(ix).i * temp1.i,
+ z__3.i = X(ix).r * temp1.i + X(ix).i *
+ temp1.r;
+ z__2.r = A(i,j).r + z__3.r, z__2.i = A(i,j).i +
+ z__3.i;
+ i__6 = iy;
+ z__4.r = Y(iy).r * temp2.r - Y(iy).i * temp2.i,
+ z__4.i = Y(iy).r * temp2.i + Y(iy).i *
+ temp2.r;
+ z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
+ A(i,j).r = z__1.r, A(i,j).i = z__1.i;
+/* L70: */
+ }
+ } else {
+ i__2 = j + j * a_dim1;
+ i__3 = j + j * a_dim1;
+ d__1 = A(j,j).r;
+ A(j,j).r = d__1, A(j,j).i = 0.;
+ }
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of ZHER2 . */
+
+} /* zher2_ */
+
diff --git a/CBLAS/zscal.c b/SuperLU_5.2.0/CBLAS/zscal.c
similarity index 100%
rename from CBLAS/zscal.c
rename to SuperLU_5.2.0/CBLAS/zscal.c
diff --git a/CBLAS/zswap.c b/SuperLU_5.2.0/CBLAS/zswap.c
similarity index 100%
rename from CBLAS/zswap.c
rename to SuperLU_5.2.0/CBLAS/zswap.c
diff --git a/SuperLU_5.2.0/CBLAS/ztrsv.c b/SuperLU_5.2.0/CBLAS/ztrsv.c
new file mode 100644
index 0000000..e8f04f7
--- /dev/null
+++ b/SuperLU_5.2.0/CBLAS/ztrsv.c
@@ -0,0 +1,508 @@
+
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int ztrsv_(char *uplo, char *trans, char *diag, integer *n,
+ doublecomplex *a, integer *lda, doublecomplex *x, integer *incx)
+{
+
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ doublecomplex z__1, z__2, z__3;
+
+ /* Builtin functions */
+ void z_div(doublecomplex *, doublecomplex *, doublecomplex *), d_cnjg(
+ doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer info;
+ static doublecomplex temp;
+ static integer i, j;
+ static integer ix, jx, kx;
+ static logical noconj, nounit;
+
+ extern int input_error(char *, int *);
+
+/* Purpose
+ =======
+
+ ZTRSV solves one of the systems of equations
+
+ A*x = b, or A'*x = b, or conjg( A' )*x = b,
+
+ where b and x are n element vectors and A is an n by n 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.
+
+ Parameters
+ ==========
+
+ UPLO - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ TRANS - CHARACTER*1.
+ 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' conjg( A' )*x = b.
+
+ Unchanged on exit.
+
+ DIAG - CHARACTER*1.
+ 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.
+
+ Unchanged on exit.
+
+ N - INTEGER.
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ A - COMPLEX*16 array of DIMENSION ( LDA, n ).
+ Before entry with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular matrix and the strictly lower triangular part of
+
+ A is not referenced.
+ Before entry with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular matrix and the strictly upper triangular part of
+
+ A is not referenced.
+ Note that when DIAG = 'U' or 'u', the diagonal elements of
+
+ A are not referenced either, but are assumed to be unity.
+ Unchanged on exit.
+
+ LDA - INTEGER.
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, n ).
+ Unchanged on exit.
+
+ X - COMPLEX*16 array of dimension at least
+ ( 1 + ( n - 1 )*abs( INCX ) ).
+ 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.
+
+ INCX - INTEGER.
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+
+ Level 2 Blas routine.
+
+ -- Written on 22-October-1986.
+ Jack Dongarra, Argonne National Lab.
+ Jeremy Du Croz, Nag Central Office.
+ Sven Hammarling, Nag Central Office.
+ Richard Hanson, Sandia National Labs.
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+#define X(I) x[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0 ) {
+ info = 1;
+ } else if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0 ) {
+ info = 2;
+ } else if ( strncmp(diag, "U", 1)!=0 && strncmp(diag, "N", 1)!=0 ) {
+ info = 3;
+ } else if (*n < 0) {
+ info = 4;
+ } else if (*lda < max(1,*n)) {
+ info = 6;
+ } else if (*incx == 0) {
+ info = 8;
+ }
+ if (info != 0) {
+ input_error("ZTRSV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0) {
+ return 0;
+ }
+
+ noconj = (strncmp(trans, "T", 1)==0);
+ nounit = (strncmp(diag, "N", 1)==0);
+
+/* Set up the start point in X if the increment is not unity. This
+ will be ( N - 1 )*INCX too small for descending loops. */
+
+ if (*incx <= 0) {
+ kx = 1 - (*n - 1) * *incx;
+ } else if (*incx != 1) {
+ kx = 1;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+
+ if (strncmp(trans, "N", 1)==0) {
+
+/* Form x := inv( A )*x. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+ if (*incx == 1) {
+ for (j = *n; j >= 1; --j) {
+ i__1 = j;
+ if (X(j).r != 0. || X(j).i != 0.) {
+ if (nounit) {
+ i__1 = j;
+ z_div(&z__1, &X(j), &A(j,j));
+ X(j).r = z__1.r, X(j).i = z__1.i;
+ }
+ i__1 = j;
+ temp.r = X(j).r, temp.i = X(j).i;
+ for (i = j - 1; i >= 1; --i) {
+ i__1 = i;
+ i__2 = i;
+ i__3 = i + j * a_dim1;
+ z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ z__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
+ z__1.r = X(i).r - z__2.r, z__1.i = X(i).i -
+ z__2.i;
+ X(i).r = z__1.r, X(i).i = z__1.i;
+/* L10: */
+ }
+ }
+/* L20: */
+ }
+ } else {
+ jx = kx + (*n - 1) * *incx;
+ for (j = *n; j >= 1; --j) {
+ i__1 = jx;
+ if (X(jx).r != 0. || X(jx).i != 0.) {
+ if (nounit) {
+ i__1 = jx;
+ z_div(&z__1, &X(jx), &A(j,j));
+ X(jx).r = z__1.r, X(jx).i = z__1.i;
+ }
+ i__1 = jx;
+ temp.r = X(jx).r, temp.i = X(jx).i;
+ ix = jx;
+ for (i = j - 1; i >= 1; --i) {
+ ix -= *incx;
+ i__1 = ix;
+ i__2 = ix;
+ i__3 = i + j * a_dim1;
+ z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ z__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
+ z__1.r = X(ix).r - z__2.r, z__1.i = X(ix).i -
+ z__2.i;
+ X(ix).r = z__1.r, X(ix).i = z__1.i;
+/* L30: */
+ }
+ }
+ jx -= *incx;
+/* L40: */
+ }
+ }
+ } else {
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ if (X(j).r != 0. || X(j).i != 0.) {
+ if (nounit) {
+ i__2 = j;
+ z_div(&z__1, &X(j), &A(j,j));
+ X(j).r = z__1.r, X(j).i = z__1.i;
+ }
+ i__2 = j;
+ temp.r = X(j).r, temp.i = X(j).i;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ z__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
+ z__1.r = X(i).r - z__2.r, z__1.i = X(i).i -
+ z__2.i;
+ X(i).r = z__1.r, X(i).i = z__1.i;
+/* L50: */
+ }
+ }
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ if (X(jx).r != 0. || X(jx).i != 0.) {
+ if (nounit) {
+ i__2 = jx;
+ z_div(&z__1, &X(jx), &A(j,j));
+ X(jx).r = z__1.r, X(jx).i = z__1.i;
+ }
+ i__2 = jx;
+ temp.r = X(jx).r, temp.i = X(jx).i;
+ ix = jx;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ i__3 = ix;
+ i__4 = ix;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp.r * A(i,j).r - temp.i * A(i,j).i,
+ z__2.i = temp.r * A(i,j).i + temp.i * A(i,j).r;
+ z__1.r = X(ix).r - z__2.r, z__1.i = X(ix).i -
+ z__2.i;
+ X(ix).r = z__1.r, X(ix).i = z__1.i;
+/* L70: */
+ }
+ }
+ jx += *incx;
+/* L80: */
+ }
+ }
+ }
+ } else {
+
+/* Form x := inv( A' )*x or x := inv( conjg( A' ) )*x. */
+
+ if (strncmp(uplo, "U", 1)==0) {
+ if (*incx == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ temp.r = X(j).r, temp.i = X(j).i;
+ if (noconj) {
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = i;
+ z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(
+ i).i, z__2.i = A(i,j).r * X(i).i +
+ A(i,j).i * X(i).r;
+ z__1.r = temp.r - z__2.r, z__1.i = temp.i -
+ z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+/* L90: */
+ }
+ if (nounit) {
+ z_div(&z__1, &temp, &A(j,j));
+ temp.r = z__1.r, temp.i = z__1.i;
+ }
+ } else {
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ d_cnjg(&z__3, &A(i,j));
+ i__3 = i;
+ z__2.r = z__3.r * X(i).r - z__3.i * X(i).i,
+ z__2.i = z__3.r * X(i).i + z__3.i * X(
+ i).r;
+ z__1.r = temp.r - z__2.r, z__1.i = temp.i -
+ z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+/* L100: */
+ }
+ if (nounit) {
+ d_cnjg(&z__2, &A(j,j));
+ z_div(&z__1, &temp, &z__2);
+ temp.r = z__1.r, temp.i = z__1.i;
+ }
+ }
+ i__2 = j;
+ X(j).r = temp.r, X(j).i = temp.i;
+/* L110: */
+ }
+ } else {
+ jx = kx;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ ix = kx;
+ i__2 = jx;
+ temp.r = X(jx).r, temp.i = X(jx).i;
+ if (noconj) {
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i + j * a_dim1;
+ i__4 = ix;
+ z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(
+ ix).i, z__2.i = A(i,j).r * X(ix).i +
+ A(i,j).i * X(ix).r;
+ z__1.r = temp.r - z__2.r, z__1.i = temp.i -
+ z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+ ix += *incx;
+/* L120: */
+ }
+ if (nounit) {
+ z_div(&z__1, &temp, &A(j,j));
+ temp.r = z__1.r, temp.i = z__1.i;
+ }
+ } else {
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ d_cnjg(&z__3, &A(i,j));
+ i__3 = ix;
+ z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i,
+ z__2.i = z__3.r * X(ix).i + z__3.i * X(
+ ix).r;
+ z__1.r = temp.r - z__2.r, z__1.i = temp.i -
+ z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+ ix += *incx;
+/* L130: */
+ }
+ if (nounit) {
+ d_cnjg(&z__2, &A(j,j));
+ z_div(&z__1, &temp, &z__2);
+ temp.r = z__1.r, temp.i = z__1.i;
+ }
+ }
+ i__2 = jx;
+ X(jx).r = temp.r, X(jx).i = temp.i;
+ jx += *incx;
+/* L140: */
+ }
+ }
+ } else {
+ if (*incx == 1) {
+ for (j = *n; j >= 1; --j) {
+ i__1 = j;
+ temp.r = X(j).r, temp.i = X(j).i;
+ if (noconj) {
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ i__2 = i + j * a_dim1;
+ i__3 = i;
+ z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(
+ i).i, z__2.i = A(i,j).r * X(i).i +
+ A(i,j).i * X(i).r;
+ z__1.r = temp.r - z__2.r, z__1.i = temp.i -
+ z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+/* L150: */
+ }
+ if (nounit) {
+ z_div(&z__1, &temp, &A(j,j));
+ temp.r = z__1.r, temp.i = z__1.i;
+ }
+ } else {
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ d_cnjg(&z__3, &A(i,j));
+ i__2 = i;
+ z__2.r = z__3.r * X(i).r - z__3.i * X(i).i,
+ z__2.i = z__3.r * X(i).i + z__3.i * X(
+ i).r;
+ z__1.r = temp.r - z__2.r, z__1.i = temp.i -
+ z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+/* L160: */
+ }
+ if (nounit) {
+ d_cnjg(&z__2, &A(j,j));
+ z_div(&z__1, &temp, &z__2);
+ temp.r = z__1.r, temp.i = z__1.i;
+ }
+ }
+ i__1 = j;
+ X(j).r = temp.r, X(j).i = temp.i;
+/* L170: */
+ }
+ } else {
+ kx += (*n - 1) * *incx;
+ jx = kx;
+ for (j = *n; j >= 1; --j) {
+ ix = kx;
+ i__1 = jx;
+ temp.r = X(jx).r, temp.i = X(jx).i;
+ if (noconj) {
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ i__2 = i + j * a_dim1;
+ i__3 = ix;
+ z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(
+ ix).i, z__2.i = A(i,j).r * X(ix).i +
+ A(i,j).i * X(ix).r;
+ z__1.r = temp.r - z__2.r, z__1.i = temp.i -
+ z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+ ix -= *incx;
+/* L180: */
+ }
+ if (nounit) {
+ z_div(&z__1, &temp, &A(j,j));
+ temp.r = z__1.r, temp.i = z__1.i;
+ }
+ } else {
+ i__1 = j + 1;
+ for (i = *n; i >= j+1; --i) {
+ d_cnjg(&z__3, &A(i,j));
+ i__2 = ix;
+ z__2.r = z__3.r * X(ix).r - z__3.i * X(ix).i,
+ z__2.i = z__3.r * X(ix).i + z__3.i * X(
+ ix).r;
+ z__1.r = temp.r - z__2.r, z__1.i = temp.i -
+ z__2.i;
+ temp.r = z__1.r, temp.i = z__1.i;
+ ix -= *incx;
+/* L190: */
+ }
+ if (nounit) {
+ d_cnjg(&z__2, &A(j,j));
+ z_div(&z__1, &temp, &z__2);
+ temp.r = z__1.r, temp.i = z__1.i;
+ }
+ }
+ i__1 = jx;
+ X(jx).r = temp.r, X(jx).i = temp.i;
+ jx -= *incx;
+/* L200: */
+ }
+ }
+ }
+ }
+
+ return 0;
+
+/* End of ZTRSV . */
+
+} /* ztrsv_ */
+
diff --git a/SuperLU_5.2.0/CMakeLists.txt b/SuperLU_5.2.0/CMakeLists.txt
new file mode 100644
index 0000000..c3b6bc8
--- /dev/null
+++ b/SuperLU_5.2.0/CMakeLists.txt
@@ -0,0 +1,143 @@
+######################################################################
+#
+# CMakeLists.txt for SUPERLU
+#
+######################################################################
+
+# Required version
+cmake_minimum_required(VERSION 2.8.12)
+
+# Project Version
+project(SuperLU NONE)
+set(VERSION_MAJOR "5")
+set(VERSION_MINOR "1")
+set(VERSION_BugFix "1")
+set(PROJECT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BugFix})
+
+######################################################################
+#
+# IDEAS: xSDK standards module
+MESSAGE("\nProcess XSDK defaults ...")
+# SET(USE_XSDK_DEFAULTS_DEFAULT TRUE) # Set to false if desired
+INCLUDE("cmake/XSDKDefaults.cmake")
+######################################################################
+
+######################################################################
+#
+# Usual initialization stuff
+#
+######################################################################
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) ## ????
+set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
+
+if (BUILD_SHARED_LIBS)
+ message("-- SuperLU will be built as a shared library.")
+ set(PROJECT_NAME_LIB_EXPORT libsuperlu.so)
+else()
+ message("-- SuperLU will be built as a static library.")
+ set(PROJECT_NAME_LIB_EXPORT libsuperlu.a)
+endif()
+
+enable_language(C)
+enable_language (Fortran)
+set(NOFORTRAN FALSE)
+set(SUPERLU_VERSION "${PROJECT_VERSION}")
+set(SUPERLU_REV "${PROJECT_REV}")
+
+# The XSDK standard does not allow using internally built BLAS
+if (USE_XSDK_DEFAULTS)
+ set(enable_blaslib_DEFAULT OFF)
+else()
+ set(enable_blaslib_DEFAULT ON)
+endif()
+
+# setup options
+option(enable_blaslib "Build the CBLAS library" ${enable_blaslib_DEFAULT})
+option(enable_matlabmex "Build the Matlab mex library" OFF)
+option(enable_tests "Build tests" ON)
+option(enable_doc "Build doxygen documentation" OFF)
+option(enable_single "Enable single precision library" ON)
+option(enable_double "Enable double precision library" ON)
+option(enable_complex "Enable complex precision library" ON)
+option(enable_complex16 "Enable complex16 precision library" ON)
+# option(enable_examples "Build examples" ON)
+
+# setup required compiler defines and options.
+## add_definitions(-DPRNTlevel=0 -DAdd_)
+## get_directory_property( DirDefs COMPILE_DEFINITIONS )
+set(CMAKE_C_FLAGS "-DPRNTlevel=0 -DAdd_ ${CMAKE_C_FLAGS}")
+set(CMAKE_C_FLAGS_RELEASE "-O3" CACHE STRING "")
+
+######################################################################
+#
+# Find packages
+#
+######################################################################
+#
+#--------------------- BLAS ---------------------
+if(NOT enable_blaslib)
+ if (TPL_BLAS_LIBRARIES)
+ set(BLAS_FOUND TRUE)
+ else()
+ find_package(BLAS)
+ if (BLAS_FOUND)
+ set(TPL_BLAS_LIBRARIES "${BLAS_LIBRARIES}" CACHE FILEPATH
+ "Set from FindBLAS.cmake BLAS_LIBRARIES." FORCE)
+ endif()
+ endif()
+endif()
+
+if(BLAS_FOUND)
+ message("-- Using TPL_BLAS_LIBRARIES='${TPL_BLAS_LIBRARIES}'")
+ set(CMAKE_C_FLAGS "-DUSE_VENDOR_BLAS ${CMAKE_C_FLAGS}")
+ set(BLAS_LIB ${TPL_BLAS_LIBRARIES})
+ # fix up BLAS library name
+ string (REPLACE ";" " " BLAS_LIB_STR "${BLAS_LIB}")
+ set(BLAS_LIB_EXPORT ${BLAS_LIB_STR})
+else()
+ message("-- Did not find or specify BLAS so configure to build internal CBLAS ...")
+ add_subdirectory(CBLAS)
+ set(BLAS_LIB blas)
+ if (BUILD_SHARED_LIBS) # export to be referenced by downstream makefile
+ set(BLAS_LIB_EXPORT ${CMAKE_SOURCE_DIR}/build/CBLAS/libblas.so)
+ else()
+ set(BLAS_LIB_EXPORT ${CMAKE_SOURCE_DIR}/build/CBLAS/libblas.a)
+ endif()
+endif()
+
+
+######################################################################
+#
+# Include directories
+#
+######################################################################
+
+include_directories(${CMAKE_SOURCE_DIR}/SRC)
+
+######################################################################
+#
+# Add subdirectories
+#
+######################################################################
+
+add_subdirectory(SRC)
+
+if(enable_matlabmex)
+ add_subdirectory(MATLAB)
+endif()
+
+if(enable_tests)
+ enable_testing()
+ add_subdirectory(TESTING)
+endif()
+
+if(enable_doc)
+ message(FATAL_ERROR "Documentation build requested but not implemented.")
+ #implement doxygen
+endif()
+
+
+# file(WRITE "make.defs" "# can be exposed to users"
+# ${CMAKE_C_COMPILER} )
+configure_file(${CMAKE_SOURCE_DIR}/make.inc.in ${CMAKE_SOURCE_DIR}/make.inc)
+
diff --git a/SuperLU_5.2.0/DOC/._html b/SuperLU_5.2.0/DOC/._html
new file mode 100755
index 0000000..931c777
Binary files /dev/null and b/SuperLU_5.2.0/DOC/._html differ
diff --git a/SuperLU_5.2.0/DOC/._ug.pdf b/SuperLU_5.2.0/DOC/._ug.pdf
new file mode 100644
index 0000000..7e70a76
Binary files /dev/null and b/SuperLU_5.2.0/DOC/._ug.pdf differ
diff --git a/SuperLU_5.2.0/DOC/html/._EXAMPLE_2sp__ienv_8c.html b/SuperLU_5.2.0/DOC/html/._EXAMPLE_2sp__ienv_8c.html
new file mode 100644
index 0000000..aeea669
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._EXAMPLE_2sp__ienv_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._SRC_2sp__ienv_8c.html b/SuperLU_5.2.0/DOC/html/._SRC_2sp__ienv_8c.html
new file mode 100644
index 0000000..d0749ca
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._SRC_2sp__ienv_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._annotated.html b/SuperLU_5.2.0/DOC/html/._annotated.html
new file mode 100644
index 0000000..3f79317
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._annotated.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ccolumn__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._ccolumn__bmod_8c.html
new file mode 100644
index 0000000..87691b6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ccolumn__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ccolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ccolumn__dfs_8c.html
new file mode 100644
index 0000000..2380eac
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ccolumn__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ccopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/._ccopy__to__ucol_8c.html
new file mode 100644
index 0000000..8f59cc0
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ccopy__to__ucol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cdiagonal_8c.html b/SuperLU_5.2.0/DOC/html/._cdiagonal_8c.html
new file mode 100644
index 0000000..86a0687
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cdiagonal_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cfgmr_8c.html b/SuperLU_5.2.0/DOC/html/._cfgmr_8c.html
new file mode 100644
index 0000000..6c32d59
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cfgmr_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cgscon_8c.html b/SuperLU_5.2.0/DOC/html/._cgscon_8c.html
new file mode 100644
index 0000000..29ebbe6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cgscon_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cgsequ_8c.html b/SuperLU_5.2.0/DOC/html/._cgsequ_8c.html
new file mode 100644
index 0000000..dbc0b72
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cgsequ_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cgsisx_8c.html b/SuperLU_5.2.0/DOC/html/._cgsisx_8c.html
new file mode 100644
index 0000000..1ef3e9e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cgsisx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cgsitrf_8c.html b/SuperLU_5.2.0/DOC/html/._cgsitrf_8c.html
new file mode 100644
index 0000000..f00a575
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cgsitrf_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cgsrfs_8c.html b/SuperLU_5.2.0/DOC/html/._cgsrfs_8c.html
new file mode 100644
index 0000000..f19bed3
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cgsrfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cgssv_8c.html b/SuperLU_5.2.0/DOC/html/._cgssv_8c.html
new file mode 100644
index 0000000..b2fa337
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cgssv_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cgssvx_8c.html b/SuperLU_5.2.0/DOC/html/._cgssvx_8c.html
new file mode 100644
index 0000000..16a6f91
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cgssvx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cgstrf_8c.html b/SuperLU_5.2.0/DOC/html/._cgstrf_8c.html
new file mode 100644
index 0000000..434e2dd
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cgstrf_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cgstrs_8c.html b/SuperLU_5.2.0/DOC/html/._cgstrs_8c.html
new file mode 100644
index 0000000..11516b9
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cgstrs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._citersol1_8c.html b/SuperLU_5.2.0/DOC/html/._citersol1_8c.html
new file mode 100644
index 0000000..0e38d0a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._citersol1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._citersol_8c.html b/SuperLU_5.2.0/DOC/html/._citersol_8c.html
new file mode 100644
index 0000000..b4feb06
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._citersol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._clacon_8c.html b/SuperLU_5.2.0/DOC/html/._clacon_8c.html
new file mode 100644
index 0000000..5ab69af
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._clacon_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._clangs_8c.html b/SuperLU_5.2.0/DOC/html/._clangs_8c.html
new file mode 100644
index 0000000..b0a9013
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._clangs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._claqgs_8c.html b/SuperLU_5.2.0/DOC/html/._claqgs_8c.html
new file mode 100644
index 0000000..fc2b2c2
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._claqgs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cldperm_8c.html b/SuperLU_5.2.0/DOC/html/._cldperm_8c.html
new file mode 100644
index 0000000..46ee14c
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cldperm_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._clinsol1_8c.html b/SuperLU_5.2.0/DOC/html/._clinsol1_8c.html
new file mode 100644
index 0000000..fe6d04f
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._clinsol1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._clinsol_8c.html b/SuperLU_5.2.0/DOC/html/._clinsol_8c.html
new file mode 100644
index 0000000..481ef11
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._clinsol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._clinsolx1_8c.html b/SuperLU_5.2.0/DOC/html/._clinsolx1_8c.html
new file mode 100644
index 0000000..cce3d98
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._clinsolx1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._clinsolx2_8c.html b/SuperLU_5.2.0/DOC/html/._clinsolx2_8c.html
new file mode 100644
index 0000000..3700725
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._clinsolx2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._clinsolx_8c.html b/SuperLU_5.2.0/DOC/html/._clinsolx_8c.html
new file mode 100644
index 0000000..1e18556
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._clinsolx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cmemory_8c.html b/SuperLU_5.2.0/DOC/html/._cmemory_8c.html
new file mode 100644
index 0000000..5f4e26e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cmemory_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cmyblas2_8c.html b/SuperLU_5.2.0/DOC/html/._cmyblas2_8c.html
new file mode 100644
index 0000000..18283db
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cmyblas2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._colamd_8c.html b/SuperLU_5.2.0/DOC/html/._colamd_8c.html
new file mode 100644
index 0000000..037cebc
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._colamd_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._colamd_8h.html b/SuperLU_5.2.0/DOC/html/._colamd_8h.html
new file mode 100644
index 0000000..812f5d6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._colamd_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cpanel__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._cpanel__bmod_8c.html
new file mode 100644
index 0000000..a1df7fb
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cpanel__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._cpanel__dfs_8c.html
new file mode 100644
index 0000000..b25b7b5
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cpanel__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cpivotL_8c.html b/SuperLU_5.2.0/DOC/html/._cpivotL_8c.html
new file mode 100644
index 0000000..1d5a7ee
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cpivotL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cpivotgrowth_8c.html b/SuperLU_5.2.0/DOC/html/._cpivotgrowth_8c.html
new file mode 100644
index 0000000..a8ffb2c
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cpivotgrowth_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cpruneL_8c.html b/SuperLU_5.2.0/DOC/html/._cpruneL_8c.html
new file mode 100644
index 0000000..c242b98
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cpruneL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._creadhb_8c.html b/SuperLU_5.2.0/DOC/html/._creadhb_8c.html
new file mode 100644
index 0000000..4b7dd37
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._creadhb_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._creadrb_8c.html b/SuperLU_5.2.0/DOC/html/._creadrb_8c.html
new file mode 100644
index 0000000..6280baa
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._creadrb_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._creadtriple_8c.html b/SuperLU_5.2.0/DOC/html/._creadtriple_8c.html
new file mode 100644
index 0000000..d0be069
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._creadtriple_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._csnode__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._csnode__bmod_8c.html
new file mode 100644
index 0000000..2dae305
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._csnode__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._csnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._csnode__dfs_8c.html
new file mode 100644
index 0000000..c143e4c
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._csnode__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._csp__blas2_8c.html b/SuperLU_5.2.0/DOC/html/._csp__blas2_8c.html
new file mode 100644
index 0000000..384c0d1
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._csp__blas2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._csp__blas3_8c.html b/SuperLU_5.2.0/DOC/html/._csp__blas3_8c.html
new file mode 100644
index 0000000..e7b042e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._csp__blas3_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._cutil_8c.html b/SuperLU_5.2.0/DOC/html/._cutil_8c.html
new file mode 100644
index 0000000..dffa0ca
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._cutil_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dcolumn__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._dcolumn__bmod_8c.html
new file mode 100644
index 0000000..8076069
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dcolumn__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dcolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._dcolumn__dfs_8c.html
new file mode 100644
index 0000000..d86c8ca
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dcolumn__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dcomplex_8c.html b/SuperLU_5.2.0/DOC/html/._dcomplex_8c.html
new file mode 100644
index 0000000..8fb2f5a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dcomplex_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dcopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/._dcopy__to__ucol_8c.html
new file mode 100644
index 0000000..151c871
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dcopy__to__ucol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ddiagonal_8c.html b/SuperLU_5.2.0/DOC/html/._ddiagonal_8c.html
new file mode 100644
index 0000000..34d6062
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ddiagonal_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dfgmr_8c.html b/SuperLU_5.2.0/DOC/html/._dfgmr_8c.html
new file mode 100644
index 0000000..1bed594
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dfgmr_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dgscon_8c.html b/SuperLU_5.2.0/DOC/html/._dgscon_8c.html
new file mode 100644
index 0000000..3892699
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dgscon_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dgsequ_8c.html b/SuperLU_5.2.0/DOC/html/._dgsequ_8c.html
new file mode 100644
index 0000000..fb4cbc2
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dgsequ_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dgsisx_8c.html b/SuperLU_5.2.0/DOC/html/._dgsisx_8c.html
new file mode 100644
index 0000000..b755922
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dgsisx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dgsitrf_8c.html b/SuperLU_5.2.0/DOC/html/._dgsitrf_8c.html
new file mode 100644
index 0000000..d56582d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dgsitrf_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dgsrfs_8c.html b/SuperLU_5.2.0/DOC/html/._dgsrfs_8c.html
new file mode 100644
index 0000000..3298ba3
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dgsrfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dgssv_8c.html b/SuperLU_5.2.0/DOC/html/._dgssv_8c.html
new file mode 100644
index 0000000..30f0351
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dgssv_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dgssvx_8c.html b/SuperLU_5.2.0/DOC/html/._dgssvx_8c.html
new file mode 100644
index 0000000..422acfa
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dgssvx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dgstrf_8c.html b/SuperLU_5.2.0/DOC/html/._dgstrf_8c.html
new file mode 100644
index 0000000..811c8ce
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dgstrf_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dgstrs_8c.html b/SuperLU_5.2.0/DOC/html/._dgstrs_8c.html
new file mode 100644
index 0000000..4871008
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dgstrs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ditersol1_8c.html b/SuperLU_5.2.0/DOC/html/._ditersol1_8c.html
new file mode 100644
index 0000000..61f3a03
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ditersol1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ditersol_8c.html b/SuperLU_5.2.0/DOC/html/._ditersol_8c.html
new file mode 100644
index 0000000..3e9850b
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ditersol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dlacon_8c.html b/SuperLU_5.2.0/DOC/html/._dlacon_8c.html
new file mode 100644
index 0000000..e6a379a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dlacon_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dlangs_8c.html b/SuperLU_5.2.0/DOC/html/._dlangs_8c.html
new file mode 100644
index 0000000..e0f32e6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dlangs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dlaqgs_8c.html b/SuperLU_5.2.0/DOC/html/._dlaqgs_8c.html
new file mode 100644
index 0000000..c754c2e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dlaqgs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dldperm_8c.html b/SuperLU_5.2.0/DOC/html/._dldperm_8c.html
new file mode 100644
index 0000000..56ad652
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dldperm_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dlinsol1_8c.html b/SuperLU_5.2.0/DOC/html/._dlinsol1_8c.html
new file mode 100644
index 0000000..121a0bc
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dlinsol1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dlinsol_8c.html b/SuperLU_5.2.0/DOC/html/._dlinsol_8c.html
new file mode 100644
index 0000000..a95a829
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dlinsol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dlinsolx1_8c.html b/SuperLU_5.2.0/DOC/html/._dlinsolx1_8c.html
new file mode 100644
index 0000000..b8bfc39
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dlinsolx1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dlinsolx2_8c.html b/SuperLU_5.2.0/DOC/html/._dlinsolx2_8c.html
new file mode 100644
index 0000000..561282d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dlinsolx2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dlinsolx_8c.html b/SuperLU_5.2.0/DOC/html/._dlinsolx_8c.html
new file mode 100644
index 0000000..3e1bcbb
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dlinsolx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dmemory_8c.html b/SuperLU_5.2.0/DOC/html/._dmemory_8c.html
new file mode 100644
index 0000000..85994eb
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dmemory_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dmyblas2_8c.html b/SuperLU_5.2.0/DOC/html/._dmyblas2_8c.html
new file mode 100644
index 0000000..01b861f
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dmyblas2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._doxygen.css b/SuperLU_5.2.0/DOC/html/._doxygen.css
new file mode 100644
index 0000000..730635f
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._doxygen.css differ
diff --git a/SuperLU_5.2.0/DOC/html/._doxygen.png b/SuperLU_5.2.0/DOC/html/._doxygen.png
new file mode 100644
index 0000000..f9dc495
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._doxygen.png differ
diff --git a/SuperLU_5.2.0/DOC/html/._dpanel__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._dpanel__bmod_8c.html
new file mode 100644
index 0000000..1808c6b
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dpanel__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._dpanel__dfs_8c.html
new file mode 100644
index 0000000..cba7480
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dpanel__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dpivotL_8c.html b/SuperLU_5.2.0/DOC/html/._dpivotL_8c.html
new file mode 100644
index 0000000..cf0b5df
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dpivotL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dpivotgrowth_8c.html b/SuperLU_5.2.0/DOC/html/._dpivotgrowth_8c.html
new file mode 100644
index 0000000..52b96fa
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dpivotgrowth_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dpruneL_8c.html b/SuperLU_5.2.0/DOC/html/._dpruneL_8c.html
new file mode 100644
index 0000000..946bf1b
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dpruneL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dreadhb_8c.html b/SuperLU_5.2.0/DOC/html/._dreadhb_8c.html
new file mode 100644
index 0000000..39b5eaf
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dreadhb_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dreadrb_8c.html b/SuperLU_5.2.0/DOC/html/._dreadrb_8c.html
new file mode 100644
index 0000000..395b1cc
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dreadrb_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dreadtriple_8c.html b/SuperLU_5.2.0/DOC/html/._dreadtriple_8c.html
new file mode 100644
index 0000000..063fd8a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dreadtriple_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dsnode__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._dsnode__bmod_8c.html
new file mode 100644
index 0000000..285b7e8
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dsnode__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dsnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._dsnode__dfs_8c.html
new file mode 100644
index 0000000..a39ec47
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dsnode__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dsp__blas2_8c.html b/SuperLU_5.2.0/DOC/html/._dsp__blas2_8c.html
new file mode 100644
index 0000000..4efc109
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dsp__blas2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dsp__blas3_8c.html b/SuperLU_5.2.0/DOC/html/._dsp__blas3_8c.html
new file mode 100644
index 0000000..3948a6e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dsp__blas3_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dutil_8c.html b/SuperLU_5.2.0/DOC/html/._dutil_8c.html
new file mode 100644
index 0000000..80a5fc6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dutil_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._dzsum1_8c.html b/SuperLU_5.2.0/DOC/html/._dzsum1_8c.html
new file mode 100644
index 0000000..3d308f9
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._dzsum1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._fgmr_8c.html b/SuperLU_5.2.0/DOC/html/._fgmr_8c.html
new file mode 100644
index 0000000..a7a0db8
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._fgmr_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._files.html b/SuperLU_5.2.0/DOC/html/._files.html
new file mode 100644
index 0000000..d954460
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._files.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._functions.html b/SuperLU_5.2.0/DOC/html/._functions.html
new file mode 100644
index 0000000..799a9fc
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._functions.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._functions_vars.html b/SuperLU_5.2.0/DOC/html/._functions_vars.html
new file mode 100644
index 0000000..846fe29
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._functions_vars.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._get__perm__c_8c.html b/SuperLU_5.2.0/DOC/html/._get__perm__c_8c.html
new file mode 100644
index 0000000..cb731ad
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._get__perm__c_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._globals.html b/SuperLU_5.2.0/DOC/html/._globals.html
new file mode 100644
index 0000000..c78b5a9
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._globals.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._globals_defs.html b/SuperLU_5.2.0/DOC/html/._globals_defs.html
new file mode 100644
index 0000000..ee20ead
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._globals_defs.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._globals_enum.html b/SuperLU_5.2.0/DOC/html/._globals_enum.html
new file mode 100644
index 0000000..abc7307
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._globals_enum.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._globals_eval.html b/SuperLU_5.2.0/DOC/html/._globals_eval.html
new file mode 100644
index 0000000..7b5515a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._globals_eval.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._globals_func.html b/SuperLU_5.2.0/DOC/html/._globals_func.html
new file mode 100644
index 0000000..58b608d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._globals_func.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._globals_type.html b/SuperLU_5.2.0/DOC/html/._globals_type.html
new file mode 100644
index 0000000..8fb5c53
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._globals_type.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._globals_vars.html b/SuperLU_5.2.0/DOC/html/._globals_vars.html
new file mode 100644
index 0000000..29b18b3
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._globals_vars.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._heap__relax__snode_8c.html b/SuperLU_5.2.0/DOC/html/._heap__relax__snode_8c.html
new file mode 100644
index 0000000..e7dccb6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._heap__relax__snode_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._html__mainpage_8h.html b/SuperLU_5.2.0/DOC/html/._html__mainpage_8h.html
new file mode 100644
index 0000000..2fcd939
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._html__mainpage_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._icmax1_8c.html b/SuperLU_5.2.0/DOC/html/._icmax1_8c.html
new file mode 100644
index 0000000..b419abf
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._icmax1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__ccolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__ccolumn__dfs_8c.html
new file mode 100644
index 0000000..39d6314
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__ccolumn__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__ccopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__ccopy__to__ucol_8c.html
new file mode 100644
index 0000000..6ee0899
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__ccopy__to__ucol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__cdrop__row_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__cdrop__row_8c.html
new file mode 100644
index 0000000..2f105c7
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__cdrop__row_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__cpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__cpanel__dfs_8c.html
new file mode 100644
index 0000000..ac39d5d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__cpanel__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__cpivotL_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__cpivotL_8c.html
new file mode 100644
index 0000000..c4175c3
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__cpivotL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__csnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__csnode__dfs_8c.html
new file mode 100644
index 0000000..8d78145
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__csnode__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__dcolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__dcolumn__dfs_8c.html
new file mode 100644
index 0000000..868287b
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__dcolumn__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__dcopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__dcopy__to__ucol_8c.html
new file mode 100644
index 0000000..5a3bd05
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__dcopy__to__ucol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__ddrop__row_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__ddrop__row_8c.html
new file mode 100644
index 0000000..3c162b6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__ddrop__row_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__dpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__dpanel__dfs_8c.html
new file mode 100644
index 0000000..e28c39a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__dpanel__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__dpivotL_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__dpivotL_8c.html
new file mode 100644
index 0000000..a6acca7
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__dpivotL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__dsnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__dsnode__dfs_8c.html
new file mode 100644
index 0000000..a7c6c6e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__dsnode__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__heap__relax__snode_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__heap__relax__snode_8c.html
new file mode 100644
index 0000000..45b32c2
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__heap__relax__snode_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__relax__snode_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__relax__snode_8c.html
new file mode 100644
index 0000000..ca4fb78
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__relax__snode_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__scolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__scolumn__dfs_8c.html
new file mode 100644
index 0000000..d6e6f0e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__scolumn__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__scopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__scopy__to__ucol_8c.html
new file mode 100644
index 0000000..e00044a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__scopy__to__ucol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__sdrop__row_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__sdrop__row_8c.html
new file mode 100644
index 0000000..412e2bb
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__sdrop__row_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__spanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__spanel__dfs_8c.html
new file mode 100644
index 0000000..283c30b
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__spanel__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__spivotL_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__spivotL_8c.html
new file mode 100644
index 0000000..87fd8bb
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__spivotL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__ssnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__ssnode__dfs_8c.html
new file mode 100644
index 0000000..e0d8844
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__ssnode__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__zcolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__zcolumn__dfs_8c.html
new file mode 100644
index 0000000..ecf6801
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__zcolumn__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__zcopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__zcopy__to__ucol_8c.html
new file mode 100644
index 0000000..8ce5988
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__zcopy__to__ucol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__zdrop__row_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__zdrop__row_8c.html
new file mode 100644
index 0000000..1c831dd
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__zdrop__row_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__zpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__zpanel__dfs_8c.html
new file mode 100644
index 0000000..64df741
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__zpanel__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__zpivotL_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__zpivotL_8c.html
new file mode 100644
index 0000000..9200d13
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__zpivotL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ilu__zsnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ilu__zsnode__dfs_8c.html
new file mode 100644
index 0000000..6673bfd
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ilu__zsnode__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._index.html b/SuperLU_5.2.0/DOC/html/._index.html
new file mode 100644
index 0000000..b8c2512
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._index.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._izmax1_8c.html b/SuperLU_5.2.0/DOC/html/._izmax1_8c.html
new file mode 100644
index 0000000..b8751c6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._izmax1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._mark__relax_8c.html b/SuperLU_5.2.0/DOC/html/._mark__relax_8c.html
new file mode 100644
index 0000000..d71e377
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._mark__relax_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._mc64ad_8c.html b/SuperLU_5.2.0/DOC/html/._mc64ad_8c.html
new file mode 100644
index 0000000..d39d4f5
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._mc64ad_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._memory_8c.html b/SuperLU_5.2.0/DOC/html/._memory_8c.html
new file mode 100644
index 0000000..29d8d55
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._memory_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._mmd_8c.html b/SuperLU_5.2.0/DOC/html/._mmd_8c.html
new file mode 100644
index 0000000..c17fc1d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._mmd_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._qselect_8c.html b/SuperLU_5.2.0/DOC/html/._qselect_8c.html
new file mode 100644
index 0000000..621d40c
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._qselect_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._relax__snode_8c.html b/SuperLU_5.2.0/DOC/html/._relax__snode_8c.html
new file mode 100644
index 0000000..3b0c875
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._relax__snode_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._scolumn__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._scolumn__bmod_8c.html
new file mode 100644
index 0000000..204a432
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._scolumn__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._scolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._scolumn__dfs_8c.html
new file mode 100644
index 0000000..e375de9
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._scolumn__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._scomplex_8c.html b/SuperLU_5.2.0/DOC/html/._scomplex_8c.html
new file mode 100644
index 0000000..abe975a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._scomplex_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._scopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/._scopy__to__ucol_8c.html
new file mode 100644
index 0000000..06f0c66
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._scopy__to__ucol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._scsum1_8c.html b/SuperLU_5.2.0/DOC/html/._scsum1_8c.html
new file mode 100644
index 0000000..10035a1
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._scsum1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sdiagonal_8c.html b/SuperLU_5.2.0/DOC/html/._sdiagonal_8c.html
new file mode 100644
index 0000000..cb6a901
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sdiagonal_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sfgmr_8c.html b/SuperLU_5.2.0/DOC/html/._sfgmr_8c.html
new file mode 100644
index 0000000..f34333c
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sfgmr_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sgscon_8c.html b/SuperLU_5.2.0/DOC/html/._sgscon_8c.html
new file mode 100644
index 0000000..1a21795
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sgscon_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sgsequ_8c.html b/SuperLU_5.2.0/DOC/html/._sgsequ_8c.html
new file mode 100644
index 0000000..7f0ef4e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sgsequ_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sgsisx_8c.html b/SuperLU_5.2.0/DOC/html/._sgsisx_8c.html
new file mode 100644
index 0000000..fd010ce
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sgsisx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sgsitrf_8c.html b/SuperLU_5.2.0/DOC/html/._sgsitrf_8c.html
new file mode 100644
index 0000000..3c930a3
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sgsitrf_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sgsrfs_8c.html b/SuperLU_5.2.0/DOC/html/._sgsrfs_8c.html
new file mode 100644
index 0000000..3ff6c92
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sgsrfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sgssv_8c.html b/SuperLU_5.2.0/DOC/html/._sgssv_8c.html
new file mode 100644
index 0000000..a113a0c
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sgssv_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sgssvx_8c.html b/SuperLU_5.2.0/DOC/html/._sgssvx_8c.html
new file mode 100644
index 0000000..f5d47d6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sgssvx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sgstrf_8c.html b/SuperLU_5.2.0/DOC/html/._sgstrf_8c.html
new file mode 100644
index 0000000..f1280b3
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sgstrf_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sgstrs_8c.html b/SuperLU_5.2.0/DOC/html/._sgstrs_8c.html
new file mode 100644
index 0000000..258fc2d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sgstrs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sitersol1_8c.html b/SuperLU_5.2.0/DOC/html/._sitersol1_8c.html
new file mode 100644
index 0000000..027952d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sitersol1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sitersol_8c.html b/SuperLU_5.2.0/DOC/html/._sitersol_8c.html
new file mode 100644
index 0000000..eb9e2d5
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sitersol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slacon_8c.html b/SuperLU_5.2.0/DOC/html/._slacon_8c.html
new file mode 100644
index 0000000..e1caf5e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slacon_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slangs_8c.html b/SuperLU_5.2.0/DOC/html/._slangs_8c.html
new file mode 100644
index 0000000..9deacbd
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slangs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slaqgs_8c.html b/SuperLU_5.2.0/DOC/html/._slaqgs_8c.html
new file mode 100644
index 0000000..8a22185
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slaqgs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sldperm_8c.html b/SuperLU_5.2.0/DOC/html/._sldperm_8c.html
new file mode 100644
index 0000000..fe8c9da
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sldperm_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slinsol1_8c.html b/SuperLU_5.2.0/DOC/html/._slinsol1_8c.html
new file mode 100644
index 0000000..6f7fc77
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slinsol1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slinsol_8c.html b/SuperLU_5.2.0/DOC/html/._slinsol_8c.html
new file mode 100644
index 0000000..656ca72
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slinsol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slinsolx1_8c.html b/SuperLU_5.2.0/DOC/html/._slinsolx1_8c.html
new file mode 100644
index 0000000..4db9935
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slinsolx1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slinsolx2_8c.html b/SuperLU_5.2.0/DOC/html/._slinsolx2_8c.html
new file mode 100644
index 0000000..2908250
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slinsolx2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slinsolx_8c.html b/SuperLU_5.2.0/DOC/html/._slinsolx_8c.html
new file mode 100644
index 0000000..3429b98
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slinsolx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slu__Cnames_8h.html b/SuperLU_5.2.0/DOC/html/._slu__Cnames_8h.html
new file mode 100644
index 0000000..a8319c9
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slu__Cnames_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slu__cdefs_8h.html b/SuperLU_5.2.0/DOC/html/._slu__cdefs_8h.html
new file mode 100644
index 0000000..a4f3287
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slu__cdefs_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slu__dcomplex_8h.html b/SuperLU_5.2.0/DOC/html/._slu__dcomplex_8h.html
new file mode 100644
index 0000000..038c8f0
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slu__dcomplex_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slu__ddefs_8h.html b/SuperLU_5.2.0/DOC/html/._slu__ddefs_8h.html
new file mode 100644
index 0000000..ad10845
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slu__ddefs_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slu__scomplex_8h.html b/SuperLU_5.2.0/DOC/html/._slu__scomplex_8h.html
new file mode 100644
index 0000000..f065624
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slu__scomplex_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slu__sdefs_8h.html b/SuperLU_5.2.0/DOC/html/._slu__sdefs_8h.html
new file mode 100644
index 0000000..5b25b97
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slu__sdefs_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slu__util_8h.html b/SuperLU_5.2.0/DOC/html/._slu__util_8h.html
new file mode 100644
index 0000000..3d419e0
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slu__util_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._slu__zdefs_8h.html b/SuperLU_5.2.0/DOC/html/._slu__zdefs_8h.html
new file mode 100644
index 0000000..0563218
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._slu__zdefs_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._smemory_8c.html b/SuperLU_5.2.0/DOC/html/._smemory_8c.html
new file mode 100644
index 0000000..536873d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._smemory_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._smyblas2_8c.html b/SuperLU_5.2.0/DOC/html/._smyblas2_8c.html
new file mode 100644
index 0000000..dd4d594
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._smyblas2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sp__coletree_8c.html b/SuperLU_5.2.0/DOC/html/._sp__coletree_8c.html
new file mode 100644
index 0000000..237dd13
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sp__coletree_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sp__preorder_8c.html b/SuperLU_5.2.0/DOC/html/._sp__preorder_8c.html
new file mode 100644
index 0000000..ead85a7
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sp__preorder_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._spanel__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._spanel__bmod_8c.html
new file mode 100644
index 0000000..1f81c7b
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._spanel__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._spanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._spanel__dfs_8c.html
new file mode 100644
index 0000000..6f5debe
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._spanel__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._spivotL_8c.html b/SuperLU_5.2.0/DOC/html/._spivotL_8c.html
new file mode 100644
index 0000000..f040773
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._spivotL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._spivotgrowth_8c.html b/SuperLU_5.2.0/DOC/html/._spivotgrowth_8c.html
new file mode 100644
index 0000000..bb0e4c7
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._spivotgrowth_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._spruneL_8c.html b/SuperLU_5.2.0/DOC/html/._spruneL_8c.html
new file mode 100644
index 0000000..348f3eb
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._spruneL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sreadhb_8c.html b/SuperLU_5.2.0/DOC/html/._sreadhb_8c.html
new file mode 100644
index 0000000..19d1620
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sreadhb_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sreadrb_8c.html b/SuperLU_5.2.0/DOC/html/._sreadrb_8c.html
new file mode 100644
index 0000000..b41a8b5
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sreadrb_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sreadtriple_8c.html b/SuperLU_5.2.0/DOC/html/._sreadtriple_8c.html
new file mode 100644
index 0000000..f38956f
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sreadtriple_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ssnode__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._ssnode__bmod_8c.html
new file mode 100644
index 0000000..a24916f
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ssnode__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ssnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._ssnode__dfs_8c.html
new file mode 100644
index 0000000..357e230
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ssnode__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ssp__blas2_8c.html b/SuperLU_5.2.0/DOC/html/._ssp__blas2_8c.html
new file mode 100644
index 0000000..08feddf
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ssp__blas2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._ssp__blas3_8c.html b/SuperLU_5.2.0/DOC/html/._ssp__blas3_8c.html
new file mode 100644
index 0000000..abaadc0
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._ssp__blas3_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structColamd__Col__struct.html b/SuperLU_5.2.0/DOC/html/._structColamd__Col__struct.html
new file mode 100644
index 0000000..b1e85db
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structColamd__Col__struct.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structColamd__Row__struct.html b/SuperLU_5.2.0/DOC/html/._structColamd__Row__struct.html
new file mode 100644
index 0000000..ea9c159
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structColamd__Row__struct.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structDNformat.html b/SuperLU_5.2.0/DOC/html/._structDNformat.html
new file mode 100644
index 0000000..0c7bf46
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structDNformat.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structGlobalLU__t.html b/SuperLU_5.2.0/DOC/html/._structGlobalLU__t.html
new file mode 100644
index 0000000..31c43bf
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structGlobalLU__t.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structLU__stack__t.html b/SuperLU_5.2.0/DOC/html/._structLU__stack__t.html
new file mode 100644
index 0000000..76c10c6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structLU__stack__t.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structNCPformat.html b/SuperLU_5.2.0/DOC/html/._structNCPformat.html
new file mode 100644
index 0000000..a170b62
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structNCPformat.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structNCformat.html b/SuperLU_5.2.0/DOC/html/._structNCformat.html
new file mode 100644
index 0000000..8de1e24
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structNCformat.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structNRformat.html b/SuperLU_5.2.0/DOC/html/._structNRformat.html
new file mode 100644
index 0000000..8561758
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structNRformat.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structNRformat__loc.html b/SuperLU_5.2.0/DOC/html/._structNRformat__loc.html
new file mode 100644
index 0000000..1917ea6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structNRformat__loc.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structSCPformat.html b/SuperLU_5.2.0/DOC/html/._structSCPformat.html
new file mode 100644
index 0000000..001cd68
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structSCPformat.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structSCformat.html b/SuperLU_5.2.0/DOC/html/._structSCformat.html
new file mode 100644
index 0000000..3938cf3
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structSCformat.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structSuperLUStat__t.html b/SuperLU_5.2.0/DOC/html/._structSuperLUStat__t.html
new file mode 100644
index 0000000..ae878f6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structSuperLUStat__t.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structSuperMatrix.html b/SuperLU_5.2.0/DOC/html/._structSuperMatrix.html
new file mode 100644
index 0000000..cec5cf5
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structSuperMatrix.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structcomplex.html b/SuperLU_5.2.0/DOC/html/._structcomplex.html
new file mode 100644
index 0000000..5f40d4d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structcomplex.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structdoublecomplex.html b/SuperLU_5.2.0/DOC/html/._structdoublecomplex.html
new file mode 100644
index 0000000..4214b3d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structdoublecomplex.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structe__node.html b/SuperLU_5.2.0/DOC/html/._structe__node.html
new file mode 100644
index 0000000..6aa6ef2
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structe__node.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structmem__usage__t.html b/SuperLU_5.2.0/DOC/html/._structmem__usage__t.html
new file mode 100644
index 0000000..ea4cd70
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structmem__usage__t.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._structsuperlu__options__t.html b/SuperLU_5.2.0/DOC/html/._structsuperlu__options__t.html
new file mode 100644
index 0000000..34b2c50
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._structsuperlu__options__t.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._superlu_8c.html b/SuperLU_5.2.0/DOC/html/._superlu_8c.html
new file mode 100644
index 0000000..485ec18
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._superlu_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._superlu__enum__consts_8h.html b/SuperLU_5.2.0/DOC/html/._superlu__enum__consts_8h.html
new file mode 100644
index 0000000..bf2456d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._superlu__enum__consts_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._superlu__timer_8c.html b/SuperLU_5.2.0/DOC/html/._superlu__timer_8c.html
new file mode 100644
index 0000000..dd5957c
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._superlu__timer_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._supermatrix_8h.html b/SuperLU_5.2.0/DOC/html/._supermatrix_8h.html
new file mode 100644
index 0000000..266db04
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._supermatrix_8h.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._sutil_8c.html b/SuperLU_5.2.0/DOC/html/._sutil_8c.html
new file mode 100644
index 0000000..d24d295
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._sutil_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._tabs.css b/SuperLU_5.2.0/DOC/html/._tabs.css
new file mode 100644
index 0000000..44bdc33
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._tabs.css differ
diff --git a/SuperLU_5.2.0/DOC/html/._util_8c.html b/SuperLU_5.2.0/DOC/html/._util_8c.html
new file mode 100644
index 0000000..04d7a09
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._util_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zcolumn__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._zcolumn__bmod_8c.html
new file mode 100644
index 0000000..dabd15a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zcolumn__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zcolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._zcolumn__dfs_8c.html
new file mode 100644
index 0000000..8e6eb63
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zcolumn__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zcopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/._zcopy__to__ucol_8c.html
new file mode 100644
index 0000000..13a2bea
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zcopy__to__ucol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zdiagonal_8c.html b/SuperLU_5.2.0/DOC/html/._zdiagonal_8c.html
new file mode 100644
index 0000000..fd81f71
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zdiagonal_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zfgmr_8c.html b/SuperLU_5.2.0/DOC/html/._zfgmr_8c.html
new file mode 100644
index 0000000..f8b516a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zfgmr_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zgscon_8c.html b/SuperLU_5.2.0/DOC/html/._zgscon_8c.html
new file mode 100644
index 0000000..1340b71
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zgscon_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zgsequ_8c.html b/SuperLU_5.2.0/DOC/html/._zgsequ_8c.html
new file mode 100644
index 0000000..fd73fc7
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zgsequ_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zgsisx_8c.html b/SuperLU_5.2.0/DOC/html/._zgsisx_8c.html
new file mode 100644
index 0000000..38de87f
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zgsisx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zgsitrf_8c.html b/SuperLU_5.2.0/DOC/html/._zgsitrf_8c.html
new file mode 100644
index 0000000..1dbb74c
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zgsitrf_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zgsrfs_8c.html b/SuperLU_5.2.0/DOC/html/._zgsrfs_8c.html
new file mode 100644
index 0000000..35dd6dc
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zgsrfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zgssv_8c.html b/SuperLU_5.2.0/DOC/html/._zgssv_8c.html
new file mode 100644
index 0000000..7782ed2
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zgssv_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zgssvx_8c.html b/SuperLU_5.2.0/DOC/html/._zgssvx_8c.html
new file mode 100644
index 0000000..9f16131
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zgssvx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zgstrf_8c.html b/SuperLU_5.2.0/DOC/html/._zgstrf_8c.html
new file mode 100644
index 0000000..69edce7
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zgstrf_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zgstrs_8c.html b/SuperLU_5.2.0/DOC/html/._zgstrs_8c.html
new file mode 100644
index 0000000..17ec64e
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zgstrs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zitersol1_8c.html b/SuperLU_5.2.0/DOC/html/._zitersol1_8c.html
new file mode 100644
index 0000000..e1920f7
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zitersol1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zitersol_8c.html b/SuperLU_5.2.0/DOC/html/._zitersol_8c.html
new file mode 100644
index 0000000..e77a1ab
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zitersol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zlacon_8c.html b/SuperLU_5.2.0/DOC/html/._zlacon_8c.html
new file mode 100644
index 0000000..3b6a5e5
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zlacon_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zlangs_8c.html b/SuperLU_5.2.0/DOC/html/._zlangs_8c.html
new file mode 100644
index 0000000..adb9724
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zlangs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zlaqgs_8c.html b/SuperLU_5.2.0/DOC/html/._zlaqgs_8c.html
new file mode 100644
index 0000000..d03bfb3
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zlaqgs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zldperm_8c.html b/SuperLU_5.2.0/DOC/html/._zldperm_8c.html
new file mode 100644
index 0000000..99fedcf
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zldperm_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zlinsol1_8c.html b/SuperLU_5.2.0/DOC/html/._zlinsol1_8c.html
new file mode 100644
index 0000000..781ef29
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zlinsol1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zlinsol_8c.html b/SuperLU_5.2.0/DOC/html/._zlinsol_8c.html
new file mode 100644
index 0000000..cfb8e94
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zlinsol_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zlinsolx1_8c.html b/SuperLU_5.2.0/DOC/html/._zlinsolx1_8c.html
new file mode 100644
index 0000000..9946fda
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zlinsolx1_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zlinsolx2_8c.html b/SuperLU_5.2.0/DOC/html/._zlinsolx2_8c.html
new file mode 100644
index 0000000..9cad2c8
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zlinsolx2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zlinsolx_8c.html b/SuperLU_5.2.0/DOC/html/._zlinsolx_8c.html
new file mode 100644
index 0000000..2948f9d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zlinsolx_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zmemory_8c.html b/SuperLU_5.2.0/DOC/html/._zmemory_8c.html
new file mode 100644
index 0000000..55d0e17
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zmemory_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zmyblas2_8c.html b/SuperLU_5.2.0/DOC/html/._zmyblas2_8c.html
new file mode 100644
index 0000000..f64e8d5
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zmyblas2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zpanel__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._zpanel__bmod_8c.html
new file mode 100644
index 0000000..71fc1b3
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zpanel__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._zpanel__dfs_8c.html
new file mode 100644
index 0000000..f21a943
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zpanel__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zpivotL_8c.html b/SuperLU_5.2.0/DOC/html/._zpivotL_8c.html
new file mode 100644
index 0000000..a022c7a
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zpivotL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zpivotgrowth_8c.html b/SuperLU_5.2.0/DOC/html/._zpivotgrowth_8c.html
new file mode 100644
index 0000000..b716cf9
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zpivotgrowth_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zpruneL_8c.html b/SuperLU_5.2.0/DOC/html/._zpruneL_8c.html
new file mode 100644
index 0000000..99d3737
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zpruneL_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zreadhb_8c.html b/SuperLU_5.2.0/DOC/html/._zreadhb_8c.html
new file mode 100644
index 0000000..ab9e4f2
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zreadhb_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zreadrb_8c.html b/SuperLU_5.2.0/DOC/html/._zreadrb_8c.html
new file mode 100644
index 0000000..b864516
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zreadrb_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zreadtriple_8c.html b/SuperLU_5.2.0/DOC/html/._zreadtriple_8c.html
new file mode 100644
index 0000000..ea14ca8
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zreadtriple_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zsnode__bmod_8c.html b/SuperLU_5.2.0/DOC/html/._zsnode__bmod_8c.html
new file mode 100644
index 0000000..14c8c20
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zsnode__bmod_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zsnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/._zsnode__dfs_8c.html
new file mode 100644
index 0000000..bc4bd4b
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zsnode__dfs_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zsp__blas2_8c.html b/SuperLU_5.2.0/DOC/html/._zsp__blas2_8c.html
new file mode 100644
index 0000000..0aad7f6
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zsp__blas2_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zsp__blas3_8c.html b/SuperLU_5.2.0/DOC/html/._zsp__blas3_8c.html
new file mode 100644
index 0000000..e8c3c9d
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zsp__blas3_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/._zutil_8c.html b/SuperLU_5.2.0/DOC/html/._zutil_8c.html
new file mode 100644
index 0000000..7e2eaf8
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/._zutil_8c.html differ
diff --git a/SuperLU_5.2.0/DOC/html/EXAMPLE_2sp__ienv_8c.html b/SuperLU_5.2.0/DOC/html/EXAMPLE_2sp__ienv_8c.html
new file mode 100644
index 0000000..147cfdf
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/EXAMPLE_2sp__ienv_8c.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/sp_ienv.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sp_ienv.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__Cnames_8h_source.html">slu_Cnames.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sp_ienv.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="EXAMPLE_2sp__ienv_8c__incl.png" border="0" usemap="#EXAMPLE_2sp__ienv_8c" alt=""/></div>
+<map name="EXAMPLE_2sp__ienv_8c" id="EXAMPLE_2sp__ienv_8c">
+<area shape="rect" id="node2" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="24,80,131,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a21109476f1261abd6b256a393f5fd9e7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="EXAMPLE_2sp__ienv_8c.html#a21109476f1261abd6b256a393f5fd9e7">sp_ienv</a> (int ispec)</td></tr>
+<tr class="separator:a21109476f1261abd6b256a393f5fd9e7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a21109476f1261abd6b256a393f5fd9e7"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="SRC_2sp__ienv_8c.html#a21109476f1261abd6b256a393f5fd9e7">sp_ienv()</a> is inquired to choose machine-dependent parameters for the
+ local environment. See ISPEC for a description of the parameters.</pre><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><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="EXAMPLE_2sp__ienv_8c_a21109476f1261abd6b256a393f5fd9e7_cgraph.png" border="0" usemap="#EXAMPLE_2sp__ienv_8c_a21109476f1261abd6b256a393f5fd9e7_cgraph" alt=""/></div>
+<map name="EXAMPLE_2sp__ienv_8c_a21109476f1261abd6b256a393f5fd9e7_cgraph" id="EXAMPLE_2sp__ienv_8c_a21109476f1261abd6b256a393f5fd9e7_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="120,5,203,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/SRC_2sp__ienv_8c.html b/SuperLU_5.2.0/DOC/html/SRC_2sp__ienv_8c.html
new file mode 100644
index 0000000..2bda6f1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/SRC_2sp__ienv_8c.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sp_ienv.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sp_ienv.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__Cnames_8h_source.html">slu_Cnames.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sp_ienv.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="SRC_2sp__ienv_8c__incl.png" border="0" usemap="#SRC_2sp__ienv_8c" alt=""/></div>
+<map name="SRC_2sp__ienv_8c" id="SRC_2sp__ienv_8c">
+<area shape="rect" id="node2" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="7,80,113,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a21109476f1261abd6b256a393f5fd9e7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="SRC_2sp__ienv_8c.html#a21109476f1261abd6b256a393f5fd9e7">sp_ienv</a> (int ispec)</td></tr>
+<tr class="separator:a21109476f1261abd6b256a393f5fd9e7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a21109476f1261abd6b256a393f5fd9e7"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="SRC_2sp__ienv_8c.html#a21109476f1261abd6b256a393f5fd9e7">sp_ienv()</a> is inquired to choose machine-dependent parameters for the
+ local environment. See ISPEC for a description of the parameters.</pre><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><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="SRC_2sp__ienv_8c_a21109476f1261abd6b256a393f5fd9e7_cgraph.png" border="0" usemap="#SRC_2sp__ienv_8c_a21109476f1261abd6b256a393f5fd9e7_cgraph" alt=""/></div>
+<map name="SRC_2sp__ienv_8c_a21109476f1261abd6b256a393f5fd9e7_cgraph" id="SRC_2sp__ienv_8c_a21109476f1261abd6b256a393f5fd9e7_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="120,5,203,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/annotated.html b/SuperLU_5.2.0/DOC/html/annotated.html
new file mode 100644
index 0000000..849da75
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/annotated.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Data Structures</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structColamd__Col__struct.html" target="_self">Colamd_Col_struct</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structColamd__Row__struct.html" target="_self">Colamd_Row_struct</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structcomplex.html" target="_self">complex</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structDNformat.html" target="_self">DNformat</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structdoublecomplex.html" target="_self">doublecomplex</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structe__node.html" target="_self">e_node</a></td><td class="desc">Headers for 4 types of dynamatically managed memory </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfactors__t.html" target="_self">factors_t</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structGlobalLU__t.html" target="_self">GlobalLU_t</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structLU__stack__t.html" target="_self">LU_stack_t</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmem__usage__t.html" target="_self">mem_usage_t</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structNCformat.html" target="_self">NCformat</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structNCPformat.html" target="_self">NCPformat</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structNRformat.html" target="_self">NRformat</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structNRformat__loc.html" target="_self">NRformat_loc</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structSCformat.html" target="_self">SCformat</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structSCPformat.html" target="_self">SCPformat</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsuperlu__options__t.html" target="_self">superlu_options_t</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structSuperLUStat__t.html" target="_self">SuperLUStat_t</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structSuperMatrix.html" target="_self">SuperMatrix</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ccolumn__bmod_8c.html b/SuperLU_5.2.0/DOC/html/ccolumn__bmod_8c.html
new file mode 100644
index 0000000..806c0e6
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ccolumn__bmod_8c.html
@@ -0,0 +1,321 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ccolumn_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ccolumn_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>performs numeric block updates
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ccolumn_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ccolumn__bmod_8c__incl.png" border="0" usemap="#SRC_2ccolumn__bmod_8c" alt=""/></div>
+<map name="SRC_2ccolumn__bmod_8c" id="SRC_2ccolumn__bmod_8c">
+<area shape="rect" id="node4" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="414,80,503,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="341,155,448,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="472,155,573,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a34580dfcbd886fe93845353ac7dbeaa1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__bmod_8c.html#a34580dfcbd886fe93845353ac7dbeaa1">cusolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a34580dfcbd886fe93845353ac7dbeaa1"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a34580dfcbd886fe93845353ac7dbeaa1">More...</a><br/></td></tr>
+<tr class="separator:a34580dfcbd886fe93845353ac7dbeaa1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a39d81cbea11f613524e674a8c2e18c5f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__bmod_8c.html#a39d81cbea11f613524e674a8c2e18c5f">clsolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a39d81cbea11f613524e674a8c2e18c5f"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a39d81cbea11f613524e674a8c2e18c5f">More...</a><br/></td></tr>
+<tr class="separator:a39d81cbea11f613524e674a8c2e18c5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a09be65495be35085027bc26454dc3e74"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__bmod_8c.html#a09be65495be35085027bc26454dc3e74">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 class="memdesc:a09be65495be35085027bc26454dc3e74"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a09be65495be35085027bc26454dc3e74">More...</a><br/></td></tr>
+<tr class="separator:a09be65495be35085027bc26454dc3e74"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a16ef1a229e74ac6264d11b35757dccf2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__bmod_8c.html#a16ef1a229e74ac6264d11b35757dccf2">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">Gl [...]
+<tr class="separator:a16ef1a229e74ac6264d11b35757dccf2"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a16ef1a229e74ac6264d11b35757dccf2"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose:
+</h1>
+</pre><pre>
+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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ccolumn__bmod_8c_a16ef1a229e74ac6264d11b35757dccf2_cgraph.png" border="0" usemap="#ccolumn__bmod_8c_a16ef1a229e74ac6264d11b35757dccf2_cgraph" alt=""/></div>
+<map name="ccolumn__bmod_8c_a16ef1a229e74ac6264d11b35757dccf2_cgraph" id="ccolumn__bmod_8c_a16ef1a229e74ac6264d11b35757dccf2_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a6f95eb0c9c167ab10b919c77fe7b3079" title="ctrsv_" alt="" coords="192,5,251,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a56ba57f6e1b5e139e6c168c21d56f873" title="cgemv_" alt="" coords="187,56,255,83"/><area shape="rect" id="node4" href="ccolumn__bmod_8c.html#a39d81cbea11f613524e674a8c2e18c5f" title="Solves a dense UNIT lower triangular system. " alt="" coords="190,107,253,133"/><area shape="rect" id="node5" href="ccolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a39d81cbea11f613524e674a8c2e18c5f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a09be65495be35085027bc26454dc3e74"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a34580dfcbd886fe93845353ac7dbeaa1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ccolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ccolumn__dfs_8c.html
new file mode 100644
index 0000000..1ba1131
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ccolumn__dfs_8c.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ccolumn_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ccolumn_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs a symbolic factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ccolumn_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ccolumn__dfs_8c__incl.png" border="0" usemap="#SRC_2ccolumn__dfs_8c" alt=""/></div>
+<map name="SRC_2ccolumn__dfs_8c" id="SRC_2ccolumn__dfs_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a5fd0635776cafb1d697263a0db693b9e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__dfs_8c.html#a5fd0635776cafb1d697263a0db693b9e">T2_SUPER</a></td></tr>
+<tr class="memdesc:a5fd0635776cafb1d697263a0db693b9e"><td class="mdescLeft"> </td><td class="mdescRight">What type of supernodes we want. <a href="#a5fd0635776cafb1d697263a0db693b9e">More...</a><br/></td></tr>
+<tr class="separator:a5fd0635776cafb1d697263a0db693b9e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ee0b19c54923ca3b1875679fb05aea7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ccolumn__dfs_8c.html#a0ee0b19c54923ca3b1875679fb05aea7">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>
+<tr class="separator:a0ee0b19c54923ca3b1875679fb05aea7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a5fd0635776cafb1d697263a0db693b9e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define T2_SUPER</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ee0b19c54923ca3b1875679fb05aea7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ CCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ccolumn__dfs_8c_a0ee0b19c54923ca3b1875679fb05aea7_cgraph.png" border="0" usemap="#ccolumn__dfs_8c_a0ee0b19c54923ca3b1875679fb05aea7_cgraph" alt=""/></div>
+<map name="ccolumn__dfs_8c_a0ee0b19c54923ca3b1875679fb05aea7_cgraph" id="ccolumn__dfs_8c_a0ee0b19c54923ca3b1875679fb05aea7_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="172,31,239,57"/><area shape="rect" id="node4" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="149,81,261,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="328,31,411,57"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ccopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/ccopy__to__ucol_8c.html
new file mode 100644
index 0000000..2a1d758
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ccopy__to__ucol_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ccopy_to_ucol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ccopy_to_ucol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Copy a computed column of U to the compressed data structure.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ccopy_to_ucol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ccopy__to__ucol_8c__incl.png" border="0" usemap="#SRC_2ccopy__to__ucol_8c" alt=""/></div>
+<map name="SRC_2ccopy__to__ucol_8c" id="SRC_2ccopy__to__ucol_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a918c42aba84eb7e0cce4b143dbcb4ed1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ccopy__to__ucol_8c.html#a918c42aba84eb7e0cce4b143dbcb4ed1">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>
+<tr class="separator:a918c42aba84eb7e0cce4b143dbcb4ed1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a918c42aba84eb7e0cce4b143dbcb4ed1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ccopy__to__ucol_8c_a918c42aba84eb7e0cce4b143dbcb4ed1_cgraph.png" border="0" usemap="#ccopy__to__ucol_8c_a918c42aba84eb7e0cce4b143dbcb4ed1_cgraph" alt=""/></div>
+<map name="ccopy__to__ucol_8c_a918c42aba84eb7e0cce4b143dbcb4ed1_cgraph" id="ccopy__to__ucol_8c_a918c42aba84eb7e0cce4b143dbcb4ed1_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="160,107,272,133"/><area shape="rect" id="node3" href="cmemory_8c.html#a3996260179c0a72397776571b4b19164" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="345,81,415,108"/><area shape="rect" id="node8" href="cmemory_8c.html#a43ff5010762c14ea7591d23cf48403a3" title="cmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cdiagonal_8c.html b/SuperLU_5.2.0/DOC/html/cdiagonal_8c.html
new file mode 100644
index 0000000..8d08c27
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cdiagonal_8c.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cdiagonal.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cdiagonal.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Auxiliary routines to work with diagonal elements.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cdiagonal.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cdiagonal_8c__incl.png" border="0" usemap="#SRC_2cdiagonal_8c" alt=""/></div>
+<map name="SRC_2cdiagonal_8c" id="SRC_2cdiagonal_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac7bdb6c5924a0097d341cf65e27587d5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cdiagonal_8c.html#ac7bdb6c5924a0097d341cf65e27587d5">cfill_diag</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+<tr class="separator:ac7bdb6c5924a0097d341cf65e27587d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac766fce6c33f168e47c3e9a098cb2432"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cdiagonal_8c.html#ac766fce6c33f168e47c3e9a098cb2432">cdominate</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+<tr class="separator:ac766fce6c33f168e47c3e9a098cb2432"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac766fce6c33f168e47c3e9a098cb2432"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cdiagonal_8c_ac766fce6c33f168e47c3e9a098cb2432_cgraph.png" border="0" usemap="#cdiagonal_8c_ac766fce6c33f168e47c3e9a098cb2432_cgraph" alt=""/></div>
+<map name="cdiagonal_8c_ac766fce6c33f168e47c3e9a098cb2432_cgraph" id="cdiagonal_8c_ac766fce6c33f168e47c3e9a098cb2432_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="136,5,245,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="153,56,228,83"/><area shape="rect" id="node4" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="159,107,223,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ac7bdb6c5924a0097d341cf65e27587d5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cfgmr_8c.html b/SuperLU_5.2.0/DOC/html/cfgmr_8c.html
new file mode 100644
index 0000000..cf042ea
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cfgmr_8c.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/cfgmr.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cfgmr.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>flexible GMRES from ITSOL developed by Yousef Saad.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cfgmr.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cfgmr_8c__incl.png" border="0" usemap="#EXAMPLE_2cfgmr_8c" alt=""/></div>
+<map name="EXAMPLE_2cfgmr_8c" id="EXAMPLE_2cfgmr_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a70fac857a29f956523d4c8c05e13f177"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cfgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">epsmac</a> 1.0e-16</td></tr>
+<tr class="separator:a70fac857a29f956523d4c8c05e13f177"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a118d4bd5ee21ac6a5738f2b9a4b6fd70"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cfgmr_8c.html#a118d4bd5ee21ac6a5738f2b9a4b6fd70">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 class="separator:a118d4bd5ee21ac6a5738f2b9a4b6fd70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7528cbbfcac44b8a1425b6ac26419c85"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="cfgmr_8c.html#a7528cbbfcac44b8a1425b6ac26419c85">scnrm2_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+<tr class="separator:a7528cbbfcac44b8a1425b6ac26419c85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5be26920e5ae10ff3669ee91f9f15d73"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cfgmr_8c.html#a5be26920e5ae10ff3669ee91f9f15d73">cfgmr</a> (int n, void(*<a class="el" href="csp__blas2_8c.html#a09be65495be35085027bc26454dc3e74">cmatvec</a>)(<a class="el" href="structcomplex.html">complex</a>, <a class="el" href="structcomplex.html">complex</a>[], <a class="el" href="structcomplex.html">comp [...]
+<tr class="separator:a5be26920e5ae10ff3669ee91f9f15d73"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a70fac857a29f956523d4c8c05e13f177"></a>
+<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">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a118d4bd5ee21ac6a5738f2b9a4b6fd70"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5be26920e5ae10ff3669ee91f9f15d73"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cfgmr_8c_a5be26920e5ae10ff3669ee91f9f15d73_cgraph.png" border="0" usemap="#cfgmr_8c_a5be26920e5ae10ff3669ee91f9f15d73_cgraph" alt=""/></div>
+<map name="cfgmr_8c_a5be26920e5ae10ff3669ee91f9f15d73_cgraph" id="cfgmr_8c_a5be26920e5ae10ff3669ee91f9f15d73_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="616,43,725,69"/><area shape="rect" id="node3" href="ccolumn__bmod_8c.html#a09be65495be35085027bc26454dc3e74" title="Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. " alt="" coords="109,1427,181,1453"/><area shape="rect" id="node4" href="cfgmr_8c.html#a7528cbbfcac44b8a1425b6ac26419c85" title="scnrm2_" alt="" coords="109,1477,181,1504"/><area sha [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7528cbbfcac44b8a1425b6ac26419c85"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cgscon_8c.html b/SuperLU_5.2.0/DOC/html/cgscon_8c.html
new file mode 100644
index 0000000..b53ab57
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cgscon_8c.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cgscon.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cgscon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Estimates reciprocal of the condition number of a general matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cgscon.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgscon_8c__incl.png" border="0" usemap="#SRC_2cgscon_8c" alt=""/></div>
+<map name="SRC_2cgscon_8c" id="SRC_2cgscon_8c">
+<area shape="rect" id="node3" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae836085920601b3b0717a4f623ab460e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgscon_8c.html#ae836085920601b3b0717a4f623ab460e">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) [...]
+<tr class="separator:ae836085920601b3b0717a4f623ab460e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 5.0) --
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+July 25, 2015</pre><pre>Modified from lapack routines CGECON.
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae836085920601b3b0717a4f623ab460e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><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><pre> RCOND (output) float*
+ The reciprocal of the condition number of the matrix A,
+ computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><pre> INFO (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgscon_8c_ae836085920601b3b0717a4f623ab460e_cgraph.png" border="0" usemap="#cgscon_8c_ae836085920601b3b0717a4f623ab460e_cgraph" alt=""/></div>
+<map name="cgscon_8c_ae836085920601b3b0717a4f623ab460e_cgraph" id="cgscon_8c_ae836085920601b3b0717a4f623ab460e_cgraph">
+<area shape="rect" id="node2" href="clacon2_8c.html#a230a94eeb40949490e64e84c4089b646" title="clacon2_" alt="" coords="117,132,192,159"/><area shape="rect" id="node8" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="253,259,336,285"/><area shape="rect" id="node9" href="cmemory_8c.html#a1e625ecaeb259e2dd79667ffbfb816c0" title="complexCalloc" alt="" coords="241,309,349,336"/><area shape="rect" id="node10" href="csp__blas2_8c.html#a51cbd689a51 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cgsequ_8c.html b/SuperLU_5.2.0/DOC/html/cgsequ_8c.html
new file mode 100644
index 0000000..b9dba71
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cgsequ_8c.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cgsequ.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cgsequ.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes row and column scalings.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cgsequ.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgsequ_8c__incl.png" border="0" usemap="#SRC_2cgsequ_8c" alt=""/></div>
+<map name="SRC_2cgsequ_8c" id="SRC_2cgsequ_8c">
+<area shape="rect" id="node3" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a36bb68fea3ee44ff05eb7da2ee059fa5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsequ_8c.html#a36bb68fea3ee44ff05eb7da2ee059fa5">cgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, float *r, float *c, float *rowcnd, float *colcnd, float *amax, int *info)</td></tr>
+<tr class="memdesc:a36bb68fea3ee44ff05eb7da2ee059fa5"><td class="mdescLeft"> </td><td class="mdescRight">Driver related. <a href="#a36bb68fea3ee44ff05eb7da2ee059fa5">More...</a><br/></td></tr>
+<tr class="separator:a36bb68fea3ee44ff05eb7da2ee059fa5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from LAPACK routine CGEEQU
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a36bb68fea3ee44ff05eb7da2ee059fa5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (output) float*, size A->nrow
+ If INFO = 0 or INFO > M, R contains the row scale factors
+ for A.</pre><pre> C (output) float*, size A->ncol
+ If INFO = 0, C contains the column scale factors for A.</pre><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><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><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><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
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgsequ_8c_a36bb68fea3ee44ff05eb7da2ee059fa5_cgraph.png" border="0" usemap="#cgsequ_8c_a36bb68fea3ee44ff05eb7da2ee059fa5_cgraph" alt=""/></div>
+<map name="cgsequ_8c_a36bb68fea3ee44ff05eb7da2ee059fa5_cgraph" id="cgsequ_8c_a36bb68fea3ee44ff05eb7da2ee059fa5_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="128,5,189,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="117,56,200,83"/><area shape="rect" id="node4" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="127,107,191,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cgsisx_8c.html b/SuperLU_5.2.0/DOC/html/cgsisx_8c.html
new file mode 100644
index 0000000..7a2644c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cgsisx_8c.html
@@ -0,0 +1,528 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cgsisx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cgsisx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an approximate solutions of linear equations A*X=B or A'*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cgsisx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgsisx_8c__incl.png" border="0" usemap="#SRC_2cgsisx_8c" alt=""/></div>
+<map name="SRC_2cgsisx_8c" id="SRC_2cgsisx_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:acc088517da356b61f5eee908fb61a213"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsisx_8c.html#acc088517da356b61f5eee908fb61a213">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int * [...]
+<tr class="separator:acc088517da356b61f5eee908fb61a213"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.2) –
+Lawrence Berkeley National Laboratory.
+November, 2010
+August, 2011
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="acc088517da356b61f5eee908fb61a213"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a9bf92a834b43a4e163a5ae5c32a9ea4c">cgsitrf()</a>.
+An estimation of the condition number is provided.
+The routine performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><pre> 1.7. options->IterRefine is not used</pre><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * sum(dropped entries);
+ = SMILU_3:
+ U(i,i) := U(i,i) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * 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><pre><ol type="1">
+<li><p class="startli">If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</p>
+<p class="startli">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').</p>
+<p class="startli">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>.</p>
+<p class="startli">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.</p>
+<p class="startli">2.4. Compute the reciprocal pivot growth factor.</p>
+<p class="startli">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.</p>
+<p class="startli">2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</p>
+<p class="startli">2.7. If options->IterRefine is not used.</p>
+<p class="startli">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.</p>
+</li>
+</ol>
+</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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#a36bb68fea3ee44ff05eb7da2ee059fa5" 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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgsisx_8c_acc088517da356b61f5eee908fb61a213_cgraph.png" border="0" usemap="#cgsisx_8c_acc088517da356b61f5eee908fb61a213_cgraph" alt=""/></div>
+<map name="cgsisx_8c_acc088517da356b61f5eee908fb61a213_cgraph" id="cgsisx_8c_acc088517da356b61f5eee908fb61a213_cgraph">
+<area shape="rect" id="node2" href="clangs_8c.html#a3e9baabe44cf6d5779cae55b80bc5763" title="clangs" alt="" coords="182,5,242,32"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="413,157,475,184"/><area shape="rect" id="node5" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="739,208,821,235"/><area shape="rect" id="node6" href="slu__util_8h.html#a72be96e75e58564c4322ef9e [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cgsitrf_8c.html b/SuperLU_5.2.0/DOC/html/cgsitrf_8c.html
new file mode 100644
index 0000000..56778b8
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cgsitrf_8c.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cgsitrf.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cgsitrf.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an ILU factorization of a general sparse matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cgsitrf.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgsitrf_8c__incl.png" border="0" usemap="#SRC_2cgsitrf_8c" alt=""/></div>
+<map name="SRC_2cgsitrf_8c" id="SRC_2cgsitrf_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9bf92a834b43a4e163a5ae5c32a9ea4c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsitrf_8c.html#a9bf92a834b43a4e163a5ae5c32a9ea4c">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int p [...]
+<tr class="separator:a9bf92a834b43a4e163a5ae5c32a9ea4c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009</pre><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a9bf92a834b43a4e163a5ae5c32a9ea4c"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the ILU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">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#a380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgsitrf_8c_a9bf92a834b43a4e163a5ae5c32a9ea4c_cgraph.png" border="0" usemap="#cgsitrf_8c_a9bf92a834b43a4e163a5ae5c32a9ea4c_cgraph" alt=""/></div>
+<map name="cgsitrf_8c_a9bf92a834b43a4e163a5ae5c32a9ea4c_cgraph" id="cgsitrf_8c_a9bf92a834b43a4e163a5ae5c32a9ea4c_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a6b958c6272421d091bdd9a2e7fdbafcd" title="Allocate storage for the data structures common to all factor routines. " alt="" coords="157,309,251,336"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="363,56,437,83"/><area shape="rect" id="node12" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="531,563,597,589"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cgsrfs_8c.html b/SuperLU_5.2.0/DOC/html/cgsrfs_8c.html
new file mode 100644
index 0000000..4032258
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cgsrfs_8c.html
@@ -0,0 +1,287 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cgsrfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cgsrfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Improves computed solution to a system of inear equations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cgsrfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgsrfs_8c__incl.png" border="0" usemap="#SRC_2cgsrfs_8c" alt=""/></div>
+<map name="SRC_2cgsrfs_8c" id="SRC_2cgsrfs_8c">
+<area shape="rect" id="node3" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a3641b6d4c21b7a852dbb32c2b693302e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsrfs_8c.html#a3641b6d4c21b7a852dbb32c2b693302e">ITMAX</a> 5</td></tr>
+<tr class="separator:a3641b6d4c21b7a852dbb32c2b693302e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a45c3a69a2e1025c59b2d96be63f65b71"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgsrfs_8c.html#a45c3a69a2e1025c59b2d96be63f65b71">cgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a> [...]
+<tr class="separator:a45c3a69a2e1025c59b2d96be63f65b71"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Modified from lapack routine CGERFS
+Last modified: December 3, 2015
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a3641b6d4c21b7a852dbb32c2b693302e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ITMAX 5</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a45c3a69a2e1025c59b2d96be63f65b71"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> CGSRFS improves the computed solution to a system of linear
+ equations and provides error bounds and backward error estimates for
+ the solution.</pre><pre> If equilibration was performed, the system becomes:
+ (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use column-wise storage scheme,
+ i.e., U has types: Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><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><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><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><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><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><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><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#a19517b9d29e4faf9ae777ca6fb9d415b">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><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><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><pre> stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre> info (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value</pre><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><pre> ITMAX is the maximum number of steps of iterative refinement.</pre><pre></pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgsrfs_8c_a45c3a69a2e1025c59b2d96be63f65b71_cgraph.png" border="0" usemap="#cgsrfs_8c_a45c3a69a2e1025c59b2d96be63f65b71_cgraph" alt=""/></div>
+<map name="cgsrfs_8c_a45c3a69a2e1025c59b2d96be63f65b71_cgraph" id="cgsrfs_8c_a45c3a69a2e1025c59b2d96be63f65b71_cgraph">
+<area shape="rect" id="node2" href="clacon2_8c.html#a230a94eeb40949490e64e84c4089b646" title="clacon2_" alt="" coords="116,137,191,164"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="267,36,328,63"/><area shape="rect" id="node6" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="426,87,483,113"/><area shape="rect" id="node7" href="ilu__ccopy__to__ucol_8c.htm [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cgssv_8c.html b/SuperLU_5.2.0/DOC/html/cgssv_8c.html
new file mode 100644
index 0000000..75df04a
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cgssv_8c.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cgssv.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cgssv.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves the system of linear equations A*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cgssv.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgssv_8c__incl.png" border="0" usemap="#SRC_2cgssv_8c" alt=""/></div>
+<map name="SRC_2cgssv_8c" id="SRC_2cgssv_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab592d134574c9813b7f8959026c94e8f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgssv_8c.html#ab592d134574c9813b7f8959026c94e8f">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *pe [...]
+<tr class="memdesc:ab592d134574c9813b7f8959026c94e8f"><td class="mdescLeft"> </td><td class="mdescRight">Driver routines. <a href="#ab592d134574c9813b7f8959026c94e8f">More...</a><br/></td></tr>
+<tr class="separator:ab592d134574c9813b7f8959026c94e8f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 3.0) --
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab592d134574c9813b7f8959026c94e8f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>CGSSV solves the system of linear equations A*X=B, using the
+LU factorization from CGSTRF. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><pre> 1.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ above algorithm to the transpose of A:</pre><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><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><pre> 2.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> If options->RowPerm = MY_PERMR or
+ options->Fact = SamePattern_SameRowPerm, perm_r is an
+ input argument.
+ otherwise it is an output argument.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgssv_8c_ab592d134574c9813b7f8959026c94e8f_cgraph.png" border="0" usemap="#cgssv_8c_ab592d134574c9813b7f8959026c94e8f_cgraph" alt=""/></div>
+<map name="cgssv_8c_ab592d134574c9813b7f8959026c94e8f_cgraph" id="cgssv_8c_ab592d134574c9813b7f8959026c94e8f_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="747,1779,829,1805"/><area shape="rect" id="node3" href="cutil_8c.html#abb6caf8afa858f9adaf0ff8421ac03dd" title="Supernodal LU factor related. " alt="" coords="360,563,533,589"/><area shape="rect" id="node4" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="389,5,505,32"/><area shape="rect" id="node5" href="get__per [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cgssvx_8c.html b/SuperLU_5.2.0/DOC/html/cgssvx_8c.html
new file mode 100644
index 0000000..7c0d55f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cgssvx_8c.html
@@ -0,0 +1,481 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cgssvx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cgssvx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves the system of linear equations A*X=B or A'*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cgssvx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgssvx_8c__incl.png" border="0" usemap="#SRC_2cgssvx_8c" alt=""/></div>
+<map name="SRC_2cgssvx_8c" id="SRC_2cgssvx_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5fe85da4d25f88194838485bf47b604b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgssvx_8c.html#a5fe85da4d25f88194838485bf47b604b">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int * [...]
+<tr class="separator:a5fe85da4d25f88194838485bf47b604b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5fe85da4d25f88194838485bf47b604b"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Error bounds on the solution and
+a condition estimate are also provided. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><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><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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgssvx_8c_a5fe85da4d25f88194838485bf47b604b_cgraph.png" border="0" usemap="#cgssvx_8c_a5fe85da4d25f88194838485bf47b604b_cgraph" alt=""/></div>
+<map name="cgssvx_8c_a5fe85da4d25f88194838485bf47b604b_cgraph" id="cgssvx_8c_a5fe85da4d25f88194838485bf47b604b_cgraph">
+<area shape="rect" id="node2" href="clangs_8c.html#a3e9baabe44cf6d5779cae55b80bc5763" title="clangs" alt="" coords="185,226,245,253"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="416,74,477,101"/><area shape="rect" id="node5" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="741,353,824,380"/><area shape="rect" id="node6" href="slu__util_8h.html#a72be96e75e58564c4322ef [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cgstrf_8c.html b/SuperLU_5.2.0/DOC/html/cgstrf_8c.html
new file mode 100644
index 0000000..41571dc
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cgstrf_8c.html
@@ -0,0 +1,309 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cgstrf.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cgstrf.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an LU factorization of a general sparse matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cgstrf.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgstrf_8c__incl.png" border="0" usemap="#SRC_2cgstrf_8c" alt=""/></div>
+<map name="SRC_2cgstrf_8c" id="SRC_2cgstrf_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aa8247db8d5947bb40d0811c770a255c7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrf_8c.html#aa8247db8d5947bb40d0811c770a255c7">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int pan [...]
+<tr class="separator:aa8247db8d5947bb40d0811c770a255c7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aa8247db8d5947bb40d0811c770a255c7"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the LU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a052edfd06c5aeab7a37b5fa558a06602">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__cdefs_8h.html" title="Header file for real operations. ">slu_cdefs.h</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgstrf_8c_aa8247db8d5947bb40d0811c770a255c7_cgraph.png" border="0" usemap="#cgstrf_8c_aa8247db8d5947bb40d0811c770a255c7_cgraph" alt=""/></div>
+<map name="cgstrf_8c_aa8247db8d5947bb40d0811c770a255c7_cgraph" id="cgstrf_8c_aa8247db8d5947bb40d0811c770a255c7_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="528,632,595,659"/><area shape="rect" id="node4" href="cmemory_8c.html#a6b958c6272421d091bdd9a2e7fdbafcd" title="Allocate storage for the data structures common to all factor routines. " alt="" coords="155,176,248,203"/><area shape="rect" id="node6" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="360,303,435,330"/><area shape="rec [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cgstrs_8c.html b/SuperLU_5.2.0/DOC/html/cgstrs_8c.html
new file mode 100644
index 0000000..b2057bf
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cgstrs_8c.html
@@ -0,0 +1,368 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cgstrs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cgstrs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves a system using LU factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cgstrs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgstrs_8c__incl.png" border="0" usemap="#SRC_2cgstrs_8c" alt=""/></div>
+<map name="SRC_2cgstrs_8c" id="SRC_2cgstrs_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a34580dfcbd886fe93845353ac7dbeaa1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#a34580dfcbd886fe93845353ac7dbeaa1">cusolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a34580dfcbd886fe93845353ac7dbeaa1"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a34580dfcbd886fe93845353ac7dbeaa1">More...</a><br/></td></tr>
+<tr class="separator:a34580dfcbd886fe93845353ac7dbeaa1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a39d81cbea11f613524e674a8c2e18c5f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#a39d81cbea11f613524e674a8c2e18c5f">clsolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a39d81cbea11f613524e674a8c2e18c5f"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a39d81cbea11f613524e674a8c2e18c5f">More...</a><br/></td></tr>
+<tr class="separator:a39d81cbea11f613524e674a8c2e18c5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a09be65495be35085027bc26454dc3e74"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#a09be65495be35085027bc26454dc3e74">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 class="memdesc:a09be65495be35085027bc26454dc3e74"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a09be65495be35085027bc26454dc3e74">More...</a><br/></td></tr>
+<tr class="separator:a09be65495be35085027bc26454dc3e74"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19517b9d29e4faf9ae777ca6fb9d415b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#a19517b9d29e4faf9ae777ca6fb9d415b">cgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">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 [...]
+<tr class="separator:a19517b9d29e4faf9ae777ca6fb9d415b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae8df96516a8a07b44c8e82c6ae734ab6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cgstrs_8c.html#ae8df96516a8a07b44c8e82c6ae734ab6">cprint_soln</a> (int n, int nrhs, <a class="el" href="structcomplex.html">complex</a> *soln)</td></tr>
+<tr class="separator:ae8df96516a8a07b44c8e82c6ae734ab6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a19517b9d29e4faf9ae777ca6fb9d415b"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre>info (output) int*
+ = 0: successful exit
+ < 0: if info = -i, the i-th argument had an illegal value
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cgstrs_8c_a19517b9d29e4faf9ae777ca6fb9d415b_cgraph.png" border="0" usemap="#cgstrs_8c_a19517b9d29e4faf9ae777ca6fb9d415b_cgraph" alt=""/></div>
+<map name="cgstrs_8c_a19517b9d29e4faf9ae777ca6fb9d415b_cgraph" id="cgstrs_8c_a19517b9d29e4faf9ae777ca6fb9d415b_cgraph">
+<area shape="rect" id="node2" href="cgstrs_8c.html#ae8df96516a8a07b44c8e82c6ae734ab6" title="cprint_soln" alt="" coords="124,5,209,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="283,107,365,133"/><area shape="rect" id="node4" href="cmemory_8c.html#a1e625ecaeb259e2dd79667ffbfb816c0" title="complexCalloc" alt="" coords="270,157,378,184"/><area shape="rect" id="node5" href="cmemory_8c.html#a0af029f557e5014a [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a39d81cbea11f613524e674a8c2e18c5f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a09be65495be35085027bc26454dc3e74"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae8df96516a8a07b44c8e82c6ae734ab6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a34580dfcbd886fe93845353ac7dbeaa1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/citersol1_8c.html b/SuperLU_5.2.0/DOC/html/citersol1_8c.html
new file mode 100644
index 0000000..53f0d94
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/citersol1_8c.html
@@ -0,0 +1,399 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/citersol1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">citersol1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Example #2 showing how to use ILU to precondition GMRES.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for citersol1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="citersol1_8c__incl.png" border="0" usemap="#EXAMPLE_2citersol1_8c" alt=""/></div>
+<map name="EXAMPLE_2citersol1_8c" id="EXAMPLE_2citersol1_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a455d0df27a76044ba598ec4dccd0abfa"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#a455d0df27a76044ba598ec4dccd0abfa">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 class="separator:a455d0df27a76044ba598ec4dccd0abfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad48f5fcdc4961220795817c195e2a411"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#ad48f5fcdc4961220795817c195e2a411">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 class="separator:ad48f5fcdc4961220795817c195e2a411"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a869338b25a186a486edd0cf1850a7fbb"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#a869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a></td></tr>
+<tr class="separator:a869338b25a186a486edd0cf1850a7fbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a64b516645b16ef03c6fd0d692e6eb277"><td class="memItemLeft" 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#a64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+<tr class="separator:a64b516645b16ef03c6fd0d692e6eb277"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ff9f80047e0b810344d85feb96941ef"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#a4ff9f80047e0b810344d85feb96941ef">GLOBAL_R</a></td></tr>
+<tr class="separator:a4ff9f80047e0b810344d85feb96941ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e8f028a8a340f260f7ac67973072999"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#a3e8f028a8a340f260f7ac67973072999">GLOBAL_C</a></td></tr>
+<tr class="separator:a3e8f028a8a340f260f7ac67973072999"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+<tr class="separator:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a42ee721355f1c852f770661834be93"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol1_8c.html#a5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+<tr class="separator:a5a42ee721355f1c852f770661834be93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad42e5c3013507184841cdfee652a0c18"><td class="memItemLeft" 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#ad42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+<tr class="separator:ad42e5c3013507184841cdfee652a0c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1beb2a8fb47df4eb505addfef02814c"><td class="memItemLeft" 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#af1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a></td></tr>
+<tr class="separator:af1beb2a8fb47df4eb505addfef02814c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memItemLeft" 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#a0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+<tr class="separator:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a000ad5c2198e4309802b4478ed08a98c"><td class="memItemLeft" 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#a000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+<tr class="separator:a000ad5c2198e4309802b4478ed08a98c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96a062252c26544370e8feae987c6d16"><td class="memItemLeft" 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#a96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+<tr class="separator:a96a062252c26544370e8feae987c6d16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19718c440adb41fbebcb4bafedbf932c"><td class="memItemLeft" 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#a19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+<tr class="separator:a19718c440adb41fbebcb4bafedbf932c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.0) –
+Lawrence Berkeley National Laboratory
+November, 2010
+August, 2011</pre><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><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
+dynamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><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><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad48f5fcdc4961220795817c195e2a411"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="citersol1_8c_ad48f5fcdc4961220795817c195e2a411_cgraph.png" border="0" usemap="#citersol1_8c_ad48f5fcdc4961220795817c195e2a411_cgraph" alt=""/></div>
+<map name="citersol1_8c_ad48f5fcdc4961220795817c195e2a411_cgraph" id="citersol1_8c_ad48f5fcdc4961220795817c195e2a411_cgraph">
+<area shape="rect" id="node2" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="288,5,371,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a455d0df27a76044ba598ec4dccd0abfa"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="citersol1_8c_a455d0df27a76044ba598ec4dccd0abfa_cgraph.png" border="0" usemap="#citersol1_8c_a455d0df27a76044ba598ec4dccd0abfa_cgraph" alt=""/></div>
+<map name="citersol1_8c_a455d0df27a76044ba598ec4dccd0abfa_cgraph" id="citersol1_8c_a455d0df27a76044ba598ec4dccd0abfa_cgraph">
+<area shape="rect" id="node2" href="ilu__ccopy__to__ucol_8c.html#adb60937f3436da2e6d66dc11af4317e6" title="ccopy_" alt="" coords="120,559,184,585"/><area shape="rect" id="node3" href="cgstrs_8c.html#a19517b9d29e4faf9ae777ca6fb9d415b" title="cgstrs" alt="" coords="300,309,359,336"/><area shape="rect" id="node20" href="cgsisx_8c.html#acc088517da356b61f5eee908fb61a213" title="cgsisx" alt="" coords="122,984,182,1011"/><area shape="rect" id="node4" href="cgstrs_8c.html#ae8df96516a8a07b44c8e82 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="citersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#citersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="citersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="citersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="citersol1_8c.html#ad48f5fcdc4961220795817c195e2a411" title="cmatvec_mult" alt="" coords="144,5,248,32"/><area shape="rect" id="node3" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="520,56,603,83"/><area shape="rect" id="node4" href="citersol1_8c.html#a455d0df27a76044ba598ec4dccd0abfa" title="cpsolve" alt="" co [...]
+</div>
+</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ad42e5c3013507184841cdfee652a0c18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* GLOBAL_A</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af1beb2a8fb47df4eb505addfef02814c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_A_ORIG</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3e8f028a8a340f260f7ac67973072999"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float * GLOBAL_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a869338b25a186a486edd0cf1850a7fbb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* GLOBAL_EQUED</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f5cf27b325ef2874c953290f74c9d0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_L</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19718c440adb41fbebcb4bafedbf932c"></a>
+<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>* GLOBAL_MEM_USAGE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a64b516645b16ef03c6fd0d692e6eb277"></a>
+<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>* GLOBAL_OPTIONS</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afbcb1904a71d92b04c1aef1cede6c4b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GLOBAL_PERM_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a42ee721355f1c852f770661834be93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int * GLOBAL_PERM_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4ff9f80047e0b810344d85feb96941ef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float* GLOBAL_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a96a062252c26544370e8feae987c6d16"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* GLOBAL_STAT</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a000ad5c2198e4309802b4478ed08a98c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/citersol_8c.html b/SuperLU_5.2.0/DOC/html/citersol_8c.html
new file mode 100644
index 0000000..1ef2ede
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/citersol_8c.html
@@ -0,0 +1,371 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/citersol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">citersol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Example #1 showing how to use ILU to precondition GMRES.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for citersol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="citersol_8c__incl.png" border="0" usemap="#EXAMPLE_2citersol_8c" alt=""/></div>
+<map name="EXAMPLE_2citersol_8c" id="EXAMPLE_2citersol_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a455d0df27a76044ba598ec4dccd0abfa"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#a455d0df27a76044ba598ec4dccd0abfa">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 class="separator:a455d0df27a76044ba598ec4dccd0abfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad48f5fcdc4961220795817c195e2a411"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#ad48f5fcdc4961220795817c195e2a411">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 class="separator:ad48f5fcdc4961220795817c195e2a411"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a64b516645b16ef03c6fd0d692e6eb277"><td class="memItemLeft" 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#a64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+<tr class="separator:a64b516645b16ef03c6fd0d692e6eb277"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ff9f80047e0b810344d85feb96941ef"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#a4ff9f80047e0b810344d85feb96941ef">GLOBAL_R</a></td></tr>
+<tr class="separator:a4ff9f80047e0b810344d85feb96941ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e8f028a8a340f260f7ac67973072999"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#a3e8f028a8a340f260f7ac67973072999">GLOBAL_C</a></td></tr>
+<tr class="separator:a3e8f028a8a340f260f7ac67973072999"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+<tr class="separator:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a42ee721355f1c852f770661834be93"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="citersol_8c.html#a5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+<tr class="separator:a5a42ee721355f1c852f770661834be93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad42e5c3013507184841cdfee652a0c18"><td class="memItemLeft" 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#ad42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+<tr class="separator:ad42e5c3013507184841cdfee652a0c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memItemLeft" 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#a0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+<tr class="separator:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a000ad5c2198e4309802b4478ed08a98c"><td class="memItemLeft" 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#a000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+<tr class="separator:a000ad5c2198e4309802b4478ed08a98c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96a062252c26544370e8feae987c6d16"><td class="memItemLeft" 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#a96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+<tr class="separator:a96a062252c26544370e8feae987c6d16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19718c440adb41fbebcb4bafedbf932c"><td class="memItemLeft" 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#a19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+<tr class="separator:a19718c440adb41fbebcb4bafedbf932c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.0) –
+Lawrence Berkeley National Laboratory
+November, 2010
+August, 2011</pre><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><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
+dynamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><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><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad48f5fcdc4961220795817c195e2a411"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="citersol_8c_ad48f5fcdc4961220795817c195e2a411_cgraph.png" border="0" usemap="#citersol_8c_ad48f5fcdc4961220795817c195e2a411_cgraph" alt=""/></div>
+<map name="citersol_8c_ad48f5fcdc4961220795817c195e2a411_cgraph" id="citersol_8c_ad48f5fcdc4961220795817c195e2a411_cgraph">
+<area shape="rect" id="node2" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="288,5,371,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a455d0df27a76044ba598ec4dccd0abfa"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="citersol_8c_a455d0df27a76044ba598ec4dccd0abfa_cgraph.png" border="0" usemap="#citersol_8c_a455d0df27a76044ba598ec4dccd0abfa_cgraph" alt=""/></div>
+<map name="citersol_8c_a455d0df27a76044ba598ec4dccd0abfa_cgraph" id="citersol_8c_a455d0df27a76044ba598ec4dccd0abfa_cgraph">
+<area shape="rect" id="node2" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="120,559,184,585"/><area shape="rect" id="node3" href="cgstrs_8c.html#a19517b9d29e4faf9ae777ca6fb9d415b" title="cgstrs" alt="" coords="300,309,359,336"/><area shape="rect" id="node20" href="cgsisx_8c.html#acc088517da356b61f5eee908fb61a213" title="cgsisx" alt="" coords="122,984,182,1011"/><area shape="rect" id="node4" href="cgstrs_8c.html#ae8df96516a8a07b44c8e82 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="citersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#citersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="citersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="citersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="citersol_8c.html#ad48f5fcdc4961220795817c195e2a411" title="cmatvec_mult" alt="" coords="144,73,248,100"/><area shape="rect" id="node3" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="520,73,603,100"/><area shape="rect" id="node4" href="citersol_8c.html#a455d0df27a76044ba598ec4dccd0abfa" title="cpsolve" alt="" c [...]
+</div>
+</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ad42e5c3013507184841cdfee652a0c18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* GLOBAL_A</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3e8f028a8a340f260f7ac67973072999"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float * GLOBAL_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f5cf27b325ef2874c953290f74c9d0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_L</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19718c440adb41fbebcb4bafedbf932c"></a>
+<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>* GLOBAL_MEM_USAGE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a64b516645b16ef03c6fd0d692e6eb277"></a>
+<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>* GLOBAL_OPTIONS</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afbcb1904a71d92b04c1aef1cede6c4b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GLOBAL_PERM_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a42ee721355f1c852f770661834be93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int * GLOBAL_PERM_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4ff9f80047e0b810344d85feb96941ef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float* GLOBAL_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a96a062252c26544370e8feae987c6d16"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* GLOBAL_STAT</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a000ad5c2198e4309802b4478ed08a98c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/clacon_8c.html b/SuperLU_5.2.0/DOC/html/clacon_8c.html
new file mode 100644
index 0000000..3c7ccb2
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/clacon_8c.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/clacon.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">clacon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Estimates the 1-norm.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for clacon.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="clacon_8c__incl.png" border="0" usemap="#SRC_2clacon_8c" alt=""/></div>
+<map name="SRC_2clacon_8c" id="SRC_2clacon_8c">
+<area shape="rect" id="node3" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="92,80,199,107"/><area shape="rect" id="node4" href="slu__scomplex_8h.html" title="Header file for complex operations. " alt="" coords="223,80,336,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af4536a78f0ee7097ef59278c8cf14295"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clacon_8c.html#af4536a78f0ee7097ef59278c8cf14295">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>
+<tr class="separator:af4536a78f0ee7097ef59278c8cf14295"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af4536a78f0ee7097ef59278c8cf14295"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> CLACON estimates the 1-norm of a square matrix A.
+ Reverse communication is used for evaluating matrix-vector products.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre> N (input) INT
+ The order of the matrix. N >= 1.</pre><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><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><pre> EST (output) FLOAT PRECISION
+ An estimate (a lower bound) for norm(A).</pre><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><pre> Further Details
+ ======= =======</pre><pre> Contributed by Nick Higham, University of Manchester.
+ Originally named CONEST, dated March 16, 1988.</pre><pre> Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of
+ a real or complex matrix, with applications to condition estimation",
+</p>
+<h1>ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.
+</h1>
+</pre><pre>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="clacon_8c_af4536a78f0ee7097ef59278c8cf14295_cgraph.png" border="0" usemap="#clacon_8c_af4536a78f0ee7097ef59278c8cf14295_cgraph" alt=""/></div>
+<map name="clacon_8c_af4536a78f0ee7097ef59278c8cf14295_cgraph" id="clacon_8c_af4536a78f0ee7097ef59278c8cf14295_cgraph">
+<area shape="rect" id="node2" href="icmax1_8c.html#a53b891600ab40c636f315c490c39749e" title="icmax1_slu" alt="" coords="123,5,211,32"/><area shape="rect" id="node3" href="scsum1_8c.html#a5d604b880c9214d7550424041c3850aa" title="scsum1_slu" alt="" coords="121,56,213,83"/><area shape="rect" id="node4" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="262,81,319,108"/><area shape="rect" id="node5" href="ilu__ccopy__to__ucol_8c.html [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/clangs_8c.html b/SuperLU_5.2.0/DOC/html/clangs_8c.html
new file mode 100644
index 0000000..c697fdb
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/clangs_8c.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/clangs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">clangs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Returns the value of the one norm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for clangs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="clangs_8c__incl.png" border="0" usemap="#SRC_2clangs_8c" alt=""/></div>
+<map name="SRC_2clangs_8c" id="SRC_2clangs_8c">
+<area shape="rect" id="node3" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3e9baabe44cf6d5779cae55b80bc5763"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="clangs_8c.html#a3e9baabe44cf6d5779cae55b80bc5763">clangs</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a3e9baabe44cf6d5779cae55b80bc5763"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from lapack routine CLANGE
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a3e9baabe44cf6d5779cae55b80bc5763"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre><h1>Description
+</h1>
+</pre><pre></pre><pre> CLANGE returns the value</pre><pre> CLANGE = ( max(<a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A(i,j))</a>), 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><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(<a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A(i,j))</a>) is not a matrix norm.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="clangs_8c_a3e9baabe44cf6d5779cae55b80bc5763_cgraph.png" border="0" usemap="#clangs_8c_a3e9baabe44cf6d5779cae55b80bc5763_cgraph" alt=""/></div>
+<map name="clangs_8c_a3e9baabe44cf6d5779cae55b80bc5763_cgraph" id="clangs_8c_a3e9baabe44cf6d5779cae55b80bc5763_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="115,5,173,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/claqgs_8c.html b/SuperLU_5.2.0/DOC/html/claqgs_8c.html
new file mode 100644
index 0000000..53498ba
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/claqgs_8c.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/claqgs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">claqgs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Equlibrates a general sprase matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for claqgs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="claqgs_8c__incl.png" border="0" usemap="#SRC_2claqgs_8c" alt=""/></div>
+<map name="SRC_2claqgs_8c" id="SRC_2claqgs_8c">
+<area shape="rect" id="node3" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0656018abfc9fa2821827415f5d5ea57"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="claqgs_8c.html#a0656018abfc9fa2821827415f5d5ea57">THRESH</a> (0.1)</td></tr>
+<tr class="separator:a0656018abfc9fa2821827415f5d5ea57"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0cf5dcef08d22df154acf807beb43ea1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="claqgs_8c.html#a0cf5dcef08d22df154acf807beb43ea1">claqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, float *r, float *c, float rowcnd, float colcnd, float amax, char *equed)</td></tr>
+<tr class="separator:a0cf5dcef08d22df154acf807beb43ea1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from LAPACK routine CLAQGE
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a0656018abfc9fa2821827415f5d5ea57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define THRESH (0.1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0cf5dcef08d22df154acf807beb43ea1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> CLAQGS equilibrates a general sparse M by N matrix A using the row and
+ scaling factors in the vectors R and C.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (input) float*, dimension (A->nrow)
+ The row scale factors for A.</pre><pre> C (input) float*, dimension (A->ncol)
+ The column scale factors for A.</pre><pre> ROWCND (input) float
+ Ratio of the smallest R(i) to the largest R(i).</pre><pre> COLCND (input) float
+ Ratio of the smallest C(i) to the largest C(i).</pre><pre> AMAX (input) float
+ Absolute value of largest matrix entry.</pre><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><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="claqgs_8c_a0cf5dcef08d22df154acf807beb43ea1_cgraph.png" border="0" usemap="#claqgs_8c_a0cf5dcef08d22df154acf807beb43ea1_cgraph" alt=""/></div>
+<map name="claqgs_8c_a0cf5dcef08d22df154acf807beb43ea1_cgraph" id="claqgs_8c_a0cf5dcef08d22df154acf807beb43ea1_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="115,5,176,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cldperm_8c.html b/SuperLU_5.2.0/DOC/html/cldperm_8c.html
new file mode 100644
index 0000000..13e920c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cldperm_8c.html
@@ -0,0 +1,324 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cldperm.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cldperm.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Finds a row permutation so that the matrix has large entries on the diagonal.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cldperm.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cldperm_8c__incl.png" border="0" usemap="#SRC_2cldperm_8c" alt=""/></div>
+<map name="SRC_2cldperm_8c" id="SRC_2cldperm_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1e6fb0c8dd36aef071ef165136ece781"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="cldperm_8c.html#a1e6fb0c8dd36aef071ef165136ece781">mc64id_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *)</td></tr>
+<tr class="separator:a1e6fb0c8dd36aef071ef165136ece781"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bf33c16a135cdc671242aed1705e1cd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="cldperm_8c.html#a1bf33c16a135cdc671242aed1705e1cd">mc64ad_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</ [...]
+<tr class="separator:a1bf33c16a135cdc671242aed1705e1cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ea12c5d13e30e24ad3e48e4ab521f4f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cldperm_8c.html#a0ea12c5d13e30e24ad3e48e4ab521f4f">cldperm</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> job, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> n, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623 [...]
+<tr class="separator:a0ea12c5d13e30e24ad3e48e4ab521f4f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ea12c5d13e30e24ad3e48e4ab521f4f"></a>
+<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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> CLDPERM finds a row permutation so that the matrix has large
+ entries on the diagonal.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre>n (input) int
+ The order of the matrix.</pre><pre>nnz (input) int
+ The number of nonzeros in the matrix.</pre><pre>adjncy (input) int*, of size nnz
+ The adjacency structure of the matrix, which contains the row
+ indices of the nonzeros.</pre><pre>colptr (input) int*, of size n+1
+ The pointers to the beginning of each column in ADJNCY.</pre><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><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><pre>u (output) double*, of size n
+ If job = 5, the natural logarithms of the row scaling factors.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cldperm_8c_a0ea12c5d13e30e24ad3e48e4ab521f4f_cgraph.png" border="0" usemap="#cldperm_8c_a0ea12c5d13e30e24ad3e48e4ab521f4f_cgraph" alt=""/></div>
+<map name="cldperm_8c_a0ea12c5d13e30e24ad3e48e4ab521f4f_cgraph" id="cldperm_8c_a0ea12c5d13e30e24ad3e48e4ab521f4f_cgraph">
+<area shape="rect" id="node2" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="137,5,212,32"/><area shape="rect" id="node3" href="slu__util_8h.html#ade363dcb4babb66fa0e5f51bd2e6e42c" title="slu_PrintInt10" alt="" coords="123,56,226,83"/><area shape="rect" id="node4" href="cldperm_8c.html#a1e6fb0c8dd36aef071ef165136ece781" title="mc64id_" alt="" coords="139,107,210,133"/><area shape="rect" id="node5" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a1bf33c16a135cdc671242aed1705e1cd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[] </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1e6fb0c8dd36aef071ef165136ece781"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/clinsol1_8c.html b/SuperLU_5.2.0/DOC/html/clinsol1_8c.html
new file mode 100644
index 0000000..4e9cecd
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/clinsol1_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/clinsol1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">clinsol1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for clinsol1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsol1_8c__incl.png" border="0" usemap="#EXAMPLE_2clinsol1_8c" alt=""/></div>
+<map name="EXAMPLE_2clinsol1_8c" id="EXAMPLE_2clinsol1_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsol1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#clinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="clinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="clinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,157,263,184"/><area shape="rect" id="node3" href="creadhb_8c.html#a52586e2539abd4eef906171718a16988" title="Auxiliary routines. " alt="" coords="162,208,230,235"/><area shape="rect" id="node6" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="611,360,720,387"/><area shape="rect" id [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/clinsol_8c.html b/SuperLU_5.2.0/DOC/html/clinsol_8c.html
new file mode 100644
index 0000000..dfdb28a
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/clinsol_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/clinsol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">clinsol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for clinsol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsol_8c__incl.png" border="0" usemap="#EXAMPLE_2clinsol_8c" alt=""/></div>
+<map name="EXAMPLE_2clinsol_8c" id="EXAMPLE_2clinsol_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsol_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#clinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="clinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="clinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,157,263,184"/><area shape="rect" id="node3" href="creadhb_8c.html#a52586e2539abd4eef906171718a16988" title="Auxiliary routines. " alt="" coords="162,208,230,235"/><area shape="rect" id="node6" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="611,360,720,387"/><area shape="rect" id [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/clinsolx1_8c.html b/SuperLU_5.2.0/DOC/html/clinsolx1_8c.html
new file mode 100644
index 0000000..0cd8492
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/clinsolx1_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/clinsolx1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">clinsolx1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for clinsolx1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsolx1_8c__incl.png" border="0" usemap="#EXAMPLE_2clinsolx1_8c" alt=""/></div>
+<map name="EXAMPLE_2clinsolx1_8c" id="EXAMPLE_2clinsolx1_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a26a449fe0e6f4599404be8f78ed31f20"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx1_8c.html#a26a449fe0e6f4599404be8f78ed31f20">parse_command_line</a> (int argc, char *argv[], int *lwork, float *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d6 [...]
+<tr class="separator:a26a449fe0e6f4599404be8f78ed31f20"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#clinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="clinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="clinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="clinsolx1_8c.html#a26a449fe0e6f4599404be8f78ed31f20" title="parse_command_line" alt="" coords="123,5,269,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,56,263,83"/><area shape="rect" id="node4" href="creadhb_8c.html#a52586e2539abd4eef906171718a16988" title="Auxiliary routines. " alt="" coords="162,335,230,361"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a26a449fe0e6f4599404be8f78ed31f20"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/clinsolx2_8c.html b/SuperLU_5.2.0/DOC/html/clinsolx2_8c.html
new file mode 100644
index 0000000..6b74690
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/clinsolx2_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/clinsolx2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">clinsolx2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for clinsolx2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsolx2_8c__incl.png" border="0" usemap="#EXAMPLE_2clinsolx2_8c" alt=""/></div>
+<map name="EXAMPLE_2clinsolx2_8c" id="EXAMPLE_2clinsolx2_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx2_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a693ba86aac49435e82cf3a57a4412744"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx2_8c.html#a693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d [...]
+<tr class="separator:a693ba86aac49435e82cf3a57a4412744"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#clinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="clinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="clinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="clinsolx2_8c.html#a693ba86aac49435e82cf3a57a4412744" title="parse_command_line" alt="" coords="123,5,269,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,56,263,83"/><area shape="rect" id="node4" href="creadhb_8c.html#a52586e2539abd4eef906171718a16988" title="Auxiliary routines. " alt="" coords="162,335,230,361"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a693ba86aac49435e82cf3a57a4412744"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/clinsolx_8c.html b/SuperLU_5.2.0/DOC/html/clinsolx_8c.html
new file mode 100644
index 0000000..3b1b889
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/clinsolx_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/clinsolx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">clinsolx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for clinsolx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsolx_8c__incl.png" border="0" usemap="#EXAMPLE_2clinsolx_8c" alt=""/></div>
+<map name="EXAMPLE_2clinsolx_8c" id="EXAMPLE_2clinsolx_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a26a449fe0e6f4599404be8f78ed31f20"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="clinsolx_8c.html#a26a449fe0e6f4599404be8f78ed31f20">parse_command_line</a> (int argc, char *argv[], int *lwork, float *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62 [...]
+<tr class="separator:a26a449fe0e6f4599404be8f78ed31f20"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="clinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#clinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="clinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="clinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="clinsolx_8c.html#a26a449fe0e6f4599404be8f78ed31f20" title="parse_command_line" alt="" coords="123,5,269,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,56,263,83"/><area shape="rect" id="node4" href="creadhb_8c.html#a52586e2539abd4eef906171718a16988" title="Auxiliary routines. " alt="" coords="162,335,230,361"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a26a449fe0e6f4599404be8f78ed31f20"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cmemory_8c.html b/SuperLU_5.2.0/DOC/html/cmemory_8c.html
new file mode 100644
index 0000000..0e290c2
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cmemory_8c.html
@@ -0,0 +1,1047 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cmemory.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cmemory.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Memory details.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cmemory.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c__incl.png" border="0" usemap="#SRC_2cmemory_8c" alt=""/></div>
+<map name="SRC_2cmemory_8c" id="SRC_2cmemory_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a1ef4d4db4d5e1fe0719416163e0e51ae"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a1ef4d4db4d5e1fe0719416163e0e51ae">StackFull</a>(x) ( x + Glu->stack.used >= Glu->stack.size )</td></tr>
+<tr class="separator:a1ef4d4db4d5e1fe0719416163e0e51ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac11b1c3847a3d397e9675de40782134d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#ac11b1c3847a3d397e9675de40782134d">NotDoubleAlign</a>(addr) ( (intptr_t)addr & 7 )</td></tr>
+<tr class="separator:ac11b1c3847a3d397e9675de40782134d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8204d321846eb4b23d563eac7e5bfa7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#ac8204d321846eb4b23d563eac7e5bfa7">DoubleAlign</a>(addr) ( ((intptr_t)addr + 7) & ~7L )</td></tr>
+<tr class="separator:ac8204d321846eb4b23d563eac7e5bfa7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a70ca807c578a0c495f7ce5edb0215e2b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a70ca807c578a0c495f7ce5edb0215e2b">TempSpace</a>(m, w)</td></tr>
+<tr class="separator:a70ca807c578a0c495f7ce5edb0215e2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b2a35bfd2e6c9d03e2a6ccdba9fa847"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a7b2a35bfd2e6c9d03e2a6ccdba9fa847">Reduce</a>(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */</td></tr>
+<tr class="separator:a7b2a35bfd2e6c9d03e2a6ccdba9fa847"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3996260179c0a72397776571b4b19164"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a3996260179c0a72397776571b4b19164">cexpand</a> (int *prev_len,<a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a> type,int len_to_copy,int keep_prev,<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a3996260179c0a72397776571b4b19164"><td class="mdescLeft"> </td><td class="mdescRight">Expand the existing storage to accommodate more fill-ins. <a href="#a3996260179c0a72397776571b4b19164">More...</a><br/></td></tr>
+<tr class="separator:a3996260179c0a72397776571b4b19164"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b8e519a51391274f40066ea72e82583"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a4b8e519a51391274f40066ea72e82583">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 class="memdesc:a4b8e519a51391274f40066ea72e82583"><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="#a4b8e519a51391274f40066ea72e82583">More...</a><br/></td></tr>
+<tr class="separator:a4b8e519a51391274f40066ea72e82583"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae8af819e1072d711fd22ce91c1e928fc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#ae8af819e1072d711fd22ce91c1e928fc">copy_mem_complex</a> (int, void *, void *)</td></tr>
+<tr class="separator:ae8af819e1072d711fd22ce91c1e928fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98ec5775d491718006688922903496ae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a98ec5775d491718006688922903496ae">cStackCompress</a> (<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a98ec5775d491718006688922903496ae"><td class="mdescLeft"> </td><td class="mdescRight">Compress the work[] array to remove fragmentation. <a href="#a98ec5775d491718006688922903496ae">More...</a><br/></td></tr>
+<tr class="separator:a98ec5775d491718006688922903496ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac62dd03d1789ef6363db31ad2491ada9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#ac62dd03d1789ef6363db31ad2491ada9">cSetupSpace</a> (void *work, int lwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:ac62dd03d1789ef6363db31ad2491ada9"><td class="mdescLeft"> </td><td class="mdescRight">Setup the memory model to be used for factorization. <a href="#ac62dd03d1789ef6363db31ad2491ada9">More...</a><br/></td></tr>
+<tr class="separator:ac62dd03d1789ef6363db31ad2491ada9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afdfe5f4689b0aaedf46d034809711754"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#afdfe5f4689b0aaedf46d034809711754">cuser_malloc</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:afdfe5f4689b0aaedf46d034809711754"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4c66bfc4bbf0fed0e2babbf34504bf5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#aa4c66bfc4bbf0fed0e2babbf34504bf5">cuser_free</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:aa4c66bfc4bbf0fed0e2babbf34504bf5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab59eea34474da95fb3dc125400a1287e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#ab59eea34474da95fb3dc125400a1287e">copy_mem_int</a> (int, void *, void *)</td></tr>
+<tr class="separator:ab59eea34474da95fb3dc125400a1287e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c226087c09a94ff40b92b14fa46fc53"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a4c226087c09a94ff40b92b14fa46fc53">user_bcopy</a> (char *, char *, int)</td></tr>
+<tr class="separator:a4c226087c09a94ff40b92b14fa46fc53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a34d8cd030775d267947b68a4dacfbabb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a34d8cd030775d267947b68a4dacfbabb">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 class="separator:a34d8cd030775d267947b68a4dacfbabb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf50d31c33a4cc3e770b617202ea73e3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#aaf50d31c33a4cc3e770b617202ea73e3">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 class="separator:aaf50d31c33a4cc3e770b617202ea73e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b958c6272421d091bdd9a2e7fdbafcd"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a6b958c6272421d091bdd9a2e7fdbafcd">cLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">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 [...]
+<tr class="memdesc:a6b958c6272421d091bdd9a2e7fdbafcd"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for the data structures common to all factor routines. <a href="#a6b958c6272421d091bdd9a2e7fdbafcd">More...</a><br/></td></tr>
+<tr class="separator:a6b958c6272421d091bdd9a2e7fdbafcd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff3d90f7f22f882faf8ba0dcf68b0f9c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#aff3d90f7f22f882faf8ba0dcf68b0f9c">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 class="memdesc:aff3d90f7f22f882faf8ba0dcf68b0f9c"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays. <a href="#aff3d90f7f22f882faf8ba0dcf68b0f9c">More...</a><br/></td></tr>
+<tr class="separator:aff3d90f7f22f882faf8ba0dcf68b0f9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad4e33e7a64f75e058e9a8ebd479fa004"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#ad4e33e7a64f75e058e9a8ebd479fa004">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 class="memdesc:ad4e33e7a64f75e058e9a8ebd479fa004"><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines. <a href="#ad4e33e7a64f75e058e9a8ebd479fa004">More...</a><br/></td></tr>
+<tr class="separator:ad4e33e7a64f75e058e9a8ebd479fa004"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f2864f34ca668aeccb8298052a5c449"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449">cLUMemXpand</a> (int jcol, int next, <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a> mem_type, int *maxlen, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a8f2864f34ca668aeccb8298052a5c449"><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization. <a href="#a8f2864f34ca668aeccb8298052a5c449">More...</a><br/></td></tr>
+<tr class="separator:a8f2864f34ca668aeccb8298052a5c449"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad952b424acd036108ca2f5a0bd9d3739"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#ad952b424acd036108ca2f5a0bd9d3739">callocateA</a> (int n, int nnz, <a class="el" href="structcomplex.html">complex</a> **a, int **asub, int **xa)</td></tr>
+<tr class="memdesc:ad952b424acd036108ca2f5a0bd9d3739"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A. <a href="#ad952b424acd036108ca2f5a0bd9d3739">More...</a><br/></td></tr>
+<tr class="separator:ad952b424acd036108ca2f5a0bd9d3739"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0af029f557e5014a2d6797436b925f53"><td class="memItemLeft" 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#a0af029f557e5014a2d6797436b925f53">complexMalloc</a> (int n)</td></tr>
+<tr class="separator:a0af029f557e5014a2d6797436b925f53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e625ecaeb259e2dd79667ffbfb816c0"><td class="memItemLeft" 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#a1e625ecaeb259e2dd79667ffbfb816c0">complexCalloc</a> (int n)</td></tr>
+<tr class="separator:a1e625ecaeb259e2dd79667ffbfb816c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a43ff5010762c14ea7591d23cf48403a3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cmemory_8c.html#a43ff5010762c14ea7591d23cf48403a3">cmemory_usage</a> (const int nzlmax, const int nzumax, const int nzlumax, const int n)</td></tr>
+<tr class="separator:a43ff5010762c14ea7591d23cf48403a3"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ac8204d321846eb4b23d563eac7e5bfa7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DoubleAlign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> ( ((intptr_t)addr + 7) & ~7L )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac11b1c3847a3d397e9675de40782134d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NotDoubleAlign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> ( (intptr_t)addr & 7 )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7b2a35bfd2e6c9d03e2a6ccdba9fa847"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define Reduce</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">alpha</td><td>)</td>
+ <td> ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1ef4d4db4d5e1fe0719416163e0e51ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define StackFull</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x</td><td>)</td>
+ <td> ( x + Glu->stack.used >= Glu->stack.size )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a70ca807c578a0c495f7ce5edb0215e2b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define TempSpace</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">m, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">w </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">( (2*w + 4 + <a class="code" href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a>) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) + \</div>
+<div class="line"> (w + 1) * m * <span class="keyword">sizeof</span>(<a class="code" href="structcomplex.html">complex</a>) )</div>
+<div class="ttc" id="slu__util_8h_html_a9b7b2a5116ee487722b0967317ab6360"><div class="ttname"><a href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a></div><div class="ttdeci">#define NO_MARKER</div><div class="ttdef"><b>Definition:</b> slu_util.h:41</div></div>
+<div class="ttc" id="structcomplex_html"><div class="ttname"><a href="structcomplex.html">complex</a></div><div class="ttdef"><b>Definition:</b> slu_scomplex.h:31</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad952b424acd036108ca2f5a0bd9d3739"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c_ad952b424acd036108ca2f5a0bd9d3739_cgraph.png" border="0" usemap="#cmemory_8c_ad952b424acd036108ca2f5a0bd9d3739_cgraph" alt=""/></div>
+<map name="cmemory_8c_ad952b424acd036108ca2f5a0bd9d3739_cgraph" id="cmemory_8c_ad952b424acd036108ca2f5a0bd9d3739_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="136,5,245,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="153,56,228,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a3996260179c0a72397776571b4b19164"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c_a3996260179c0a72397776571b4b19164_cgraph.png" border="0" usemap="#cmemory_8c_a3996260179c0a72397776571b4b19164_cgraph" alt=""/></div>
+<map name="cmemory_8c_a3996260179c0a72397776571b4b19164_cgraph" id="cmemory_8c_a3996260179c0a72397776571b4b19164_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="144,5,251,32"/><area shape="rect" id="node3" href="cmemory_8c.html#ae8af819e1072d711fd22ce91c1e928fc" title="copy_mem_complex" alt="" coords="126,56,269,83"/><area shape="rect" id="node4" href="cmemory_8c.html#afdfe5f4689b0aaedf46d034809711754" title="cuser_malloc" alt="" coords="148,107,247,133"/><area shape="rect" id="node5" href="cmemory_8c.html#a4c226087c09a94ff4 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a6b958c6272421d091bdd9a2e7fdbafcd"></a>
+<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#ac785c8235480e5cfef9848d89c047c0a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c_a6b958c6272421d091bdd9a2e7fdbafcd_cgraph.png" border="0" usemap="#cmemory_8c_a6b958c6272421d091bdd9a2e7fdbafcd_cgraph" alt=""/></div>
+<map name="cmemory_8c_a6b958c6272421d091bdd9a2e7fdbafcd_cgraph" id="cmemory_8c_a6b958c6272421d091bdd9a2e7fdbafcd_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#ac62dd03d1789ef6363db31ad2491ada9" title="Setup the memory model to be used for factorization. " alt="" coords="157,5,257,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="169,56,244,83"/><area shape="rect" id="node4" href="cmemory_8c.html#afdfe5f4689b0aaedf46d034809711754" title="cuser_malloc" alt="" coords="337,183,436,209"/><area shape="rect" id="node5" href="c [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a8f2864f34ca668aeccb8298052a5c449"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+Return value: 0 - successful return
+ > 0 - number of bytes allocated when run out of space
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c_a8f2864f34ca668aeccb8298052a5c449_cgraph.png" border="0" usemap="#cmemory_8c_a8f2864f34ca668aeccb8298052a5c449_cgraph" alt=""/></div>
+<map name="cmemory_8c_a8f2864f34ca668aeccb8298052a5c449_cgraph" id="cmemory_8c_a8f2864f34ca668aeccb8298052a5c449_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a3996260179c0a72397776571b4b19164" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="190,81,261,108"/><area shape="rect" id="node7" href="cmemory_8c.html#a43ff5010762c14ea7591d23cf48403a3" title="cmemory_usage" alt="" coords="166,132,285,159"/><area shape="rect" id="node3" href="cmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="352,5,459,32"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad4e33e7a64f75e058e9a8ebd479fa004"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4b8e519a51391274f40066ea72e82583"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c_a4b8e519a51391274f40066ea72e82583_cgraph.png" border="0" usemap="#cmemory_8c_a4b8e519a51391274f40066ea72e82583_cgraph" alt=""/></div>
+<map name="cmemory_8c_a4b8e519a51391274f40066ea72e82583_cgraph" id="cmemory_8c_a4b8e519a51391274f40066ea72e82583_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="165,5,232,32"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="162,56,235,83"/><area shape="rect" id="node5" href="cmemory_8c.html#afdfe5f4689b0aaedf46d034809711754" title="cuser_malloc" alt="" coords="149,107,248,133"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55d [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a43ff5010762c14ea7591d23cf48403a3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1e625ecaeb259e2dd79667ffbfb816c0"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0af029f557e5014a2d6797436b925f53"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae8af819e1072d711fd22ce91c1e928fc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab59eea34474da95fb3dc125400a1287e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a34d8cd030775d267947b68a4dacfbabb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c_a34d8cd030775d267947b68a4dacfbabb_cgraph.png" border="0" usemap="#cmemory_8c_a34d8cd030775d267947b68a4dacfbabb_cgraph" alt=""/></div>
+<map name="cmemory_8c_a34d8cd030775d267947b68a4dacfbabb_cgraph" id="cmemory_8c_a34d8cd030775d267947b68a4dacfbabb_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="269,5,352,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aff3d90f7f22f882faf8ba0dcf68b0f9c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c_aff3d90f7f22f882faf8ba0dcf68b0f9c_cgraph.png" border="0" usemap="#cmemory_8c_aff3d90f7f22f882faf8ba0dcf68b0f9c_cgraph" alt=""/></div>
+<map name="cmemory_8c_aff3d90f7f22f882faf8ba0dcf68b0f9c_cgraph" id="cmemory_8c_aff3d90f7f22f882faf8ba0dcf68b0f9c_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="144,5,211,32"/><area shape="rect" id="node4" href="cutil_8c.html#a0987feeb2bd380db917660cde3352ec7" title="Fills a complex precision array with a given value. " alt="" coords="156,56,199,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="259,5,341,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ac62dd03d1789ef6363db31ad2491ada9"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>lwork = 0: use system malloc; lwork > 0: use user-supplied work[] space. </p>
+
+</div>
+</div>
+<a class="anchor" id="a98ec5775d491718006688922903496ae"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c_a98ec5775d491718006688922903496ae_cgraph.png" border="0" usemap="#cmemory_8c_a98ec5775d491718006688922903496ae_cgraph" alt=""/></div>
+<map name="cmemory_8c_a98ec5775d491718006688922903496ae_cgraph" id="cmemory_8c_a98ec5775d491718006688922903496ae_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#ae8af819e1072d711fd22ce91c1e928fc" title="copy_mem_complex" alt="" coords="177,5,319,32"/><area shape="rect" id="node3" href="cmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="195,56,301,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa4c66bfc4bbf0fed0e2babbf34504bf5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afdfe5f4689b0aaedf46d034809711754"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaf50d31c33a4cc3e770b617202ea73e3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmemory_8c_aaf50d31c33a4cc3e770b617202ea73e3_cgraph.png" border="0" usemap="#cmemory_8c_aaf50d31c33a4cc3e770b617202ea73e3_cgraph" alt=""/></div>
+<map name="cmemory_8c_aaf50d31c33a4cc3e770b617202ea73e3_cgraph" id="cmemory_8c_aaf50d31c33a4cc3e770b617202ea73e3_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="176,5,243,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="291,5,373,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c226087c09a94ff40b92b14fa46fc53"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cmyblas2_8c.html b/SuperLU_5.2.0/DOC/html/cmyblas2_8c.html
new file mode 100644
index 0000000..cd4c491
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cmyblas2_8c.html
@@ -0,0 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cmyblas2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cmyblas2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Level 2 Blas operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__scomplex_8h_source.html">slu_scomplex.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cmyblas2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmyblas2_8c__incl.png" border="0" usemap="#SRC_2cmyblas2_8c" alt=""/></div>
+<map name="SRC_2cmyblas2_8c" id="SRC_2cmyblas2_8c">
+<area shape="rect" id="node2" href="slu__scomplex_8h.html" title="Header file for complex operations. " alt="" coords="10,80,123,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2e70ad44c5da4a8f97a62eb718d3e72c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmyblas2_8c.html#a2e70ad44c5da4a8f97a62eb718d3e72c">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 class="memdesc:a2e70ad44c5da4a8f97a62eb718d3e72c"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a2e70ad44c5da4a8f97a62eb718d3e72c">More...</a><br/></td></tr>
+<tr class="separator:a2e70ad44c5da4a8f97a62eb718d3e72c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7eca4ad25e05a68037a682483f9786f1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmyblas2_8c.html#a7eca4ad25e05a68037a682483f9786f1">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 class="memdesc:a7eca4ad25e05a68037a682483f9786f1"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a7eca4ad25e05a68037a682483f9786f1">More...</a><br/></td></tr>
+<tr class="separator:a7eca4ad25e05a68037a682483f9786f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a70608abfb6247329a7d69f6ed5231ed9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cmyblas2_8c.html#a70608abfb6247329a7d69f6ed5231ed9">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 class="memdesc:a70608abfb6247329a7d69f6ed5231ed9"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a70608abfb6247329a7d69f6ed5231ed9">More...</a><br/></td></tr>
+<tr class="separator:a70608abfb6247329a7d69f6ed5231ed9"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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> Purpose: Level 2 BLAS operations: solves and matvec, written in C. Note: This is only used when the system lacks an efficient BLAS library. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2e70ad44c5da4a8f97a62eb718d3e72c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a70608abfb6247329a7d69f6ed5231ed9"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7eca4ad25e05a68037a682483f9786f1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cmyblas2_8c_a7eca4ad25e05a68037a682483f9786f1_cgraph.png" border="0" usemap="#cmyblas2_8c_a7eca4ad25e05a68037a682483f9786f1_cgraph" alt=""/></div>
+<map name="cmyblas2_8c_a7eca4ad25e05a68037a682483f9786f1_cgraph" id="cmyblas2_8c_a7eca4ad25e05a68037a682483f9786f1_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#a19814f5030befb85c4bb07e0fac34a7b" title="Complex Division c = a/b. " alt="" coords="120,5,173,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/colamd_8c.html b/SuperLU_5.2.0/DOC/html/colamd_8c.html
new file mode 100644
index 0000000..7b95e7c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/colamd_8c.html
@@ -0,0 +1,1790 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/colamd.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">colamd.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A sparse matrix column ordering algorithm.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for colamd.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8c__incl.png" border="0" usemap="#SRC_2colamd_8c" alt=""/></div>
+<map name="SRC_2colamd_8c" id="SRC_2colamd_8c">
+<area shape="rect" id="node2" href="colamd_8h.html" title="Colamd prototypes and definitions. " alt="" coords="4,80,77,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a8de3ed741dadc9c979a4ff17c0a9116e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a8de3ed741dadc9c979a4ff17c0a9116e">NDEBUG</a></td></tr>
+<tr class="separator:a8de3ed741dadc9c979a4ff17c0a9116e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad17d551e31d1828c68acf40684849b7e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a></td></tr>
+<tr class="separator:ad17d551e31d1828c68acf40684849b7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5e151c615eda34903514212f05a5ccf8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> static</td></tr>
+<tr class="separator:a5e151c615eda34903514212f05a5ccf8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa99ec4acc4ecb2dc3c2d05da15d0e3f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#afa99ec4acc4ecb2dc3c2d05da15d0e3f">MAX</a>(a, b) (((a) > (b)) ? (a) : (b))</td></tr>
+<tr class="separator:afa99ec4acc4ecb2dc3c2d05da15d0e3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3acffbd305ee72dcd4593c0d8af64a4f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a3acffbd305ee72dcd4593c0d8af64a4f">MIN</a>(a, b) (((a) < (b)) ? (a) : (b))</td></tr>
+<tr class="separator:a3acffbd305ee72dcd4593c0d8af64a4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4201cc2809d450d2484680ee1b958ca"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#af4201cc2809d450d2484680ee1b958ca">ONES_COMPLEMENT</a>(r) (-(r)-1)</td></tr>
+<tr class="separator:af4201cc2809d450d2484680ee1b958ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a> (1)</td></tr>
+<tr class="separator:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa93f0eb578d23995850d61f7d61c55c1"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a> (0)</td></tr>
+<tr class="separator:aa93f0eb578d23995850d61f7d61c55c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2b7cf2a3641be7b89138615764d60ba3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a2b7cf2a3641be7b89138615764d60ba3">EMPTY</a> (-1)</td></tr>
+<tr class="separator:a2b7cf2a3641be7b89138615764d60ba3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8beef706da0344be19d59438fcdab6d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">ALIVE</a> (0)</td></tr>
+<tr class="separator:ad8beef706da0344be19d59438fcdab6d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c8793c7acb4598d2ebcd8288f29ee69"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a3c8793c7acb4598d2ebcd8288f29ee69">DEAD</a> (-1)</td></tr>
+<tr class="separator:a3c8793c7acb4598d2ebcd8288f29ee69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac0adce1e7d70351cef4752f3373709af"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ac0adce1e7d70351cef4752f3373709af">DEAD_PRINCIPAL</a> (-1)</td></tr>
+<tr class="separator:ac0adce1e7d70351cef4752f3373709af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f66923672bcc495333995f7d238945f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a0f66923672bcc495333995f7d238945f">DEAD_NON_PRINCIPAL</a> (-2)</td></tr>
+<tr class="separator:a0f66923672bcc495333995f7d238945f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae200d2ac8149305712af7230f9ee24d5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ae200d2ac8149305712af7230f9ee24d5">ROW_IS_DEAD</a>(r) <a class="el" href="colamd_8c.html#a0d68b03acc587c11fe6dffbfede78c2d">ROW_IS_MARKED_DEAD</a> (Row[r].shared2.mark)</td></tr>
+<tr class="separator:ae200d2ac8149305712af7230f9ee24d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d68b03acc587c11fe6dffbfede78c2d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a0d68b03acc587c11fe6dffbfede78c2d">ROW_IS_MARKED_DEAD</a>(row_mark) (row_mark < <a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">ALIVE</a>)</td></tr>
+<tr class="separator:a0d68b03acc587c11fe6dffbfede78c2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abc775359cfa45ffaf6250522c521110d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#abc775359cfa45ffaf6250522c521110d">ROW_IS_ALIVE</a>(r) (Row [r].shared2.mark >= <a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">ALIVE</a>)</td></tr>
+<tr class="separator:abc775359cfa45ffaf6250522c521110d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa08664bd5b8133f28dbeedc9a030fc86"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#aa08664bd5b8133f28dbeedc9a030fc86">COL_IS_DEAD</a>(c) (Col [c].start < <a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">ALIVE</a>)</td></tr>
+<tr class="separator:aa08664bd5b8133f28dbeedc9a030fc86"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a50f9ca65904b13f345862cb46d08d84b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a50f9ca65904b13f345862cb46d08d84b">COL_IS_ALIVE</a>(c) (Col [c].start >= <a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">ALIVE</a>)</td></tr>
+<tr class="separator:a50f9ca65904b13f345862cb46d08d84b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a003c0e2dae54bcb7c680333304dd4dcb"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a003c0e2dae54bcb7c680333304dd4dcb">COL_IS_DEAD_PRINCIPAL</a>(c) (Col [c].start == <a class="el" href="colamd_8c.html#ac0adce1e7d70351cef4752f3373709af">DEAD_PRINCIPAL</a>)</td></tr>
+<tr class="separator:a003c0e2dae54bcb7c680333304dd4dcb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adde21248544152df48ab70b6da1b38b5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#adde21248544152df48ab70b6da1b38b5">KILL_ROW</a>(r) { Row [r].shared2.mark = <a class="el" href="colamd_8c.html#a3c8793c7acb4598d2ebcd8288f29ee69">DEAD</a> ; }</td></tr>
+<tr class="separator:adde21248544152df48ab70b6da1b38b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7882929a7898e09a3de9e7676ae1aa29"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a7882929a7898e09a3de9e7676ae1aa29">KILL_PRINCIPAL_COL</a>(c) { Col [c].start = <a class="el" href="colamd_8c.html#ac0adce1e7d70351cef4752f3373709af">DEAD_PRINCIPAL</a> ; }</td></tr>
+<tr class="separator:a7882929a7898e09a3de9e7676ae1aa29"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0458a358e752473d86e6f21a56b44a26"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a0458a358e752473d86e6f21a56b44a26">KILL_NON_PRINCIPAL_COL</a>(c) { Col [c].start = <a class="el" href="colamd_8c.html#a0f66923672bcc495333995f7d238945f">DEAD_NON_PRINCIPAL</a> ; }</td></tr>
+<tr class="separator:a0458a358e752473d86e6f21a56b44a26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae1649fc947ca37a86917a08354f48d1a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ae1649fc947ca37a86917a08354f48d1a">PRINTF</a> printf</td></tr>
+<tr class="separator:ae1649fc947ca37a86917a08354f48d1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa5fad23b2a5eed790e6661e896a506b7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#aa5fad23b2a5eed790e6661e896a506b7">INDEX</a>(i) (i)</td></tr>
+<tr class="separator:aa5fad23b2a5eed790e6661e896a506b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a144524f0a43ebe1a97d576a76f6557a0"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a144524f0a43ebe1a97d576a76f6557a0">DEBUG0</a>(params) ;</td></tr>
+<tr class="separator:a144524f0a43ebe1a97d576a76f6557a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5083dbf79682be78336cc6b458c32ab4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a5083dbf79682be78336cc6b458c32ab4">DEBUG1</a>(params) ;</td></tr>
+<tr class="separator:a5083dbf79682be78336cc6b458c32ab4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65bd10ffc88aa9edca29d4f6ae0da2df"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a65bd10ffc88aa9edca29d4f6ae0da2df">DEBUG2</a>(params) ;</td></tr>
+<tr class="separator:a65bd10ffc88aa9edca29d4f6ae0da2df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a86ce320fe5d3f3088d89fdf451943008"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a86ce320fe5d3f3088d89fdf451943008">DEBUG3</a>(params) ;</td></tr>
+<tr class="separator:a86ce320fe5d3f3088d89fdf451943008"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ff047166d36dd8103bd12a4fbc7f7f9"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a0ff047166d36dd8103bd12a4fbc7f7f9">DEBUG4</a>(params) ;</td></tr>
+<tr class="separator:a0ff047166d36dd8103bd12a4fbc7f7f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a87e006a00875d2e518652108f6cb5790"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a87e006a00875d2e518652108f6cb5790">ASSERT</a>(expression) ((void) 0)</td></tr>
+<tr class="separator:a87e006a00875d2e518652108f6cb5790"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad632adbb6b5d2516805a965b42b601c8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ad632adbb6b5d2516805a965b42b601c8">init_rows_cols</a> (int n_row, int n_col, <a class="el" href="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a> Row[], <a class="el" href="colamd_8h.html#a059db10cde [...]
+<tr class="separator:ad632adbb6b5d2516805a965b42b601c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac804543e35e2ab481d9e2c19ed0ebcf6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ac804543e35e2ab481d9e2c19ed0ebcf6">init_scoring</a> (int n_row, int n_col, <a class="el" href="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a> Row[], <a class="el" href="colamd_8h.html#a059db10cdeb [...]
+<tr class="separator:ac804543e35e2ab481d9e2c19ed0ebcf6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a10da36e975e03d3c0fd68dbe14eb27cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a10da36e975e03d3c0fd68dbe14eb27cc">find_ordering</a> (int n_row, int n_col, int Alen, <a class="el" href="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a> Row[], <a class="el" href="colamd_8h.html#a0 [...]
+<tr class="separator:a10da36e975e03d3c0fd68dbe14eb27cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad9896b63f5b2823065686f63a1096130"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ad9896b63f5b2823065686f63a1096130">order_children</a> (int n_col, <a class="el" href="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">Colamd_Col</a> Col[], int p[])</td></tr>
+<tr class="separator:ad9896b63f5b2823065686f63a1096130"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a27211c7dc11832c4675d8d3fcd7167a0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a27211c7dc11832c4675d8d3fcd7167a0">detect_super_cols</a> (<a class="el" href="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">Colamd_Col</a> Col[], int <a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8 [...]
+<tr class="separator:a27211c7dc11832c4675d8d3fcd7167a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a0dc18af9f72ad8e436a98980e55c41"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a9a0dc18af9f72ad8e436a98980e55c41">garbage_collection</a> (int n_row, int n_col, <a class="el" href="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a> Row[], <a class="el" href="colamd_8h.html#a059db1 [...]
+<tr class="separator:a9a0dc18af9f72ad8e436a98980e55c41"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7eb036c63565d8fc7c05e1074510601a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a7eb036c63565d8fc7c05e1074510601a">clear_mark</a> (int n_row, <a class="el" href="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a> Row[])</td></tr>
+<tr class="separator:a7eb036c63565d8fc7c05e1074510601a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ba6567b2e4ac6f69086d2ac7ab5c58a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a5ba6567b2e4ac6f69086d2ac7ab5c58a">print_report</a> (char *method, int stats[<a class="el" href="colamd_8h.html#a411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>])</td></tr>
+<tr class="separator:a5ba6567b2e4ac6f69086d2ac7ab5c58a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aac7214b99bcf4db1b13547521367817f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#aac7214b99bcf4db1b13547521367817f">colamd_recommended</a> (int nnz, int n_row, int n_col)</td></tr>
+<tr class="separator:aac7214b99bcf4db1b13547521367817f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acd15277a8a063dd0586e280004a92c89"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#acd15277a8a063dd0586e280004a92c89">colamd_set_defaults</a> (double knobs[<a class="el" href="colamd_8h.html#ae92bb10d09f7cd004f07d1baddf90548">COLAMD_KNOBS</a>])</td></tr>
+<tr class="separator:acd15277a8a063dd0586e280004a92c89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae81243e57d577e17400b3f532aa4f1e9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#ae81243e57d577e17400b3f532aa4f1e9">symamd</a> (int n, int <a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>[], int p[], int perm[], double knobs[<a class="el" href="colamd_8h.html#a [...]
+<tr class="separator:ae81243e57d577e17400b3f532aa4f1e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ace2482b681af56de48dd3ba8971baf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a4ace2482b681af56de48dd3ba8971baf">colamd</a> (int n_row, int n_col, int Alen, int <a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>[], int p[], double knobs[<a class="el" href="col [...]
+<tr class="separator:a4ace2482b681af56de48dd3ba8971baf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a85f2c13be93dea98e624144272d00eed"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#a85f2c13be93dea98e624144272d00eed">colamd_report</a> (int stats[<a class="el" href="colamd_8h.html#a411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>])</td></tr>
+<tr class="separator:a85f2c13be93dea98e624144272d00eed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf3bb99ff64711d528dafe21fd450512"><td class="memItemLeft" align="right" valign="top"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8c.html#adf3bb99ff64711d528dafe21fd450512">symamd_report</a> (int stats[<a class="el" href="colamd_8h.html#a411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>])</td></tr>
+<tr class="separator:adf3bb99ff64711d528dafe21fd450512"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<p><</p>
+<h1>pre> </h1>
+<h1>=== colamd/symamd - a sparse matrix column ordering algorithm ============ </h1>
+<p>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.</p>
+<p>symamd: an approximate minimum degree ordering algorithm for Cholesky factorization of symmetric matrices.</p>
+<p>Purpose: </p>
+<pre class="fragment">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. (http://www.mathworks.com). This
+routine can be used in place of colmmd in MATLAB.
+
+ 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>Authors: </p>
+<pre class="fragment">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.
+</pre><p>Date: </p>
+<pre class="fragment">September 8, 2003. Version 2.3.
+</pre><p>Acknowledgements: </p>
+<pre class="fragment">This work was supported by the National Science Foundation, under
+grants DMS-9504974 and DMS-9803599.
+</pre><p>Copyright and License: </p>
+<pre class="fragment">Copyright (c) 1998-2003 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, 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>Availability: </p>
+<pre class="fragment">The colamd/symamd library is available at
+
+ http://www.cise.ufl.edu/research/sparse/colamd/
+
+This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.c
+file. It requires the colamd.h file. It is required by the colamdmex.c
+and symamdmex.c files, for the MATLAB interface to colamd and symamd.
+</pre><p>See the ChangeLog file for changes since Version 1.0. </p>
+<hr/>
+ <h1>=== Description of user-callable routines ================================ </h1>
+<hr/>
+ <h2>colamd_recommended: </h2>
+<pre class="fragment">C syntax:
+
+ #include "colamd.h"
+ int colamd_recommended (int nnz, int n_row, int n_col) ;
+
+ or as a C macro
+
+ #include "colamd.h"
+ Alen = COLAMD_RECOMMENDED (int nnz, int n_row, int n_col) ;
+
+Purpose:
+
+ 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.
+
+Arguments (all input 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.
+</pre><hr/>
+ <h2>colamd_set_defaults: </h2>
+<pre class="fragment">C syntax:
+
+ #include "colamd.h"
+ colamd_set_defaults (double knobs [COLAMD_KNOBS]) ;
+
+Purpose:
+
+ Sets the default parameters. The use of this routine is optional.
+
+Arguments:
+
+ double knobs [COLAMD_KNOBS] ; Output only.
+
+ 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.
+
+ 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.
+
+ COLAMD_DENSE_ROW and COLAMD_DENSE_COL are defined as 0 and 1,
+ respectively, in colamd.h. 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><hr/>
+ <h2>colamd: </h2>
+<pre class="fragment">C syntax:
+
+ #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]) ;
+
+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.
+
+Returns:
+
+ TRUE (1) if successful, FALSE (0) otherwise.
+
+Arguments:
+
+ int n_row ; Input argument.
+
+ Number of rows in the matrix A.
+ Restriction: n_row >= 0.
+ Colamd returns FALSE if n_row is negative.
+
+ int n_col ; Input argument.
+
+ Number of columns in the matrix A.
+ Restriction: n_col >= 0.
+ Colamd returns FALSE if n_col is negative.
+
+ int Alen ; Input argument.
+
+ 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.
+
+ Note: this restriction makes an modest assumption regarding
+ the size of the two typedef's structures in colamd.h.
+ We do, however, guarantee that
+
+ Alen >= colamd_recommended (nnz, n_row, n_col)
+
+ or equivalently as a C preprocessor macro:
+
+ Alen >= COLAMD_RECOMMENDED (nnz, n_row, n_col)
+
+ will be sufficient.
+
+ int A [Alen] ; Input argument, undefined 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
+ undefined on output.
+
+ 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 argument.
+
+ See colamd_set_defaults for a description.
+
+ int stats [COLAMD_STATS] ; Output argument.
+
+ Statistics on the ordering, and error status.
+ See colamd.h for related definitions.
+ Colamd returns FALSE if stats is not present.
+
+ stats [0]: number of dense or empty rows ignored.
+
+ 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.
+
+ stats [2]: number of garbage collections performed.
+ This can be excessively high if Alen is close
+ to the minimum required value.
+
+ stats [3]: status code. < 0 is an error code.
+ > 1 is a warning or notice.
+
+ 0 OK. Each column of the input matrix contained
+ row indices in increasing order, with no
+ duplicates.
+
+ 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).
+
+ 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.
+
+ -1 A is a null pointer
+
+ -2 p is a null pointer
+
+ -3 n_row is negative
+
+ stats [4]: n_row
+
+ -4 n_col is negative
+
+ stats [4]: n_col
+
+ -5 number of nonzeros in matrix is negative
+
+ stats [4]: number of nonzeros, p [n_col]
+
+ -6 p [0] is nonzero
+
+ stats [4]: p [0]
+
+ -7 A is too small
+
+ stats [4]: required size
+ stats [5]: actual size (Alen)
+
+ -8 a column has a negative number of entries
+
+ stats [4]: column with < 0 entries
+ stats [5]: number of entries in col
+
+ -9 a row index is out of bounds
+
+ stats [4]: column with bad row index
+ stats [5]: bad row index
+ stats [6]: n_row, # of rows of matrx
+
+ -10 (unused; see symamd.c)
+
+ -999 (unused; see symamd.c)
+
+ Future versions may return more statistics in the stats array.
+
+Example:
+
+ See http://www.cise.ufl.edu/research/sparse/colamd/example.c
+ for a complete example.
+
+ To order the columns of a 5-by-4 matrix with 11 nonzero entries in
+ the following nonzero pattern
+
+ x 0 x 0
+ x 0 x x
+ 0 x x 0
+ 0 0 x x
+ x x 0 0
+
+ with default knobs and no output statistics, do the following:
+
+ #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) ;
+
+ The permutation is returned in the array p, and A is destroyed.
+</pre><hr/>
+ <h2>symamd: </h2>
+<pre class="fragment">C syntax:
+
+ #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 *)) ;
+
+Purpose:
+
+ 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.
+
+Returns:
+
+ TRUE (1) if successful, FALSE (0) otherwise.
+
+Arguments:
+
+ int n ; Input argument.
+
+ Number of rows and columns in the symmetrix matrix A.
+ Restriction: n >= 0.
+ Symamd returns FALSE if n is negative.
+
+ int A [nnz] ; Input argument.
+
+ A is an integer array of size nnz, where nnz = p [n].
+
+ 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.
+
+ 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.
+
+ The contents of A are not modified.
+
+ int p [n+1] ; Input argument.
+
+ 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.
+
+ The contents of p are not modified.
+
+ int perm [n+1] ; Output argument.
+
+ 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.
+
+ double knobs [COLAMD_KNOBS] ; Input argument.
+
+ See colamd_set_defaults for a description.
+
+ int stats [COLAMD_STATS] ; Output argument.
+
+ Statistics on the ordering, and error status.
+ See colamd.h for related definitions.
+ Symamd returns FALSE if stats is not present.
+
+ 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.
+
+ stats [1]: (same as stats [0])
+
+ stats [2]: number of garbage collections performed.
+
+ stats [3]: status code. < 0 is an error code.
+ > 1 is a warning or notice.
+
+ 0 OK. Each column of the input matrix contained
+ row indices in increasing order, with no
+ duplicates.
+
+ 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).
+
+ 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.
+
+ -1 A is a null pointer
+
+ -2 p is a null pointer
+
+ -3 (unused, see colamd.c)
+
+ -4 n is negative
+
+ stats [4]: n
+
+ -5 number of nonzeros in matrix is negative
+
+ stats [4]: # of nonzeros (p [n]).
+
+ -6 p [0] is nonzero
+
+ stats [4]: p [0]
+
+ -7 (unused)
+
+ -8 a column has a negative number of entries
+
+ stats [4]: column with < 0 entries
+ stats [5]: number of entries in col
+
+ -9 a row index is out of bounds
+
+ stats [4]: column with bad row index
+ stats [5]: bad row index
+ stats [6]: n_row, # of rows of matrx
+
+ -10 out of memory (unable to allocate temporary
+ workspace for M or count arrays using the
+ "allocate" routine passed into symamd).
+
+ -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.
+
+ Future versions may return more statistics in the stats array.
+
+ void * (*allocate) (size_t, size_t)
+
+ 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.
+
+ void (*release) (size_t, size_t)
+
+ 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><hr/>
+ <h2>colamd_report: </h2>
+<pre class="fragment">C syntax:
+
+ #include "colamd.h"
+ colamd_report (int stats [COLAMD_STATS]) ;
+
+Purpose:
+
+ 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).
+
+Arguments:
+
+ int stats [COLAMD_STATS] ; Input only. Statistics from colamd.
+</pre><hr/>
+ <h2>symamd_report: </h2>
+<pre class="fragment">C syntax:
+
+ #include "colamd.h"
+ symamd_report (int stats [COLAMD_STATS]) ;
+
+Purpose:
+
+ 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).
+
+Arguments:
+
+ int stats [COLAMD_STATS] ; Input only. Statistics from symamd.
+</pre></div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ad8beef706da0344be19d59438fcdab6d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ALIVE (0)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a87e006a00875d2e518652108f6cb5790"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ASSERT</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">expression</td><td>)</td>
+ <td> ((void) 0)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a50f9ca65904b13f345862cb46d08d84b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COL_IS_ALIVE</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c</td><td>)</td>
+ <td> (Col [c].start >= <a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">ALIVE</a>)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa08664bd5b8133f28dbeedc9a030fc86"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COL_IS_DEAD</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c</td><td>)</td>
+ <td> (Col [c].start < <a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">ALIVE</a>)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a003c0e2dae54bcb7c680333304dd4dcb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COL_IS_DEAD_PRINCIPAL</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c</td><td>)</td>
+ <td> (Col [c].start == <a class="el" href="colamd_8c.html#ac0adce1e7d70351cef4752f3373709af">DEAD_PRINCIPAL</a>)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3c8793c7acb4598d2ebcd8288f29ee69"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEAD (-1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f66923672bcc495333995f7d238945f"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="ac0adce1e7d70351cef4752f3373709af"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEAD_PRINCIPAL (-1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a144524f0a43ebe1a97d576a76f6557a0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEBUG0</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">params</td><td>)</td>
+ <td> ;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5083dbf79682be78336cc6b458c32ab4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEBUG1</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">params</td><td>)</td>
+ <td> ;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a65bd10ffc88aa9edca29d4f6ae0da2df"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEBUG2</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">params</td><td>)</td>
+ <td> ;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a86ce320fe5d3f3088d89fdf451943008"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEBUG3</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">params</td><td>)</td>
+ <td> ;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0ff047166d36dd8103bd12a4fbc7f7f9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEBUG4</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">params</td><td>)</td>
+ <td> ;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2b7cf2a3641be7b89138615764d60ba3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define EMPTY (-1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa93f0eb578d23995850d61f7d61c55c1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FALSE (0)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa5fad23b2a5eed790e6661e896a506b7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define INDEX</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">i</td><td>)</td>
+ <td> (i)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0458a358e752473d86e6f21a56b44a26"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define KILL_NON_PRINCIPAL_COL</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c</td><td>)</td>
+ <td> { Col [c].start = <a class="el" href="colamd_8c.html#a0f66923672bcc495333995f7d238945f">DEAD_NON_PRINCIPAL</a> ; }</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7882929a7898e09a3de9e7676ae1aa29"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define KILL_PRINCIPAL_COL</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c</td><td>)</td>
+ <td> { Col [c].start = <a class="el" href="colamd_8c.html#ac0adce1e7d70351cef4752f3373709af">DEAD_PRINCIPAL</a> ; }</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adde21248544152df48ab70b6da1b38b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define KILL_ROW</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">r</td><td>)</td>
+ <td> { Row [r].shared2.mark = <a class="el" href="colamd_8c.html#a3c8793c7acb4598d2ebcd8288f29ee69">DEAD</a> ; }</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afa99ec4acc4ecb2dc3c2d05da15d0e3f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MAX</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> (((a) > (b)) ? (a) : (b))</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3acffbd305ee72dcd4593c0d8af64a4f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MIN</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> (((a) < (b)) ? (a) : (b))</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8de3ed741dadc9c979a4ff17c0a9116e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NDEBUG</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af4201cc2809d450d2484680ee1b958ca"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ONES_COMPLEMENT</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">r</td><td>)</td>
+ <td> (-(r)-1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae1649fc947ca37a86917a08354f48d1a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PRINTF printf</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5e151c615eda34903514212f05a5ccf8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PRIVATE static</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad17d551e31d1828c68acf40684849b7e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PUBLIC</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abc775359cfa45ffaf6250522c521110d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ROW_IS_ALIVE</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">r</td><td>)</td>
+ <td> (Row [r].shared2.mark >= <a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">ALIVE</a>)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae200d2ac8149305712af7230f9ee24d5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ROW_IS_DEAD</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">r</td><td>)</td>
+ <td> <a class="el" href="colamd_8c.html#a0d68b03acc587c11fe6dffbfede78c2d">ROW_IS_MARKED_DEAD</a> (Row[r].shared2.mark)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0d68b03acc587c11fe6dffbfede78c2d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ROW_IS_MARKED_DEAD</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">row_mark</td><td>)</td>
+ <td> (row_mark < <a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">ALIVE</a>)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa8cecfc5c5c054d2875c03e77b7be15d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define TRUE (1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a7eb036c63565d8fc7c05e1074510601a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> 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="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a> </td>
+ <td class="paramname"><em>Row</em>[] </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4ace2482b681af56de48dd3ba8971baf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> 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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8c_a4ace2482b681af56de48dd3ba8971baf_cgraph.png" border="0" usemap="#colamd_8c_a4ace2482b681af56de48dd3ba8971baf_cgraph" alt=""/></div>
+<map name="colamd_8c_a4ace2482b681af56de48dd3ba8971baf_cgraph" id="colamd_8c_a4ace2482b681af56de48dd3ba8971baf_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#acd15277a8a063dd0586e280004a92c89" title="colamd_set_defaults" alt="" coords="118,5,261,32"/><area shape="rect" id="node3" href="colamd_8c.html#ad632adbb6b5d2516805a965b42b601c8" title="init_rows_cols" alt="" coords="137,56,242,83"/><area shape="rect" id="node4" href="colamd_8c.html#ac804543e35e2ab481d9e2c19ed0ebcf6" title="init_scoring" alt="" coords="145,107,233,133"/><area shape="rect" id="node5" href="colamd_8c.html#a10da36e975e03d3c [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aac7214b99bcf4db1b13547521367817f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> 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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a85f2c13be93dea98e624144272d00eed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> void colamd_report </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>stats</em>[COLAMD_STATS]</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8c_a85f2c13be93dea98e624144272d00eed_cgraph.png" border="0" usemap="#colamd_8c_a85f2c13be93dea98e624144272d00eed_cgraph" alt=""/></div>
+<map name="colamd_8c_a85f2c13be93dea98e624144272d00eed_cgraph" id="colamd_8c_a85f2c13be93dea98e624144272d00eed_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#a5ba6567b2e4ac6f69086d2ac7ab5c58a" title="print_report" alt="" coords="158,5,245,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acd15277a8a063dd0586e280004a92c89"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> void colamd_set_defaults </td>
+ <td>(</td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>knobs</em>[COLAMD_KNOBS]</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a27211c7dc11832c4675d8d3fcd7167a0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> void detect_super_cols </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a10da36e975e03d3c0fd68dbe14eb27cc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> 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="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">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="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8c_a10da36e975e03d3c0fd68dbe14eb27cc_cgraph.png" border="0" usemap="#colamd_8c_a10da36e975e03d3c0fd68dbe14eb27cc_cgraph" alt=""/></div>
+<map name="colamd_8c_a10da36e975e03d3c0fd68dbe14eb27cc_cgraph" id="colamd_8c_a10da36e975e03d3c0fd68dbe14eb27cc_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#a7eb036c63565d8fc7c05e1074510601a" title="clear_mark" alt="" coords="171,5,258,32"/><area shape="rect" id="node3" href="colamd_8c.html#a9a0dc18af9f72ad8e436a98980e55c41" title="garbage_collection" alt="" coords="149,56,280,83"/><area shape="rect" id="node4" href="colamd_8c.html#a27211c7dc11832c4675d8d3fcd7167a0" title="detect_super_cols" alt="" coords="151,107,279,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a9a0dc18af9f72ad8e436a98980e55c41"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> 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="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">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="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad632adbb6b5d2516805a965b42b601c8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> 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="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">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="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac804543e35e2ab481d9e2c19ed0ebcf6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> 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="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">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="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad9896b63f5b2823065686f63a1096130"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> 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="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5ba6567b2e4ac6f69086d2ac7ab5c58a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">PRIVATE</a> 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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae81243e57d577e17400b3f532aa4f1e9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> 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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8c_ae81243e57d577e17400b3f532aa4f1e9_cgraph.png" border="0" usemap="#colamd_8c_ae81243e57d577e17400b3f532aa4f1e9_cgraph" alt=""/></div>
+<map name="colamd_8c_ae81243e57d577e17400b3f532aa4f1e9_cgraph" id="colamd_8c_ae81243e57d577e17400b3f532aa4f1e9_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#acd15277a8a063dd0586e280004a92c89" title="colamd_set_defaults" alt="" coords="329,5,471,32"/><area shape="rect" id="node3" href="colamd_8c.html#aac7214b99bcf4db1b13547521367817f" title="colamd_recommended" alt="" coords="126,56,279,83"/><area shape="rect" id="node4" href="colamd_8c.html#a4ace2482b681af56de48dd3ba8971baf" title="colamd" alt="" coords="171,107,235,133"/><area shape="rect" id="node5" href="colamd_8c.html#ad632adbb6b5d251680 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="adf3bb99ff64711d528dafe21fd450512"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">PUBLIC</a> void symamd_report </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>stats</em>[COLAMD_STATS]</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8c_adf3bb99ff64711d528dafe21fd450512_cgraph.png" border="0" usemap="#colamd_8c_adf3bb99ff64711d528dafe21fd450512_cgraph" alt=""/></div>
+<map name="colamd_8c_adf3bb99ff64711d528dafe21fd450512_cgraph" id="colamd_8c_adf3bb99ff64711d528dafe21fd450512_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#a5ba6567b2e4ac6f69086d2ac7ab5c58a" title="print_report" alt="" coords="166,5,253,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/colamd_8h.html b/SuperLU_5.2.0/DOC/html/colamd_8h.html
new file mode 100644
index 0000000..4b05406
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/colamd_8h.html
@@ -0,0 +1,806 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/colamd.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">colamd.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Colamd prototypes and definitions.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <stdlib.h></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for colamd.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8h__incl.png" border="0" usemap="#SRC_2colamd_8h" alt=""/></div>
+<map name="SRC_2colamd_8h" id="SRC_2colamd_8h">
+</map>
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8h__dep__incl.png" border="0" usemap="#SRC_2colamd_8hdep" alt=""/></div>
+<map name="SRC_2colamd_8hdep" id="SRC_2colamd_8hdep">
+<area shape="rect" id="node2" href="colamd_8c.html" title="A sparse matrix column ordering algorithm. " alt="" coords="5,80,112,107"/><area shape="rect" id="node3" href="get__perm__c_8c.html" title="Matrix permutation operations. " alt="" coords="137,80,271,107"/></map>
+</div>
+</div>
+<p><a href="colamd_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" 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 class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" 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 class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ae92bb10d09f7cd004f07d1baddf90548"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#ae92bb10d09f7cd004f07d1baddf90548">COLAMD_KNOBS</a> 20</td></tr>
+<tr class="separator:ae92bb10d09f7cd004f07d1baddf90548"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a411703fc0a994b83ec0e00df1abfc0f7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a> 20</td></tr>
+<tr class="separator:a411703fc0a994b83ec0e00df1abfc0f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a45a417439d08823fa620ca00d834dd61"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a45a417439d08823fa620ca00d834dd61">COLAMD_DENSE_ROW</a> 0</td></tr>
+<tr class="separator:a45a417439d08823fa620ca00d834dd61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af92de54efdec91d7ab64e7bec07eb12c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#af92de54efdec91d7ab64e7bec07eb12c">COLAMD_DENSE_COL</a> 1</td></tr>
+<tr class="separator:af92de54efdec91d7ab64e7bec07eb12c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ababfabfa19364ec563aa9c15bcc9714e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#ababfabfa19364ec563aa9c15bcc9714e">COLAMD_DEFRAG_COUNT</a> 2</td></tr>
+<tr class="separator:ababfabfa19364ec563aa9c15bcc9714e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a4201ce55dfa3a6375b90097e8c747e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a6a4201ce55dfa3a6375b90097e8c747e">COLAMD_STATUS</a> 3</td></tr>
+<tr class="separator:a6a4201ce55dfa3a6375b90097e8c747e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a569d56a773011e0b4e465b3f5830e80b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a569d56a773011e0b4e465b3f5830e80b">COLAMD_INFO1</a> 4</td></tr>
+<tr class="separator:a569d56a773011e0b4e465b3f5830e80b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2161fd78bbd688f943250d1d7583284b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a2161fd78bbd688f943250d1d7583284b">COLAMD_INFO2</a> 5</td></tr>
+<tr class="separator:a2161fd78bbd688f943250d1d7583284b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a15d83814c573d742764ff83e9d1d67fc"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a15d83814c573d742764ff83e9d1d67fc">COLAMD_INFO3</a> 6</td></tr>
+<tr class="separator:a15d83814c573d742764ff83e9d1d67fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa754fd30d924c5c8d2d402fa0a482d72"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#aa754fd30d924c5c8d2d402fa0a482d72">COLAMD_OK</a> (0)</td></tr>
+<tr class="separator:aa754fd30d924c5c8d2d402fa0a482d72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac0d7f3882e6e9e39527aa2195dd23789"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#ac0d7f3882e6e9e39527aa2195dd23789">COLAMD_OK_BUT_JUMBLED</a> (1)</td></tr>
+<tr class="separator:ac0d7f3882e6e9e39527aa2195dd23789"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2347fb9e509c8bf9b97a50f96dea281c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a2347fb9e509c8bf9b97a50f96dea281c">COLAMD_ERROR_A_not_present</a> (-1)</td></tr>
+<tr class="separator:a2347fb9e509c8bf9b97a50f96dea281c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51d3f9714a4cb80c0f54dea5d0c5f95f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a51d3f9714a4cb80c0f54dea5d0c5f95f">COLAMD_ERROR_p_not_present</a> (-2)</td></tr>
+<tr class="separator:a51d3f9714a4cb80c0f54dea5d0c5f95f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e848cfde5cdf42fcb316695305f8002"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a8e848cfde5cdf42fcb316695305f8002">COLAMD_ERROR_nrow_negative</a> (-3)</td></tr>
+<tr class="separator:a8e848cfde5cdf42fcb316695305f8002"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2feedddbe535286cbea9eca9fca91f45"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a2feedddbe535286cbea9eca9fca91f45">COLAMD_ERROR_ncol_negative</a> (-4)</td></tr>
+<tr class="separator:a2feedddbe535286cbea9eca9fca91f45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7147ea7a9d673f17ef856e9914f90c81"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a7147ea7a9d673f17ef856e9914f90c81">COLAMD_ERROR_nnz_negative</a> (-5)</td></tr>
+<tr class="separator:a7147ea7a9d673f17ef856e9914f90c81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a58b5d911cc825b4334ade136bad3afd3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a58b5d911cc825b4334ade136bad3afd3">COLAMD_ERROR_p0_nonzero</a> (-6)</td></tr>
+<tr class="separator:a58b5d911cc825b4334ade136bad3afd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a323108d44db4186fad5a2066139f70b7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a323108d44db4186fad5a2066139f70b7">COLAMD_ERROR_A_too_small</a> (-7)</td></tr>
+<tr class="separator:a323108d44db4186fad5a2066139f70b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b6df4a489ed0c7de8ad12251cdac5d6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a3b6df4a489ed0c7de8ad12251cdac5d6">COLAMD_ERROR_col_length_negative</a> (-8)</td></tr>
+<tr class="separator:a3b6df4a489ed0c7de8ad12251cdac5d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0559e0ff07deab1841e7aaee8cde51e6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a0559e0ff07deab1841e7aaee8cde51e6">COLAMD_ERROR_row_index_out_of_bounds</a> (-9)</td></tr>
+<tr class="separator:a0559e0ff07deab1841e7aaee8cde51e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a703f11265b521c931cdd44709d141fca"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a703f11265b521c931cdd44709d141fca">COLAMD_ERROR_out_of_memory</a> (-10)</td></tr>
+<tr class="separator:a703f11265b521c931cdd44709d141fca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae97b9ba07b455e4ce07c53a4d71c1169"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#ae97b9ba07b455e4ce07c53a4d71c1169">COLAMD_ERROR_internal_error</a> (-999)</td></tr>
+<tr class="separator:ae97b9ba07b455e4ce07c53a4d71c1169"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a339fb9b07ed315667cc4542c15116c83"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a339fb9b07ed315667cc4542c15116c83">COLAMD_C</a>(n_col) ((int) (((n_col) + 1) * sizeof (<a class="el" href="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">Colamd_Col</a>) / sizeof (int)))</td></tr>
+<tr class="separator:a339fb9b07ed315667cc4542c15116c83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52e8a8827c11d9c2a1f1b87e09bc8dc0"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a52e8a8827c11d9c2a1f1b87e09bc8dc0">COLAMD_R</a>(n_row) ((int) (((n_row) + 1) * sizeof (<a class="el" href="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a>) / sizeof (int)))</td></tr>
+<tr class="separator:a52e8a8827c11d9c2a1f1b87e09bc8dc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa6980d68bd04f7567d7d0bd40b244c2f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#aa6980d68bd04f7567d7d0bd40b244c2f">COLAMD_RECOMMENDED</a>(nnz, n_row, n_col)</td></tr>
+<tr class="separator:aa6980d68bd04f7567d7d0bd40b244c2f"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a059db10cdebbb878b50bfcd2e023315a"><td class="memItemLeft" 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#a059db10cdebbb878b50bfcd2e023315a">Colamd_Col</a></td></tr>
+<tr class="separator:a059db10cdebbb878b50bfcd2e023315a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8a1ceeb79ebba705abb1d27469f4a358"><td class="memItemLeft" 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#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a></td></tr>
+<tr class="separator:a8a1ceeb79ebba705abb1d27469f4a358"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9b48c9b9eb5dce7e9ca42174208b1015"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a9b48c9b9eb5dce7e9ca42174208b1015">colamd_recommended</a> (int nnz, int n_row, int n_col)</td></tr>
+<tr class="separator:a9b48c9b9eb5dce7e9ca42174208b1015"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae582ce20a46b5ef39434acb9d66fe2ca"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#ae582ce20a46b5ef39434acb9d66fe2ca">colamd_set_defaults</a> (double knobs[<a class="el" href="colamd_8h.html#ae92bb10d09f7cd004f07d1baddf90548">COLAMD_KNOBS</a>])</td></tr>
+<tr class="separator:ae582ce20a46b5ef39434acb9d66fe2ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af5cec4b6391e4c20abfaa6da39975bca"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#af5cec4b6391e4c20abfaa6da39975bca">colamd</a> (int n_row, int n_col, int Alen, int <a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>[], int p[], double knobs[<a class="el" href="colamd_8h.html#ae92bb10d09f7cd004f07d1baddf90548">COLAMD_KNOBS</a>], int stats[<a cl [...]
+<tr class="separator:af5cec4b6391e4c20abfaa6da39975bca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3d0175d1cb36f6cb16dfe96bbf946a3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#ae3d0175d1cb36f6cb16dfe96bbf946a3">symamd</a> (int n, int <a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>[], int p[], int perm[], double knobs[<a class="el" href="colamd_8h.html#ae92bb10d09f7cd004f07d1baddf90548">COLAMD_KNOBS</a>], int stats[<a class="el" href [...]
+<tr class="separator:ae3d0175d1cb36f6cb16dfe96bbf946a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7cfa2e07413d0bc9489f10ac881faa51"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a7cfa2e07413d0bc9489f10ac881faa51">colamd_report</a> (int stats[<a class="el" href="colamd_8h.html#a411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>])</td></tr>
+<tr class="separator:a7cfa2e07413d0bc9489f10ac881faa51"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a948750692c453eb36edc5b77a670ec54"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="colamd_8h.html#a948750692c453eb36edc5b77a670ec54">symamd_report</a> (int stats[<a class="el" href="colamd_8h.html#a411703fc0a994b83ec0e00df1abfc0f7">COLAMD_STATS</a>])</td></tr>
+<tr class="separator:a948750692c453eb36edc5b77a670ec54"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<p><</p>
+<h1>pre> </h1>
+<h1>=== colamd/symamd prototypes and definitions ============================= </h1>
+<p>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.</p>
+<p>Authors: </p>
+<pre class="fragment">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.
+</pre><p>Date: </p>
+<pre class="fragment">September 8, 2003. Version 2.3.
+</pre><p>Acknowledgements: </p>
+<pre class="fragment">This work was supported by the National Science Foundation, under
+grants DMS-9504974 and DMS-9803599.
+</pre><p>Notice: </p>
+<pre class="fragment">Copyright (c) 1998-2003 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, 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>Availability: </p>
+<pre class="fragment">The colamd/symamd library is available at
+
+ http://www.cise.ufl.edu/research/sparse/colamd/
+
+This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.h
+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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a339fb9b07ed315667cc4542c15116c83"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_C</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">n_col</td><td>)</td>
+ <td> ((int) (((n_col) + 1) * sizeof (<a class="el" href="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">Colamd_Col</a>) / sizeof (int)))</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ababfabfa19364ec563aa9c15bcc9714e"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="af92de54efdec91d7ab64e7bec07eb12c"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a45a417439d08823fa620ca00d834dd61"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a2347fb9e509c8bf9b97a50f96dea281c"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a323108d44db4186fad5a2066139f70b7"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a3b6df4a489ed0c7de8ad12251cdac5d6"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="ae97b9ba07b455e4ce07c53a4d71c1169"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a2feedddbe535286cbea9eca9fca91f45"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a7147ea7a9d673f17ef856e9914f90c81"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a8e848cfde5cdf42fcb316695305f8002"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a703f11265b521c931cdd44709d141fca"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a58b5d911cc825b4334ade136bad3afd3"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a51d3f9714a4cb80c0f54dea5d0c5f95f"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a0559e0ff07deab1841e7aaee8cde51e6"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a569d56a773011e0b4e465b3f5830e80b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_INFO1 4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2161fd78bbd688f943250d1d7583284b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_INFO2 5</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a15d83814c573d742764ff83e9d1d67fc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_INFO3 6</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae92bb10d09f7cd004f07d1baddf90548"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_KNOBS 20</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa754fd30d924c5c8d2d402fa0a482d72"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_OK (0)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac0d7f3882e6e9e39527aa2195dd23789"></a>
+<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">
+
+</div>
+</div>
+<a class="anchor" id="a52e8a8827c11d9c2a1f1b87e09bc8dc0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_R</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">n_row</td><td>)</td>
+ <td> ((int) (((n_row) + 1) * sizeof (<a class="el" href="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a>) / sizeof (int)))</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa6980d68bd04f7567d7d0bd40b244c2f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_RECOMMENDED</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">nnz, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">n_row, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">n_col </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">( \</div>
+<div class="line">((nnz) < 0 || (n_row) < 0 || (n_col) < 0) \</div>
+<div class="line">? \</div>
+<div class="line"> (-1) \</div>
+<div class="line">: \</div>
+<div class="line"> (2 * (nnz) + <a class="code" href="colamd_8h.html#a339fb9b07ed315667cc4542c15116c83">COLAMD_C</a> (n_col) + <a class="code" href="colamd_8h.html#a52e8a8827c11d9c2a1f1b87e09bc8dc0">COLAMD_R</a> (n_row) + (n_col) + ((nnz) / 5)) \</div>
+<div class="line">)</div>
+<div class="ttc" id="colamd_8h_html_a52e8a8827c11d9c2a1f1b87e09bc8dc0"><div class="ttname"><a href="colamd_8h.html#a52e8a8827c11d9c2a1f1b87e09bc8dc0">COLAMD_R</a></div><div class="ttdeci">#define COLAMD_R(n_row)</div><div class="ttdef"><b>Definition:</b> colamd.h:194</div></div>
+<div class="ttc" id="colamd_8h_html_a339fb9b07ed315667cc4542c15116c83"><div class="ttname"><a href="colamd_8h.html#a339fb9b07ed315667cc4542c15116c83">COLAMD_C</a></div><div class="ttdeci">#define COLAMD_C(n_col)</div><div class="ttdef"><b>Definition:</b> colamd.h:193</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a411703fc0a994b83ec0e00df1abfc0f7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_STATS 20</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6a4201ce55dfa3a6375b90097e8c747e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COLAMD_STATUS 3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="a059db10cdebbb878b50bfcd2e023315a"></a>
+<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="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">Colamd_Col</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8a1ceeb79ebba705abb1d27469f4a358"></a>
+<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="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">Colamd_Row</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af5cec4b6391e4c20abfaa6da39975bca"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8h_af5cec4b6391e4c20abfaa6da39975bca_cgraph.png" border="0" usemap="#colamd_8h_af5cec4b6391e4c20abfaa6da39975bca_cgraph" alt=""/></div>
+<map name="colamd_8h_af5cec4b6391e4c20abfaa6da39975bca_cgraph" id="colamd_8h_af5cec4b6391e4c20abfaa6da39975bca_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#acd15277a8a063dd0586e280004a92c89" title="colamd_set_defaults" alt="" coords="118,5,261,32"/><area shape="rect" id="node3" href="colamd_8c.html#ad632adbb6b5d2516805a965b42b601c8" title="init_rows_cols" alt="" coords="137,56,242,83"/><area shape="rect" id="node4" href="colamd_8c.html#ac804543e35e2ab481d9e2c19ed0ebcf6" title="init_scoring" alt="" coords="145,107,233,133"/><area shape="rect" id="node5" href="colamd_8c.html#a10da36e975e03d3c [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a9b48c9b9eb5dce7e9ca42174208b1015"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7cfa2e07413d0bc9489f10ac881faa51"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8h_a7cfa2e07413d0bc9489f10ac881faa51_cgraph.png" border="0" usemap="#colamd_8h_a7cfa2e07413d0bc9489f10ac881faa51_cgraph" alt=""/></div>
+<map name="colamd_8h_a7cfa2e07413d0bc9489f10ac881faa51_cgraph" id="colamd_8h_a7cfa2e07413d0bc9489f10ac881faa51_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#a5ba6567b2e4ac6f69086d2ac7ab5c58a" title="print_report" alt="" coords="158,5,245,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ae582ce20a46b5ef39434acb9d66fe2ca"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae3d0175d1cb36f6cb16dfe96bbf946a3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8h_ae3d0175d1cb36f6cb16dfe96bbf946a3_cgraph.png" border="0" usemap="#colamd_8h_ae3d0175d1cb36f6cb16dfe96bbf946a3_cgraph" alt=""/></div>
+<map name="colamd_8h_ae3d0175d1cb36f6cb16dfe96bbf946a3_cgraph" id="colamd_8h_ae3d0175d1cb36f6cb16dfe96bbf946a3_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#acd15277a8a063dd0586e280004a92c89" title="colamd_set_defaults" alt="" coords="329,5,471,32"/><area shape="rect" id="node3" href="colamd_8c.html#aac7214b99bcf4db1b13547521367817f" title="colamd_recommended" alt="" coords="126,56,279,83"/><area shape="rect" id="node4" href="colamd_8c.html#a4ace2482b681af56de48dd3ba8971baf" title="colamd" alt="" coords="171,107,235,133"/><area shape="rect" id="node5" href="colamd_8c.html#ad632adbb6b5d251680 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a948750692c453eb36edc5b77a670ec54"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="colamd_8h_a948750692c453eb36edc5b77a670ec54_cgraph.png" border="0" usemap="#colamd_8h_a948750692c453eb36edc5b77a670ec54_cgraph" alt=""/></div>
+<map name="colamd_8h_a948750692c453eb36edc5b77a670ec54_cgraph" id="colamd_8h_a948750692c453eb36edc5b77a670ec54_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#a5ba6567b2e4ac6f69086d2ac7ab5c58a" title="print_report" alt="" coords="166,5,253,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cpanel__bmod_8c.html b/SuperLU_5.2.0/DOC/html/cpanel__bmod_8c.html
new file mode 100644
index 0000000..546cd01
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cpanel__bmod_8c.html
@@ -0,0 +1,302 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cpanel_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cpanel_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numeric block updates.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cpanel_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cpanel__bmod_8c__incl.png" border="0" usemap="#SRC_2cpanel__bmod_8c" alt=""/></div>
+<map name="SRC_2cpanel__bmod_8c" id="SRC_2cpanel__bmod_8c">
+<area shape="rect" id="node4" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="414,80,503,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="341,155,448,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="472,155,573,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a39d81cbea11f613524e674a8c2e18c5f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__bmod_8c.html#a39d81cbea11f613524e674a8c2e18c5f">clsolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a39d81cbea11f613524e674a8c2e18c5f"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a39d81cbea11f613524e674a8c2e18c5f">More...</a><br/></td></tr>
+<tr class="separator:a39d81cbea11f613524e674a8c2e18c5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a09be65495be35085027bc26454dc3e74"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__bmod_8c.html#a09be65495be35085027bc26454dc3e74">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 class="memdesc:a09be65495be35085027bc26454dc3e74"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a09be65495be35085027bc26454dc3e74">More...</a><br/></td></tr>
+<tr class="separator:a09be65495be35085027bc26454dc3e74"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7d4a7510d7b09e116c70302b138eee42"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__bmod_8c.html#a7d4a7510d7b09e116c70302b138eee42">ccheck_tempv</a> ()</td></tr>
+<tr class="separator:a7d4a7510d7b09e116c70302b138eee42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae38539c04b47f4c159e18684e435902b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__bmod_8c.html#ae38539c04b47f4c159e18684e435902b">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 [...]
+<tr class="separator:ae38539c04b47f4c159e18684e435902b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a7d4a7510d7b09e116c70302b138eee42"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a39d81cbea11f613524e674a8c2e18c5f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a09be65495be35085027bc26454dc3e74"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae38539c04b47f4c159e18684e435902b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre> Before entering this routine, the original nonzeros in the panel
+ were already copied into the spa[m,w].</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cpanel__bmod_8c_ae38539c04b47f4c159e18684e435902b_cgraph.png" border="0" usemap="#cpanel__bmod_8c_ae38539c04b47f4c159e18684e435902b_cgraph" alt=""/></div>
+<map name="cpanel__bmod_8c_ae38539c04b47f4c159e18684e435902b_cgraph" id="cpanel__bmod_8c_ae38539c04b47f4c159e18684e435902b_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a6f95eb0c9c167ab10b919c77fe7b3079" title="ctrsv_" alt="" coords="159,56,217,83"/><area shape="rect" id="node5" href="cpanel__bmod_8c.html#a39d81cbea11f613524e674a8c2e18c5f" title="Solves a dense UNIT lower triangular system. " alt="" coords="157,107,219,133"/><area shape="rect" id="node6" href="slu__c [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/cpanel__dfs_8c.html
new file mode 100644
index 0000000..8ef97c4
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cpanel__dfs_8c.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cpanel_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cpanel_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Peforms a symbolic factorization on a panel of symbols.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cpanel_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cpanel__dfs_8c__incl.png" border="0" usemap="#SRC_2cpanel__dfs_8c" alt=""/></div>
+<map name="SRC_2cpanel__dfs_8c" id="SRC_2cpanel__dfs_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a052edfd06c5aeab7a37b5fa558a06602"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpanel__dfs_8c.html#a052edfd06c5aeab7a37b5fa558a06602">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, <a class="el" href="structc [...]
+<tr class="separator:a052edfd06c5aeab7a37b5fa558a06602"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a052edfd06c5aeab7a37b5fa558a06602"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cpivotL_8c.html b/SuperLU_5.2.0/DOC/html/cpivotL_8c.html
new file mode 100644
index 0000000..23be843
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cpivotL_8c.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cpivotL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cpivotL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numerical pivoting.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cpivotL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cpivotL_8c__incl.png" border="0" usemap="#SRC_2cpivotL_8c" alt=""/></div>
+<map name="SRC_2cpivotL_8c" id="SRC_2cpivotL_8c">
+<area shape="rect" id="node4" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="497,80,585,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="181,155,288,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="312,155,413,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae6bc95a2710538cc5ce0904f90ef7f05"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="cpivotL_8c.html#ae6bc95a2710538cc5ce0904f90ef7f05">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>
+<tr class="separator:ae6bc95a2710538cc5ce0904f90ef7f05"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae6bc95a2710538cc5ce0904f90ef7f05"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cpivotL_8c_ae6bc95a2710538cc5ce0904f90ef7f05_cgraph.png" border="0" usemap="#cpivotL_8c_ae6bc95a2710538cc5ce0904f90ef7f05_cgraph" alt=""/></div>
+<map name="cpivotL_8c_ae6bc95a2710538cc5ce0904f90ef7f05_cgraph" id="cpivotL_8c_ae6bc95a2710538cc5ce0904f90ef7f05_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="117,5,181,32"/><area shape="rect" id="node3" href="scomplex_8c.html#a19814f5030befb85c4bb07e0fac34a7b" title="Complex Division c = a/b. " alt="" coords="123,56,176,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cpivotgrowth_8c.html b/SuperLU_5.2.0/DOC/html/cpivotgrowth_8c.html
new file mode 100644
index 0000000..6638b9f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cpivotgrowth_8c.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cpivotgrowth.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cpivotgrowth.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes the reciprocal pivot growth factor.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cpivotgrowth.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cpivotgrowth_8c__incl.png" border="0" usemap="#SRC_2cpivotgrowth_8c" alt=""/></div>
+<map name="SRC_2cpivotgrowth_8c" id="SRC_2cpivotgrowth_8c">
+<area shape="rect" id="node3" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:acda3921f49d46be7eaa23b58bc2b09c5"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="cpivotgrowth_8c.html#acda3921f49d46be7eaa23b58bc2b09c5">cPivotGrowth</a> (int ncols, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, < [...]
+<tr class="separator:acda3921f49d46be7eaa23b58bc2b09c5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="acda3921f49d46be7eaa23b58bc2b09c5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>Compute the reciprocal pivot growth factor of the leading ncols columns
+of the matrix, using the formula:
+ min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>ncols (input) int
+ The number of columns of matrices A, L and U.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cpivotgrowth_8c_acda3921f49d46be7eaa23b58bc2b09c5_cgraph.png" border="0" usemap="#cpivotgrowth_8c_acda3921f49d46be7eaa23b58bc2b09c5_cgraph" alt=""/></div>
+<map name="cpivotgrowth_8c_acda3921f49d46be7eaa23b58bc2b09c5_cgraph" id="cpivotgrowth_8c_acda3921f49d46be7eaa23b58bc2b09c5_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="156,5,217,32"/><area shape="rect" id="node3" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="155,56,219,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cpruneL_8c.html b/SuperLU_5.2.0/DOC/html/cpruneL_8c.html
new file mode 100644
index 0000000..ee361bf
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cpruneL_8c.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cpruneL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cpruneL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Prunes the L-structure.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cpruneL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cpruneL_8c__incl.png" border="0" usemap="#SRC_2cpruneL_8c" alt=""/></div>
+<map name="SRC_2cpruneL_8c" id="SRC_2cpruneL_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aa230bea3429693147cefbc58ce7b50d1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpruneL_8c.html#aa230bea3429693147cefbc58ce7b50d1">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>
+<tr class="separator:aa230bea3429693147cefbc58ce7b50d1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+ – SuperLU routine (version 2.0) –
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><pre> Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aa230bea3429693147cefbc58ce7b50d1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Prunes the L-structure of supernodes whose L-structure
+ contains the current pivot row "pivrow"
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/creadhb_8c.html b/SuperLU_5.2.0/DOC/html/creadhb_8c.html
new file mode 100644
index 0000000..33a06c5
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/creadhb_8c.html
@@ -0,0 +1,447 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/creadhb.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">creadhb.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in Harwell-Boeing format.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for creadhb.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="creadhb_8c__incl.png" border="0" usemap="#SRC_2creadhb_8c" alt=""/></div>
+<map name="SRC_2creadhb_8c" id="SRC_2creadhb_8c">
+<area shape="rect" id="node4" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="414,80,503,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="341,155,448,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="472,155,573,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad09b12d41114fe05457517797a07cc18"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#ad09b12d41114fe05457517797a07cc18">cDumpLine</a> (FILE *fp)</td></tr>
+<tr class="memdesc:ad09b12d41114fe05457517797a07cc18"><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line. <a href="#ad09b12d41114fe05457517797a07cc18">More...</a><br/></td></tr>
+<tr class="separator:ad09b12d41114fe05457517797a07cc18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5c4a2643da5963b5476e372f988bbd8d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#a5c4a2643da5963b5476e372f988bbd8d">cParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a5c4a2643da5963b5476e372f988bbd8d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a352f5f08cd40d9d5720207c20b3dc9ca"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#a352f5f08cd40d9d5720207c20b3dc9ca">cParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a352f5f08cd40d9d5720207c20b3dc9ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbec2a501b92e7e7bb13af2e21520522"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#afbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+<tr class="separator:afbec2a501b92e7e7bb13af2e21520522"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8fcc9991808e214c9760aafa83ac02c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#aa8fcc9991808e214c9760aafa83ac02c">cReadValues</a> (FILE *fp, int n, <a class="el" href="structcomplex.html">complex</a> *destination, int perline, int persize)</td></tr>
+<tr class="memdesc:aa8fcc9991808e214c9760aafa83ac02c"><td class="mdescLeft"> </td><td class="mdescRight">Read complex numbers as pairs of (real, imaginary) <a href="#aa8fcc9991808e214c9760aafa83ac02c">More...</a><br/></td></tr>
+<tr class="separator:aa8fcc9991808e214c9760aafa83ac02c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb5b774f2c9efe079f5bc50749d979ad"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#adb5b774f2c9efe079f5bc50749d979ad">FormFullA</a> (int n, int *nonz, <a class="el" href="structcomplex.html">complex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:adb5b774f2c9efe079f5bc50749d979ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52586e2539abd4eef906171718a16988"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadhb_8c.html#a52586e2539abd4eef906171718a16988">creadhb</a> (FILE *fp, int *nrow, int *ncol, int *nonz, <a class="el" href="structcomplex.html">complex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="memdesc:a52586e2539abd4eef906171718a16988"><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines. <a href="#a52586e2539abd4eef906171718a16988">More...</a><br/></td></tr>
+<tr class="separator:a52586e2539abd4eef906171718a16988"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre><h1>Purpose
+</h1>
+</pre><pre></pre><pre>Read a COMPLEX PRECISION matrix stored in Harwell-Boeing format
+as described below.</pre><pre>Line 1 (A72,A8)
+ Col. 1 - 72 Title (TITLE)
+ Col. 73 - 80 Key (KEY)</pre><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><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><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><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><pre>First Character:
+ R Real matrix
+ C Complex matrix
+ P Pattern only (no numerical values supplied)</pre><pre>Second Character:
+ S Symmetric
+ U Unsymmetric
+ H Hermitian
+ Z Skew symmetric
+ R Rectangular</pre><pre>Third Character:
+ A Assembled
+ E Elemental matrices (unassembled)</pre><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad09b12d41114fe05457517797a07cc18"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a352f5f08cd40d9d5720207c20b3dc9ca"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5c4a2643da5963b5476e372f988bbd8d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a52586e2539abd4eef906171718a16988"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void creadhb </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>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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="creadhb_8c_a52586e2539abd4eef906171718a16988_cgraph.png" border="0" usemap="#creadhb_8c_a52586e2539abd4eef906171718a16988_cgraph" alt=""/></div>
+<map name="creadhb_8c_a52586e2539abd4eef906171718a16988_cgraph" id="creadhb_8c_a52586e2539abd4eef906171718a16988_cgraph">
+<area shape="rect" id="node2" href="creadhb_8c.html#ad09b12d41114fe05457517797a07cc18" title="Eat up the rest of the current line. " alt="" coords="145,5,233,32"/><area shape="rect" id="node3" href="cmemory_8c.html#ad952b424acd036108ca2f5a0bd9d3739" title="Allocate storage for original matrix A. " alt="" coords="148,56,231,83"/><area shape="rect" id="node6" href="creadhb_8c.html#a5c4a2643da5963b5476e372f988bbd8d" title="cParseIntFormat" alt="" coords="130,107,249,133"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa8fcc9991808e214c9760aafa83ac02c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adb5b774f2c9efe079f5bc50749d979ad"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void FormFullA </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<pre>
+On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+matrix. On exit, it represents the full matrix with lower and upper parts.
+</pre>
+</div>
+</div>
+<a class="anchor" id="afbec2a501b92e7e7bb13af2e21520522"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/creadrb_8c.html b/SuperLU_5.2.0/DOC/html/creadrb_8c.html
new file mode 100644
index 0000000..dfa210c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/creadrb_8c.html
@@ -0,0 +1,437 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/creadrb.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">creadrb.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in Rutherford-Boeing format.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for creadrb.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="creadrb_8c__incl.png" border="0" usemap="#SRC_2creadrb_8c" alt=""/></div>
+<map name="SRC_2creadrb_8c" id="SRC_2creadrb_8c">
+<area shape="rect" id="node4" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="414,80,503,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="341,155,448,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="472,155,573,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2d52636395e794c245819afa89a9898d"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#a2d52636395e794c245819afa89a9898d">cDumpLine</a> (FILE *fp)</td></tr>
+<tr class="memdesc:a2d52636395e794c245819afa89a9898d"><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line. <a href="#a2d52636395e794c245819afa89a9898d">More...</a><br/></td></tr>
+<tr class="separator:a2d52636395e794c245819afa89a9898d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9cd499747b7a42c6086b922fc9e37844"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#a9cd499747b7a42c6086b922fc9e37844">cParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a9cd499747b7a42c6086b922fc9e37844"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a38c28f0c6247583fd686959c0b3d416c"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#a38c28f0c6247583fd686959c0b3d416c">cParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a38c28f0c6247583fd686959c0b3d416c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbec2a501b92e7e7bb13af2e21520522"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#afbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+<tr class="separator:afbec2a501b92e7e7bb13af2e21520522"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7737ab09a4d223433775e2566867ce8c"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#a7737ab09a4d223433775e2566867ce8c">cReadValues</a> (FILE *fp, int n, <a class="el" href="structcomplex.html">complex</a> *destination, int perline, int persize)</td></tr>
+<tr class="memdesc:a7737ab09a4d223433775e2566867ce8c"><td class="mdescLeft"> </td><td class="mdescRight">Read complex numbers as pairs of (real, imaginary) <a href="#a7737ab09a4d223433775e2566867ce8c">More...</a><br/></td></tr>
+<tr class="separator:a7737ab09a4d223433775e2566867ce8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb5b774f2c9efe079f5bc50749d979ad"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#adb5b774f2c9efe079f5bc50749d979ad">FormFullA</a> (int n, int *nonz, <a class="el" href="structcomplex.html">complex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:adb5b774f2c9efe079f5bc50749d979ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf2ecfdc506c8a67ac3356758edd5502"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadrb_8c.html#aaf2ecfdc506c8a67ac3356758edd5502">creadrb</a> (int *nrow, int *ncol, int *nonz, <a class="el" href="structcomplex.html">complex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:aaf2ecfdc506c8a67ac3356758edd5502"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 4.0) --
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre><h1>Purpose </h1>
+<p>Read a COMPLEX PRECISION matrix stored in Rutherford-Boeing format as described below.</p>
+<p>Line 1 (A72, A8) Col. 1 - 72 Title (TITLE) Col. 73 - 80 Matrix name / identifier (MTRXID)</p>
+<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>
+<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 ent [...]
+<p>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>
+<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>
+<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>
+<p>Second Character: S Symmetric U Unsymmetric H Hermitian Z Skew symmetric R Rectangular</p>
+<p>Third Character: A Compressed column form E Elemental form</p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2d52636395e794c245819afa89a9898d"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a38c28f0c6247583fd686959c0b3d416c"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9cd499747b7a42c6086b922fc9e37844"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaf2ecfdc506c8a67ac3356758edd5502"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="creadrb_8c_aaf2ecfdc506c8a67ac3356758edd5502_cgraph.png" border="0" usemap="#creadrb_8c_aaf2ecfdc506c8a67ac3356758edd5502_cgraph" alt=""/></div>
+<map name="creadrb_8c_aaf2ecfdc506c8a67ac3356758edd5502_cgraph" id="creadrb_8c_aaf2ecfdc506c8a67ac3356758edd5502_cgraph">
+<area shape="rect" id="node2" href="creadrb_8c.html#a2d52636395e794c245819afa89a9898d" title="Eat up the rest of the current line. " alt="" coords="143,5,231,32"/><area shape="rect" id="node3" href="cmemory_8c.html#ad952b424acd036108ca2f5a0bd9d3739" title="Allocate storage for original matrix A. " alt="" coords="145,56,228,83"/><area shape="rect" id="node6" href="creadrb_8c.html#a9cd499747b7a42c6086b922fc9e37844" title="cParseIntFormat" alt="" coords="127,107,246,133"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7737ab09a4d223433775e2566867ce8c"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adb5b774f2c9efe079f5bc50749d979ad"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void FormFullA </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<pre>
+On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+matrix. On exit, it represents the full matrix with lower and upper parts.
+</pre>
+</div>
+</div>
+<a class="anchor" id="afbec2a501b92e7e7bb13af2e21520522"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/creadtriple_8c.html b/SuperLU_5.2.0/DOC/html/creadtriple_8c.html
new file mode 100644
index 0000000..286a763
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/creadtriple_8c.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/creadtriple.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">creadtriple.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in triplet (coordinate) format.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for creadtriple.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="creadtriple_8c__incl.png" border="0" usemap="#SRC_2creadtriple_8c" alt=""/></div>
+<map name="SRC_2creadtriple_8c" id="SRC_2creadtriple_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a784a2e9d5ddef7abd1706abeb73ee498"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadtriple_8c.html#a784a2e9d5ddef7abd1706abeb73ee498">creadtriple</a> (int *m, int *n, int *nonz, <a class="el" href="structcomplex.html">complex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:a784a2e9d5ddef7abd1706abeb73ee498"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5daca19d6cd5379145d89f172703fa6b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="creadtriple_8c.html#a5daca19d6cd5379145d89f172703fa6b">creadrhs</a> (int m, <a class="el" href="structcomplex.html">complex</a> *b)</td></tr>
+<tr class="separator:a5daca19d6cd5379145d89f172703fa6b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5daca19d6cd5379145d89f172703fa6b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a784a2e9d5ddef7abd1706abeb73ee498"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="creadtriple_8c_a784a2e9d5ddef7abd1706abeb73ee498_cgraph.png" border="0" usemap="#creadtriple_8c_a784a2e9d5ddef7abd1706abeb73ee498_cgraph" alt=""/></div>
+<map name="creadtriple_8c_a784a2e9d5ddef7abd1706abeb73ee498_cgraph" id="creadtriple_8c_a784a2e9d5ddef7abd1706abeb73ee498_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#ad952b424acd036108ca2f5a0bd9d3739" title="Allocate storage for original matrix A. " alt="" coords="136,31,219,57"/><area shape="rect" id="node3" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="267,5,376,32"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="284,56,359,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/csnode__bmod_8c.html b/SuperLU_5.2.0/DOC/html/csnode__bmod_8c.html
new file mode 100644
index 0000000..c625d69
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/csnode__bmod_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/csnode_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">csnode_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numeric block updates within the relaxed snode.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for csnode_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="csnode__bmod_8c__incl.png" border="0" usemap="#SRC_2csnode__bmod_8c" alt=""/></div>
+<map name="SRC_2csnode__bmod_8c" id="SRC_2csnode__bmod_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab5d22385d602a4fe7b7955129fc54ac8"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csnode__bmod_8c.html#ab5d22385d602a4fe7b7955129fc54ac8">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 [...]
+<tr class="memdesc:ab5d22385d602a4fe7b7955129fc54ac8"><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode. <a href="#ab5d22385d602a4fe7b7955129fc54ac8">More...</a><br/></td></tr>
+<tr class="separator:ab5d22385d602a4fe7b7955129fc54ac8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab5d22385d602a4fe7b7955129fc54ac8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="csnode__bmod_8c_ab5d22385d602a4fe7b7955129fc54ac8_cgraph.png" border="0" usemap="#csnode__bmod_8c_ab5d22385d602a4fe7b7955129fc54ac8_cgraph" alt=""/></div>
+<map name="csnode__bmod_8c_ab5d22385d602a4fe7b7955129fc54ac8_cgraph" id="csnode__bmod_8c_ab5d22385d602a4fe7b7955129fc54ac8_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a6f95eb0c9c167ab10b919c77fe7b3079" title="ctrsv_" alt="" coords="164,5,223,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a56ba57f6e1b5e139e6c168c21d56f873" title="cgemv_" alt="" coords="159,56,227,83"/><area shape="rect" id="node4" href="ccolumn__bmod_8c.html#a39d81cbea11f613524e674a8c2e18c5f" title="Solves a dense UNIT lower triangular system. " alt="" coords="162,107,225,133"/><area shape="rect" id="node5" href="ccolu [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/csnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/csnode__dfs_8c.html
new file mode 100644
index 0000000..21dd05a
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/csnode__dfs_8c.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/csnode_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">csnode_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Determines the union of row structures of columns within the relaxed node.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for csnode_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="csnode__dfs_8c__incl.png" border="0" usemap="#SRC_2csnode__dfs_8c" alt=""/></div>
+<map name="SRC_2csnode__dfs_8c" id="SRC_2csnode__dfs_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1c7b34abd214279177619773ad24b759"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csnode__dfs_8c.html#a1c7b34abd214279177619773ad24b759">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>
+<tr class="separator:a1c7b34abd214279177619773ad24b759"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1c7b34abd214279177619773ad24b759"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="csnode__dfs_8c.html#a1c7b34abd214279177619773ad24b759">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="csnode__dfs_8c_a1c7b34abd214279177619773ad24b759_cgraph.png" border="0" usemap="#csnode__dfs_8c_a1c7b34abd214279177619773ad24b759_cgraph" alt=""/></div>
+<map name="csnode__dfs_8c_a1c7b34abd214279177619773ad24b759_cgraph" id="csnode__dfs_8c_a1c7b34abd214279177619773ad24b759_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="144,107,256,133"/><area shape="rect" id="node3" href="cmemory_8c.html#a3996260179c0a72397776571b4b19164" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="329,81,399,108"/><area shape="rect" id="node8" href="cmemory_8c.html#a43ff5010762c14ea7591d23cf48403a3" title="cmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/csp__blas2_8c.html b/SuperLU_5.2.0/DOC/html/csp__blas2_8c.html
new file mode 100644
index 0000000..ca54af7
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/csp__blas2_8c.html
@@ -0,0 +1,451 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/csp_blas2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">csp_blas2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Sparse BLAS 2, using some dense BLAS 2 operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for csp_blas2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="csp__blas2_8c__incl.png" border="0" usemap="#SRC_2csp__blas2_8c" alt=""/></div>
+<map name="SRC_2csp__blas2_8c" id="SRC_2csp__blas2_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a34580dfcbd886fe93845353ac7dbeaa1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#a34580dfcbd886fe93845353ac7dbeaa1">cusolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a34580dfcbd886fe93845353ac7dbeaa1"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a34580dfcbd886fe93845353ac7dbeaa1">More...</a><br/></td></tr>
+<tr class="separator:a34580dfcbd886fe93845353ac7dbeaa1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a39d81cbea11f613524e674a8c2e18c5f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#a39d81cbea11f613524e674a8c2e18c5f">clsolve</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a39d81cbea11f613524e674a8c2e18c5f"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a39d81cbea11f613524e674a8c2e18c5f">More...</a><br/></td></tr>
+<tr class="separator:a39d81cbea11f613524e674a8c2e18c5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a09be65495be35085027bc26454dc3e74"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#a09be65495be35085027bc26454dc3e74">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 class="memdesc:a09be65495be35085027bc26454dc3e74"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a09be65495be35085027bc26454dc3e74">More...</a><br/></td></tr>
+<tr class="separator:a09be65495be35085027bc26454dc3e74"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51cbd689a51632885b9b034002631a6e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#a51cbd689a51632885b9b034002631a6e">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="str [...]
+<tr class="memdesc:a51cbd689a51632885b9b034002631a6e"><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b. <a href="#a51cbd689a51632885b9b034002631a6e">More...</a><br/></td></tr>
+<tr class="separator:a51cbd689a51632885b9b034002631a6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1adbbd2f478e6a22843d82a07d42fb63"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="struc [...]
+<tr class="memdesc:a1adbbd2f478e6a22843d82a07d42fb63"><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="#a1adbbd2f478e6a22843d82a07d42fb63">More...</a><br/></td></tr>
+<tr class="separator:a1adbbd2f478e6a22843d82a07d42fb63"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Last update: December 3, 2015
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a39d81cbea11f613524e674a8c2e18c5f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a09be65495be35085027bc26454dc3e74"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a34580dfcbd886fe93845353ac7dbeaa1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="csp__blas2_8c_a34580dfcbd886fe93845353ac7dbeaa1_cgraph.png" border="0" usemap="#csp__blas2_8c_a34580dfcbd886fe93845353ac7dbeaa1_cgraph" alt=""/></div>
+<map name="csp__blas2_8c_a34580dfcbd886fe93845353ac7dbeaa1_cgraph" id="csp__blas2_8c_a34580dfcbd886fe93845353ac7dbeaa1_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#a19814f5030befb85c4bb07e0fac34a7b" title="Complex Division c = a/b. " alt="" coords="120,5,173,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a1adbbd2f478e6a22843d82a07d42fb63"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y...">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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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^H*x + beta*y.</pre><pre> ALPHA - (input) complex
+ On entry, ALPHA specifies the scalar alpha.</pre><pre> A - (input) SuperMatrix*
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients.</pre><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><pre> INCX - (input) int
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.</pre><pre> BETA - (input) complex
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.</pre><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><pre> INCY - (input) int
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.</pre><pre> ==== Sparse Level 2 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="csp__blas2_8c_a1adbbd2f478e6a22843d82a07d42fb63_cgraph.png" border="0" usemap="#csp__blas2_8c_a1adbbd2f478e6a22843d82a07d42fb63_cgraph" alt=""/></div>
+<map name="csp__blas2_8c_a1adbbd2f478e6a22843d82a07d42fb63_cgraph" id="csp__blas2_8c_a1adbbd2f478e6a22843d82a07d42fb63_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="136,5,219,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a51cbd689a51632885b9b034002631a6e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="csp__blas2_8c.html#a51cbd689a51632885b9b034002631a6e" 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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><pre> info - (output) int*
+ If *info = -i, the i-th argument had an illegal value.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="csp__blas2_8c_a51cbd689a51632885b9b034002631a6e_cgraph.png" border="0" usemap="#csp__blas2_8c_a51cbd689a51632885b9b034002631a6e_cgraph" alt=""/></div>
+<map name="csp__blas2_8c_a51cbd689a51632885b9b034002631a6e_cgraph" id="csp__blas2_8c_a51cbd689a51632885b9b034002631a6e_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="139,5,221,32"/><area shape="rect" id="node3" href="cmemory_8c.html#a1e625ecaeb259e2dd79667ffbfb816c0" title="complexCalloc" alt="" coords="126,56,234,83"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a6f95eb0c9c167ab10b919c77fe7b3079" title="ctrsv_" alt="" coords="151,107,209,133"/><area shape="rect" id="node5" href="slu__cdefs_8h.html#a56ba57f6e1b5e139 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/csp__blas3_8c.html b/SuperLU_5.2.0/DOC/html/csp__blas3_8c.html
new file mode 100644
index 0000000..8626567
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/csp__blas3_8c.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/csp_blas3.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">csp_blas3.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Sparse BLAS3, using some dense BLAS3 operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for csp_blas3.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="csp__blas3_8c__incl.png" border="0" usemap="#SRC_2csp__blas3_8c" alt=""/></div>
+<map name="SRC_2csp__blas3_8c" id="SRC_2csp__blas3_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a23c01569bec7ec0c247eb5df98f67841"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="csp__blas3_8c.html#a23c01569bec7ec0c247eb5df98f67841">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#ac900805a486cbb8489e3c176ed6e0d [...]
+<tr class="separator:a23c01569bec7ec0c247eb5df98f67841"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a23c01569bec7ec0c247eb5df98f67841"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> sp_c performs one of the matrix-matrix operations</pre><pre> C := alpha*op( A )*op( B ) + beta*C,</pre><pre> where op( X ) is one of</pre><pre> op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ),</pre><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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> ALPHA - (input) complex
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><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 max( 1, n ).
+ Unchanged on exit.</pre><pre> BETA - (input) complex
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then C need not be set on input.</pre><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><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 max(1,m).
+ Unchanged on exit.</pre><pre> ==== Sparse Level 3 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="csp__blas3_8c_a23c01569bec7ec0c247eb5df98f67841_cgraph.png" border="0" usemap="#csp__blas3_8c_a23c01569bec7ec0c247eb5df98f67841_cgraph" alt=""/></div>
+<map name="csp__blas3_8c_a23c01569bec7ec0c247eb5df98f67841_cgraph" id="csp__blas3_8c_a23c01569bec7ec0c247eb5df98f67841_cgraph">
+<area shape="rect" id="node2" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="141,5,224,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,5,355,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/cutil_8c.html b/SuperLU_5.2.0/DOC/html/cutil_8c.html
new file mode 100644
index 0000000..f760104
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/cutil_8c.html
@@ -0,0 +1,1014 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/cutil.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">cutil.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Matrix utility functions.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cutil.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="cutil_8c__incl.png" border="0" usemap="#SRC_2cutil_8c" alt=""/></div>
+<map name="SRC_2cutil_8c" id="SRC_2cutil_8c">
+<area shape="rect" id="node3" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:abb6caf8afa858f9adaf0ff8421ac03dd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#abb6caf8afa858f9adaf0ff8421ac03dd">cCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, <a class="el" href="structcomplex.html">complex</a> *nzval, int [...]
+<tr class="memdesc:abb6caf8afa858f9adaf0ff8421ac03dd"><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related. <a href="#abb6caf8afa858f9adaf0ff8421ac03dd">More...</a><br/></td></tr>
+<tr class="separator:abb6caf8afa858f9adaf0ff8421ac03dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a58b408cacf22c559b9b361ae10956f90"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a58b408cacf22c559b9b361ae10956f90">cCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, <a class="el" href="structcomplex.html">complex</a> *nzval, int [...]
+<tr class="separator:a58b408cacf22c559b9b361ae10956f90"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6954ae5638f7ba23ae15c403313d93b2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a6954ae5638f7ba23ae15c403313d93b2">cCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *B)</td></tr>
+<tr class="memdesc:a6954ae5638f7ba23ae15c403313d93b2"><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B. <a href="#a6954ae5638f7ba23ae15c403313d93b2">More...</a><br/></td></tr>
+<tr class="separator:a6954ae5638f7ba23ae15c403313d93b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa1e1455807ad7dbf3a5b63842eccd3ae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#aa1e1455807ad7dbf3a5b63842eccd3ae">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> stype, [...]
+<tr class="separator:aa1e1455807ad7dbf3a5b63842eccd3ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a626267a542de9e81c94f1f6049c68c2f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a626267a542de9e81c94f1f6049c68c2f">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 class="separator:a626267a542de9e81c94f1f6049c68c2f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab70481bde9dc947f9dc1f42580fe6086"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#ab70481bde9dc947f9dc1f42580fe6086">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, [...]
+<tr class="separator:ab70481bde9dc947f9dc1f42580fe6086"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25187d2687836e013bb8a8da5822416c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a25187d2687836e013bb8a8da5822416c">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 class="memdesc:a25187d2687836e013bb8a8da5822416c"><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage. <a href="#a25187d2687836e013bb8a8da5822416c">More...</a><br/></td></tr>
+<tr class="separator:a25187d2687836e013bb8a8da5822416c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbd15bf3edf77d21b1c4c5096dcacf7f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#adbd15bf3edf77d21b1c4c5096dcacf7f">cPrint_CompCol_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="memdesc:adbd15bf3edf77d21b1c4c5096dcacf7f"><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging. <a href="#adbd15bf3edf77d21b1c4c5096dcacf7f">More...</a><br/></td></tr>
+<tr class="separator:adbd15bf3edf77d21b1c4c5096dcacf7f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1eeeb7938a9874f086c97b88b82645dd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a1eeeb7938a9874f086c97b88b82645dd">cPrint_SuperNode_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a1eeeb7938a9874f086c97b88b82645dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a069950e573473aa7fcf3739bcfac5983"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a069950e573473aa7fcf3739bcfac5983">cPrint_Dense_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a069950e573473aa7fcf3739bcfac5983"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4fc78919cd6e7744cec4a8b32031d571"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a4fc78919cd6e7744cec4a8b32031d571">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 class="memdesc:a4fc78919cd6e7744cec4a8b32031d571"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor. <a href="#a4fc78919cd6e7744cec4a8b32031d571">More...</a><br/></td></tr>
+<tr class="separator:a4fc78919cd6e7744cec4a8b32031d571"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a972fd0ea7e3abcd9f8d3322d425def4e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a972fd0ea7e3abcd9f8d3322d425def4e">ccheck_tempv</a> (int n, <a class="el" href="structcomplex.html">complex</a> *tempv)</td></tr>
+<tr class="memdesc:a972fd0ea7e3abcd9f8d3322d425def4e"><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="#a972fd0ea7e3abcd9f8d3322d425def4e">More...</a><br/></td></tr>
+<tr class="separator:a972fd0ea7e3abcd9f8d3322d425def4e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aca22454204c3e0c894b1ccb7d31c325c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#aca22454204c3e0c894b1ccb7d31c325c">cGenXtrue</a> (int n, int nrhs, <a class="el" href="structcomplex.html">complex</a> *x, int ldx)</td></tr>
+<tr class="separator:aca22454204c3e0c894b1ccb7d31c325c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1fd859b01a2660fee78c2ed6336c2c86"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a1fd859b01a2660fee78c2ed6336c2c86">cFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">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 [...]
+<tr class="memdesc:a1fd859b01a2660fee78c2ed6336c2c86"><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="#a1fd859b01a2660fee78c2ed6336c2c86">More...</a><br/></td></tr>
+<tr class="separator:a1fd859b01a2660fee78c2ed6336c2c86"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0987feeb2bd380db917660cde3352ec7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a0987feeb2bd380db917660cde3352ec7">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 class="memdesc:a0987feeb2bd380db917660cde3352ec7"><td class="mdescLeft"> </td><td class="mdescRight">Fills a complex precision array with a given value. <a href="#a0987feeb2bd380db917660cde3352ec7">More...</a><br/></td></tr>
+<tr class="separator:a0987feeb2bd380db917660cde3352ec7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1936a1981a1b766e102aec4be7d98f57"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a1936a1981a1b766e102aec4be7d98f57">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 class="memdesc:a1936a1981a1b766e102aec4be7d98f57"><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector. <a href="#a1936a1981a1b766e102aec4be7d98f57">More...</a><br/></td></tr>
+<tr class="separator:a1936a1981a1b766e102aec4be7d98f57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a84a1610e172fb59a0bc19a1dadcb9fbe"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#a84a1610e172fb59a0bc19a1dadcb9fbe">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 * [...]
+<tr class="memdesc:a84a1610e172fb59a0bc19a1dadcb9fbe"><td class="mdescLeft"> </td><td class="mdescRight">Print performance of the code. <a href="#a84a1610e172fb59a0bc19a1dadcb9fbe">More...</a><br/></td></tr>
+<tr class="separator:a84a1610e172fb59a0bc19a1dadcb9fbe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af6a8d174ff8ba298e99b4ac94794d5e1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="cutil_8c.html#af6a8d174ff8ba298e99b4ac94794d5e1">print_complex_vec</a> (char *what, int n, <a class="el" href="structcomplex.html">complex</a> *vec)</td></tr>
+<tr class="separator:af6a8d174ff8ba298e99b4ac94794d5e1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+August 1, 2008</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a972fd0ea7e3abcd9f8d3322d425def4e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a25187d2687836e013bb8a8da5822416c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cutil_8c_a25187d2687836e013bb8a8da5822416c_cgraph.png" border="0" usemap="#cutil_8c_a25187d2687836e013bb8a8da5822416c_cgraph" alt=""/></div>
+<map name="cutil_8c_a25187d2687836e013bb8a8da5822416c_cgraph" id="cutil_8c_a25187d2687836e013bb8a8da5822416c_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="224,5,333,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="241,56,316,83"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="242,107,315,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a6954ae5638f7ba23ae15c403313d93b2"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a626267a542de9e81c94f1f6049c68c2f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Copies a two-dimensional matrix X to another matrix Y.</p>
+
+</div>
+</div>
+<a class="anchor" id="abb6caf8afa858f9adaf0ff8421ac03dd"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58b408cacf22c559b9b361ae10956f90"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa1e1455807ad7dbf3a5b63842eccd3ae"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab70481bde9dc947f9dc1f42580fe6086"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0987feeb2bd380db917660cde3352ec7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1fd859b01a2660fee78c2ed6336c2c86"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cutil_8c_a1fd859b01a2660fee78c2ed6336c2c86_cgraph.png" border="0" usemap="#cutil_8c_a1fd859b01a2660fee78c2ed6336c2c86_cgraph" alt=""/></div>
+<map name="cutil_8c_a1fd859b01a2660fee78c2ed6336c2c86_cgraph" id="cutil_8c_a1fd859b01a2660fee78c2ed6336c2c86_cgraph">
+<area shape="rect" id="node2" href="csp__blas3_8c.html#a23c01569bec7ec0c247eb5df98f67841" title="sp_cgemm" alt="" coords="129,5,215,32"/><area shape="rect" id="node3" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="264,5,347,32"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aca22454204c3e0c894b1ccb7d31c325c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1936a1981a1b766e102aec4be7d98f57"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="cutil_8c_a1936a1981a1b766e102aec4be7d98f57_cgraph.png" border="0" usemap="#cutil_8c_a1936a1981a1b766e102aec4be7d98f57_cgraph" alt=""/></div>
+<map name="cutil_8c_a1936a1981a1b766e102aec4be7d98f57_cgraph" id="cutil_8c_a1936a1981a1b766e102aec4be7d98f57_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="166,5,223,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="adbd15bf3edf77d21b1c4c5096dcacf7f"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a069950e573473aa7fcf3739bcfac5983"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4fc78919cd6e7744cec4a8b32031d571"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1eeeb7938a9874f086c97b88b82645dd"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a84a1610e172fb59a0bc19a1dadcb9fbe"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af6a8d174ff8ba298e99b4ac94794d5e1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dcolumn__bmod_8c.html b/SuperLU_5.2.0/DOC/html/dcolumn__bmod_8c.html
new file mode 100644
index 0000000..22bee11
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dcolumn__bmod_8c.html
@@ -0,0 +1,321 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dcolumn_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dcolumn_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>performs numeric block updates
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dcolumn_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dcolumn__bmod_8c__incl.png" border="0" usemap="#SRC_2dcolumn__bmod_8c" alt=""/></div>
+<map name="SRC_2dcolumn__bmod_8c" id="SRC_2dcolumn__bmod_8c">
+<area shape="rect" id="node4" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="310,80,399,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="392,155,499,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="523,155,624,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aca18e78d81448d99eec840b19de76efd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__bmod_8c.html#aca18e78d81448d99eec840b19de76efd">dusolve</a> (int, int, double *, double *)</td></tr>
+<tr class="memdesc:aca18e78d81448d99eec840b19de76efd"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#aca18e78d81448d99eec840b19de76efd">More...</a><br/></td></tr>
+<tr class="separator:aca18e78d81448d99eec840b19de76efd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56d27043eac0282b0d0e4106acedb083"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__bmod_8c.html#a56d27043eac0282b0d0e4106acedb083">dlsolve</a> (int, int, double *, double *)</td></tr>
+<tr class="memdesc:a56d27043eac0282b0d0e4106acedb083"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a56d27043eac0282b0d0e4106acedb083">More...</a><br/></td></tr>
+<tr class="separator:a56d27043eac0282b0d0e4106acedb083"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65523602382b3d96c9852545ae24815d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__bmod_8c.html#a65523602382b3d96c9852545ae24815d">dmatvec</a> (int, int, int, double *, double *, double *)</td></tr>
+<tr class="memdesc:a65523602382b3d96c9852545ae24815d"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a65523602382b3d96c9852545ae24815d">More...</a><br/></td></tr>
+<tr class="separator:a65523602382b3d96c9852545ae24815d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ca322682f98f276feb3c50b31ca56b8"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__bmod_8c.html#a5ca322682f98f276feb3c50b31ca56b8">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) [...]
+<tr class="separator:a5ca322682f98f276feb3c50b31ca56b8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5ca322682f98f276feb3c50b31ca56b8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose:
+</h1>
+</pre><pre>
+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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dcolumn__bmod_8c_a5ca322682f98f276feb3c50b31ca56b8_cgraph.png" border="0" usemap="#dcolumn__bmod_8c_a5ca322682f98f276feb3c50b31ca56b8_cgraph" alt=""/></div>
+<map name="dcolumn__bmod_8c_a5ca322682f98f276feb3c50b31ca56b8_cgraph" id="dcolumn__bmod_8c_a5ca322682f98f276feb3c50b31ca56b8_cgraph">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html#a8bf1e89ca04a7d8384577eb9842e9ffa" title="dtrsv_" alt="" coords="192,5,251,32"/><area shape="rect" id="node3" href="slu__ddefs_8h.html#ab9959831d583511b25c4de2ebb2448e2" title="dgemv_" alt="" coords="187,56,255,83"/><area shape="rect" id="node4" href="dcolumn__bmod_8c.html#a56d27043eac0282b0d0e4106acedb083" title="Solves a dense UNIT lower triangular system. " alt="" coords="190,107,253,133"/><area shape="rect" id="node5" href="dcolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a56d27043eac0282b0d0e4106acedb083"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a65523602382b3d96c9852545ae24815d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="aca18e78d81448d99eec840b19de76efd"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dcolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/dcolumn__dfs_8c.html
new file mode 100644
index 0000000..7354cdd
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dcolumn__dfs_8c.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dcolumn_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dcolumn_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs a symbolic factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dcolumn_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dcolumn__dfs_8c__incl.png" border="0" usemap="#SRC_2dcolumn__dfs_8c" alt=""/></div>
+<map name="SRC_2dcolumn__dfs_8c" id="SRC_2dcolumn__dfs_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a5fd0635776cafb1d697263a0db693b9e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__dfs_8c.html#a5fd0635776cafb1d697263a0db693b9e">T2_SUPER</a></td></tr>
+<tr class="memdesc:a5fd0635776cafb1d697263a0db693b9e"><td class="mdescLeft"> </td><td class="mdescRight">What type of supernodes we want. <a href="#a5fd0635776cafb1d697263a0db693b9e">More...</a><br/></td></tr>
+<tr class="separator:a5fd0635776cafb1d697263a0db693b9e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5e1eb3b6035e0d4e358caa044e58292d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dcolumn__dfs_8c.html#a5e1eb3b6035e0d4e358caa044e58292d">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>
+<tr class="separator:a5e1eb3b6035e0d4e358caa044e58292d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a5fd0635776cafb1d697263a0db693b9e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define T2_SUPER</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5e1eb3b6035e0d4e358caa044e58292d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ DCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dcolumn__dfs_8c_a5e1eb3b6035e0d4e358caa044e58292d_cgraph.png" border="0" usemap="#dcolumn__dfs_8c_a5e1eb3b6035e0d4e358caa044e58292d_cgraph" alt=""/></div>
+<map name="dcolumn__dfs_8c_a5e1eb3b6035e0d4e358caa044e58292d_cgraph" id="dcolumn__dfs_8c_a5e1eb3b6035e0d4e358caa044e58292d_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="172,31,239,57"/><area shape="rect" id="node4" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="149,81,261,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="328,31,411,57"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dcomplex_8c.html b/SuperLU_5.2.0/DOC/html/dcomplex_8c.html
new file mode 100644
index 0000000..752a388
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dcomplex_8c.html
@@ -0,0 +1,288 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dcomplex.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dcomplex.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Common arithmetic for complex type.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dcomplex.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dcomplex_8c__incl.png" border="0" usemap="#SRC_2dcomplex_8c" alt=""/></div>
+<map name="SRC_2dcomplex_8c" id="SRC_2dcomplex_8c">
+<area shape="rect" id="node5" href="slu__dcomplex_8h.html" title="Header file for complex operations. " alt="" coords="266,80,379,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4cfde2671a83833a15c5b48517781db0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#a4cfde2671a83833a15c5b48517781db0">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 class="memdesc:a4cfde2671a83833a15c5b48517781db0"><td class="mdescLeft"> </td><td class="mdescRight">Complex Division c = a/b. <a href="#a4cfde2671a83833a15c5b48517781db0">More...</a><br/></td></tr>
+<tr class="separator:a4cfde2671a83833a15c5b48517781db0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af701b1c549ee8dcf6767742a91681b55"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55">z_abs</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+<tr class="memdesc:af701b1c549ee8dcf6767742a91681b55"><td class="mdescLeft"> </td><td class="mdescRight">Returns sqrt(z.r^2 + z.i^2) <a href="#af701b1c549ee8dcf6767742a91681b55">More...</a><br/></td></tr>
+<tr class="separator:af701b1c549ee8dcf6767742a91681b55"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47b00c33108809a1a9a94ffea7ef2097"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097">z_abs1</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+<tr class="memdesc:a47b00c33108809a1a9a94ffea7ef2097"><td class="mdescLeft"> </td><td class="mdescRight">Approximates the abs. Returns abs(z.r) + abs(z.i) <a href="#a47b00c33108809a1a9a94ffea7ef2097">More...</a><br/></td></tr>
+<tr class="separator:a47b00c33108809a1a9a94ffea7ef2097"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab03337c37aa8b70db9a3bac9368fb06c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#ab03337c37aa8b70db9a3bac9368fb06c">z_exp</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *r, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+<tr class="memdesc:ab03337c37aa8b70db9a3bac9368fb06c"><td class="mdescLeft"> </td><td class="mdescRight">Return the exponentiation. <a href="#ab03337c37aa8b70db9a3bac9368fb06c">More...</a><br/></td></tr>
+<tr class="separator:ab03337c37aa8b70db9a3bac9368fb06c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a753978ee017e26dbdab16a40cf45b2cb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#a753978ee017e26dbdab16a40cf45b2cb">d_cnjg</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *r, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+<tr class="memdesc:a753978ee017e26dbdab16a40cf45b2cb"><td class="mdescLeft"> </td><td class="mdescRight">Return the complex conjugate. <a href="#a753978ee017e26dbdab16a40cf45b2cb">More...</a><br/></td></tr>
+<tr class="separator:a753978ee017e26dbdab16a40cf45b2cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a58f08c15442d32d787301386ed99ac01"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dcomplex_8c.html#a58f08c15442d32d787301386ed99ac01">d_imag</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+<tr class="memdesc:a58f08c15442d32d787301386ed99ac01"><td class="mdescLeft"> </td><td class="mdescRight">Return the imaginary part. <a href="#a58f08c15442d32d787301386ed99ac01">More...</a><br/></td></tr>
+<tr class="separator:a58f08c15442d32d787301386ed99ac01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36451f8af6b7bd3a4d5f655ead8d5ee4"><td class="memItemLeft" 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#a36451f8af6b7bd3a4d5f655ead8d5ee4">z_sgn</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+<tr class="memdesc:a36451f8af6b7bd3a4d5f655ead8d5ee4"><td class="mdescLeft"> </td><td class="mdescRight">SIGN functions for complex number. Returns z/abs(z) <a href="#a36451f8af6b7bd3a4d5f655ead8d5ee4">More...</a><br/></td></tr>
+<tr class="separator:a36451f8af6b7bd3a4d5f655ead8d5ee4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29f4b8ea3e1309c47c2b1f783c6efa89"><td class="memItemLeft" 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#a29f4b8ea3e1309c47c2b1f783c6efa89">z_sqrt</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+<tr class="memdesc:a29f4b8ea3e1309c47c2b1f783c6efa89"><td class="mdescLeft"> </td><td class="mdescRight">Square-root of a complex number. <a href="#a29f4b8ea3e1309c47c2b1f783c6efa89">More...</a><br/></td></tr>
+<tr class="separator:a29f4b8ea3e1309c47c2b1f783c6efa89"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>This file defines common arithmetic operations for complex type.
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a753978ee017e26dbdab16a40cf45b2cb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58f08c15442d32d787301386ed99ac01"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af701b1c549ee8dcf6767742a91681b55"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a47b00c33108809a1a9a94ffea7ef2097"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4cfde2671a83833a15c5b48517781db0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab03337c37aa8b70db9a3bac9368fb06c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a36451f8af6b7bd3a4d5f655ead8d5ee4"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dcomplex_8c_a36451f8af6b7bd3a4d5f655ead8d5ee4_cgraph.png" border="0" usemap="#dcomplex_8c_a36451f8af6b7bd3a4d5f655ead8d5ee4_cgraph" alt=""/></div>
+<map name="dcomplex_8c_a36451f8af6b7bd3a4d5f655ead8d5ee4_cgraph" id="dcomplex_8c_a36451f8af6b7bd3a4d5f655ead8d5ee4_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="113,5,170,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a29f4b8ea3e1309c47c2b1f783c6efa89"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dcopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/dcopy__to__ucol_8c.html
new file mode 100644
index 0000000..e89a8bc
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dcopy__to__ucol_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dcopy_to_ucol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dcopy_to_ucol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Copy a computed column of U to the compressed data structure.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dcopy_to_ucol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dcopy__to__ucol_8c__incl.png" border="0" usemap="#SRC_2dcopy__to__ucol_8c" alt=""/></div>
+<map name="SRC_2dcopy__to__ucol_8c" id="SRC_2dcopy__to__ucol_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ace3034cff6ce6be9e0b0f69cda42f196"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dcopy__to__ucol_8c.html#ace3034cff6ce6be9e0b0f69cda42f196">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>
+<tr class="separator:ace3034cff6ce6be9e0b0f69cda42f196"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ace3034cff6ce6be9e0b0f69cda42f196"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dcopy__to__ucol_8c_ace3034cff6ce6be9e0b0f69cda42f196_cgraph.png" border="0" usemap="#dcopy__to__ucol_8c_ace3034cff6ce6be9e0b0f69cda42f196_cgraph" alt=""/></div>
+<map name="dcopy__to__ucol_8c_ace3034cff6ce6be9e0b0f69cda42f196_cgraph" id="dcopy__to__ucol_8c_ace3034cff6ce6be9e0b0f69cda42f196_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="160,107,272,133"/><area shape="rect" id="node3" href="dmemory_8c.html#afe3104df9ace895f5332843534ae99b4" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="345,81,415,108"/><area shape="rect" id="node8" href="dmemory_8c.html#a5c9b1e24d07635068c014999d44672aa" title="dmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ddiagonal_8c.html b/SuperLU_5.2.0/DOC/html/ddiagonal_8c.html
new file mode 100644
index 0000000..5d4e3ad
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ddiagonal_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ddiagonal.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ddiagonal.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Auxiliary routines to work with diagonal elements.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ddiagonal.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ddiagonal_8c__incl.png" border="0" usemap="#SRC_2ddiagonal_8c" alt=""/></div>
+<map name="SRC_2ddiagonal_8c" id="SRC_2ddiagonal_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:afb322f8a71fc9c29b8f0860f82be31bb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ddiagonal_8c.html#afb322f8a71fc9c29b8f0860f82be31bb">dfill_diag</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+<tr class="separator:afb322f8a71fc9c29b8f0860f82be31bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6dcc4428df5c858dc58955919c696a00"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ddiagonal_8c.html#a6dcc4428df5c858dc58955919c696a00">ddominate</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+<tr class="separator:a6dcc4428df5c858dc58955919c696a00"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a6dcc4428df5c858dc58955919c696a00"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ddiagonal_8c_a6dcc4428df5c858dc58955919c696a00_cgraph.png" border="0" usemap="#ddiagonal_8c_a6dcc4428df5c858dc58955919c696a00_cgraph" alt=""/></div>
+<map name="ddiagonal_8c_a6dcc4428df5c858dc58955919c696a00_cgraph" id="ddiagonal_8c_a6dcc4428df5c858dc58955919c696a00_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="136,5,235,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="148,56,223,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afb322f8a71fc9c29b8f0860f82be31bb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ddiagonal_8c_afb322f8a71fc9c29b8f0860f82be31bb_cgraph.png" border="0" usemap="#ddiagonal_8c_afb322f8a71fc9c29b8f0860f82be31bb_cgraph" alt=""/></div>
+<map name="ddiagonal_8c_afb322f8a71fc9c29b8f0860f82be31bb_cgraph" id="ddiagonal_8c_afb322f8a71fc9c29b8f0860f82be31bb_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="128,5,227,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="140,56,215,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dfgmr_8c.html b/SuperLU_5.2.0/DOC/html/dfgmr_8c.html
new file mode 100644
index 0000000..9edee00
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dfgmr_8c.html
@@ -0,0 +1,261 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/dfgmr.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dfgmr.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>flexible GMRES from ITSOL developed by Yousef Saad.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dfgmr.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dfgmr_8c__incl.png" border="0" usemap="#EXAMPLE_2dfgmr_8c" alt=""/></div>
+<map name="EXAMPLE_2dfgmr_8c" id="EXAMPLE_2dfgmr_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a70fac857a29f956523d4c8c05e13f177"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dfgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">epsmac</a> 1.0e-16</td></tr>
+<tr class="separator:a70fac857a29f956523d4c8c05e13f177"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab67e7a07556055c505aae6e65c937e39"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dfgmr_8c.html#ab67e7a07556055c505aae6e65c937e39">ddot_</a> (int *, double[], int *, double[], int *)</td></tr>
+<tr class="separator:ab67e7a07556055c505aae6e65c937e39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61a0022627cc1977966c0067f1f12e26"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dfgmr_8c.html#a61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+<tr class="separator:a61a0022627cc1977966c0067f1f12e26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a70923b9fe57b546dfe14462a6be22de2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dfgmr_8c.html#a70923b9fe57b546dfe14462a6be22de2">dfgmr</a> (int n, void(*<a class="el" href="dsp__blas2_8c.html#a65523602382b3d96c9852545ae24815d">dmatvec</a>)(double, double[], double, double[]), void(*<a class="el" href="ditersol1_8c.html#a0361a1766c36ff38205dc63f1b329afd">dpsolve</a>)(int, double[], double[] [...]
+<tr class="separator:a70923b9fe57b546dfe14462a6be22de2"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a70fac857a29f956523d4c8c05e13f177"></a>
+<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">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab67e7a07556055c505aae6e65c937e39"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a70923b9fe57b546dfe14462a6be22de2"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dfgmr_8c_a70923b9fe57b546dfe14462a6be22de2_cgraph.png" border="0" usemap="#dfgmr_8c_a70923b9fe57b546dfe14462a6be22de2_cgraph" alt=""/></div>
+<map name="dfgmr_8c_a70923b9fe57b546dfe14462a6be22de2_cgraph" id="dfgmr_8c_a70923b9fe57b546dfe14462a6be22de2_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="621,259,720,285"/><area shape="rect" id="node3" href="dcolumn__bmod_8c.html#a65523602382b3d96c9852545ae24815d" title="Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. " alt="" coords="109,831,181,857"/><area shape="rect" id="node4" href="dfgmr_8c.html#a61a0022627cc1977966c0067f1f12e26" title="dnrm2_" alt="" coords="113,881,178,908"/><area shape=" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a61a0022627cc1977966c0067f1f12e26"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dgscon_8c.html b/SuperLU_5.2.0/DOC/html/dgscon_8c.html
new file mode 100644
index 0000000..249dcf1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dgscon_8c.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dgscon.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dgscon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Estimates reciprocal of the condition number of a general matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dgscon.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgscon_8c__incl.png" border="0" usemap="#SRC_2dgscon_8c" alt=""/></div>
+<map name="SRC_2dgscon_8c" id="SRC_2dgscon_8c">
+<area shape="rect" id="node3" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2c7a4267d306243d3ceb15531522033e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgscon_8c.html#a2c7a4267d306243d3ceb15531522033e">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 *inf [...]
+<tr class="separator:a2c7a4267d306243d3ceb15531522033e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 5.0) --
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+July 25, 2015</pre><pre>Modified from lapack routines DGECON.
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2c7a4267d306243d3ceb15531522033e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><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><pre> RCOND (output) double*
+ The reciprocal of the condition number of the matrix A,
+ computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><pre> INFO (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgscon_8c_a2c7a4267d306243d3ceb15531522033e_cgraph.png" border="0" usemap="#dgscon_8c_a2c7a4267d306243d3ceb15531522033e_cgraph" alt=""/></div>
+<map name="dgscon_8c_a2c7a4267d306243d3ceb15531522033e_cgraph" id="dgscon_8c_a2c7a4267d306243d3ceb15531522033e_cgraph">
+<area shape="rect" id="node2" href="dlacon2_8c.html#a2c302d4fb016bb92527dcd1e360198c3" title="dlacon2_" alt="" coords="117,107,192,133"/><area shape="rect" id="node6" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="248,157,331,184"/><area shape="rect" id="node7" href="dmemory_8c.html#ac8b6d99155644578a5e5542c32040cfe" title="doubleCalloc" alt="" coords="241,208,338,235"/><area shape="rect" id="node8" href="memory_8c.html#a49bbe20102e5b541c [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dgsequ_8c.html b/SuperLU_5.2.0/DOC/html/dgsequ_8c.html
new file mode 100644
index 0000000..5904865
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dgsequ_8c.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dgsequ.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dgsequ.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes row and column scalings.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dgsequ.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgsequ_8c__incl.png" border="0" usemap="#SRC_2dgsequ_8c" alt=""/></div>
+<map name="SRC_2dgsequ_8c" id="SRC_2dgsequ_8c">
+<area shape="rect" id="node3" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aaf22b247cc134fb0ba90285e84ccebb4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsequ_8c.html#aaf22b247cc134fb0ba90285e84ccebb4">dgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, double *r, double *c, double *rowcnd, double *colcnd, double *amax, int *info)</td></tr>
+<tr class="memdesc:aaf22b247cc134fb0ba90285e84ccebb4"><td class="mdescLeft"> </td><td class="mdescRight">Driver related. <a href="#aaf22b247cc134fb0ba90285e84ccebb4">More...</a><br/></td></tr>
+<tr class="separator:aaf22b247cc134fb0ba90285e84ccebb4"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from LAPACK routine DGEEQU
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aaf22b247cc134fb0ba90285e84ccebb4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (output) double*, size A->nrow
+ If INFO = 0 or INFO > M, R contains the row scale factors
+ for A.</pre><pre> C (output) double*, size A->ncol
+ If INFO = 0, C contains the column scale factors for A.</pre><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><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><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><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
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgsequ_8c_aaf22b247cc134fb0ba90285e84ccebb4_cgraph.png" border="0" usemap="#dgsequ_8c_aaf22b247cc134fb0ba90285e84ccebb4_cgraph" alt=""/></div>
+<map name="dgsequ_8c_aaf22b247cc134fb0ba90285e84ccebb4_cgraph" id="dgsequ_8c_aaf22b247cc134fb0ba90285e84ccebb4_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="128,5,189,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="117,56,200,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dgsisx_8c.html b/SuperLU_5.2.0/DOC/html/dgsisx_8c.html
new file mode 100644
index 0000000..eaf9a58
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dgsisx_8c.html
@@ -0,0 +1,516 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dgsisx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dgsisx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an approximate solutions of linear equations A*X=B or A'*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dgsisx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgsisx_8c__incl.png" border="0" usemap="#SRC_2dgsisx_8c" alt=""/></div>
+<map name="SRC_2dgsisx_8c" id="SRC_2dgsisx_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a895611a0135f2212f505986a6384f1b9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsisx_8c.html#a895611a0135f2212f505986a6384f1b9">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int * [...]
+<tr class="separator:a895611a0135f2212f505986a6384f1b9"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.2) –
+Lawrence Berkeley National Laboratory.
+November, 2010
+August, 2011
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a895611a0135f2212f505986a6384f1b9"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#ac36e874ce15790ca0b059fab7eed0466">dgsitrf()</a>.
+An estimation of the condition number is provided.
+The routine performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><pre> 1.7. options->IterRefine is not used</pre><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * sum(dropped entries);
+ = SMILU_3:
+ U(i,i) := U(i,i) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * 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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><pre> 2.7. If options->IterRefine is not used.</pre><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgsisx_8c_a895611a0135f2212f505986a6384f1b9_cgraph.png" border="0" usemap="#dgsisx_8c_a895611a0135f2212f505986a6384f1b9_cgraph" alt=""/></div>
+<map name="dgsisx_8c_a895611a0135f2212f505986a6384f1b9_cgraph" id="dgsisx_8c_a895611a0135f2212f505986a6384f1b9_cgraph">
+<area shape="rect" id="node2" href="dlangs_8c.html#a75a53f4464b95c63adad9e1f63f44d1c" title="dlangs" alt="" coords="182,5,242,32"/><area shape="rect" id="node3" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="604,157,665,184"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="739,613,821,640"/><area shape="rect" id="node5" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dgsitrf_8c.html b/SuperLU_5.2.0/DOC/html/dgsitrf_8c.html
new file mode 100644
index 0000000..42a1e5b
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dgsitrf_8c.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dgsitrf.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dgsitrf.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an ILU factorization of a general sparse matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dgsitrf.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgsitrf_8c__incl.png" border="0" usemap="#SRC_2dgsitrf_8c" alt=""/></div>
+<map name="SRC_2dgsitrf_8c" id="SRC_2dgsitrf_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac36e874ce15790ca0b059fab7eed0466"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsitrf_8c.html#ac36e874ce15790ca0b059fab7eed0466">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int p [...]
+<tr class="separator:ac36e874ce15790ca0b059fab7eed0466"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009</pre><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac36e874ce15790ca0b059fab7eed0466"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the ILU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">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#a380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgsitrf_8c_ac36e874ce15790ca0b059fab7eed0466_cgraph.png" border="0" usemap="#dgsitrf_8c_ac36e874ce15790ca0b059fab7eed0466_cgraph" alt=""/></div>
+<map name="dgsitrf_8c_ac36e874ce15790ca0b059fab7eed0466_cgraph" id="dgsitrf_8c_ac36e874ce15790ca0b059fab7eed0466_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#ae2ca2ac5e9a763fd3f07487343e4522e" title="Allocate storage for the data structures common to all factor routines. " alt="" coords="157,309,251,336"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="363,56,437,83"/><area shape="rect" id="node10" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="531,867,597,893"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dgsrfs_8c.html b/SuperLU_5.2.0/DOC/html/dgsrfs_8c.html
new file mode 100644
index 0000000..95f02f1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dgsrfs_8c.html
@@ -0,0 +1,287 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dgsrfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dgsrfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Improves computed solution to a system of inear equations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dgsrfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgsrfs_8c__incl.png" border="0" usemap="#SRC_2dgsrfs_8c" alt=""/></div>
+<map name="SRC_2dgsrfs_8c" id="SRC_2dgsrfs_8c">
+<area shape="rect" id="node3" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a3641b6d4c21b7a852dbb32c2b693302e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsrfs_8c.html#a3641b6d4c21b7a852dbb32c2b693302e">ITMAX</a> 5</td></tr>
+<tr class="separator:a3641b6d4c21b7a852dbb32c2b693302e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:adb43f7a2408ddb763f36fbfcc0482f28"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgsrfs_8c.html#adb43f7a2408ddb763f36fbfcc0482f28">dgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a> [...]
+<tr class="separator:adb43f7a2408ddb763f36fbfcc0482f28"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Modified from lapack routine DGERFS
+Last modified: December 3, 2015
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a3641b6d4c21b7a852dbb32c2b693302e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ITMAX 5</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="adb43f7a2408ddb763f36fbfcc0482f28"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> DGSRFS improves the computed solution to a system of linear
+ equations and provides error bounds and backward error estimates for
+ the solution.</pre><pre> If equilibration was performed, the system becomes:
+ (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use column-wise storage scheme,
+ i.e., U has types: Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><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><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><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><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><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><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><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#a6e3eace519372b7dfcd053e0d3614fc1">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><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><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><pre> stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre> info (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value</pre><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><pre> ITMAX is the maximum number of steps of iterative refinement.</pre><pre></pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgsrfs_8c_adb43f7a2408ddb763f36fbfcc0482f28_cgraph.png" border="0" usemap="#dgsrfs_8c_adb43f7a2408ddb763f36fbfcc0482f28_cgraph" alt=""/></div>
+<map name="dgsrfs_8c_adb43f7a2408ddb763f36fbfcc0482f28_cgraph" id="dgsrfs_8c_adb43f7a2408ddb763f36fbfcc0482f28_cgraph">
+<area shape="rect" id="node2" href="dlacon2_8c.html#a2c302d4fb016bb92527dcd1e360198c3" title="dlacon2_" alt="" coords="116,56,191,83"/><area shape="rect" id="node5" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="260,107,324,133"/><area shape="rect" id="node6" href="ilu__ddrop__row_8c.html#a5112358cf2de43341aaff9fba0066afc" title="daxpy_" alt="" coords="121,157,185,184"/><area shape="rect" id="node7" href="input__error_8c.html#a5832852b [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dgssv_8c.html b/SuperLU_5.2.0/DOC/html/dgssv_8c.html
new file mode 100644
index 0000000..3e3d5f1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dgssv_8c.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dgssv.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dgssv.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves the system of linear equations A*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dgssv.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgssv_8c__incl.png" border="0" usemap="#SRC_2dgssv_8c" alt=""/></div>
+<map name="SRC_2dgssv_8c" id="SRC_2dgssv_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad804a93a6806ee4d4694df5b753d91af"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgssv_8c.html#ad804a93a6806ee4d4694df5b753d91af">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *pe [...]
+<tr class="memdesc:ad804a93a6806ee4d4694df5b753d91af"><td class="mdescLeft"> </td><td class="mdescRight">Driver routines. <a href="#ad804a93a6806ee4d4694df5b753d91af">More...</a><br/></td></tr>
+<tr class="separator:ad804a93a6806ee4d4694df5b753d91af"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 3.0) --
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad804a93a6806ee4d4694df5b753d91af"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>DGSSV solves the system of linear equations A*X=B, using the
+LU factorization from DGSTRF. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><pre> 1.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ above algorithm to the transpose of A:</pre><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><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><pre> 2.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> If options->RowPerm = MY_PERMR or
+ options->Fact = SamePattern_SameRowPerm, perm_r is an
+ input argument.
+ otherwise it is an output argument.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgssv_8c_ad804a93a6806ee4d4694df5b753d91af_cgraph.png" border="0" usemap="#dgssv_8c_ad804a93a6806ee4d4694df5b753d91af_cgraph" alt=""/></div>
+<map name="dgssv_8c_ad804a93a6806ee4d4694df5b753d91af_cgraph" id="dgssv_8c_ad804a93a6806ee4d4694df5b753d91af_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="747,1779,829,1805"/><area shape="rect" id="node3" href="dutil_8c.html#a4a177c54dafbe3640c26caa49eeee1de" title="Supernodal LU factor related. " alt="" coords="360,563,533,589"/><area shape="rect" id="node4" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="389,5,505,32"/><area shape="rect" id="node5" href="get__per [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dgssvx_8c.html b/SuperLU_5.2.0/DOC/html/dgssvx_8c.html
new file mode 100644
index 0000000..7cde84c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dgssvx_8c.html
@@ -0,0 +1,481 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dgssvx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dgssvx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves the system of linear equations A*X=B or A'*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dgssvx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgssvx_8c__incl.png" border="0" usemap="#SRC_2dgssvx_8c" alt=""/></div>
+<map name="SRC_2dgssvx_8c" id="SRC_2dgssvx_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aee2febeb580fe7992ba30a00c2127f67"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgssvx_8c.html#aee2febeb580fe7992ba30a00c2127f67">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int * [...]
+<tr class="separator:aee2febeb580fe7992ba30a00c2127f67"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aee2febeb580fe7992ba30a00c2127f67"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Error bounds on the solution and
+a condition estimate are also provided. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><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><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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgssvx_8c_aee2febeb580fe7992ba30a00c2127f67_cgraph.png" border="0" usemap="#dgssvx_8c_aee2febeb580fe7992ba30a00c2127f67_cgraph" alt=""/></div>
+<map name="dgssvx_8c_aee2febeb580fe7992ba30a00c2127f67_cgraph" id="dgssvx_8c_aee2febeb580fe7992ba30a00c2127f67_cgraph">
+<area shape="rect" id="node2" href="dlangs_8c.html#a75a53f4464b95c63adad9e1f63f44d1c" title="dlangs" alt="" coords="185,5,245,32"/><area shape="rect" id="node3" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="416,107,477,133"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="741,284,824,311"/><area shape="rect" id="node5" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dgstrf_8c.html b/SuperLU_5.2.0/DOC/html/dgstrf_8c.html
new file mode 100644
index 0000000..c092562
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dgstrf_8c.html
@@ -0,0 +1,309 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dgstrf.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dgstrf.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an LU factorization of a general sparse matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dgstrf.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgstrf_8c__incl.png" border="0" usemap="#SRC_2dgstrf_8c" alt=""/></div>
+<map name="SRC_2dgstrf_8c" id="SRC_2dgstrf_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2dcd838f80168641f20fd576b4a51b25"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrf_8c.html#a2dcd838f80168641f20fd576b4a51b25">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int pan [...]
+<tr class="separator:a2dcd838f80168641f20fd576b4a51b25"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2dcd838f80168641f20fd576b4a51b25"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the LU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__ddefs_8h.html" title="Header file for real operations. ">slu_ddefs.h</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgstrf_8c_a2dcd838f80168641f20fd576b4a51b25_cgraph.png" border="0" usemap="#dgstrf_8c_a2dcd838f80168641f20fd576b4a51b25_cgraph" alt=""/></div>
+<map name="dgstrf_8c_a2dcd838f80168641f20fd576b4a51b25_cgraph" id="dgstrf_8c_a2dcd838f80168641f20fd576b4a51b25_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="528,917,595,944"/><area shape="rect" id="node4" href="dmemory_8c.html#ae2ca2ac5e9a763fd3f07487343e4522e" title="Allocate storage for the data structures common to all factor routines. " alt="" coords="155,157,248,184"/><area shape="rect" id="node6" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="360,208,435,235"/><area shape="rec [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dgstrs_8c.html b/SuperLU_5.2.0/DOC/html/dgstrs_8c.html
new file mode 100644
index 0000000..11b4848
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dgstrs_8c.html
@@ -0,0 +1,368 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dgstrs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dgstrs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves a system using LU factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dgstrs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgstrs_8c__incl.png" border="0" usemap="#SRC_2dgstrs_8c" alt=""/></div>
+<map name="SRC_2dgstrs_8c" id="SRC_2dgstrs_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aca18e78d81448d99eec840b19de76efd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#aca18e78d81448d99eec840b19de76efd">dusolve</a> (int, int, double *, double *)</td></tr>
+<tr class="memdesc:aca18e78d81448d99eec840b19de76efd"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#aca18e78d81448d99eec840b19de76efd">More...</a><br/></td></tr>
+<tr class="separator:aca18e78d81448d99eec840b19de76efd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56d27043eac0282b0d0e4106acedb083"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#a56d27043eac0282b0d0e4106acedb083">dlsolve</a> (int, int, double *, double *)</td></tr>
+<tr class="memdesc:a56d27043eac0282b0d0e4106acedb083"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a56d27043eac0282b0d0e4106acedb083">More...</a><br/></td></tr>
+<tr class="separator:a56d27043eac0282b0d0e4106acedb083"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65523602382b3d96c9852545ae24815d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#a65523602382b3d96c9852545ae24815d">dmatvec</a> (int, int, int, double *, double *, double *)</td></tr>
+<tr class="memdesc:a65523602382b3d96c9852545ae24815d"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a65523602382b3d96c9852545ae24815d">More...</a><br/></td></tr>
+<tr class="separator:a65523602382b3d96c9852545ae24815d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6e3eace519372b7dfcd053e0d3614fc1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#a6e3eace519372b7dfcd053e0d3614fc1">dgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">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 [...]
+<tr class="separator:a6e3eace519372b7dfcd053e0d3614fc1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1532445fd4c7e1e91d5bd11dbf78364f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dgstrs_8c.html#a1532445fd4c7e1e91d5bd11dbf78364f">dprint_soln</a> (int n, int nrhs, double *soln)</td></tr>
+<tr class="separator:a1532445fd4c7e1e91d5bd11dbf78364f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a6e3eace519372b7dfcd053e0d3614fc1"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre>info (output) int*
+ = 0: successful exit
+ < 0: if info = -i, the i-th argument had an illegal value
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dgstrs_8c_a6e3eace519372b7dfcd053e0d3614fc1_cgraph.png" border="0" usemap="#dgstrs_8c_a6e3eace519372b7dfcd053e0d3614fc1_cgraph" alt=""/></div>
+<map name="dgstrs_8c_a6e3eace519372b7dfcd053e0d3614fc1_cgraph" id="dgstrs_8c_a6e3eace519372b7dfcd053e0d3614fc1_cgraph">
+<area shape="rect" id="node2" href="dgstrs_8c.html#a1532445fd4c7e1e91d5bd11dbf78364f" title="dprint_soln" alt="" coords="119,5,204,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="267,56,349,83"/><area shape="rect" id="node4" href="dmemory_8c.html#ac8b6d99155644578a5e5542c32040cfe" title="doubleCalloc" alt="" coords="259,107,357,133"/><area shape="rect" id="node5" href="dmemory_8c.html#a8f2b9305cb611c37e7f [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a56d27043eac0282b0d0e4106acedb083"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a65523602382b3d96c9852545ae24815d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1532445fd4c7e1e91d5bd11dbf78364f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aca18e78d81448d99eec840b19de76efd"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ditersol1_8c.html b/SuperLU_5.2.0/DOC/html/ditersol1_8c.html
new file mode 100644
index 0000000..0a07a4d
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ditersol1_8c.html
@@ -0,0 +1,399 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/ditersol1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">ditersol1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Example #2 showing how to use ILU to precondition GMRES.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ditersol1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ditersol1_8c__incl.png" border="0" usemap="#EXAMPLE_2ditersol1_8c" alt=""/></div>
+<map name="EXAMPLE_2ditersol1_8c" id="EXAMPLE_2ditersol1_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0361a1766c36ff38205dc63f1b329afd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#a0361a1766c36ff38205dc63f1b329afd">dpsolve</a> (int n, double x[], double y[])</td></tr>
+<tr class="separator:a0361a1766c36ff38205dc63f1b329afd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a367b39a8f8095885ffb10c66c6652aff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#a367b39a8f8095885ffb10c66c6652aff">dmatvec_mult</a> (double alpha, double x[], double beta, double y[])</td></tr>
+<tr class="separator:a367b39a8f8095885ffb10c66c6652aff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a869338b25a186a486edd0cf1850a7fbb"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#a869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a></td></tr>
+<tr class="separator:a869338b25a186a486edd0cf1850a7fbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a64b516645b16ef03c6fd0d692e6eb277"><td class="memItemLeft" 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#a64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+<tr class="separator:a64b516645b16ef03c6fd0d692e6eb277"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8cb83de814c7fbf89011ba08bb602ce0"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#a8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a></td></tr>
+<tr class="separator:a8cb83de814c7fbf89011ba08bb602ce0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5dce1561e620f6a6f6b6f17d82df4e8"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#ac5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a></td></tr>
+<tr class="separator:ac5dce1561e620f6a6f6b6f17d82df4e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+<tr class="separator:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a42ee721355f1c852f770661834be93"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol1_8c.html#a5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+<tr class="separator:a5a42ee721355f1c852f770661834be93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad42e5c3013507184841cdfee652a0c18"><td class="memItemLeft" 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#ad42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+<tr class="separator:ad42e5c3013507184841cdfee652a0c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1beb2a8fb47df4eb505addfef02814c"><td class="memItemLeft" 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#af1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a></td></tr>
+<tr class="separator:af1beb2a8fb47df4eb505addfef02814c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memItemLeft" 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#a0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+<tr class="separator:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a000ad5c2198e4309802b4478ed08a98c"><td class="memItemLeft" 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#a000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+<tr class="separator:a000ad5c2198e4309802b4478ed08a98c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96a062252c26544370e8feae987c6d16"><td class="memItemLeft" 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#a96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+<tr class="separator:a96a062252c26544370e8feae987c6d16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19718c440adb41fbebcb4bafedbf932c"><td class="memItemLeft" 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#a19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+<tr class="separator:a19718c440adb41fbebcb4bafedbf932c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.0) –
+Lawrence Berkeley National Laboratory
+November, 2010
+August, 2011</pre><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><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
+dynamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><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><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a367b39a8f8095885ffb10c66c6652aff"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ditersol1_8c_a367b39a8f8095885ffb10c66c6652aff_cgraph.png" border="0" usemap="#ditersol1_8c_a367b39a8f8095885ffb10c66c6652aff_cgraph" alt=""/></div>
+<map name="ditersol1_8c_a367b39a8f8095885ffb10c66c6652aff_cgraph" id="ditersol1_8c_a367b39a8f8095885ffb10c66c6652aff_cgraph">
+<area shape="rect" id="node2" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="288,5,371,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0361a1766c36ff38205dc63f1b329afd"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ditersol1_8c_a0361a1766c36ff38205dc63f1b329afd_cgraph.png" border="0" usemap="#ditersol1_8c_a0361a1766c36ff38205dc63f1b329afd_cgraph" alt=""/></div>
+<map name="ditersol1_8c_a0361a1766c36ff38205dc63f1b329afd_cgraph" id="ditersol1_8c_a0361a1766c36ff38205dc63f1b329afd_cgraph">
+<area shape="rect" id="node2" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="120,525,184,552"/><area shape="rect" id="node3" href="dgstrs_8c.html#a6e3eace519372b7dfcd053e0d3614fc1" title="dgstrs" alt="" coords="300,284,359,311"/><area shape="rect" id="node19" href="dgsisx_8c.html#a895611a0135f2212f505986a6384f1b9" title="dgsisx" alt="" coords="122,943,182,969"/><area shape="rect" id="node4" href="dgstrs_8c.html#a1532445fd4c7e1e91d5bd11 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ditersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#ditersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="ditersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="ditersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="ditersol1_8c.html#a367b39a8f8095885ffb10c66c6652aff" title="dmatvec_mult" alt="" coords="144,107,248,133"/><area shape="rect" id="node3" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="520,56,603,83"/><area shape="rect" id="node4" href="ditersol1_8c.html#a0361a1766c36ff38205dc63f1b329afd" title="dpsolve" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ad42e5c3013507184841cdfee652a0c18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* GLOBAL_A</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af1beb2a8fb47df4eb505addfef02814c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_A_ORIG</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac5dce1561e620f6a6f6b6f17d82df4e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double * GLOBAL_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a869338b25a186a486edd0cf1850a7fbb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* GLOBAL_EQUED</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f5cf27b325ef2874c953290f74c9d0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_L</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19718c440adb41fbebcb4bafedbf932c"></a>
+<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>* GLOBAL_MEM_USAGE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a64b516645b16ef03c6fd0d692e6eb277"></a>
+<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>* GLOBAL_OPTIONS</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afbcb1904a71d92b04c1aef1cede6c4b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GLOBAL_PERM_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a42ee721355f1c852f770661834be93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int * GLOBAL_PERM_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8cb83de814c7fbf89011ba08bb602ce0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* GLOBAL_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a96a062252c26544370e8feae987c6d16"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* GLOBAL_STAT</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a000ad5c2198e4309802b4478ed08a98c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ditersol_8c.html b/SuperLU_5.2.0/DOC/html/ditersol_8c.html
new file mode 100644
index 0000000..2170795
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ditersol_8c.html
@@ -0,0 +1,371 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/ditersol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">ditersol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Example #1 showing how to use ILU to precondition GMRES.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ditersol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ditersol_8c__incl.png" border="0" usemap="#EXAMPLE_2ditersol_8c" alt=""/></div>
+<map name="EXAMPLE_2ditersol_8c" id="EXAMPLE_2ditersol_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0361a1766c36ff38205dc63f1b329afd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#a0361a1766c36ff38205dc63f1b329afd">dpsolve</a> (int n, double x[], double y[])</td></tr>
+<tr class="separator:a0361a1766c36ff38205dc63f1b329afd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a367b39a8f8095885ffb10c66c6652aff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#a367b39a8f8095885ffb10c66c6652aff">dmatvec_mult</a> (double alpha, double x[], double beta, double y[])</td></tr>
+<tr class="separator:a367b39a8f8095885ffb10c66c6652aff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a64b516645b16ef03c6fd0d692e6eb277"><td class="memItemLeft" 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#a64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+<tr class="separator:a64b516645b16ef03c6fd0d692e6eb277"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8cb83de814c7fbf89011ba08bb602ce0"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#a8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a></td></tr>
+<tr class="separator:a8cb83de814c7fbf89011ba08bb602ce0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5dce1561e620f6a6f6b6f17d82df4e8"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#ac5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a></td></tr>
+<tr class="separator:ac5dce1561e620f6a6f6b6f17d82df4e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+<tr class="separator:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a42ee721355f1c852f770661834be93"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="ditersol_8c.html#a5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+<tr class="separator:a5a42ee721355f1c852f770661834be93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad42e5c3013507184841cdfee652a0c18"><td class="memItemLeft" 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#ad42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+<tr class="separator:ad42e5c3013507184841cdfee652a0c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memItemLeft" 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#a0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+<tr class="separator:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a000ad5c2198e4309802b4478ed08a98c"><td class="memItemLeft" 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#a000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+<tr class="separator:a000ad5c2198e4309802b4478ed08a98c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96a062252c26544370e8feae987c6d16"><td class="memItemLeft" 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#a96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+<tr class="separator:a96a062252c26544370e8feae987c6d16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19718c440adb41fbebcb4bafedbf932c"><td class="memItemLeft" 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#a19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+<tr class="separator:a19718c440adb41fbebcb4bafedbf932c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.0) –
+Lawrence Berkeley National Laboratory
+November, 2010
+August, 2011</pre><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><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
+dynamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><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><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a367b39a8f8095885ffb10c66c6652aff"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ditersol_8c_a367b39a8f8095885ffb10c66c6652aff_cgraph.png" border="0" usemap="#ditersol_8c_a367b39a8f8095885ffb10c66c6652aff_cgraph" alt=""/></div>
+<map name="ditersol_8c_a367b39a8f8095885ffb10c66c6652aff_cgraph" id="ditersol_8c_a367b39a8f8095885ffb10c66c6652aff_cgraph">
+<area shape="rect" id="node2" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="288,5,371,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0361a1766c36ff38205dc63f1b329afd"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ditersol_8c_a0361a1766c36ff38205dc63f1b329afd_cgraph.png" border="0" usemap="#ditersol_8c_a0361a1766c36ff38205dc63f1b329afd_cgraph" alt=""/></div>
+<map name="ditersol_8c_a0361a1766c36ff38205dc63f1b329afd_cgraph" id="ditersol_8c_a0361a1766c36ff38205dc63f1b329afd_cgraph">
+<area shape="rect" id="node2" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="120,525,184,552"/><area shape="rect" id="node3" href="dgstrs_8c.html#a6e3eace519372b7dfcd053e0d3614fc1" title="dgstrs" alt="" coords="300,284,359,311"/><area shape="rect" id="node19" href="dgsisx_8c.html#a895611a0135f2212f505986a6384f1b9" title="dgsisx" alt="" coords="122,943,182,969"/><area shape="rect" id="node4" href="dgstrs_8c.html#a1532445fd4c7e1e91d5bd11 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ditersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#ditersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="ditersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="ditersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="ditersol_8c.html#a367b39a8f8095885ffb10c66c6652aff" title="dmatvec_mult" alt="" coords="144,5,248,32"/><area shape="rect" id="node3" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="520,56,603,83"/><area shape="rect" id="node4" href="ditersol_8c.html#a0361a1766c36ff38205dc63f1b329afd" title="dpsolve" alt="" coor [...]
+</div>
+</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ad42e5c3013507184841cdfee652a0c18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* GLOBAL_A</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac5dce1561e620f6a6f6b6f17d82df4e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double * GLOBAL_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f5cf27b325ef2874c953290f74c9d0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_L</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19718c440adb41fbebcb4bafedbf932c"></a>
+<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>* GLOBAL_MEM_USAGE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a64b516645b16ef03c6fd0d692e6eb277"></a>
+<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>* GLOBAL_OPTIONS</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afbcb1904a71d92b04c1aef1cede6c4b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GLOBAL_PERM_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a42ee721355f1c852f770661834be93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int * GLOBAL_PERM_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8cb83de814c7fbf89011ba08bb602ce0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* GLOBAL_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a96a062252c26544370e8feae987c6d16"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* GLOBAL_STAT</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a000ad5c2198e4309802b4478ed08a98c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dlacon_8c.html b/SuperLU_5.2.0/DOC/html/dlacon_8c.html
new file mode 100644
index 0000000..1a59317
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dlacon_8c.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dlacon.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dlacon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Estimates the 1-norm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__Cnames_8h_source.html">slu_Cnames.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dlacon.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlacon_8c__incl.png" border="0" usemap="#SRC_2dlacon_8c" alt=""/></div>
+<map name="SRC_2dlacon_8c" id="SRC_2dlacon_8c">
+<area shape="rect" id="node3" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="92,80,199,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a51b3babab7bbf03500dbc5ede2a682b3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlacon_8c.html#a51b3babab7bbf03500dbc5ede2a682b3">d_sign</a>(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */</td></tr>
+<tr class="separator:a51b3babab7bbf03500dbc5ede2a682b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adccc1e5692ca1dd160d0ca2a17e1b12c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlacon_8c.html#adccc1e5692ca1dd160d0ca2a17e1b12c">i_dnnt</a>(a) ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */</td></tr>
+<tr class="separator:adccc1e5692ca1dd160d0ca2a17e1b12c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4187621e84a9554552e3fa8098542801"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlacon_8c.html#a4187621e84a9554552e3fa8098542801">dlacon_</a> (int *n, double *v, double *x, int *isgn, double *est, int *kase)</td></tr>
+<tr class="separator:a4187621e84a9554552e3fa8098542801"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a51b3babab7bbf03500dbc5ede2a682b3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define d_sign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adccc1e5692ca1dd160d0ca2a17e1b12c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define i_dnnt</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a</td><td>)</td>
+ <td> ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a4187621e84a9554552e3fa8098542801"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> DLACON estimates the 1-norm of a square matrix A.
+ Reverse communication is used for evaluating matrix-vector products.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre> N (input) INT
+ The order of the matrix. N >= 1.</pre><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><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><pre> ISGN (workspace) INT array, dimension (N)</pre><pre> EST (output) DOUBLE PRECISION
+ An estimate (a lower bound) for norm(A).</pre><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><pre> Further Details
+ ======= =======</pre><pre> Contributed by Nick Higham, University of Manchester.
+ Originally named CONEST, dated March 16, 1988.</pre><pre> Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of
+ a real or complex matrix, with applications to condition estimation",
+</p>
+<h1>ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.
+</h1>
+</pre><pre>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlacon_8c_a4187621e84a9554552e3fa8098542801_cgraph.png" border="0" usemap="#dlacon_8c_a4187621e84a9554552e3fa8098542801_cgraph" alt=""/></div>
+<map name="dlacon_8c_a4187621e84a9554552e3fa8098542801_cgraph" id="dlacon_8c_a4187621e84a9554552e3fa8098542801_cgraph">
+<area shape="rect" id="node2" href="ilu__ddrop__row_8c.html#afdb24942915626f5de65c50cb31c267a" title="idamax_" alt="" coords="121,5,191,32"/><area shape="rect" id="node3" href="ilu__ddrop__row_8c.html#abe00831e789ca38cf884de56ddf70bd7" title="dasum_" alt="" coords="122,56,190,83"/><area shape="rect" id="node4" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="124,107,188,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dlangs_8c.html b/SuperLU_5.2.0/DOC/html/dlangs_8c.html
new file mode 100644
index 0000000..8985bb4
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dlangs_8c.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dlangs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dlangs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Returns the value of the one norm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dlangs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlangs_8c__incl.png" border="0" usemap="#SRC_2dlangs_8c" alt=""/></div>
+<map name="SRC_2dlangs_8c" id="SRC_2dlangs_8c">
+<area shape="rect" id="node3" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a75a53f4464b95c63adad9e1f63f44d1c"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dlangs_8c.html#a75a53f4464b95c63adad9e1f63f44d1c">dlangs</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a75a53f4464b95c63adad9e1f63f44d1c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from lapack routine DLANGE
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a75a53f4464b95c63adad9e1f63f44d1c"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre><h1>Description
+</h1>
+</pre><pre></pre><pre> DLANGE returns the value</pre><pre> DLANGE = ( max(<a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A(i,j))</a>), 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><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(<a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A(i,j))</a>) is not a matrix norm.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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.
+</p>
+<hr/>
+
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dlaqgs_8c.html b/SuperLU_5.2.0/DOC/html/dlaqgs_8c.html
new file mode 100644
index 0000000..0cd9657
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dlaqgs_8c.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dlaqgs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dlaqgs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Equlibrates a general sprase matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dlaqgs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlaqgs_8c__incl.png" border="0" usemap="#SRC_2dlaqgs_8c" alt=""/></div>
+<map name="SRC_2dlaqgs_8c" id="SRC_2dlaqgs_8c">
+<area shape="rect" id="node3" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0656018abfc9fa2821827415f5d5ea57"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dlaqgs_8c.html#a0656018abfc9fa2821827415f5d5ea57">THRESH</a> (0.1)</td></tr>
+<tr class="separator:a0656018abfc9fa2821827415f5d5ea57"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a07e1fa4926680eb02069087f0aa26fa1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dlaqgs_8c.html#a07e1fa4926680eb02069087f0aa26fa1">dlaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, double *r, double *c, double rowcnd, double colcnd, double amax, char *equed)</td></tr>
+<tr class="separator:a07e1fa4926680eb02069087f0aa26fa1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from LAPACK routine DLAQGE
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a0656018abfc9fa2821827415f5d5ea57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define THRESH (0.1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a07e1fa4926680eb02069087f0aa26fa1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> DLAQGS equilibrates a general sparse M by N matrix A using the row and
+ scaling factors in the vectors R and C.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (input) double*, dimension (A->nrow)
+ The row scale factors for A.</pre><pre> C (input) double*, dimension (A->ncol)
+ The column scale factors for A.</pre><pre> ROWCND (input) double
+ Ratio of the smallest R(i) to the largest R(i).</pre><pre> COLCND (input) double
+ Ratio of the smallest C(i) to the largest C(i).</pre><pre> AMAX (input) double
+ Absolute value of largest matrix entry.</pre><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><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlaqgs_8c_a07e1fa4926680eb02069087f0aa26fa1_cgraph.png" border="0" usemap="#dlaqgs_8c_a07e1fa4926680eb02069087f0aa26fa1_cgraph" alt=""/></div>
+<map name="dlaqgs_8c_a07e1fa4926680eb02069087f0aa26fa1_cgraph" id="dlaqgs_8c_a07e1fa4926680eb02069087f0aa26fa1_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="115,5,176,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dldperm_8c.html b/SuperLU_5.2.0/DOC/html/dldperm_8c.html
new file mode 100644
index 0000000..2b37443
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dldperm_8c.html
@@ -0,0 +1,324 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dldperm.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dldperm.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Finds a row permutation so that the matrix has large entries on the diagonal.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dldperm.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dldperm_8c__incl.png" border="0" usemap="#SRC_2dldperm_8c" alt=""/></div>
+<map name="SRC_2dldperm_8c" id="SRC_2dldperm_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1e6fb0c8dd36aef071ef165136ece781"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dldperm_8c.html#a1e6fb0c8dd36aef071ef165136ece781">mc64id_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *)</td></tr>
+<tr class="separator:a1e6fb0c8dd36aef071ef165136ece781"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bf33c16a135cdc671242aed1705e1cd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dldperm_8c.html#a1bf33c16a135cdc671242aed1705e1cd">mc64ad_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</ [...]
+<tr class="separator:a1bf33c16a135cdc671242aed1705e1cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5c6a8de5e809f2094735965027adf532"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dldperm_8c.html#a5c6a8de5e809f2094735965027adf532">dldperm</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> job, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> n, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623 [...]
+<tr class="separator:a5c6a8de5e809f2094735965027adf532"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5c6a8de5e809f2094735965027adf532"></a>
+<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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> DLDPERM finds a row permutation so that the matrix has large
+ entries on the diagonal.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre>n (input) int
+ The order of the matrix.</pre><pre>nnz (input) int
+ The number of nonzeros in the matrix.</pre><pre>adjncy (input) int*, of size nnz
+ The adjacency structure of the matrix, which contains the row
+ indices of the nonzeros.</pre><pre>colptr (input) int*, of size n+1
+ The pointers to the beginning of each column in ADJNCY.</pre><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><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><pre>u (output) double*, of size n
+ If job = 5, the natural logarithms of the row scaling factors.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dldperm_8c_a5c6a8de5e809f2094735965027adf532_cgraph.png" border="0" usemap="#dldperm_8c_a5c6a8de5e809f2094735965027adf532_cgraph" alt=""/></div>
+<map name="dldperm_8c_a5c6a8de5e809f2094735965027adf532_cgraph" id="dldperm_8c_a5c6a8de5e809f2094735965027adf532_cgraph">
+<area shape="rect" id="node2" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="137,5,212,32"/><area shape="rect" id="node3" href="slu__util_8h.html#ade363dcb4babb66fa0e5f51bd2e6e42c" title="slu_PrintInt10" alt="" coords="123,56,226,83"/><area shape="rect" id="node4" href="dldperm_8c.html#a1e6fb0c8dd36aef071ef165136ece781" title="mc64id_" alt="" coords="139,107,210,133"/><area shape="rect" id="node5" href="dldperm_8c.html#a1bf33c16a135cdc671242aed17 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a1bf33c16a135cdc671242aed1705e1cd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[] </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1e6fb0c8dd36aef071ef165136ece781"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dlinsol1_8c.html b/SuperLU_5.2.0/DOC/html/dlinsol1_8c.html
new file mode 100644
index 0000000..712f7b7
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dlinsol1_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/dlinsol1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dlinsol1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dlinsol1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsol1_8c__incl.png" border="0" usemap="#EXAMPLE_2dlinsol1_8c" alt=""/></div>
+<map name="EXAMPLE_2dlinsol1_8c" id="EXAMPLE_2dlinsol1_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsol1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#dlinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="dlinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="dlinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,157,263,184"/><area shape="rect" id="node3" href="dreadhb_8c.html#ac637616cf74789e6fdeb81913785b732" title="Auxiliary routines. " alt="" coords="162,208,230,235"/><area shape="rect" id="node6" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="616,360,715,387"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dlinsol_8c.html b/SuperLU_5.2.0/DOC/html/dlinsol_8c.html
new file mode 100644
index 0000000..1ff24bc
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dlinsol_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/dlinsol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dlinsol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dlinsol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsol_8c__incl.png" border="0" usemap="#EXAMPLE_2dlinsol_8c" alt=""/></div>
+<map name="EXAMPLE_2dlinsol_8c" id="EXAMPLE_2dlinsol_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsol_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#dlinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="dlinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="dlinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,157,263,184"/><area shape="rect" id="node3" href="dreadhb_8c.html#ac637616cf74789e6fdeb81913785b732" title="Auxiliary routines. " alt="" coords="162,208,230,235"/><area shape="rect" id="node6" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="616,360,715,387"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dlinsolx1_8c.html b/SuperLU_5.2.0/DOC/html/dlinsolx1_8c.html
new file mode 100644
index 0000000..60c3c07
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dlinsolx1_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/dlinsolx1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dlinsolx1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dlinsolx1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsolx1_8c__incl.png" border="0" usemap="#EXAMPLE_2dlinsolx1_8c" alt=""/></div>
+<map name="EXAMPLE_2dlinsolx1_8c" id="EXAMPLE_2dlinsolx1_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a693ba86aac49435e82cf3a57a4412744"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx1_8c.html#a693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d [...]
+<tr class="separator:a693ba86aac49435e82cf3a57a4412744"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#dlinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="dlinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="dlinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="dlinsolx1_8c.html#a693ba86aac49435e82cf3a57a4412744" title="parse_command_line" alt="" coords="123,5,269,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,56,263,83"/><area shape="rect" id="node4" href="dreadhb_8c.html#ac637616cf74789e6fdeb81913785b732" title="Auxiliary routines. " alt="" coords="162,335,230,361"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a693ba86aac49435e82cf3a57a4412744"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dlinsolx2_8c.html b/SuperLU_5.2.0/DOC/html/dlinsolx2_8c.html
new file mode 100644
index 0000000..4977adf
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dlinsolx2_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/dlinsolx2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dlinsolx2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dlinsolx2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsolx2_8c__incl.png" border="0" usemap="#EXAMPLE_2dlinsolx2_8c" alt=""/></div>
+<map name="EXAMPLE_2dlinsolx2_8c" id="EXAMPLE_2dlinsolx2_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx2_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a693ba86aac49435e82cf3a57a4412744"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx2_8c.html#a693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d [...]
+<tr class="separator:a693ba86aac49435e82cf3a57a4412744"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#dlinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="dlinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="dlinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="dlinsolx2_8c.html#a693ba86aac49435e82cf3a57a4412744" title="parse_command_line" alt="" coords="123,5,269,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,56,263,83"/><area shape="rect" id="node4" href="dreadhb_8c.html#ac637616cf74789e6fdeb81913785b732" title="Auxiliary routines. " alt="" coords="162,335,230,361"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a693ba86aac49435e82cf3a57a4412744"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dlinsolx_8c.html b/SuperLU_5.2.0/DOC/html/dlinsolx_8c.html
new file mode 100644
index 0000000..3e9f530
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dlinsolx_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/dlinsolx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dlinsolx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dlinsolx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsolx_8c__incl.png" border="0" usemap="#EXAMPLE_2dlinsolx_8c" alt=""/></div>
+<map name="EXAMPLE_2dlinsolx_8c" id="EXAMPLE_2dlinsolx_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a693ba86aac49435e82cf3a57a4412744"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dlinsolx_8c.html#a693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d6 [...]
+<tr class="separator:a693ba86aac49435e82cf3a57a4412744"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dlinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#dlinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="dlinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="dlinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="dlinsolx_8c.html#a693ba86aac49435e82cf3a57a4412744" title="parse_command_line" alt="" coords="123,5,269,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,56,263,83"/><area shape="rect" id="node4" href="dreadhb_8c.html#ac637616cf74789e6fdeb81913785b732" title="Auxiliary routines. " alt="" coords="162,335,230,361"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a693ba86aac49435e82cf3a57a4412744"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dmemory_8c.html b/SuperLU_5.2.0/DOC/html/dmemory_8c.html
new file mode 100644
index 0000000..16f0e49
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dmemory_8c.html
@@ -0,0 +1,1046 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dmemory.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dmemory.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Memory details.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dmemory.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c__incl.png" border="0" usemap="#SRC_2dmemory_8c" alt=""/></div>
+<map name="SRC_2dmemory_8c" id="SRC_2dmemory_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a1ef4d4db4d5e1fe0719416163e0e51ae"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a1ef4d4db4d5e1fe0719416163e0e51ae">StackFull</a>(x) ( x + Glu->stack.used >= Glu->stack.size )</td></tr>
+<tr class="separator:a1ef4d4db4d5e1fe0719416163e0e51ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac11b1c3847a3d397e9675de40782134d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#ac11b1c3847a3d397e9675de40782134d">NotDoubleAlign</a>(addr) ( (intptr_t)addr & 7 )</td></tr>
+<tr class="separator:ac11b1c3847a3d397e9675de40782134d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8204d321846eb4b23d563eac7e5bfa7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#ac8204d321846eb4b23d563eac7e5bfa7">DoubleAlign</a>(addr) ( ((intptr_t)addr + 7) & ~7L )</td></tr>
+<tr class="separator:ac8204d321846eb4b23d563eac7e5bfa7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a70ca807c578a0c495f7ce5edb0215e2b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a70ca807c578a0c495f7ce5edb0215e2b">TempSpace</a>(m, w)</td></tr>
+<tr class="separator:a70ca807c578a0c495f7ce5edb0215e2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b2a35bfd2e6c9d03e2a6ccdba9fa847"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a7b2a35bfd2e6c9d03e2a6ccdba9fa847">Reduce</a>(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */</td></tr>
+<tr class="separator:a7b2a35bfd2e6c9d03e2a6ccdba9fa847"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:afe3104df9ace895f5332843534ae99b4"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#afe3104df9ace895f5332843534ae99b4">dexpand</a> (int *prev_len,<a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a> type,int len_to_copy,int keep_prev,<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:afe3104df9ace895f5332843534ae99b4"><td class="mdescLeft"> </td><td class="mdescRight">Expand the existing storage to accommodate more fill-ins. <a href="#afe3104df9ace895f5332843534ae99b4">More...</a><br/></td></tr>
+<tr class="separator:afe3104df9ace895f5332843534ae99b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ae701a41439ca8af10604920e2f72ba"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a0ae701a41439ca8af10604920e2f72ba">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 class="memdesc:a0ae701a41439ca8af10604920e2f72ba"><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="#a0ae701a41439ca8af10604920e2f72ba">More...</a><br/></td></tr>
+<tr class="separator:a0ae701a41439ca8af10604920e2f72ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1540850a622674131bd1ea6a4f91cd56"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a1540850a622674131bd1ea6a4f91cd56">copy_mem_double</a> (int, void *, void *)</td></tr>
+<tr class="separator:a1540850a622674131bd1ea6a4f91cd56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aadb43e6ea6725f06d04704a1db3dc0be"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#aadb43e6ea6725f06d04704a1db3dc0be">dStackCompress</a> (<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:aadb43e6ea6725f06d04704a1db3dc0be"><td class="mdescLeft"> </td><td class="mdescRight">Compress the work[] array to remove fragmentation. <a href="#aadb43e6ea6725f06d04704a1db3dc0be">More...</a><br/></td></tr>
+<tr class="separator:aadb43e6ea6725f06d04704a1db3dc0be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acb29e96116d7b170d6f021a87a4763e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#acb29e96116d7b170d6f021a87a4763e6">dSetupSpace</a> (void *work, int lwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:acb29e96116d7b170d6f021a87a4763e6"><td class="mdescLeft"> </td><td class="mdescRight">Setup the memory model to be used for factorization. <a href="#acb29e96116d7b170d6f021a87a4763e6">More...</a><br/></td></tr>
+<tr class="separator:acb29e96116d7b170d6f021a87a4763e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00f228f45bab7594bea821b70eedbf51"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a00f228f45bab7594bea821b70eedbf51">duser_malloc</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:a00f228f45bab7594bea821b70eedbf51"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8412c8f776ad7cfe599a5b601310fb8e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a8412c8f776ad7cfe599a5b601310fb8e">duser_free</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:a8412c8f776ad7cfe599a5b601310fb8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab59eea34474da95fb3dc125400a1287e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#ab59eea34474da95fb3dc125400a1287e">copy_mem_int</a> (int, void *, void *)</td></tr>
+<tr class="separator:ab59eea34474da95fb3dc125400a1287e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c226087c09a94ff40b92b14fa46fc53"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a4c226087c09a94ff40b92b14fa46fc53">user_bcopy</a> (char *, char *, int)</td></tr>
+<tr class="separator:a4c226087c09a94ff40b92b14fa46fc53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae94c561110fcc75c31cda89105fd0a6c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#ae94c561110fcc75c31cda89105fd0a6c">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 class="separator:ae94c561110fcc75c31cda89105fd0a6c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61aaccf587a78d15d79c4cc79f80e8b0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a61aaccf587a78d15d79c4cc79f80e8b0">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 class="separator:a61aaccf587a78d15d79c4cc79f80e8b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2ca2ac5e9a763fd3f07487343e4522e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#ae2ca2ac5e9a763fd3f07487343e4522e">dLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">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> * [...]
+<tr class="memdesc:ae2ca2ac5e9a763fd3f07487343e4522e"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for the data structures common to all factor routines. <a href="#ae2ca2ac5e9a763fd3f07487343e4522e">More...</a><br/></td></tr>
+<tr class="separator:ae2ca2ac5e9a763fd3f07487343e4522e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa5359da217b433b43bf6c8e2d29aa45"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#aaa5359da217b433b43bf6c8e2d29aa45">dSetRWork</a> (int m, int panel_size, double *dworkptr, double **dense, double **tempv)</td></tr>
+<tr class="memdesc:aaa5359da217b433b43bf6c8e2d29aa45"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays. <a href="#aaa5359da217b433b43bf6c8e2d29aa45">More...</a><br/></td></tr>
+<tr class="separator:aaa5359da217b433b43bf6c8e2d29aa45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa7d9129a2b0dc259ccccc8d6d2218cf8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#aa7d9129a2b0dc259ccccc8d6d2218cf8">dLUWorkFree</a> (int *iwork, double *dwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:aa7d9129a2b0dc259ccccc8d6d2218cf8"><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines. <a href="#aa7d9129a2b0dc259ccccc8d6d2218cf8">More...</a><br/></td></tr>
+<tr class="separator:aa7d9129a2b0dc259ccccc8d6d2218cf8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9aff5dfe301496ef7c9234789975c043"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043">dLUMemXpand</a> (int jcol, int next, <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a> mem_type, int *maxlen, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a9aff5dfe301496ef7c9234789975c043"><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization. <a href="#a9aff5dfe301496ef7c9234789975c043">More...</a><br/></td></tr>
+<tr class="separator:a9aff5dfe301496ef7c9234789975c043"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeed250713fbfb3fac567d7a503774ccc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#aeed250713fbfb3fac567d7a503774ccc">dallocateA</a> (int n, int nnz, double **a, int **asub, int **xa)</td></tr>
+<tr class="memdesc:aeed250713fbfb3fac567d7a503774ccc"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A. <a href="#aeed250713fbfb3fac567d7a503774ccc">More...</a><br/></td></tr>
+<tr class="separator:aeed250713fbfb3fac567d7a503774ccc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f2b9305cb611c37e7f627da902451a8"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8">doubleMalloc</a> (int n)</td></tr>
+<tr class="separator:a8f2b9305cb611c37e7f627da902451a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8b6d99155644578a5e5542c32040cfe"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#ac8b6d99155644578a5e5542c32040cfe">doubleCalloc</a> (int n)</td></tr>
+<tr class="separator:ac8b6d99155644578a5e5542c32040cfe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5c9b1e24d07635068c014999d44672aa"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dmemory_8c.html#a5c9b1e24d07635068c014999d44672aa">dmemory_usage</a> (const int nzlmax, const int nzumax, const int nzlumax, const int n)</td></tr>
+<tr class="separator:a5c9b1e24d07635068c014999d44672aa"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ac8204d321846eb4b23d563eac7e5bfa7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DoubleAlign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> ( ((intptr_t)addr + 7) & ~7L )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac11b1c3847a3d397e9675de40782134d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NotDoubleAlign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> ( (intptr_t)addr & 7 )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7b2a35bfd2e6c9d03e2a6ccdba9fa847"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define Reduce</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">alpha</td><td>)</td>
+ <td> ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1ef4d4db4d5e1fe0719416163e0e51ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define StackFull</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x</td><td>)</td>
+ <td> ( x + Glu->stack.used >= Glu->stack.size )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a70ca807c578a0c495f7ce5edb0215e2b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define TempSpace</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">m, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">w </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">( (2*w + 4 + <a class="code" href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a>) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) + \</div>
+<div class="line"> (w + 1) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) )</div>
+<div class="ttc" id="slu__util_8h_html_a9b7b2a5116ee487722b0967317ab6360"><div class="ttname"><a href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a></div><div class="ttdeci">#define NO_MARKER</div><div class="ttdef"><b>Definition:</b> slu_util.h:41</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1540850a622674131bd1ea6a4f91cd56"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab59eea34474da95fb3dc125400a1287e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aeed250713fbfb3fac567d7a503774ccc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c_aeed250713fbfb3fac567d7a503774ccc_cgraph.png" border="0" usemap="#dmemory_8c_aeed250713fbfb3fac567d7a503774ccc_cgraph" alt=""/></div>
+<map name="dmemory_8c_aeed250713fbfb3fac567d7a503774ccc_cgraph" id="dmemory_8c_aeed250713fbfb3fac567d7a503774ccc_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="136,5,235,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="148,56,223,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afe3104df9ace895f5332843534ae99b4"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c_afe3104df9ace895f5332843534ae99b4_cgraph.png" border="0" usemap="#dmemory_8c_afe3104df9ace895f5332843534ae99b4_cgraph" alt=""/></div>
+<map name="dmemory_8c_afe3104df9ace895f5332843534ae99b4_cgraph" id="dmemory_8c_afe3104df9ace895f5332843534ae99b4_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="137,5,244,32"/><area shape="rect" id="node3" href="dmemory_8c.html#a1540850a622674131bd1ea6a4f91cd56" title="copy_mem_double" alt="" coords="125,56,256,83"/><area shape="rect" id="node4" href="dmemory_8c.html#a00f228f45bab7594bea821b70eedbf51" title="duser_malloc" alt="" coords="141,107,240,133"/><area shape="rect" id="node5" href="dmemory_8c.html#a4c226087c09a94ff40 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ae2ca2ac5e9a763fd3f07487343e4522e"></a>
+<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#ac785c8235480e5cfef9848d89c047c0a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c_ae2ca2ac5e9a763fd3f07487343e4522e_cgraph.png" border="0" usemap="#dmemory_8c_ae2ca2ac5e9a763fd3f07487343e4522e_cgraph" alt=""/></div>
+<map name="dmemory_8c_ae2ca2ac5e9a763fd3f07487343e4522e_cgraph" id="dmemory_8c_ae2ca2ac5e9a763fd3f07487343e4522e_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#acb29e96116d7b170d6f021a87a4763e6" title="Setup the memory model to be used for factorization. " alt="" coords="157,5,257,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="169,56,244,83"/><area shape="rect" id="node4" href="dmemory_8c.html#a00f228f45bab7594bea821b70eedbf51" title="duser_malloc" alt="" coords="331,183,429,209"/><area shape="rect" id="node5" href="d [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a9aff5dfe301496ef7c9234789975c043"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+Return value: 0 - successful return
+ > 0 - number of bytes allocated when run out of space
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c_a9aff5dfe301496ef7c9234789975c043_cgraph.png" border="0" usemap="#dmemory_8c_a9aff5dfe301496ef7c9234789975c043_cgraph" alt=""/></div>
+<map name="dmemory_8c_a9aff5dfe301496ef7c9234789975c043_cgraph" id="dmemory_8c_a9aff5dfe301496ef7c9234789975c043_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#afe3104df9ace895f5332843534ae99b4" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="190,81,261,108"/><area shape="rect" id="node7" href="dmemory_8c.html#a5c9b1e24d07635068c014999d44672aa" title="dmemory_usage" alt="" coords="166,132,285,159"/><area shape="rect" id="node3" href="dmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="345,5,452,32"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa7d9129a2b0dc259ccccc8d6d2218cf8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0ae701a41439ca8af10604920e2f72ba"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c_a0ae701a41439ca8af10604920e2f72ba_cgraph.png" border="0" usemap="#dmemory_8c_a0ae701a41439ca8af10604920e2f72ba_cgraph" alt=""/></div>
+<map name="dmemory_8c_a0ae701a41439ca8af10604920e2f72ba_cgraph" id="dmemory_8c_a0ae701a41439ca8af10604920e2f72ba_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="165,5,232,32"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="162,56,235,83"/><area shape="rect" id="node5" href="dmemory_8c.html#a00f228f45bab7594bea821b70eedbf51" title="duser_malloc" alt="" coords="149,107,248,133"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55d [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a5c9b1e24d07635068c014999d44672aa"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac8b6d99155644578a5e5542c32040cfe"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8f2b9305cb611c37e7f627da902451a8"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae94c561110fcc75c31cda89105fd0a6c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c_ae94c561110fcc75c31cda89105fd0a6c_cgraph.png" border="0" usemap="#dmemory_8c_ae94c561110fcc75c31cda89105fd0a6c_cgraph" alt=""/></div>
+<map name="dmemory_8c_ae94c561110fcc75c31cda89105fd0a6c_cgraph" id="dmemory_8c_ae94c561110fcc75c31cda89105fd0a6c_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="269,5,352,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aaa5359da217b433b43bf6c8e2d29aa45"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c_aaa5359da217b433b43bf6c8e2d29aa45_cgraph.png" border="0" usemap="#dmemory_8c_aaa5359da217b433b43bf6c8e2d29aa45_cgraph" alt=""/></div>
+<map name="dmemory_8c_aaa5359da217b433b43bf6c8e2d29aa45_cgraph" id="dmemory_8c_aaa5359da217b433b43bf6c8e2d29aa45_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="144,5,211,32"/><area shape="rect" id="node4" href="dutil_8c.html#a5594dfec40e37514e00e85a90e8973b5" title="Fills a double precision array with a given value. " alt="" coords="156,56,199,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="259,5,341,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acb29e96116d7b170d6f021a87a4763e6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>lwork = 0: use system malloc; lwork > 0: use user-supplied work[] space. </p>
+
+</div>
+</div>
+<a class="anchor" id="aadb43e6ea6725f06d04704a1db3dc0be"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c_aadb43e6ea6725f06d04704a1db3dc0be_cgraph.png" border="0" usemap="#dmemory_8c_aadb43e6ea6725f06d04704a1db3dc0be_cgraph" alt=""/></div>
+<map name="dmemory_8c_aadb43e6ea6725f06d04704a1db3dc0be_cgraph" id="dmemory_8c_aadb43e6ea6725f06d04704a1db3dc0be_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a1540850a622674131bd1ea6a4f91cd56" title="copy_mem_double" alt="" coords="176,5,307,32"/><area shape="rect" id="node3" href="dmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="188,56,295,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a8412c8f776ad7cfe599a5b601310fb8e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a00f228f45bab7594bea821b70eedbf51"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a61aaccf587a78d15d79c4cc79f80e8b0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dmemory_8c_a61aaccf587a78d15d79c4cc79f80e8b0_cgraph.png" border="0" usemap="#dmemory_8c_a61aaccf587a78d15d79c4cc79f80e8b0_cgraph" alt=""/></div>
+<map name="dmemory_8c_a61aaccf587a78d15d79c4cc79f80e8b0_cgraph" id="dmemory_8c_a61aaccf587a78d15d79c4cc79f80e8b0_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="176,5,243,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="291,5,373,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c226087c09a94ff40b92b14fa46fc53"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dmyblas2_8c.html b/SuperLU_5.2.0/DOC/html/dmyblas2_8c.html
new file mode 100644
index 0000000..14564b1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dmyblas2_8c.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dmyblas2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dmyblas2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Level 2 Blas operations.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a986e55bb6eac4e68b78c98b8276557db"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmyblas2_8c.html#a986e55bb6eac4e68b78c98b8276557db">dlsolve</a> (int ldm, int ncol, double *M, double *rhs)</td></tr>
+<tr class="memdesc:a986e55bb6eac4e68b78c98b8276557db"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a986e55bb6eac4e68b78c98b8276557db">More...</a><br/></td></tr>
+<tr class="separator:a986e55bb6eac4e68b78c98b8276557db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47847fb71c3589e4d725db85052896fd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmyblas2_8c.html#a47847fb71c3589e4d725db85052896fd">dusolve</a> (int ldm, int ncol, double *M, double *rhs)</td></tr>
+<tr class="memdesc:a47847fb71c3589e4d725db85052896fd"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a47847fb71c3589e4d725db85052896fd">More...</a><br/></td></tr>
+<tr class="separator:a47847fb71c3589e4d725db85052896fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a703303b4c9cdd6074c55e83970db83b6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dmyblas2_8c.html#a703303b4c9cdd6074c55e83970db83b6">dmatvec</a> (int ldm, int nrow, int ncol, double *M, double *vec, double *Mxvec)</td></tr>
+<tr class="memdesc:a703303b4c9cdd6074c55e83970db83b6"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a703303b4c9cdd6074c55e83970db83b6">More...</a><br/></td></tr>
+<tr class="separator:a703303b4c9cdd6074c55e83970db83b6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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> Purpose: Level 2 BLAS operations: solves and matvec, written in C. Note: This is only used when the system lacks an efficient BLAS library. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a986e55bb6eac4e68b78c98b8276557db"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a703303b4c9cdd6074c55e83970db83b6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a47847fb71c3589e4d725db85052896fd"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/doxygen.css b/SuperLU_5.2.0/DOC/html/doxygen.css
new file mode 100644
index 0000000..f0f36f8
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/doxygen.css
@@ -0,0 +1,1366 @@
+/* The standard CSS for doxygen 1.8.6 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+div.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+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
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.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%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: bold;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-topleft: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view when not used as main index */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+ padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.note
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #505050;
+}
+
+dl.todo
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 20px 10px 10px;
+ width: 200px;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ white-space: nowrap;
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+ at media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
diff --git a/SuperLU_5.2.0/DOC/html/doxygen.png b/SuperLU_5.2.0/DOC/html/doxygen.png
new file mode 100644
index 0000000..3ff17d8
Binary files /dev/null and b/SuperLU_5.2.0/DOC/html/doxygen.png differ
diff --git a/SuperLU_5.2.0/DOC/html/dpanel__bmod_8c.html b/SuperLU_5.2.0/DOC/html/dpanel__bmod_8c.html
new file mode 100644
index 0000000..f52afc4
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dpanel__bmod_8c.html
@@ -0,0 +1,302 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dpanel_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dpanel_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numeric block updates.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dpanel_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dpanel__bmod_8c__incl.png" border="0" usemap="#SRC_2dpanel__bmod_8c" alt=""/></div>
+<map name="SRC_2dpanel__bmod_8c" id="SRC_2dpanel__bmod_8c">
+<area shape="rect" id="node4" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="310,80,399,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="392,155,499,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="523,155,624,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a56d27043eac0282b0d0e4106acedb083"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__bmod_8c.html#a56d27043eac0282b0d0e4106acedb083">dlsolve</a> (int, int, double *, double *)</td></tr>
+<tr class="memdesc:a56d27043eac0282b0d0e4106acedb083"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a56d27043eac0282b0d0e4106acedb083">More...</a><br/></td></tr>
+<tr class="separator:a56d27043eac0282b0d0e4106acedb083"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65523602382b3d96c9852545ae24815d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__bmod_8c.html#a65523602382b3d96c9852545ae24815d">dmatvec</a> (int, int, int, double *, double *, double *)</td></tr>
+<tr class="memdesc:a65523602382b3d96c9852545ae24815d"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a65523602382b3d96c9852545ae24815d">More...</a><br/></td></tr>
+<tr class="separator:a65523602382b3d96c9852545ae24815d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3ffa3b0456b4e2d587556bd0f717315d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__bmod_8c.html#a3ffa3b0456b4e2d587556bd0f717315d">dcheck_tempv</a> ()</td></tr>
+<tr class="separator:a3ffa3b0456b4e2d587556bd0f717315d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a192df249a9fc13ad49bf3f2cd79aba65"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__bmod_8c.html#a192df249a9fc13ad49bf3f2cd79aba65">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_ [...]
+<tr class="separator:a192df249a9fc13ad49bf3f2cd79aba65"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a3ffa3b0456b4e2d587556bd0f717315d"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a56d27043eac0282b0d0e4106acedb083"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a65523602382b3d96c9852545ae24815d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a192df249a9fc13ad49bf3f2cd79aba65"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre> Before entering this routine, the original nonzeros in the panel
+ were already copied into the spa[m,w].</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dpanel__bmod_8c_a192df249a9fc13ad49bf3f2cd79aba65_cgraph.png" border="0" usemap="#dpanel__bmod_8c_a192df249a9fc13ad49bf3f2cd79aba65_cgraph" alt=""/></div>
+<map name="dpanel__bmod_8c_a192df249a9fc13ad49bf3f2cd79aba65_cgraph" id="dpanel__bmod_8c_a192df249a9fc13ad49bf3f2cd79aba65_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node4" href="slu__ddefs_8h.html#a8bf1e89ca04a7d8384577eb9842e9ffa" title="dtrsv_" alt="" coords="159,56,217,83"/><area shape="rect" id="node5" href="dpanel__bmod_8c.html#a56d27043eac0282b0d0e4106acedb083" title="Solves a dense UNIT lower triangular system. " alt="" coords="157,107,219,133"/><area shape="rect" id="node6" href="slu__d [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/dpanel__dfs_8c.html
new file mode 100644
index 0000000..98cab85
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dpanel__dfs_8c.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dpanel_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dpanel_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Peforms a symbolic factorization on a panel of symbols.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dpanel_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dpanel__dfs_8c__incl.png" border="0" usemap="#SRC_2dpanel__dfs_8c" alt=""/></div>
+<map name="SRC_2dpanel__dfs_8c" id="SRC_2dpanel__dfs_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2a809488b87d2c1a9b2a574b726e8517"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpanel__dfs_8c.html#a2a809488b87d2c1a9b2a574b726e8517">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, double *dense, int *panel_l [...]
+<tr class="separator:a2a809488b87d2c1a9b2a574b726e8517"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2a809488b87d2c1a9b2a574b726e8517"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dpivotL_8c.html b/SuperLU_5.2.0/DOC/html/dpivotL_8c.html
new file mode 100644
index 0000000..3a36894
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dpivotL_8c.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dpivotL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dpivotL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numerical pivoting.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dpivotL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dpivotL_8c__incl.png" border="0" usemap="#SRC_2dpivotL_8c" alt=""/></div>
+<map name="SRC_2dpivotL_8c" id="SRC_2dpivotL_8c">
+<area shape="rect" id="node4" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="369,80,458,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="119,155,226,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="250,155,351,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac9bc2a5673ddfce2452bf4a88b97a266"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dpivotL_8c.html#ac9bc2a5673ddfce2452bf4a88b97a266">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>
+<tr class="separator:ac9bc2a5673ddfce2452bf4a88b97a266"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac9bc2a5673ddfce2452bf4a88b97a266"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dpivotgrowth_8c.html b/SuperLU_5.2.0/DOC/html/dpivotgrowth_8c.html
new file mode 100644
index 0000000..b605e69
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dpivotgrowth_8c.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dpivotgrowth.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dpivotgrowth.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes the reciprocal pivot growth factor.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dpivotgrowth.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dpivotgrowth_8c__incl.png" border="0" usemap="#SRC_2dpivotgrowth_8c" alt=""/></div>
+<map name="SRC_2dpivotgrowth_8c" id="SRC_2dpivotgrowth_8c">
+<area shape="rect" id="node3" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a770618182a3841e8d10a26a4eb97418a"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dpivotgrowth_8c.html#a770618182a3841e8d10a26a4eb97418a">dPivotGrowth</a> (int ncols, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, [...]
+<tr class="separator:a770618182a3841e8d10a26a4eb97418a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a770618182a3841e8d10a26a4eb97418a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>Compute the reciprocal pivot growth factor of the leading ncols columns
+of the matrix, using the formula:
+ min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>ncols (input) int
+ The number of columns of matrices A, L and U.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dpivotgrowth_8c_a770618182a3841e8d10a26a4eb97418a_cgraph.png" border="0" usemap="#dpivotgrowth_8c_a770618182a3841e8d10a26a4eb97418a_cgraph" alt=""/></div>
+<map name="dpivotgrowth_8c_a770618182a3841e8d10a26a4eb97418a_cgraph" id="dpivotgrowth_8c_a770618182a3841e8d10a26a4eb97418a_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="155,5,216,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dpruneL_8c.html b/SuperLU_5.2.0/DOC/html/dpruneL_8c.html
new file mode 100644
index 0000000..10a895f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dpruneL_8c.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dpruneL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dpruneL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Prunes the L-structure.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dpruneL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dpruneL_8c__incl.png" border="0" usemap="#SRC_2dpruneL_8c" alt=""/></div>
+<map name="SRC_2dpruneL_8c" id="SRC_2dpruneL_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a525e73335e6aeaa1e851a52800bf3965"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dpruneL_8c.html#a525e73335e6aeaa1e851a52800bf3965">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>
+<tr class="separator:a525e73335e6aeaa1e851a52800bf3965"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+ – SuperLU routine (version 2.0) –
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><pre> Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a525e73335e6aeaa1e851a52800bf3965"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Prunes the L-structure of supernodes whose L-structure
+ contains the current pivot row "pivrow"
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dreadhb_8c.html b/SuperLU_5.2.0/DOC/html/dreadhb_8c.html
new file mode 100644
index 0000000..f468886
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dreadhb_8c.html
@@ -0,0 +1,446 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dreadhb.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dreadhb.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in Harwell-Boeing format.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dreadhb.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dreadhb_8c__incl.png" border="0" usemap="#SRC_2dreadhb_8c" alt=""/></div>
+<map name="SRC_2dreadhb_8c" id="SRC_2dreadhb_8c">
+<area shape="rect" id="node4" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="310,80,399,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="392,155,499,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="523,155,624,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab87732418a8ca2e99d65165ea7f9a2c5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#ab87732418a8ca2e99d65165ea7f9a2c5">dDumpLine</a> (FILE *fp)</td></tr>
+<tr class="memdesc:ab87732418a8ca2e99d65165ea7f9a2c5"><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line. <a href="#ab87732418a8ca2e99d65165ea7f9a2c5">More...</a><br/></td></tr>
+<tr class="separator:ab87732418a8ca2e99d65165ea7f9a2c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a84a11fcb3558dba9f846610da6fbec2c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#a84a11fcb3558dba9f846610da6fbec2c">dParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a84a11fcb3558dba9f846610da6fbec2c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a341d1f00e157073d681d37e87c417e69"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#a341d1f00e157073d681d37e87c417e69">dParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a341d1f00e157073d681d37e87c417e69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbec2a501b92e7e7bb13af2e21520522"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#afbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+<tr class="separator:afbec2a501b92e7e7bb13af2e21520522"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acca1e3b19661f732344b530c8cbf25c3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#acca1e3b19661f732344b530c8cbf25c3">dReadValues</a> (FILE *fp, int n, double *destination, int perline, int persize)</td></tr>
+<tr class="separator:acca1e3b19661f732344b530c8cbf25c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a66db478a2114856c35c3153ca1d4268e"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#a66db478a2114856c35c3153ca1d4268e">FormFullA</a> (int n, int *nonz, double **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:a66db478a2114856c35c3153ca1d4268e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac637616cf74789e6fdeb81913785b732"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadhb_8c.html#ac637616cf74789e6fdeb81913785b732">dreadhb</a> (FILE *fp, int *nrow, int *ncol, int *nonz, double **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="memdesc:ac637616cf74789e6fdeb81913785b732"><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines. <a href="#ac637616cf74789e6fdeb81913785b732">More...</a><br/></td></tr>
+<tr class="separator:ac637616cf74789e6fdeb81913785b732"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre><h1>Purpose
+</h1>
+</pre><pre></pre><pre>Read a DOUBLE PRECISION matrix stored in Harwell-Boeing format
+as described below.</pre><pre>Line 1 (A72,A8)
+ Col. 1 - 72 Title (TITLE)
+ Col. 73 - 80 Key (KEY)</pre><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><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><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><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><pre>First Character:
+ R Real matrix
+ C Complex matrix
+ P Pattern only (no numerical values supplied)</pre><pre>Second Character:
+ S Symmetric
+ U Unsymmetric
+ H Hermitian
+ Z Skew symmetric
+ R Rectangular</pre><pre>Third Character:
+ A Assembled
+ E Elemental matrices (unassembled)</pre><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab87732418a8ca2e99d65165ea7f9a2c5"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a341d1f00e157073d681d37e87c417e69"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a84a11fcb3558dba9f846610da6fbec2c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac637616cf74789e6fdeb81913785b732"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dreadhb </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>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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dreadhb_8c_ac637616cf74789e6fdeb81913785b732_cgraph.png" border="0" usemap="#dreadhb_8c_ac637616cf74789e6fdeb81913785b732_cgraph" alt=""/></div>
+<map name="dreadhb_8c_ac637616cf74789e6fdeb81913785b732_cgraph" id="dreadhb_8c_ac637616cf74789e6fdeb81913785b732_cgraph">
+<area shape="rect" id="node2" href="dreadhb_8c.html#ab87732418a8ca2e99d65165ea7f9a2c5" title="Eat up the rest of the current line. " alt="" coords="145,5,233,32"/><area shape="rect" id="node3" href="dmemory_8c.html#aeed250713fbfb3fac567d7a503774ccc" title="Allocate storage for original matrix A. " alt="" coords="148,56,231,83"/><area shape="rect" id="node6" href="dreadhb_8c.html#a84a11fcb3558dba9f846610da6fbec2c" title="dParseIntFormat" alt="" coords="130,107,249,133"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acca1e3b19661f732344b530c8cbf25c3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a66db478a2114856c35c3153ca1d4268e"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void FormFullA </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<pre>
+On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+matrix. On exit, it represents the full matrix with lower and upper parts.
+</pre>
+</div>
+</div>
+<a class="anchor" id="afbec2a501b92e7e7bb13af2e21520522"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dreadrb_8c.html b/SuperLU_5.2.0/DOC/html/dreadrb_8c.html
new file mode 100644
index 0000000..0f34e0c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dreadrb_8c.html
@@ -0,0 +1,436 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dreadrb.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dreadrb.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in Rutherford-Boeing format.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dreadrb.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dreadrb_8c__incl.png" border="0" usemap="#SRC_2dreadrb_8c" alt=""/></div>
+<map name="SRC_2dreadrb_8c" id="SRC_2dreadrb_8c">
+<area shape="rect" id="node4" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="310,80,399,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="392,155,499,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="523,155,624,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af815bcc4cd6c6b297588886829ce6cb2"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#af815bcc4cd6c6b297588886829ce6cb2">dDumpLine</a> (FILE *fp)</td></tr>
+<tr class="memdesc:af815bcc4cd6c6b297588886829ce6cb2"><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line. <a href="#af815bcc4cd6c6b297588886829ce6cb2">More...</a><br/></td></tr>
+<tr class="separator:af815bcc4cd6c6b297588886829ce6cb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae766b0ec3051c146313ff37802decbb7"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#ae766b0ec3051c146313ff37802decbb7">dParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:ae766b0ec3051c146313ff37802decbb7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a940db08f01ba40731b65b3bc88c52ae1"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#a940db08f01ba40731b65b3bc88c52ae1">dParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a940db08f01ba40731b65b3bc88c52ae1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbec2a501b92e7e7bb13af2e21520522"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#afbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+<tr class="separator:afbec2a501b92e7e7bb13af2e21520522"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3ebe1f51db0ee2e5abd6a2248185585"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#ab3ebe1f51db0ee2e5abd6a2248185585">dReadValues</a> (FILE *fp, int n, double *destination, int perline, int persize)</td></tr>
+<tr class="separator:ab3ebe1f51db0ee2e5abd6a2248185585"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a66db478a2114856c35c3153ca1d4268e"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#a66db478a2114856c35c3153ca1d4268e">FormFullA</a> (int n, int *nonz, double **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:a66db478a2114856c35c3153ca1d4268e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a675b0881eef06ac2d7e09e1c3e1c0403"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadrb_8c.html#a675b0881eef06ac2d7e09e1c3e1c0403">dreadrb</a> (int *nrow, int *ncol, int *nonz, double **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:a675b0881eef06ac2d7e09e1c3e1c0403"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 4.0) --
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre><h1>Purpose </h1>
+<p>Read a DOUBLE PRECISION matrix stored in Rutherford-Boeing format as described below.</p>
+<p>Line 1 (A72, A8) Col. 1 - 72 Title (TITLE) Col. 73 - 80 Matrix name / identifier (MTRXID)</p>
+<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>
+<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 ent [...]
+<p>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>
+<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>
+<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>
+<p>Second Character: S Symmetric U Unsymmetric H Hermitian Z Skew symmetric R Rectangular</p>
+<p>Third Character: A Compressed column form E Elemental form</p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af815bcc4cd6c6b297588886829ce6cb2"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a940db08f01ba40731b65b3bc88c52ae1"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae766b0ec3051c146313ff37802decbb7"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a675b0881eef06ac2d7e09e1c3e1c0403"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dreadrb_8c_a675b0881eef06ac2d7e09e1c3e1c0403_cgraph.png" border="0" usemap="#dreadrb_8c_a675b0881eef06ac2d7e09e1c3e1c0403_cgraph" alt=""/></div>
+<map name="dreadrb_8c_a675b0881eef06ac2d7e09e1c3e1c0403_cgraph" id="dreadrb_8c_a675b0881eef06ac2d7e09e1c3e1c0403_cgraph">
+<area shape="rect" id="node2" href="dreadrb_8c.html#af815bcc4cd6c6b297588886829ce6cb2" title="Eat up the rest of the current line. " alt="" coords="143,5,231,32"/><area shape="rect" id="node3" href="dmemory_8c.html#aeed250713fbfb3fac567d7a503774ccc" title="Allocate storage for original matrix A. " alt="" coords="145,56,228,83"/><area shape="rect" id="node6" href="dreadrb_8c.html#ae766b0ec3051c146313ff37802decbb7" title="dParseIntFormat" alt="" coords="127,107,246,133"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab3ebe1f51db0ee2e5abd6a2248185585"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a66db478a2114856c35c3153ca1d4268e"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void FormFullA </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<pre>
+On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+matrix. On exit, it represents the full matrix with lower and upper parts.
+</pre>
+</div>
+</div>
+<a class="anchor" id="afbec2a501b92e7e7bb13af2e21520522"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dreadtriple_8c.html b/SuperLU_5.2.0/DOC/html/dreadtriple_8c.html
new file mode 100644
index 0000000..bdf3bbc
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dreadtriple_8c.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dreadtriple.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dreadtriple.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in triplet (coordinate) format.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dreadtriple.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dreadtriple_8c__incl.png" border="0" usemap="#SRC_2dreadtriple_8c" alt=""/></div>
+<map name="SRC_2dreadtriple_8c" id="SRC_2dreadtriple_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac79bc303193d42d6a40148211796eff0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadtriple_8c.html#ac79bc303193d42d6a40148211796eff0">dreadtriple</a> (int *m, int *n, int *nonz, double **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:ac79bc303193d42d6a40148211796eff0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad97776a2c12802db12e668f6d2da7901"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dreadtriple_8c.html#ad97776a2c12802db12e668f6d2da7901">dreadrhs</a> (int m, double *b)</td></tr>
+<tr class="separator:ad97776a2c12802db12e668f6d2da7901"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad97776a2c12802db12e668f6d2da7901"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac79bc303193d42d6a40148211796eff0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dreadtriple_8c_ac79bc303193d42d6a40148211796eff0_cgraph.png" border="0" usemap="#dreadtriple_8c_ac79bc303193d42d6a40148211796eff0_cgraph" alt=""/></div>
+<map name="dreadtriple_8c_ac79bc303193d42d6a40148211796eff0_cgraph" id="dreadtriple_8c_ac79bc303193d42d6a40148211796eff0_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#aeed250713fbfb3fac567d7a503774ccc" title="Allocate storage for original matrix A. " alt="" coords="136,31,219,57"/><area shape="rect" id="node3" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="267,5,365,32"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="279,56,353,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dsnode__bmod_8c.html b/SuperLU_5.2.0/DOC/html/dsnode__bmod_8c.html
new file mode 100644
index 0000000..b1b1c6c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dsnode__bmod_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dsnode_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dsnode_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numeric block updates within the relaxed snode.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dsnode_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dsnode__bmod_8c__incl.png" border="0" usemap="#SRC_2dsnode__bmod_8c" alt=""/></div>
+<map name="SRC_2dsnode__bmod_8c" id="SRC_2dsnode__bmod_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1466b84198911ff34e828a811e70831e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsnode__bmod_8c.html#a1466b84198911ff34e828a811e70831e">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 class="memdesc:a1466b84198911ff34e828a811e70831e"><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode. <a href="#a1466b84198911ff34e828a811e70831e">More...</a><br/></td></tr>
+<tr class="separator:a1466b84198911ff34e828a811e70831e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1466b84198911ff34e828a811e70831e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dsnode__bmod_8c_a1466b84198911ff34e828a811e70831e_cgraph.png" border="0" usemap="#dsnode__bmod_8c_a1466b84198911ff34e828a811e70831e_cgraph" alt=""/></div>
+<map name="dsnode__bmod_8c_a1466b84198911ff34e828a811e70831e_cgraph" id="dsnode__bmod_8c_a1466b84198911ff34e828a811e70831e_cgraph">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html#a8bf1e89ca04a7d8384577eb9842e9ffa" title="dtrsv_" alt="" coords="164,5,223,32"/><area shape="rect" id="node3" href="slu__ddefs_8h.html#ab9959831d583511b25c4de2ebb2448e2" title="dgemv_" alt="" coords="159,56,227,83"/><area shape="rect" id="node4" href="dcolumn__bmod_8c.html#a56d27043eac0282b0d0e4106acedb083" title="Solves a dense UNIT lower triangular system. " alt="" coords="162,107,225,133"/><area shape="rect" id="node5" href="dcolu [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dsnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/dsnode__dfs_8c.html
new file mode 100644
index 0000000..c98afbb
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dsnode__dfs_8c.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dsnode_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dsnode_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Determines the union of row structures of columns within the relaxed node.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dsnode_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dsnode__dfs_8c__incl.png" border="0" usemap="#SRC_2dsnode__dfs_8c" alt=""/></div>
+<map name="SRC_2dsnode__dfs_8c" id="SRC_2dsnode__dfs_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a80b831678c233741661d8386d8736da1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsnode__dfs_8c.html#a80b831678c233741661d8386d8736da1">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>
+<tr class="separator:a80b831678c233741661d8386d8736da1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a80b831678c233741661d8386d8736da1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="dsnode__dfs_8c.html#a80b831678c233741661d8386d8736da1">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dsnode__dfs_8c_a80b831678c233741661d8386d8736da1_cgraph.png" border="0" usemap="#dsnode__dfs_8c_a80b831678c233741661d8386d8736da1_cgraph" alt=""/></div>
+<map name="dsnode__dfs_8c_a80b831678c233741661d8386d8736da1_cgraph" id="dsnode__dfs_8c_a80b831678c233741661d8386d8736da1_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="144,107,256,133"/><area shape="rect" id="node3" href="dmemory_8c.html#afe3104df9ace895f5332843534ae99b4" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="329,81,399,108"/><area shape="rect" id="node8" href="dmemory_8c.html#a5c9b1e24d07635068c014999d44672aa" title="dmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dsp__blas2_8c.html b/SuperLU_5.2.0/DOC/html/dsp__blas2_8c.html
new file mode 100644
index 0000000..1c4419d
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dsp__blas2_8c.html
@@ -0,0 +1,444 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dsp_blas2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dsp_blas2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Sparse BLAS 2, using some dense BLAS 2 operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dsp_blas2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dsp__blas2_8c__incl.png" border="0" usemap="#SRC_2dsp__blas2_8c" alt=""/></div>
+<map name="SRC_2dsp__blas2_8c" id="SRC_2dsp__blas2_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aca18e78d81448d99eec840b19de76efd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#aca18e78d81448d99eec840b19de76efd">dusolve</a> (int, int, double *, double *)</td></tr>
+<tr class="memdesc:aca18e78d81448d99eec840b19de76efd"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#aca18e78d81448d99eec840b19de76efd">More...</a><br/></td></tr>
+<tr class="separator:aca18e78d81448d99eec840b19de76efd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56d27043eac0282b0d0e4106acedb083"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#a56d27043eac0282b0d0e4106acedb083">dlsolve</a> (int, int, double *, double *)</td></tr>
+<tr class="memdesc:a56d27043eac0282b0d0e4106acedb083"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a56d27043eac0282b0d0e4106acedb083">More...</a><br/></td></tr>
+<tr class="separator:a56d27043eac0282b0d0e4106acedb083"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65523602382b3d96c9852545ae24815d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#a65523602382b3d96c9852545ae24815d">dmatvec</a> (int, int, int, double *, double *, double *)</td></tr>
+<tr class="memdesc:a65523602382b3d96c9852545ae24815d"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a65523602382b3d96c9852545ae24815d">More...</a><br/></td></tr>
+<tr class="separator:a65523602382b3d96c9852545ae24815d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa92ff654356fe62f70ebef5815627e4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#aaa92ff654356fe62f70ebef5815627e4">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> *st [...]
+<tr class="memdesc:aaa92ff654356fe62f70ebef5815627e4"><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b. <a href="#aaa92ff654356fe62f70ebef5815627e4">More...</a><br/></td></tr>
+<tr class="separator:aaa92ff654356fe62f70ebef5815627e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a221dfb4c5cbc550095a989c61fec4993"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993">sp_dgemv</a> (char *trans, double alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, double *x, int incx, double beta, double *y, int incy)</td></tr>
+<tr class="memdesc:a221dfb4c5cbc550095a989c61fec4993"><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="#a221dfb4c5cbc550095a989c61fec4993">More...</a><br/></td></tr>
+<tr class="separator:a221dfb4c5cbc550095a989c61fec4993"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Last update: December 3, 2015
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a56d27043eac0282b0d0e4106acedb083"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a65523602382b3d96c9852545ae24815d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="aca18e78d81448d99eec840b19de76efd"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a221dfb4c5cbc550095a989c61fec4993"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y...">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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><pre> ALPHA - (input) double
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><pre> INCX - (input) int
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.</pre><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><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><pre> INCY - (input) int
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.</pre><pre> ==== Sparse Level 2 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dsp__blas2_8c_a221dfb4c5cbc550095a989c61fec4993_cgraph.png" border="0" usemap="#dsp__blas2_8c_a221dfb4c5cbc550095a989c61fec4993_cgraph" alt=""/></div>
+<map name="dsp__blas2_8c_a221dfb4c5cbc550095a989c61fec4993_cgraph" id="dsp__blas2_8c_a221dfb4c5cbc550095a989c61fec4993_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="136,5,219,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aaa92ff654356fe62f70ebef5815627e4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="dsp__blas2_8c.html#aaa92ff654356fe62f70ebef5815627e4" 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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><pre> info - (output) int*
+ If *info = -i, the i-th argument had an illegal value.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dsp__blas2_8c_aaa92ff654356fe62f70ebef5815627e4_cgraph.png" border="0" usemap="#dsp__blas2_8c_aaa92ff654356fe62f70ebef5815627e4_cgraph" alt=""/></div>
+<map name="dsp__blas2_8c_aaa92ff654356fe62f70ebef5815627e4_cgraph" id="dsp__blas2_8c_aaa92ff654356fe62f70ebef5815627e4_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="133,5,216,32"/><area shape="rect" id="node3" href="dmemory_8c.html#ac8b6d99155644578a5e5542c32040cfe" title="doubleCalloc" alt="" coords="126,56,223,83"/><area shape="rect" id="node4" href="slu__ddefs_8h.html#a8bf1e89ca04a7d8384577eb9842e9ffa" title="dtrsv_" alt="" coords="145,107,204,133"/><area shape="rect" id="node5" href="slu__ddefs_8h.html#ab9959831d583511b2 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dsp__blas3_8c.html b/SuperLU_5.2.0/DOC/html/dsp__blas3_8c.html
new file mode 100644
index 0000000..676ce07
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dsp__blas3_8c.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dsp_blas3.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dsp_blas3.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Sparse BLAS3, using some dense BLAS3 operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dsp_blas3.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dsp__blas3_8c__incl.png" border="0" usemap="#SRC_2dsp__blas3_8c" alt=""/></div>
+<map name="SRC_2dsp__blas3_8c" id="SRC_2dsp__blas3_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6c8c4772ca0f241a43c5561b646fb749"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="dsp__blas3_8c.html#a6c8c4772ca0f241a43c5561b646fb749">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, double *b, int ldb, double beta, d [...]
+<tr class="separator:a6c8c4772ca0f241a43c5561b646fb749"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a6c8c4772ca0f241a43c5561b646fb749"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> sp_d performs one of the matrix-matrix operations</pre><pre> C := alpha*op( A )*op( B ) + beta*C,</pre><pre> where op( X ) is one of</pre><pre> op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ),</pre><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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> ALPHA - (input) double
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><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 max( 1, n ).
+ Unchanged on exit.</pre><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><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><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 max(1,m).
+ Unchanged on exit.</pre><pre> ==== Sparse Level 3 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dsp__blas3_8c_a6c8c4772ca0f241a43c5561b646fb749_cgraph.png" border="0" usemap="#dsp__blas3_8c_a6c8c4772ca0f241a43c5561b646fb749_cgraph" alt=""/></div>
+<map name="dsp__blas3_8c_a6c8c4772ca0f241a43c5561b646fb749_cgraph" id="dsp__blas3_8c_a6c8c4772ca0f241a43c5561b646fb749_cgraph">
+<area shape="rect" id="node2" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="141,5,224,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,5,355,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dutil_8c.html b/SuperLU_5.2.0/DOC/html/dutil_8c.html
new file mode 100644
index 0000000..2e3bc4f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dutil_8c.html
@@ -0,0 +1,1005 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dutil.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dutil.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Matrix utility functions.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dutil.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dutil_8c__incl.png" border="0" usemap="#SRC_2dutil_8c" alt=""/></div>
+<map name="SRC_2dutil_8c" id="SRC_2dutil_8c">
+<area shape="rect" id="node3" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4a177c54dafbe3640c26caa49eeee1de"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a4a177c54dafbe3640c26caa49eeee1de">dCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, double *nzval, int *rowind, int *colptr, <a class="el" href="sup [...]
+<tr class="memdesc:a4a177c54dafbe3640c26caa49eeee1de"><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related. <a href="#a4a177c54dafbe3640c26caa49eeee1de">More...</a><br/></td></tr>
+<tr class="separator:a4a177c54dafbe3640c26caa49eeee1de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb108b8f4be1e79a2e469a4406cbff54"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#adb108b8f4be1e79a2e469a4406cbff54">dCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, double *nzval, int *colind, int *rowptr, <a class="el" href="sup [...]
+<tr class="separator:adb108b8f4be1e79a2e469a4406cbff54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d19111d89390832cad2fb4b6477a40c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a0d19111d89390832cad2fb4b6477a40c">dCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *B)</td></tr>
+<tr class="memdesc:a0d19111d89390832cad2fb4b6477a40c"><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B. <a href="#a0d19111d89390832cad2fb4b6477a40c">More...</a><br/></td></tr>
+<tr class="separator:a0d19111d89390832cad2fb4b6477a40c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a12ac523141a258590a76bdad390928fd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a12ac523141a258590a76bdad390928fd">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> stype, <a class="el" href="supermatrix_8h.html#a798 [...]
+<tr class="separator:a12ac523141a258590a76bdad390928fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a503dd1eb30f1ca80e04ad2180366c518"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a503dd1eb30f1ca80e04ad2180366c518">dCopy_Dense_Matrix</a> (int M, int N, double *X, int ldx, double *Y, int ldy)</td></tr>
+<tr class="separator:a503dd1eb30f1ca80e04ad2180366c518"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab0cecf427cd82e8b92974a72ecd4d1cb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#ab0cecf427cd82e8b92974a72ecd4d1cb">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#a9d2 [...]
+<tr class="separator:ab0cecf427cd82e8b92974a72ecd4d1cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2163cd7a6b59accc8feb7b40ea2732bd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a2163cd7a6b59accc8feb7b40ea2732bd">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 class="memdesc:a2163cd7a6b59accc8feb7b40ea2732bd"><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage. <a href="#a2163cd7a6b59accc8feb7b40ea2732bd">More...</a><br/></td></tr>
+<tr class="separator:a2163cd7a6b59accc8feb7b40ea2732bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c061ebaaabe5e1bd83ba564b439d8c8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a2c061ebaaabe5e1bd83ba564b439d8c8">dPrint_CompCol_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="memdesc:a2c061ebaaabe5e1bd83ba564b439d8c8"><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging. <a href="#a2c061ebaaabe5e1bd83ba564b439d8c8">More...</a><br/></td></tr>
+<tr class="separator:a2c061ebaaabe5e1bd83ba564b439d8c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a402c1ab7977c2f9f5de62e8c66c451f0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a402c1ab7977c2f9f5de62e8c66c451f0">dPrint_SuperNode_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a402c1ab7977c2f9f5de62e8c66c451f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5af0eda3e0026a251a06d320df15a372"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a5af0eda3e0026a251a06d320df15a372">dPrint_Dense_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a5af0eda3e0026a251a06d320df15a372"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73eb5fcbf916fc45d05e38767bd7efb3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a73eb5fcbf916fc45d05e38767bd7efb3">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 class="memdesc:a73eb5fcbf916fc45d05e38767bd7efb3"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor. <a href="#a73eb5fcbf916fc45d05e38767bd7efb3">More...</a><br/></td></tr>
+<tr class="separator:a73eb5fcbf916fc45d05e38767bd7efb3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afee83da536b48eda60b21a7e3ac120f7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#afee83da536b48eda60b21a7e3ac120f7">dcheck_tempv</a> (int n, double *tempv)</td></tr>
+<tr class="memdesc:afee83da536b48eda60b21a7e3ac120f7"><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="#afee83da536b48eda60b21a7e3ac120f7">More...</a><br/></td></tr>
+<tr class="separator:afee83da536b48eda60b21a7e3ac120f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acdfe40e3085c29fd483b63a15ed163c7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#acdfe40e3085c29fd483b63a15ed163c7">dGenXtrue</a> (int n, int nrhs, double *x, int ldx)</td></tr>
+<tr class="separator:acdfe40e3085c29fd483b63a15ed163c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83b6ea01e8b7df0cc9c6fe5261647367"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a83b6ea01e8b7df0cc9c6fe5261647367">dFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">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#ac900805a [...]
+<tr class="memdesc:a83b6ea01e8b7df0cc9c6fe5261647367"><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="#a83b6ea01e8b7df0cc9c6fe5261647367">More...</a><br/></td></tr>
+<tr class="separator:a83b6ea01e8b7df0cc9c6fe5261647367"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5594dfec40e37514e00e85a90e8973b5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a5594dfec40e37514e00e85a90e8973b5">dfill</a> (double *a, int alen, double dval)</td></tr>
+<tr class="memdesc:a5594dfec40e37514e00e85a90e8973b5"><td class="mdescLeft"> </td><td class="mdescRight">Fills a double precision array with a given value. <a href="#a5594dfec40e37514e00e85a90e8973b5">More...</a><br/></td></tr>
+<tr class="separator:a5594dfec40e37514e00e85a90e8973b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae6aa0b8725411ba46ac42ee55503ee0f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#ae6aa0b8725411ba46ac42ee55503ee0f">dinf_norm_error</a> (int nrhs, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, double *xtrue)</td></tr>
+<tr class="memdesc:ae6aa0b8725411ba46ac42ee55503ee0f"><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector. <a href="#ae6aa0b8725411ba46ac42ee55503ee0f">More...</a><br/></td></tr>
+<tr class="separator:ae6aa0b8725411ba46ac42ee55503ee0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c6e5de0836eb95d08cd15a4da367bcc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a4c6e5de0836eb95d08cd15a4da367bcc">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, doub [...]
+<tr class="memdesc:a4c6e5de0836eb95d08cd15a4da367bcc"><td class="mdescLeft"> </td><td class="mdescRight">Print performance of the code. <a href="#a4c6e5de0836eb95d08cd15a4da367bcc">More...</a><br/></td></tr>
+<tr class="separator:a4c6e5de0836eb95d08cd15a4da367bcc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a457e11c8736d30b7da4ee14feb422ed0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="dutil_8c.html#a457e11c8736d30b7da4ee14feb422ed0">print_double_vec</a> (char *what, int n, double *vec)</td></tr>
+<tr class="separator:a457e11c8736d30b7da4ee14feb422ed0"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+August 1, 2008</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="afee83da536b48eda60b21a7e3ac120f7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2163cd7a6b59accc8feb7b40ea2732bd"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dutil_8c_a2163cd7a6b59accc8feb7b40ea2732bd_cgraph.png" border="0" usemap="#dutil_8c_a2163cd7a6b59accc8feb7b40ea2732bd_cgraph" alt=""/></div>
+<map name="dutil_8c_a2163cd7a6b59accc8feb7b40ea2732bd_cgraph" id="dutil_8c_a2163cd7a6b59accc8feb7b40ea2732bd_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="224,5,323,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="236,56,311,83"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="237,107,310,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0d19111d89390832cad2fb4b6477a40c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a503dd1eb30f1ca80e04ad2180366c518"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Copies a two-dimensional matrix X to another matrix Y.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4a177c54dafbe3640c26caa49eeee1de"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adb108b8f4be1e79a2e469a4406cbff54"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a12ac523141a258590a76bdad390928fd"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab0cecf427cd82e8b92974a72ecd4d1cb"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5594dfec40e37514e00e85a90e8973b5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a83b6ea01e8b7df0cc9c6fe5261647367"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dutil_8c_a83b6ea01e8b7df0cc9c6fe5261647367_cgraph.png" border="0" usemap="#dutil_8c_a83b6ea01e8b7df0cc9c6fe5261647367_cgraph" alt=""/></div>
+<map name="dutil_8c_a83b6ea01e8b7df0cc9c6fe5261647367_cgraph" id="dutil_8c_a83b6ea01e8b7df0cc9c6fe5261647367_cgraph">
+<area shape="rect" id="node2" href="dsp__blas3_8c.html#a6c8c4772ca0f241a43c5561b646fb749" title="sp_dgemm" alt="" coords="129,5,215,32"/><area shape="rect" id="node3" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="264,5,347,32"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acdfe40e3085c29fd483b63a15ed163c7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae6aa0b8725411ba46ac42ee55503ee0f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2c061ebaaabe5e1bd83ba564b439d8c8"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5af0eda3e0026a251a06d320df15a372"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a73eb5fcbf916fc45d05e38767bd7efb3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a402c1ab7977c2f9f5de62e8c66c451f0"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4c6e5de0836eb95d08cd15a4da367bcc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a457e11c8736d30b7da4ee14feb422ed0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/dzsum1_8c.html b/SuperLU_5.2.0/DOC/html/dzsum1_8c.html
new file mode 100644
index 0000000..87f8760
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/dzsum1_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/dzsum1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dzsum1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Takes sum of the absolute values of a complex vector and returns a double precision result.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for dzsum1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="dzsum1_8c__incl.png" border="0" usemap="#SRC_2dzsum1_8c" alt=""/></div>
+<map name="SRC_2dzsum1_8c" id="SRC_2dzsum1_8c">
+<area shape="rect" id="node2" href="slu__dcomplex_8h.html" title="Header file for complex operations. " alt="" coords="5,80,117,107"/><area shape="rect" id="node3" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="143,80,249,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a5a76da95c549c41790389a76e12fdcb5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="dzsum1_8c.html#a5a76da95c549c41790389a76e12fdcb5">CX</a>(I) cx[(I)-1]</td></tr>
+<tr class="separator:a5a76da95c549c41790389a76e12fdcb5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af9cbf51b3cf3e66af143acf0ff920944"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="dzsum1_8c.html#af9cbf51b3cf3e66af143acf0ff920944">dzsum1_slu</a> (int *n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *cx, int *incx)</td></tr>
+<tr class="separator:af9cbf51b3cf3e66af143acf0ff920944"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a5a76da95c549c41790389a76e12fdcb5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CX</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">I</td><td>)</td>
+ <td> cx[(I)-1]</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af9cbf51b3cf3e66af143acf0ff920944"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double dzsum1_slu </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> DZSUM1 takes the sum of the absolute values of a complex
+ vector and returns a double precision result.</pre><pre> Based on DZASUM from the Level 1 BLAS.
+ The change is to use the 'genuine' absolute value.</pre><pre> Contributed by Nick Higham for use with ZLACON.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre> N (input) INT
+ The number of elements in the vector CX.</pre><pre> CX (input) COMPLEX*16 array, dimension (N)
+ The vector whose elements will be summed.</pre><pre> INCX (input) INT
+ The spacing between successive values of CX. INCX > 0.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="dzsum1_8c_af9cbf51b3cf3e66af143acf0ff920944_cgraph.png" border="0" usemap="#dzsum1_8c_af9cbf51b3cf3e66af143acf0ff920944_cgraph" alt=""/></div>
+<map name="dzsum1_8c_af9cbf51b3cf3e66af143acf0ff920944_cgraph" id="dzsum1_8c_af9cbf51b3cf3e66af143acf0ff920944_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="147,5,205,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/fgmr_8c.html b/SuperLU_5.2.0/DOC/html/fgmr_8c.html
new file mode 100644
index 0000000..d144596
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/fgmr_8c.html
@@ -0,0 +1,360 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/fgmr.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fgmr.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for fgmr.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="fgmr_8c__incl.png" border="0" usemap="#EXAMPLE_2fgmr_8c" alt=""/></div>
+<map name="EXAMPLE_2fgmr_8c" id="EXAMPLE_2fgmr_8c">
+<area shape="rect" id="node6" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="359,80,448,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="351,155,457,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="532,155,633,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a70fac857a29f956523d4c8c05e13f177"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">epsmac</a> 1.0e-16</td></tr>
+<tr class="separator:a70fac857a29f956523d4c8c05e13f177"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab67e7a07556055c505aae6e65c937e39"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#ab67e7a07556055c505aae6e65c937e39">ddot_</a> (int *, double[], int *, double[], int *)</td></tr>
+<tr class="separator:ab67e7a07556055c505aae6e65c937e39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61a0022627cc1977966c0067f1f12e26"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#a61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+<tr class="separator:a61a0022627cc1977966c0067f1f12e26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5112358cf2de43341aaff9fba0066afc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#a5112358cf2de43341aaff9fba0066afc">daxpy_</a> (int *, double *, double[], int *, double[], int *)</td></tr>
+<tr class="separator:a5112358cf2de43341aaff9fba0066afc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade4ae85292ee27821cebf1655290b25b"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#ade4ae85292ee27821cebf1655290b25b">dcopy_</a> (int *, double[], int *, double[], int *)</td></tr>
+<tr class="separator:ade4ae85292ee27821cebf1655290b25b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0a1472abec17ef62976ff38e54db01d1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="fgmr_8c.html#a0a1472abec17ef62976ff38e54db01d1">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>
+<tr class="separator:a0a1472abec17ef62976ff38e54db01d1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a70fac857a29f956523d4c8c05e13f177"></a>
+<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">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5112358cf2de43341aaff9fba0066afc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ade4ae85292ee27821cebf1655290b25b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab67e7a07556055c505aae6e65c937e39"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a61a0022627cc1977966c0067f1f12e26"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0a1472abec17ef62976ff38e54db01d1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="fgmr_8c_a0a1472abec17ef62976ff38e54db01d1_cgraph.png" border="0" usemap="#fgmr_8c_a0a1472abec17ef62976ff38e54db01d1_cgraph" alt=""/></div>
+<map name="fgmr_8c_a0a1472abec17ef62976ff38e54db01d1_cgraph" id="fgmr_8c_a0a1472abec17ef62976ff38e54db01d1_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="101,5,200,32"/><area shape="rect" id="node3" href="fgmr_8c.html#a61a0022627cc1977966c0067f1f12e26" title="dnrm2_" alt="" coords="118,56,183,83"/><area shape="rect" id="node4" href="fgmr_8c.html#ade4ae85292ee27821cebf1655290b25b" title="dcopy_" alt="" coords="119,107,183,133"/><area shape="rect" id="node5" href="fgmr_8c.html#ab67e7a07556055c505aae6e65c937e39" title="d [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/files.html b/SuperLU_5.2.0/DOC/html/files.html
new file mode 100644
index 0000000..73cee9f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/files.html
@@ -0,0 +1,305 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">File List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img id="arr_0_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('0_')"/><img id="img_0_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('0_')"/><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html" target="_self">EXAMPLE</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cfgmr_8c.html" target="_self">cfgmr.c</a></td><td class="desc">Flexible GMRES from ITSOL developed by Yousef Saad </td></tr>
+<tr id="row_0_1_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="citersol_8c.html" target="_self">citersol.c</a></td><td class="desc">Example #1 showing how to use ILU to precondition GMRES </td></tr>
+<tr id="row_0_2_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="citersol1_8c.html" target="_self">citersol1.c</a></td><td class="desc">Example #2 showing how to use ILU to precondition GMRES </td></tr>
+<tr id="row_0_3_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="clinsol_8c.html" target="_self">clinsol.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="clinsol1_8c.html" target="_self">clinsol1.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="clinsolx_8c.html" target="_self">clinsolx.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_6_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="clinsolx1_8c.html" target="_self">clinsolx1.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="clinsolx2_8c.html" target="_self">clinsolx2.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_8_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="clinsolx3_8c.html" target="_self">clinsolx3.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_9_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dfgmr_8c.html" target="_self">dfgmr.c</a></td><td class="desc">Flexible GMRES from ITSOL developed by Yousef Saad </td></tr>
+<tr id="row_0_10_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ditersol_8c.html" target="_self">ditersol.c</a></td><td class="desc">Example #1 showing how to use ILU to precondition GMRES </td></tr>
+<tr id="row_0_11_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ditersol1_8c.html" target="_self">ditersol1.c</a></td><td class="desc">Example #2 showing how to use ILU to precondition GMRES </td></tr>
+<tr id="row_0_12_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlinsol_8c.html" target="_self">dlinsol.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_13_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlinsol1_8c.html" target="_self">dlinsol1.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_14_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlinsolx_8c.html" target="_self">dlinsolx.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_15_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlinsolx1_8c.html" target="_self">dlinsolx1.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_16_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlinsolx2_8c.html" target="_self">dlinsolx2.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_17_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlinsolx3_8c.html" target="_self">dlinsolx3.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_18_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="fgmr_8c.html" target="_self">fgmr.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_19_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sfgmr_8c.html" target="_self">sfgmr.c</a></td><td class="desc">Flexible GMRES from ITSOL developed by Yousef Saad </td></tr>
+<tr id="row_0_20_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sitersol_8c.html" target="_self">sitersol.c</a></td><td class="desc">Example #1 showing how to use ILU to precondition GMRES </td></tr>
+<tr id="row_0_21_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sitersol1_8c.html" target="_self">sitersol1.c</a></td><td class="desc">Example #2 showing how to use ILU to precondition GMRES </td></tr>
+<tr id="row_0_22_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slinsol_8c.html" target="_self">slinsol.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_23_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slinsol1_8c.html" target="_self">slinsol1.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_24_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slinsolx_8c.html" target="_self">slinsolx.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_25_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slinsolx1_8c.html" target="_self">slinsolx1.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_26_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slinsolx2_8c.html" target="_self">slinsolx2.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_27_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slinsolx3_8c.html" target="_self">slinsolx3.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_28_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="EXAMPLE_2sp__ienv_8c.html" target="_self">sp_ienv.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_29_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="superlu_8c.html" target="_self">superlu.c</a></td><td class="desc">Small 5x5 example </td></tr>
+<tr id="row_0_30_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zfgmr_8c.html" target="_self">zfgmr.c</a></td><td class="desc">Flexible GMRES from ITSOL developed by Yousef Saad </td></tr>
+<tr id="row_0_31_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zitersol_8c.html" target="_self">zitersol.c</a></td><td class="desc">Example #1 showing how to use ILU to precondition GMRES </td></tr>
+<tr id="row_0_32_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zitersol1_8c.html" target="_self">zitersol1.c</a></td><td class="desc">Example #2 showing how to use ILU to precondition GMRES </td></tr>
+<tr id="row_0_33_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlinsol_8c.html" target="_self">zlinsol.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_34_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlinsol1_8c.html" target="_self">zlinsol1.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_35_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlinsolx_8c.html" target="_self">zlinsolx.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_36_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlinsolx1_8c.html" target="_self">zlinsolx1.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_37_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlinsolx2_8c.html" target="_self">zlinsolx2.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_38_" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlinsolx3_8c.html" target="_self">zlinsolx3.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img id="arr_1_" src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_')"/><img id="img_1_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('1_')"/><a class="el" href="dir_6c424a79dc92ec6de0543ac2567cf3f8.html" target="_self">FORTRAN</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="c__fortran__cgssv_8c.html" target="_self">c_fortran_cgssv.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="c__fortran__dgssv_8c.html" target="_self">c_fortran_dgssv.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_2_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="c__fortran__sgssv_8c.html" target="_self">c_fortran_sgssv.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_3_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="c__fortran__zgssv_8c.html" target="_self">c_fortran_zgssv.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_4_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="f77__main_8f.html" target="_self">f77_main.f</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="hbcode1_8f.html" target="_self">hbcode1.f</a></td><td class="desc"></td></tr>
+<tr id="row_1_6_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="test__omp_8F.html" target="_self">test_omp.F</a></td><td class="desc"></td></tr>
+<tr id="row_1_7_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="z__f77__main_8f.html" target="_self">z_f77_main.f</a></td><td class="desc"></td></tr>
+<tr id="row_1_8_" class="even" style="display:none;"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zhbcode1_8f.html" target="_self">zhbcode1.f</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img id="arr_2_" src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('2_')"/><img id="img_2_" src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('2_')"/><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html" target="_self">SRC</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ccolumn__bmod_8c.html" target="_self">ccolumn_bmod.c</a></td><td class="desc">Performs numeric block updates </td></tr>
+<tr id="row_2_1_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ccolumn__dfs_8c.html" target="_self">ccolumn_dfs.c</a></td><td class="desc">Performs a symbolic factorization </td></tr>
+<tr id="row_2_2_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ccopy__to__ucol_8c.html" target="_self">ccopy_to_ucol.c</a></td><td class="desc">Copy a computed column of U to the compressed data structure </td></tr>
+<tr id="row_2_3_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cdiagonal_8c.html" target="_self">cdiagonal.c</a></td><td class="desc">Auxiliary routines to work with diagonal elements </td></tr>
+<tr id="row_2_4_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cgscon_8c.html" target="_self">cgscon.c</a></td><td class="desc">Estimates reciprocal of the condition number of a general matrix </td></tr>
+<tr id="row_2_5_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cgsequ_8c.html" target="_self">cgsequ.c</a></td><td class="desc">Computes row and column scalings </td></tr>
+<tr id="row_2_6_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cgsisx_8c.html" target="_self">cgsisx.c</a></td><td class="desc">Computes an approximate solutions of linear equations A*X=B or A'*X=B </td></tr>
+<tr id="row_2_7_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cgsitrf_8c.html" target="_self">cgsitrf.c</a></td><td class="desc">Computes an ILU factorization of a general sparse matrix </td></tr>
+<tr id="row_2_8_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cgsrfs_8c.html" target="_self">cgsrfs.c</a></td><td class="desc">Improves computed solution to a system of inear equations </td></tr>
+<tr id="row_2_9_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cgssv_8c.html" target="_self">cgssv.c</a></td><td class="desc">Solves the system of linear equations A*X=B </td></tr>
+<tr id="row_2_10_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cgssvx_8c.html" target="_self">cgssvx.c</a></td><td class="desc">Solves the system of linear equations A*X=B or A'*X=B </td></tr>
+<tr id="row_2_11_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cgstrf_8c.html" target="_self">cgstrf.c</a></td><td class="desc">Computes an LU factorization of a general sparse matrix </td></tr>
+<tr id="row_2_12_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cgstrs_8c.html" target="_self">cgstrs.c</a></td><td class="desc">Solves a system using LU factorization </td></tr>
+<tr id="row_2_13_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="clacon_8c.html" target="_self">clacon.c</a></td><td class="desc">Estimates the 1-norm </td></tr>
+<tr id="row_2_14_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="clacon2_8c.html" target="_self">clacon2.c</a></td><td class="desc">Estimates the 1-norm </td></tr>
+<tr id="row_2_15_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="clangs_8c.html" target="_self">clangs.c</a></td><td class="desc">Returns the value of the one norm </td></tr>
+<tr id="row_2_16_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="claqgs_8c.html" target="_self">claqgs.c</a></td><td class="desc">Equlibrates a general sprase matrix </td></tr>
+<tr id="row_2_17_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cldperm_8c.html" target="_self">cldperm.c</a></td><td class="desc">Finds a row permutation so that the matrix has large entries on the diagonal </td></tr>
+<tr id="row_2_18_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cmemory_8c.html" target="_self">cmemory.c</a></td><td class="desc">Memory details </td></tr>
+<tr id="row_2_19_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cmyblas2_8c.html" target="_self">cmyblas2.c</a></td><td class="desc">Level 2 Blas operations </td></tr>
+<tr id="row_2_20_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="colamd_8c.html" target="_self">colamd.c</a></td><td class="desc">A sparse matrix column ordering algorithm </td></tr>
+<tr id="row_2_21_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="colamd_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="colamd_8h.html" target="_self">colamd.h</a></td><td class="desc">Colamd prototypes and definitions </td></tr>
+<tr id="row_2_22_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cpanel__bmod_8c.html" target="_self">cpanel_bmod.c</a></td><td class="desc">Performs numeric block updates </td></tr>
+<tr id="row_2_23_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cpanel__dfs_8c.html" target="_self">cpanel_dfs.c</a></td><td class="desc">Peforms a symbolic factorization on a panel of symbols </td></tr>
+<tr id="row_2_24_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cpivotgrowth_8c.html" target="_self">cpivotgrowth.c</a></td><td class="desc">Computes the reciprocal pivot growth factor </td></tr>
+<tr id="row_2_25_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cpivotL_8c.html" target="_self">cpivotL.c</a></td><td class="desc">Performs numerical pivoting </td></tr>
+<tr id="row_2_26_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cpruneL_8c.html" target="_self">cpruneL.c</a></td><td class="desc">Prunes the L-structure </td></tr>
+<tr id="row_2_27_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="creadhb_8c.html" target="_self">creadhb.c</a></td><td class="desc">Read a matrix stored in Harwell-Boeing format </td></tr>
+<tr id="row_2_28_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="creadrb_8c.html" target="_self">creadrb.c</a></td><td class="desc">Read a matrix stored in Rutherford-Boeing format </td></tr>
+<tr id="row_2_29_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="creadtriple_8c.html" target="_self">creadtriple.c</a></td><td class="desc">Read a matrix stored in triplet (coordinate) format </td></tr>
+<tr id="row_2_30_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="csnode__bmod_8c.html" target="_self">csnode_bmod.c</a></td><td class="desc">Performs numeric block updates within the relaxed snode </td></tr>
+<tr id="row_2_31_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="csnode__dfs_8c.html" target="_self">csnode_dfs.c</a></td><td class="desc">Determines the union of row structures of columns within the relaxed node </td></tr>
+<tr id="row_2_32_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="csp__blas2_8c.html" target="_self">csp_blas2.c</a></td><td class="desc">Sparse BLAS 2, using some dense BLAS 2 operations </td></tr>
+<tr id="row_2_33_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="csp__blas3_8c.html" target="_self">csp_blas3.c</a></td><td class="desc">Sparse BLAS3, using some dense BLAS3 operations </td></tr>
+<tr id="row_2_34_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="cutil_8c.html" target="_self">cutil.c</a></td><td class="desc">Matrix utility functions </td></tr>
+<tr id="row_2_35_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dcolumn__bmod_8c.html" target="_self">dcolumn_bmod.c</a></td><td class="desc">Performs numeric block updates </td></tr>
+<tr id="row_2_36_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dcolumn__dfs_8c.html" target="_self">dcolumn_dfs.c</a></td><td class="desc">Performs a symbolic factorization </td></tr>
+<tr id="row_2_37_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dcomplex_8c.html" target="_self">dcomplex.c</a></td><td class="desc">Common arithmetic for complex type </td></tr>
+<tr id="row_2_38_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dcopy__to__ucol_8c.html" target="_self">dcopy_to_ucol.c</a></td><td class="desc">Copy a computed column of U to the compressed data structure </td></tr>
+<tr id="row_2_39_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ddiagonal_8c.html" target="_self">ddiagonal.c</a></td><td class="desc">Auxiliary routines to work with diagonal elements </td></tr>
+<tr id="row_2_40_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dgscon_8c.html" target="_self">dgscon.c</a></td><td class="desc">Estimates reciprocal of the condition number of a general matrix </td></tr>
+<tr id="row_2_41_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dgsequ_8c.html" target="_self">dgsequ.c</a></td><td class="desc">Computes row and column scalings </td></tr>
+<tr id="row_2_42_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dgsisx_8c.html" target="_self">dgsisx.c</a></td><td class="desc">Computes an approximate solutions of linear equations A*X=B or A'*X=B </td></tr>
+<tr id="row_2_43_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dgsitrf_8c.html" target="_self">dgsitrf.c</a></td><td class="desc">Computes an ILU factorization of a general sparse matrix </td></tr>
+<tr id="row_2_44_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dgsrfs_8c.html" target="_self">dgsrfs.c</a></td><td class="desc">Improves computed solution to a system of inear equations </td></tr>
+<tr id="row_2_45_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dgssv_8c.html" target="_self">dgssv.c</a></td><td class="desc">Solves the system of linear equations A*X=B </td></tr>
+<tr id="row_2_46_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dgssvx_8c.html" target="_self">dgssvx.c</a></td><td class="desc">Solves the system of linear equations A*X=B or A'*X=B </td></tr>
+<tr id="row_2_47_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dgstrf_8c.html" target="_self">dgstrf.c</a></td><td class="desc">Computes an LU factorization of a general sparse matrix </td></tr>
+<tr id="row_2_48_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dgstrs_8c.html" target="_self">dgstrs.c</a></td><td class="desc">Solves a system using LU factorization </td></tr>
+<tr id="row_2_49_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlacon_8c.html" target="_self">dlacon.c</a></td><td class="desc">Estimates the 1-norm </td></tr>
+<tr id="row_2_50_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlacon2_8c.html" target="_self">dlacon2.c</a></td><td class="desc">Estimates the 1-norm </td></tr>
+<tr id="row_2_51_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlangs_8c.html" target="_self">dlangs.c</a></td><td class="desc">Returns the value of the one norm </td></tr>
+<tr id="row_2_52_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dlaqgs_8c.html" target="_self">dlaqgs.c</a></td><td class="desc">Equlibrates a general sprase matrix </td></tr>
+<tr id="row_2_53_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dldperm_8c.html" target="_self">dldperm.c</a></td><td class="desc">Finds a row permutation so that the matrix has large entries on the diagonal </td></tr>
+<tr id="row_2_54_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dmach_8c.html" target="_self">dmach.c</a></td><td class="desc"></td></tr>
+<tr id="row_2_55_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dmemory_8c.html" target="_self">dmemory.c</a></td><td class="desc">Memory details </td></tr>
+<tr id="row_2_56_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dmyblas2_8c.html" target="_self">dmyblas2.c</a></td><td class="desc">Level 2 Blas operations </td></tr>
+<tr id="row_2_57_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dpanel__bmod_8c.html" target="_self">dpanel_bmod.c</a></td><td class="desc">Performs numeric block updates </td></tr>
+<tr id="row_2_58_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dpanel__dfs_8c.html" target="_self">dpanel_dfs.c</a></td><td class="desc">Peforms a symbolic factorization on a panel of symbols </td></tr>
+<tr id="row_2_59_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dpivotgrowth_8c.html" target="_self">dpivotgrowth.c</a></td><td class="desc">Computes the reciprocal pivot growth factor </td></tr>
+<tr id="row_2_60_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dpivotL_8c.html" target="_self">dpivotL.c</a></td><td class="desc">Performs numerical pivoting </td></tr>
+<tr id="row_2_61_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dpruneL_8c.html" target="_self">dpruneL.c</a></td><td class="desc">Prunes the L-structure </td></tr>
+<tr id="row_2_62_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dreadhb_8c.html" target="_self">dreadhb.c</a></td><td class="desc">Read a matrix stored in Harwell-Boeing format </td></tr>
+<tr id="row_2_63_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dreadrb_8c.html" target="_self">dreadrb.c</a></td><td class="desc">Read a matrix stored in Rutherford-Boeing format </td></tr>
+<tr id="row_2_64_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dreadtriple_8c.html" target="_self">dreadtriple.c</a></td><td class="desc">Read a matrix stored in triplet (coordinate) format </td></tr>
+<tr id="row_2_65_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dsnode__bmod_8c.html" target="_self">dsnode_bmod.c</a></td><td class="desc">Performs numeric block updates within the relaxed snode </td></tr>
+<tr id="row_2_66_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dsnode__dfs_8c.html" target="_self">dsnode_dfs.c</a></td><td class="desc">Determines the union of row structures of columns within the relaxed node </td></tr>
+<tr id="row_2_67_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dsp__blas2_8c.html" target="_self">dsp_blas2.c</a></td><td class="desc">Sparse BLAS 2, using some dense BLAS 2 operations </td></tr>
+<tr id="row_2_68_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dsp__blas3_8c.html" target="_self">dsp_blas3.c</a></td><td class="desc">Sparse BLAS3, using some dense BLAS3 operations </td></tr>
+<tr id="row_2_69_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dutil_8c.html" target="_self">dutil.c</a></td><td class="desc">Matrix utility functions </td></tr>
+<tr id="row_2_70_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="dzsum1_8c.html" target="_self">dzsum1.c</a></td><td class="desc">Takes sum of the absolute values of a complex vector and returns a double precision result </td></tr>
+<tr id="row_2_71_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="get__perm__c_8c.html" target="_self">get_perm_c.c</a></td><td class="desc">Matrix permutation operations </td></tr>
+<tr id="row_2_72_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="heap__relax__snode_8c.html" target="_self">heap_relax_snode.c</a></td><td class="desc">Identify the initial relaxed supernodes </td></tr>
+<tr id="row_2_73_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="html__mainpage_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="html__mainpage_8h.html" target="_self">html_mainpage.h</a></td><td class="desc"></td></tr>
+<tr id="row_2_74_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="icmax1_8c.html" target="_self">icmax1.c</a></td><td class="desc">Finds the index of the element whose real part has maximum absolute value </td></tr>
+<tr id="row_2_75_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__ccolumn__dfs_8c.html" target="_self">ilu_ccolumn_dfs.c</a></td><td class="desc">Performs a symbolic factorization </td></tr>
+<tr id="row_2_76_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__ccopy__to__ucol_8c.html" target="_self">ilu_ccopy_to_ucol.c</a></td><td class="desc">Copy a computed column of U to the compressed data structure and drop some small entries </td></tr>
+<tr id="row_2_77_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__cdrop__row_8c.html" target="_self">ilu_cdrop_row.c</a></td><td class="desc">Drop small rows from L </td></tr>
+<tr id="row_2_78_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__cpanel__dfs_8c.html" target="_self">ilu_cpanel_dfs.c</a></td><td class="desc">Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column </td></tr>
+<tr id="row_2_79_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__cpivotL_8c.html" target="_self">ilu_cpivotL.c</a></td><td class="desc">Performs numerical pivoting </td></tr>
+<tr id="row_2_80_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__csnode__dfs_8c.html" target="_self">ilu_csnode_dfs.c</a></td><td class="desc">Determines the union of row structures of columns within the relaxed node </td></tr>
+<tr id="row_2_81_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__dcolumn__dfs_8c.html" target="_self">ilu_dcolumn_dfs.c</a></td><td class="desc">Performs a symbolic factorization </td></tr>
+<tr id="row_2_82_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__dcopy__to__ucol_8c.html" target="_self">ilu_dcopy_to_ucol.c</a></td><td class="desc">Copy a computed column of U to the compressed data structure and drop some small entries </td></tr>
+<tr id="row_2_83_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__ddrop__row_8c.html" target="_self">ilu_ddrop_row.c</a></td><td class="desc">Drop small rows from L </td></tr>
+<tr id="row_2_84_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__dpanel__dfs_8c.html" target="_self">ilu_dpanel_dfs.c</a></td><td class="desc">Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column </td></tr>
+<tr id="row_2_85_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__dpivotL_8c.html" target="_self">ilu_dpivotL.c</a></td><td class="desc">Performs numerical pivoting </td></tr>
+<tr id="row_2_86_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__dsnode__dfs_8c.html" target="_self">ilu_dsnode_dfs.c</a></td><td class="desc">Determines the union of row structures of columns within the relaxed node </td></tr>
+<tr id="row_2_87_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__heap__relax__snode_8c.html" target="_self">ilu_heap_relax_snode.c</a></td><td class="desc">Identify the initial relaxed supernodes </td></tr>
+<tr id="row_2_88_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__relax__snode_8c.html" target="_self">ilu_relax_snode.c</a></td><td class="desc">Identify initial relaxed supernodes </td></tr>
+<tr id="row_2_89_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__scolumn__dfs_8c.html" target="_self">ilu_scolumn_dfs.c</a></td><td class="desc">Performs a symbolic factorization </td></tr>
+<tr id="row_2_90_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__scopy__to__ucol_8c.html" target="_self">ilu_scopy_to_ucol.c</a></td><td class="desc">Copy a computed column of U to the compressed data structure and drop some small entries </td></tr>
+<tr id="row_2_91_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__sdrop__row_8c.html" target="_self">ilu_sdrop_row.c</a></td><td class="desc">Drop small rows from L </td></tr>
+<tr id="row_2_92_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__spanel__dfs_8c.html" target="_self">ilu_spanel_dfs.c</a></td><td class="desc">Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column </td></tr>
+<tr id="row_2_93_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__spivotL_8c.html" target="_self">ilu_spivotL.c</a></td><td class="desc">Performs numerical pivoting </td></tr>
+<tr id="row_2_94_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__ssnode__dfs_8c.html" target="_self">ilu_ssnode_dfs.c</a></td><td class="desc">Determines the union of row structures of columns within the relaxed node </td></tr>
+<tr id="row_2_95_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__zcolumn__dfs_8c.html" target="_self">ilu_zcolumn_dfs.c</a></td><td class="desc">Performs a symbolic factorization </td></tr>
+<tr id="row_2_96_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__zcopy__to__ucol_8c.html" target="_self">ilu_zcopy_to_ucol.c</a></td><td class="desc">Copy a computed column of U to the compressed data structure and drop some small entries </td></tr>
+<tr id="row_2_97_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__zdrop__row_8c.html" target="_self">ilu_zdrop_row.c</a></td><td class="desc">Drop small rows from L </td></tr>
+<tr id="row_2_98_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__zpanel__dfs_8c.html" target="_self">ilu_zpanel_dfs.c</a></td><td class="desc">Peforms a symbolic factorization on a panel of symbols and record the entries with maximum absolute value in each column </td></tr>
+<tr id="row_2_99_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__zpivotL_8c.html" target="_self">ilu_zpivotL.c</a></td><td class="desc">Performs numerical pivoting </td></tr>
+<tr id="row_2_100_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ilu__zsnode__dfs_8c.html" target="_self">ilu_zsnode_dfs.c</a></td><td class="desc">Determines the union of row structures of columns within the relaxed node </td></tr>
+<tr id="row_2_101_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="input__error_8c.html" target="_self">input_error.c</a></td><td class="desc">Error handler for input parameters </td></tr>
+<tr id="row_2_102_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="izmax1_8c.html" target="_self">izmax1.c</a></td><td class="desc">Finds the index of the element whose real part has maximum absolute value </td></tr>
+<tr id="row_2_103_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="mark__relax_8c.html" target="_self">mark_relax.c</a></td><td class="desc">Record the rows pivoted by the relaxed supernodes </td></tr>
+<tr id="row_2_104_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="mc64ad_8c.html" target="_self">mc64ad.c</a></td><td class="desc"></td></tr>
+<tr id="row_2_105_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="memory_8c.html" target="_self">memory.c</a></td><td class="desc">Precision-independent memory-related routines </td></tr>
+<tr id="row_2_106_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="mmd_8c.html" target="_self">mmd.c</a></td><td class="desc"></td></tr>
+<tr id="row_2_107_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="qselect_8c.html" target="_self">qselect.c</a></td><td class="desc">Quickselect: returns the k-th (zero-based) largest value in A[] </td></tr>
+<tr id="row_2_108_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="relax__snode_8c.html" target="_self">relax_snode.c</a></td><td class="desc">Identify initial relaxed supernodes </td></tr>
+<tr id="row_2_109_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="scolumn__bmod_8c.html" target="_self">scolumn_bmod.c</a></td><td class="desc">Performs numeric block updates </td></tr>
+<tr id="row_2_110_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="scolumn__dfs_8c.html" target="_self">scolumn_dfs.c</a></td><td class="desc">Performs a symbolic factorization </td></tr>
+<tr id="row_2_111_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="scomplex_8c.html" target="_self">scomplex.c</a></td><td class="desc">Common arithmetic for complex type </td></tr>
+<tr id="row_2_112_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="scopy__to__ucol_8c.html" target="_self">scopy_to_ucol.c</a></td><td class="desc">Copy a computed column of U to the compressed data structure </td></tr>
+<tr id="row_2_113_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="scsum1_8c.html" target="_self">scsum1.c</a></td><td class="desc">Takes sum of the absolute values of a complex vector and returns a single precision result </td></tr>
+<tr id="row_2_114_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sdiagonal_8c.html" target="_self">sdiagonal.c</a></td><td class="desc">Auxiliary routines to work with diagonal elements </td></tr>
+<tr id="row_2_115_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sgscon_8c.html" target="_self">sgscon.c</a></td><td class="desc">Estimates reciprocal of the condition number of a general matrix </td></tr>
+<tr id="row_2_116_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sgsequ_8c.html" target="_self">sgsequ.c</a></td><td class="desc">Computes row and column scalings </td></tr>
+<tr id="row_2_117_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sgsisx_8c.html" target="_self">sgsisx.c</a></td><td class="desc">Computes an approximate solutions of linear equations A*X=B or A'*X=B </td></tr>
+<tr id="row_2_118_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sgsitrf_8c.html" target="_self">sgsitrf.c</a></td><td class="desc">Computes an ILU factorization of a general sparse matrix </td></tr>
+<tr id="row_2_119_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sgsrfs_8c.html" target="_self">sgsrfs.c</a></td><td class="desc">Improves computed solution to a system of inear equations </td></tr>
+<tr id="row_2_120_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sgssv_8c.html" target="_self">sgssv.c</a></td><td class="desc">Solves the system of linear equations A*X=B </td></tr>
+<tr id="row_2_121_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sgssvx_8c.html" target="_self">sgssvx.c</a></td><td class="desc">Solves the system of linear equations A*X=B or A'*X=B </td></tr>
+<tr id="row_2_122_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sgstrf_8c.html" target="_self">sgstrf.c</a></td><td class="desc">Computes an LU factorization of a general sparse matrix </td></tr>
+<tr id="row_2_123_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sgstrs_8c.html" target="_self">sgstrs.c</a></td><td class="desc">Solves a system using LU factorization </td></tr>
+<tr id="row_2_124_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slacon_8c.html" target="_self">slacon.c</a></td><td class="desc">Estimates the 1-norm </td></tr>
+<tr id="row_2_125_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slacon2_8c.html" target="_self">slacon2.c</a></td><td class="desc">Estimates the 1-norm </td></tr>
+<tr id="row_2_126_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slangs_8c.html" target="_self">slangs.c</a></td><td class="desc">Returns the value of the one norm </td></tr>
+<tr id="row_2_127_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="slaqgs_8c.html" target="_self">slaqgs.c</a></td><td class="desc">Equlibrates a general sprase matrix </td></tr>
+<tr id="row_2_128_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sldperm_8c.html" target="_self">sldperm.c</a></td><td class="desc">Finds a row permutation so that the matrix has large entries on the diagonal </td></tr>
+<tr id="row_2_129_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="slu__cdefs_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="slu__cdefs_8h.html" target="_self">slu_cdefs.h</a></td><td class="desc">Header file for real operations </td></tr>
+<tr id="row_2_130_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="slu__Cnames_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="slu__Cnames_8h.html" target="_self">slu_Cnames.h</a></td><td class="desc">Macros defining how C routines will be called </td></tr>
+<tr id="row_2_131_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="slu__dcomplex_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="slu__dcomplex_8h.html" target="_self">slu_dcomplex.h</a></td><td class="desc">Header file for complex operations </td></tr>
+<tr id="row_2_132_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="slu__ddefs_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="slu__ddefs_8h.html" target="_self">slu_ddefs.h</a></td><td class="desc">Header file for real operations </td></tr>
+<tr id="row_2_133_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="slu__scomplex_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="slu__scomplex_8h.html" target="_self">slu_scomplex.h</a></td><td class="desc">Header file for complex operations </td></tr>
+<tr id="row_2_134_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="slu__sdefs_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="slu__sdefs_8h.html" target="_self">slu_sdefs.h</a></td><td class="desc">Header file for real operations </td></tr>
+<tr id="row_2_135_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="slu__util_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="slu__util_8h.html" target="_self">slu_util.h</a></td><td class="desc">Utility header file </td></tr>
+<tr id="row_2_136_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="slu__zdefs_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="slu__zdefs_8h.html" target="_self">slu_zdefs.h</a></td><td class="desc">Header file for real operations </td></tr>
+<tr id="row_2_137_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="smach_8c.html" target="_self">smach.c</a></td><td class="desc"></td></tr>
+<tr id="row_2_138_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="smemory_8c.html" target="_self">smemory.c</a></td><td class="desc">Memory details </td></tr>
+<tr id="row_2_139_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="smyblas2_8c.html" target="_self">smyblas2.c</a></td><td class="desc">Level 2 Blas operations </td></tr>
+<tr id="row_2_140_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sp__coletree_8c.html" target="_self">sp_coletree.c</a></td><td class="desc">Tree layout and computation routines </td></tr>
+<tr id="row_2_141_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="SRC_2sp__ienv_8c.html" target="_self">sp_ienv.c</a></td><td class="desc"></td></tr>
+<tr id="row_2_142_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sp__preorder_8c.html" target="_self">sp_preorder.c</a></td><td class="desc">Permute and performs functions on columns of orginal matrix </td></tr>
+<tr id="row_2_143_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="spanel__bmod_8c.html" target="_self">spanel_bmod.c</a></td><td class="desc">Performs numeric block updates </td></tr>
+<tr id="row_2_144_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="spanel__dfs_8c.html" target="_self">spanel_dfs.c</a></td><td class="desc">Peforms a symbolic factorization on a panel of symbols </td></tr>
+<tr id="row_2_145_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="spivotgrowth_8c.html" target="_self">spivotgrowth.c</a></td><td class="desc">Computes the reciprocal pivot growth factor </td></tr>
+<tr id="row_2_146_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="spivotL_8c.html" target="_self">spivotL.c</a></td><td class="desc">Performs numerical pivoting </td></tr>
+<tr id="row_2_147_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="spruneL_8c.html" target="_self">spruneL.c</a></td><td class="desc">Prunes the L-structure </td></tr>
+<tr id="row_2_148_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sreadhb_8c.html" target="_self">sreadhb.c</a></td><td class="desc">Read a matrix stored in Harwell-Boeing format </td></tr>
+<tr id="row_2_149_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sreadrb_8c.html" target="_self">sreadrb.c</a></td><td class="desc">Read a matrix stored in Rutherford-Boeing format </td></tr>
+<tr id="row_2_150_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sreadtriple_8c.html" target="_self">sreadtriple.c</a></td><td class="desc">Read a matrix stored in triplet (coordinate) format </td></tr>
+<tr id="row_2_151_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ssnode__bmod_8c.html" target="_self">ssnode_bmod.c</a></td><td class="desc">Performs numeric block updates within the relaxed snode </td></tr>
+<tr id="row_2_152_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ssnode__dfs_8c.html" target="_self">ssnode_dfs.c</a></td><td class="desc">Determines the union of row structures of columns within the relaxed node </td></tr>
+<tr id="row_2_153_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ssp__blas2_8c.html" target="_self">ssp_blas2.c</a></td><td class="desc">Sparse BLAS 2, using some dense BLAS 2 operations </td></tr>
+<tr id="row_2_154_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="ssp__blas3_8c.html" target="_self">ssp_blas3.c</a></td><td class="desc">Sparse BLAS3, using some dense BLAS3 operations </td></tr>
+<tr id="row_2_155_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="superlu__enum__consts_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="superlu__enum__consts_8h.html" target="_self">superlu_enum_consts.h</a></td><td class="desc">Enum constants header file </td></tr>
+<tr id="row_2_156_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="superlu__timer_8c.html" target="_self">superlu_timer.c</a></td><td class="desc">Returns the time used </td></tr>
+<tr id="row_2_157_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="supermatrix_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="supermatrix_8h.html" target="_self">supermatrix.h</a></td><td class="desc">Defines matrix types </td></tr>
+<tr id="row_2_158_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="sutil_8c.html" target="_self">sutil.c</a></td><td class="desc">Matrix utility functions </td></tr>
+<tr id="row_2_159_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="util_8c.html" target="_self">util.c</a></td><td class="desc">Utility functions </td></tr>
+<tr id="row_2_160_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zcolumn__bmod_8c.html" target="_self">zcolumn_bmod.c</a></td><td class="desc">Performs numeric block updates </td></tr>
+<tr id="row_2_161_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zcolumn__dfs_8c.html" target="_self">zcolumn_dfs.c</a></td><td class="desc">Performs a symbolic factorization </td></tr>
+<tr id="row_2_162_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zcopy__to__ucol_8c.html" target="_self">zcopy_to_ucol.c</a></td><td class="desc">Copy a computed column of U to the compressed data structure </td></tr>
+<tr id="row_2_163_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zdiagonal_8c.html" target="_self">zdiagonal.c</a></td><td class="desc">Auxiliary routines to work with diagonal elements </td></tr>
+<tr id="row_2_164_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zgscon_8c.html" target="_self">zgscon.c</a></td><td class="desc">Estimates reciprocal of the condition number of a general matrix </td></tr>
+<tr id="row_2_165_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zgsequ_8c.html" target="_self">zgsequ.c</a></td><td class="desc">Computes row and column scalings </td></tr>
+<tr id="row_2_166_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zgsisx_8c.html" target="_self">zgsisx.c</a></td><td class="desc">Computes an approximate solutions of linear equations A*X=B or A'*X=B </td></tr>
+<tr id="row_2_167_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zgsitrf_8c.html" target="_self">zgsitrf.c</a></td><td class="desc">Computes an ILU factorization of a general sparse matrix </td></tr>
+<tr id="row_2_168_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zgsrfs_8c.html" target="_self">zgsrfs.c</a></td><td class="desc">Improves computed solution to a system of inear equations </td></tr>
+<tr id="row_2_169_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zgssv_8c.html" target="_self">zgssv.c</a></td><td class="desc">Solves the system of linear equations A*X=B </td></tr>
+<tr id="row_2_170_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zgssvx_8c.html" target="_self">zgssvx.c</a></td><td class="desc">Solves the system of linear equations A*X=B or A'*X=B </td></tr>
+<tr id="row_2_171_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zgstrf_8c.html" target="_self">zgstrf.c</a></td><td class="desc">Computes an LU factorization of a general sparse matrix </td></tr>
+<tr id="row_2_172_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zgstrs_8c.html" target="_self">zgstrs.c</a></td><td class="desc">Solves a system using LU factorization </td></tr>
+<tr id="row_2_173_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlacon_8c.html" target="_self">zlacon.c</a></td><td class="desc">Estimates the 1-norm </td></tr>
+<tr id="row_2_174_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlacon2_8c.html" target="_self">zlacon2.c</a></td><td class="desc">Estimates the 1-norm </td></tr>
+<tr id="row_2_175_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlangs_8c.html" target="_self">zlangs.c</a></td><td class="desc">Returns the value of the one norm </td></tr>
+<tr id="row_2_176_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zlaqgs_8c.html" target="_self">zlaqgs.c</a></td><td class="desc">Equlibrates a general sprase matrix </td></tr>
+<tr id="row_2_177_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zldperm_8c.html" target="_self">zldperm.c</a></td><td class="desc">Finds a row permutation so that the matrix has large entries on the diagonal </td></tr>
+<tr id="row_2_178_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zmemory_8c.html" target="_self">zmemory.c</a></td><td class="desc">Memory details </td></tr>
+<tr id="row_2_179_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zmyblas2_8c.html" target="_self">zmyblas2.c</a></td><td class="desc">Level 2 Blas operations </td></tr>
+<tr id="row_2_180_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zpanel__bmod_8c.html" target="_self">zpanel_bmod.c</a></td><td class="desc">Performs numeric block updates </td></tr>
+<tr id="row_2_181_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zpanel__dfs_8c.html" target="_self">zpanel_dfs.c</a></td><td class="desc">Peforms a symbolic factorization on a panel of symbols </td></tr>
+<tr id="row_2_182_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zpivotgrowth_8c.html" target="_self">zpivotgrowth.c</a></td><td class="desc">Computes the reciprocal pivot growth factor </td></tr>
+<tr id="row_2_183_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zpivotL_8c.html" target="_self">zpivotL.c</a></td><td class="desc">Performs numerical pivoting </td></tr>
+<tr id="row_2_184_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zpruneL_8c.html" target="_self">zpruneL.c</a></td><td class="desc">Prunes the L-structure </td></tr>
+<tr id="row_2_185_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zreadhb_8c.html" target="_self">zreadhb.c</a></td><td class="desc">Read a matrix stored in Harwell-Boeing format </td></tr>
+<tr id="row_2_186_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zreadrb_8c.html" target="_self">zreadrb.c</a></td><td class="desc">Read a matrix stored in Rutherford-Boeing format </td></tr>
+<tr id="row_2_187_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zreadtriple_8c.html" target="_self">zreadtriple.c</a></td><td class="desc">Read a matrix stored in triplet (coordinate) format </td></tr>
+<tr id="row_2_188_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zsnode__bmod_8c.html" target="_self">zsnode_bmod.c</a></td><td class="desc">Performs numeric block updates within the relaxed snode </td></tr>
+<tr id="row_2_189_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zsnode__dfs_8c.html" target="_self">zsnode_dfs.c</a></td><td class="desc">Determines the union of row structures of columns within the relaxed node </td></tr>
+<tr id="row_2_190_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zsp__blas2_8c.html" target="_self">zsp_blas2.c</a></td><td class="desc">Sparse BLAS 2, using some dense BLAS 2 operations </td></tr>
+<tr id="row_2_191_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zsp__blas3_8c.html" target="_self">zsp_blas3.c</a></td><td class="desc">Sparse BLAS3, using some dense BLAS3 operations </td></tr>
+<tr id="row_2_192_" style="display:none;"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="zutil_8c.html" target="_self">zutil.c</a></td><td class="desc">Matrix utility functions </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/functions.html b/SuperLU_5.2.0/DOC/html/functions.html
new file mode 100644
index 0000000..94bfe62
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/functions.html
@@ -0,0 +1,508 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <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 class="current"><a href="#index_x"><span>x</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>array
+: <a class="el" href="structLU__stack__t.html#ac76a2713e4f4c516d7189303b6f82c8d">LU_stack_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>col_to_sup
+: <a class="el" href="structSCformat.html#a75a51eef4af5a906cde9a32eddcb2fc1">SCformat</a>
+, <a class="el" href="structSCPformat.html#aba16553c2896f7c88450621f18b54bae">SCPformat</a>
+</li>
+<li>colbeg
+: <a class="el" href="structNCPformat.html#a2192334a0f76d4c18784caa1f8783f01">NCPformat</a>
+</li>
+<li>colend
+: <a class="el" href="structNCPformat.html#a86dcc41e83595a12ecd88d57748430c0">NCPformat</a>
+</li>
+<li>colind
+: <a class="el" href="structNRformat.html#a25b76fc1f79b314a99c1e8f8522d77af">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#a5d192fc35ba0915afa42f36eca0e2d78">NRformat_loc</a>
+</li>
+<li>ColPerm
+: <a class="el" href="structsuperlu__options__t.html#af6e41a7d8ca989c5396f6edc67be0409">superlu_options_t</a>
+</li>
+<li>colptr
+: <a class="el" href="structNCformat.html#a881f460e39f34bbbf70909b6b0629adc">NCformat</a>
+</li>
+<li>ConditionNumber
+: <a class="el" href="structsuperlu__options__t.html#a3394d6658ec588071a9fee24a728eb07">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>degree
+: <a class="el" href="structColamd__Row__struct.html#a01e336d70f1cbe2ac615d4b23c480ecd">Colamd_Row_struct</a>
+</li>
+<li>degree_next
+: <a class="el" href="structColamd__Col__struct.html#a39ab48d1ea2a8f6d365b60886c9ac5a1">Colamd_Col_struct</a>
+</li>
+<li>DiagPivotThresh
+: <a class="el" href="structsuperlu__options__t.html#ae574f08a3f4094dae8f635690b71d944">superlu_options_t</a>
+</li>
+<li>Dtype
+: <a class="el" href="structSuperMatrix.html#aedd4bd451819549620b49076a62dfdcc">SuperMatrix</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>Equil
+: <a class="el" href="structsuperlu__options__t.html#a3fe998e3518ad90532072fa8929a1e2f">superlu_options_t</a>
+</li>
+<li>expanders
+: <a class="el" href="structGlobalLU__t.html#aedd2ee950bd57f92d4aa9028738b9bdc">GlobalLU_t</a>
+</li>
+<li>expansions
+: <a class="el" href="structSuperLUStat__t.html#ab0281af9350a75b2d4a3108b8bc0bf23">SuperLUStat_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>Fact
+: <a class="el" href="structsuperlu__options__t.html#acbd3cc1d27bbaf5bc168ebbbd6bf60fe">superlu_options_t</a>
+</li>
+<li>first_column
+: <a class="el" href="structColamd__Row__struct.html#af7bf4c87b04e63e6b1abc2c86e8d1376">Colamd_Row_struct</a>
+</li>
+<li>for_lu
+: <a class="el" href="structmem__usage__t.html#aea63300065ca81e5387c1706d7b3e705">mem_usage_t</a>
+</li>
+<li>fst_row
+: <a class="el" href="structNRformat__loc.html#acab0ad4c74c4b4f0c68647f98b430cd9">NRformat_loc</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>hash
+: <a class="el" href="structColamd__Col__struct.html#ababfe23e6edb41b345085470e52d7264">Colamd_Col_struct</a>
+</li>
+<li>hash_next
+: <a class="el" href="structColamd__Col__struct.html#a640f93b7885fb94b7dc0330041b53795">Colamd_Col_struct</a>
+</li>
+<li>headhash
+: <a class="el" href="structColamd__Col__struct.html#a16435510e5d93025bb7b9f5715a5ba1c">Colamd_Col_struct</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>i
+: <a class="el" href="structcomplex.html#a5eefa12b02189d694af536bc7d8726be">complex</a>
+, <a class="el" href="structdoublecomplex.html#a336ddbef83d1878426558d417a6ecfbb">doublecomplex</a>
+</li>
+<li>ILU_DropRule
+: <a class="el" href="structsuperlu__options__t.html#ac0ca2f81f68ad7596f2ada5739acc4d5">superlu_options_t</a>
+</li>
+<li>ILU_DropTol
+: <a class="el" href="structsuperlu__options__t.html#a4f629bb593cb42f213887d521c8f2288">superlu_options_t</a>
+</li>
+<li>ILU_FillFactor
+: <a class="el" href="structsuperlu__options__t.html#acf43941c86c9f3d1b46a6655f97bac70">superlu_options_t</a>
+</li>
+<li>ILU_FillTol
+: <a class="el" href="structsuperlu__options__t.html#a8021fa436ad10dfdee734364bcd428c5">superlu_options_t</a>
+</li>
+<li>ILU_MILU
+: <a class="el" href="structsuperlu__options__t.html#a74708fd3231a761394bed90da1eba63b">superlu_options_t</a>
+</li>
+<li>ILU_MILU_Dim
+: <a class="el" href="structsuperlu__options__t.html#aba6edb00ac03655feb075bf9d6904d18">superlu_options_t</a>
+</li>
+<li>ILU_Norm
+: <a class="el" href="structsuperlu__options__t.html#ad8ed1b7a0243a10193ff792053b281c9">superlu_options_t</a>
+</li>
+<li>IterRefine
+: <a class="el" href="structsuperlu__options__t.html#a3e40fb39641e0caf27feb6998d21d98a">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>L
+: <a class="el" href="structfactors__t.html#a17d4587aa0c7b0e0e39300d4087d4131">factors_t</a>
+</li>
+<li>lda
+: <a class="el" href="structDNformat.html#a6b584837b30f33849c6c3b070aade816">DNformat</a>
+</li>
+<li>length
+: <a class="el" href="structColamd__Col__struct.html#ac61e32f7e56a6673058c0d57cb170f22">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#a4cf6076c6aeab980aa2add1c24913c35">Colamd_Row_struct</a>
+</li>
+<li>lookahead_etree
+: <a class="el" href="structsuperlu__options__t.html#afc61bd084a107fbb1de50ca617c3f59c">superlu_options_t</a>
+</li>
+<li>lsub
+: <a class="el" href="structGlobalLU__t.html#a4e7e8cd3ba09e252a04eaf0b8af5fccd">GlobalLU_t</a>
+</li>
+<li>lusup
+: <a class="el" href="structGlobalLU__t.html#ac7ea00f7770c21f78c3576565899dc33">GlobalLU_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>m_loc
+: <a class="el" href="structNRformat__loc.html#a90413dc3eb197a83b70cc0d97e4c54af">NRformat_loc</a>
+</li>
+<li>mark
+: <a class="el" href="structColamd__Row__struct.html#a00b8bd69ce2b84d9b75c5503d80c5080">Colamd_Row_struct</a>
+</li>
+<li>mem
+: <a class="el" href="structe__node.html#a6a040bdcee064559b0b480a96ccfac65">e_node</a>
+</li>
+<li>MemModel
+: <a class="el" href="structGlobalLU__t.html#a9089591bf01db5135a9d52cb732b0f3c">GlobalLU_t</a>
+</li>
+<li>Mtype
+: <a class="el" href="structSuperMatrix.html#a42877db0cfad1033374474f48e4b3fc4">SuperMatrix</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>n
+: <a class="el" href="structGlobalLU__t.html#a48fcf5a7ff751514d92feeb40370fe5e">GlobalLU_t</a>
+</li>
+<li>ncol
+: <a class="el" href="structSuperMatrix.html#ab8b85bf206c36ebc2223cc2ec6acbe8c">SuperMatrix</a>
+</li>
+<li>nnz
+: <a class="el" href="structNCformat.html#affa2566dd89ea8ce6422f788887b5b27">NCformat</a>
+, <a class="el" href="structNCPformat.html#ac8c12ffc9edd0906608612727ad406ed">NCPformat</a>
+, <a class="el" href="structNRformat.html#ae3652d6a08cf47208db6abbd162bdee2">NRformat</a>
+, <a class="el" href="structSCformat.html#a3808f35bd097fbc0a39e3e65ee2a8d4a">SCformat</a>
+, <a class="el" href="structSCPformat.html#ad4b6e7424269c3cbe9a368604433870e">SCPformat</a>
+</li>
+<li>nnz_loc
+: <a class="el" href="structNRformat__loc.html#a41c309cb83dedeaa82c0e4e137ea4785">NRformat_loc</a>
+</li>
+<li>nnzL
+: <a class="el" href="structsuperlu__options__t.html#a2895f3e0cc73b730ae1b2dc14e306bfb">superlu_options_t</a>
+</li>
+<li>nnzU
+: <a class="el" href="structsuperlu__options__t.html#a4f1e7c0f5c61713355438db096175d33">superlu_options_t</a>
+</li>
+<li>nrow
+: <a class="el" href="structSuperMatrix.html#ab1d854b814f0757e7ff7e0da01c6ef43">SuperMatrix</a>
+</li>
+<li>nsuper
+: <a class="el" href="structSCformat.html#aafffc008b0b8e57b9cdf5689a527bd8c">SCformat</a>
+, <a class="el" href="structSCPformat.html#a20ee99d8cfb0cecad94373e2eb5abef8">SCPformat</a>
+</li>
+<li>num_expansions
+: <a class="el" href="structGlobalLU__t.html#a1923c63f76eab75f5022f025c25a82a7">GlobalLU_t</a>
+</li>
+<li>num_lookaheads
+: <a class="el" href="structsuperlu__options__t.html#aff4e1b4ecbbbd1e699fdd129df05534b">superlu_options_t</a>
+</li>
+<li>nzlmax
+: <a class="el" href="structGlobalLU__t.html#a1f77873222d31cd15eb781fdbf18df18">GlobalLU_t</a>
+</li>
+<li>nzlumax
+: <a class="el" href="structGlobalLU__t.html#ae67b1da1b096e92b7ddadf6e4a159481">GlobalLU_t</a>
+</li>
+<li>nzumax
+: <a class="el" href="structGlobalLU__t.html#a5238cd65bea5ca45046238d908073982">GlobalLU_t</a>
+</li>
+<li>nzval
+: <a class="el" href="structDNformat.html#a54a061275c52aa9e38f4cb65da46d48c">DNformat</a>
+, <a class="el" href="structNCformat.html#aa3e85810bb190b7359d8aaa956a64e64">NCformat</a>
+, <a class="el" href="structNCPformat.html#a519ed66fdf9da30c76c079474503c764">NCPformat</a>
+, <a class="el" href="structNRformat.html#a3933d6611dc87efede947b08ea8d83f2">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#a08b19d74f15e6475f43565035ae898ca">NRformat_loc</a>
+, <a class="el" href="structSCformat.html#a25011a4746e4cf0a6fbc38ba45a70e91">SCformat</a>
+, <a class="el" href="structSCPformat.html#a028e5f9ef15054302c1403969c37a0fb">SCPformat</a>
+</li>
+<li>nzval_colbeg
+: <a class="el" href="structSCPformat.html#aa9bae5f483aa1a22aec18f5c2393f05e">SCPformat</a>
+</li>
+<li>nzval_colend
+: <a class="el" href="structSCPformat.html#a098e9a5c87e2c0b35c82852b1910334d">SCPformat</a>
+</li>
+<li>nzval_colptr
+: <a class="el" href="structSCformat.html#a41e93b73c8bce9326f035e3647ee94ca">SCformat</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>ops
+: <a class="el" href="structSuperLUStat__t.html#aec6afa389e49ac9d04dc44e24805c99d">SuperLUStat_t</a>
+</li>
+<li>order
+: <a class="el" href="structColamd__Col__struct.html#a22ecb292b2471f0a09316656713bfe6e">Colamd_Col_struct</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>p
+: <a class="el" href="structColamd__Row__struct.html#acb0d165350cbbdad8dc4260bd48b1f80">Colamd_Row_struct</a>
+</li>
+<li>panel_histo
+: <a class="el" href="structSuperLUStat__t.html#a9a15399d38ecaf731ec300977f268b75">SuperLUStat_t</a>
+</li>
+<li>parent
+: <a class="el" href="structColamd__Col__struct.html#aabae0343baec2ef7f9681bf60a23bacf">Colamd_Col_struct</a>
+</li>
+<li>ParSymbFact
+: <a class="el" href="structsuperlu__options__t.html#ae2f1847e26bce58631ca5d58ad3d46ed">superlu_options_t</a>
+</li>
+<li>perm_c
+: <a class="el" href="structfactors__t.html#af26c51d6a48540340d440ff1c20a28cc">factors_t</a>
+</li>
+<li>perm_r
+: <a class="el" href="structfactors__t.html#af0016e789d7a575ffc8945a23b3b812a">factors_t</a>
+</li>
+<li>PivotGrowth
+: <a class="el" href="structsuperlu__options__t.html#aa75cfd534f156c78b7dc69e7e68596da">superlu_options_t</a>
+</li>
+<li>prev
+: <a class="el" href="structColamd__Col__struct.html#a23aaabe8f73f1ae9016ea4bb24d494a7">Colamd_Col_struct</a>
+</li>
+<li>PrintStat
+: <a class="el" href="structsuperlu__options__t.html#aafe514c5a01fe24b70cc636621a86576">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>r
+: <a class="el" href="structcomplex.html#a6b24d5cc84eef41dbe90b79e93de030f">complex</a>
+, <a class="el" href="structdoublecomplex.html#a7b1a3f489cadc006bfe2fda973267af6">doublecomplex</a>
+</li>
+<li>RefineInitialized
+: <a class="el" href="structsuperlu__options__t.html#a6cfb6d3c0e8d5d2c8b4b813883e395b7">superlu_options_t</a>
+</li>
+<li>RefineSteps
+: <a class="el" href="structSuperLUStat__t.html#a472eadaf612c983b8829ae40b09f411b">SuperLUStat_t</a>
+</li>
+<li>ReplaceTinyPivot
+: <a class="el" href="structsuperlu__options__t.html#a791051ffa3861ba7203b0a1da2e6bf4b">superlu_options_t</a>
+</li>
+<li>rowind
+: <a class="el" href="structNCformat.html#a16eb8492bb5694035ef3e620ea8c77b1">NCformat</a>
+, <a class="el" href="structNCPformat.html#a8a27cd5a756bc313cc3c487a84e8ba30">NCPformat</a>
+, <a class="el" href="structSCformat.html#aec8a46751f64a94238495838aaed7cd2">SCformat</a>
+, <a class="el" href="structSCPformat.html#a5b4ccbb31fa3a7c2372b5a297453e200">SCPformat</a>
+</li>
+<li>rowind_colbeg
+: <a class="el" href="structSCPformat.html#a1bd16ec6ab44636e56da09d65fbe8402">SCPformat</a>
+</li>
+<li>rowind_colend
+: <a class="el" href="structSCPformat.html#a09c1770c0baad3c1152d48587ad084b4">SCPformat</a>
+</li>
+<li>rowind_colptr
+: <a class="el" href="structSCformat.html#a7683b1730b067ae2058004f0f18ad88d">SCformat</a>
+</li>
+<li>RowPerm
+: <a class="el" href="structsuperlu__options__t.html#ad38e45769deca7564ea75caec2ad58e6">superlu_options_t</a>
+</li>
+<li>rowptr
+: <a class="el" href="structNRformat.html#a552302eb293088d4b7040f487b430ba7">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#aadd0788ee704ffb7000b0485ee128061">NRformat_loc</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>score
+: <a class="el" href="structColamd__Col__struct.html#aa3cc8f4e719f65ba6fead93f272d7237">Colamd_Col_struct</a>
+</li>
+<li>shared1
+: <a class="el" href="structColamd__Col__struct.html#a54fd02e0751a496e05ed7f21a2b2a1f0">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#a2562d9df5820b202cd5e83696fc053f5">Colamd_Row_struct</a>
+</li>
+<li>shared2
+: <a class="el" href="structColamd__Col__struct.html#af228addd53ebe168293e7e5c3edd372e">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#aeb2ca96dcadf6490c614ed559acef59a">Colamd_Row_struct</a>
+</li>
+<li>shared3
+: <a class="el" href="structColamd__Col__struct.html#a5fc60d7e3cd5df5789a2999c08b47732">Colamd_Col_struct</a>
+</li>
+<li>shared4
+: <a class="el" href="structColamd__Col__struct.html#a4ff41bc973d32218127f4922e4c7019a">Colamd_Col_struct</a>
+</li>
+<li>size
+: <a class="el" href="structe__node.html#a2b5a49fe848fe66d1643a37ae2a842eb">e_node</a>
+, <a class="el" href="structLU__stack__t.html#af05e6775b79809e7bcc0c92da24c12f5">LU_stack_t</a>
+</li>
+<li>SolveInitialized
+: <a class="el" href="structsuperlu__options__t.html#a246344bda7ff7d5547101c2f01737ee7">superlu_options_t</a>
+</li>
+<li>stack
+: <a class="el" href="structGlobalLU__t.html#a9c8f24b1d7ed85996df0ab869b472b0e">GlobalLU_t</a>
+</li>
+<li>start
+: <a class="el" href="structColamd__Col__struct.html#a55c862b22c87023300b5ccb3044e0409">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#a24285056395b1cf2e28ea3810d67d09d">Colamd_Row_struct</a>
+</li>
+<li>Store
+: <a class="el" href="structSuperMatrix.html#a73ebca1b46bb24536226b9378e01c5b5">SuperMatrix</a>
+</li>
+<li>Stype
+: <a class="el" href="structSuperMatrix.html#ab37e181824f50a405272451afc399952">SuperMatrix</a>
+</li>
+<li>sup_to_col
+: <a class="el" href="structSCformat.html#ad5cb1b2ae17c5fe554c3b70721718b08">SCformat</a>
+</li>
+<li>sup_to_colbeg
+: <a class="el" href="structSCPformat.html#a345ad774183c979674dd0960a930508e">SCPformat</a>
+</li>
+<li>sup_to_colend
+: <a class="el" href="structSCPformat.html#a8e470d085ca7b39645336943a1f2eae6">SCPformat</a>
+</li>
+<li>supno
+: <a class="el" href="structGlobalLU__t.html#afe003e9f68a924d5ba66c6f655bea55c">GlobalLU_t</a>
+</li>
+<li>SymmetricMode
+: <a class="el" href="structsuperlu__options__t.html#aad1b52d0366ae8601e97fab5c470c45d">superlu_options_t</a>
+</li>
+<li>SymPattern
+: <a class="el" href="structsuperlu__options__t.html#adc6cd684f5db9572895041e8ccf343b0">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>thickness
+: <a class="el" href="structColamd__Col__struct.html#aa52760c0c184f617d10b9946618ebc9b">Colamd_Col_struct</a>
+</li>
+<li>TinyPivots
+: <a class="el" href="structSuperLUStat__t.html#ad752e80fc9fa85195ec9c0e9a17b481c">SuperLUStat_t</a>
+</li>
+<li>top1
+: <a class="el" href="structLU__stack__t.html#a3ba965e6621326c518c95d791afe6fef">LU_stack_t</a>
+</li>
+<li>top2
+: <a class="el" href="structLU__stack__t.html#a1ae2a485bc81409ceb05bce271363901">LU_stack_t</a>
+</li>
+<li>total_needed
+: <a class="el" href="structmem__usage__t.html#a7225324e3925e071e95a58d49367a88a">mem_usage_t</a>
+</li>
+<li>Trans
+: <a class="el" href="structsuperlu__options__t.html#a23fa8259c7091d82f10f0dfc7718dc36">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>U
+: <a class="el" href="structfactors__t.html#a336bf3fd72304c337b78e71607de7d1e">factors_t</a>
+</li>
+<li>ucol
+: <a class="el" href="structGlobalLU__t.html#a80274bbd108f6f02a23611f76efb73c4">GlobalLU_t</a>
+</li>
+<li>used
+: <a class="el" href="structLU__stack__t.html#a78ad1773677b220bd843c9d84bbda869">LU_stack_t</a>
+</li>
+<li>usub
+: <a class="el" href="structGlobalLU__t.html#a96b0443ea47703100b9ecad92137dda9">GlobalLU_t</a>
+</li>
+<li>utime
+: <a class="el" href="structSuperLUStat__t.html#a5eccc9eba32b749c87f7a97991cfdc18">SuperLUStat_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>xlsub
+: <a class="el" href="structGlobalLU__t.html#ac6f1655e303e2947524c29182d0f6a1e">GlobalLU_t</a>
+</li>
+<li>xlusup
+: <a class="el" href="structGlobalLU__t.html#aaa63b1382a358278bd2775c921a84246">GlobalLU_t</a>
+</li>
+<li>xsup
+: <a class="el" href="structGlobalLU__t.html#a94902a11c68912c2d456a58edd29f31d">GlobalLU_t</a>
+</li>
+<li>xusub
+: <a class="el" href="structGlobalLU__t.html#a4cbf4786dd6fc6541d5e097b27ab6835">GlobalLU_t</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/functions_vars.html b/SuperLU_5.2.0/DOC/html/functions_vars.html
new file mode 100644
index 0000000..5bbc5d3
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/functions_vars.html
@@ -0,0 +1,508 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <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 class="current"><a href="#index_x"><span>x</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>array
+: <a class="el" href="structLU__stack__t.html#ac76a2713e4f4c516d7189303b6f82c8d">LU_stack_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>col_to_sup
+: <a class="el" href="structSCformat.html#a75a51eef4af5a906cde9a32eddcb2fc1">SCformat</a>
+, <a class="el" href="structSCPformat.html#aba16553c2896f7c88450621f18b54bae">SCPformat</a>
+</li>
+<li>colbeg
+: <a class="el" href="structNCPformat.html#a2192334a0f76d4c18784caa1f8783f01">NCPformat</a>
+</li>
+<li>colend
+: <a class="el" href="structNCPformat.html#a86dcc41e83595a12ecd88d57748430c0">NCPformat</a>
+</li>
+<li>colind
+: <a class="el" href="structNRformat.html#a25b76fc1f79b314a99c1e8f8522d77af">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#a5d192fc35ba0915afa42f36eca0e2d78">NRformat_loc</a>
+</li>
+<li>ColPerm
+: <a class="el" href="structsuperlu__options__t.html#af6e41a7d8ca989c5396f6edc67be0409">superlu_options_t</a>
+</li>
+<li>colptr
+: <a class="el" href="structNCformat.html#a881f460e39f34bbbf70909b6b0629adc">NCformat</a>
+</li>
+<li>ConditionNumber
+: <a class="el" href="structsuperlu__options__t.html#a3394d6658ec588071a9fee24a728eb07">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>degree
+: <a class="el" href="structColamd__Row__struct.html#a01e336d70f1cbe2ac615d4b23c480ecd">Colamd_Row_struct</a>
+</li>
+<li>degree_next
+: <a class="el" href="structColamd__Col__struct.html#a39ab48d1ea2a8f6d365b60886c9ac5a1">Colamd_Col_struct</a>
+</li>
+<li>DiagPivotThresh
+: <a class="el" href="structsuperlu__options__t.html#ae574f08a3f4094dae8f635690b71d944">superlu_options_t</a>
+</li>
+<li>Dtype
+: <a class="el" href="structSuperMatrix.html#aedd4bd451819549620b49076a62dfdcc">SuperMatrix</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>Equil
+: <a class="el" href="structsuperlu__options__t.html#a3fe998e3518ad90532072fa8929a1e2f">superlu_options_t</a>
+</li>
+<li>expanders
+: <a class="el" href="structGlobalLU__t.html#aedd2ee950bd57f92d4aa9028738b9bdc">GlobalLU_t</a>
+</li>
+<li>expansions
+: <a class="el" href="structSuperLUStat__t.html#ab0281af9350a75b2d4a3108b8bc0bf23">SuperLUStat_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>Fact
+: <a class="el" href="structsuperlu__options__t.html#acbd3cc1d27bbaf5bc168ebbbd6bf60fe">superlu_options_t</a>
+</li>
+<li>first_column
+: <a class="el" href="structColamd__Row__struct.html#af7bf4c87b04e63e6b1abc2c86e8d1376">Colamd_Row_struct</a>
+</li>
+<li>for_lu
+: <a class="el" href="structmem__usage__t.html#aea63300065ca81e5387c1706d7b3e705">mem_usage_t</a>
+</li>
+<li>fst_row
+: <a class="el" href="structNRformat__loc.html#acab0ad4c74c4b4f0c68647f98b430cd9">NRformat_loc</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>hash
+: <a class="el" href="structColamd__Col__struct.html#ababfe23e6edb41b345085470e52d7264">Colamd_Col_struct</a>
+</li>
+<li>hash_next
+: <a class="el" href="structColamd__Col__struct.html#a640f93b7885fb94b7dc0330041b53795">Colamd_Col_struct</a>
+</li>
+<li>headhash
+: <a class="el" href="structColamd__Col__struct.html#a16435510e5d93025bb7b9f5715a5ba1c">Colamd_Col_struct</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>i
+: <a class="el" href="structcomplex.html#a5eefa12b02189d694af536bc7d8726be">complex</a>
+, <a class="el" href="structdoublecomplex.html#a336ddbef83d1878426558d417a6ecfbb">doublecomplex</a>
+</li>
+<li>ILU_DropRule
+: <a class="el" href="structsuperlu__options__t.html#ac0ca2f81f68ad7596f2ada5739acc4d5">superlu_options_t</a>
+</li>
+<li>ILU_DropTol
+: <a class="el" href="structsuperlu__options__t.html#a4f629bb593cb42f213887d521c8f2288">superlu_options_t</a>
+</li>
+<li>ILU_FillFactor
+: <a class="el" href="structsuperlu__options__t.html#acf43941c86c9f3d1b46a6655f97bac70">superlu_options_t</a>
+</li>
+<li>ILU_FillTol
+: <a class="el" href="structsuperlu__options__t.html#a8021fa436ad10dfdee734364bcd428c5">superlu_options_t</a>
+</li>
+<li>ILU_MILU
+: <a class="el" href="structsuperlu__options__t.html#a74708fd3231a761394bed90da1eba63b">superlu_options_t</a>
+</li>
+<li>ILU_MILU_Dim
+: <a class="el" href="structsuperlu__options__t.html#aba6edb00ac03655feb075bf9d6904d18">superlu_options_t</a>
+</li>
+<li>ILU_Norm
+: <a class="el" href="structsuperlu__options__t.html#ad8ed1b7a0243a10193ff792053b281c9">superlu_options_t</a>
+</li>
+<li>IterRefine
+: <a class="el" href="structsuperlu__options__t.html#a3e40fb39641e0caf27feb6998d21d98a">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>L
+: <a class="el" href="structfactors__t.html#a17d4587aa0c7b0e0e39300d4087d4131">factors_t</a>
+</li>
+<li>lda
+: <a class="el" href="structDNformat.html#a6b584837b30f33849c6c3b070aade816">DNformat</a>
+</li>
+<li>length
+: <a class="el" href="structColamd__Col__struct.html#ac61e32f7e56a6673058c0d57cb170f22">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#a4cf6076c6aeab980aa2add1c24913c35">Colamd_Row_struct</a>
+</li>
+<li>lookahead_etree
+: <a class="el" href="structsuperlu__options__t.html#afc61bd084a107fbb1de50ca617c3f59c">superlu_options_t</a>
+</li>
+<li>lsub
+: <a class="el" href="structGlobalLU__t.html#a4e7e8cd3ba09e252a04eaf0b8af5fccd">GlobalLU_t</a>
+</li>
+<li>lusup
+: <a class="el" href="structGlobalLU__t.html#ac7ea00f7770c21f78c3576565899dc33">GlobalLU_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>m_loc
+: <a class="el" href="structNRformat__loc.html#a90413dc3eb197a83b70cc0d97e4c54af">NRformat_loc</a>
+</li>
+<li>mark
+: <a class="el" href="structColamd__Row__struct.html#a00b8bd69ce2b84d9b75c5503d80c5080">Colamd_Row_struct</a>
+</li>
+<li>mem
+: <a class="el" href="structe__node.html#a6a040bdcee064559b0b480a96ccfac65">e_node</a>
+</li>
+<li>MemModel
+: <a class="el" href="structGlobalLU__t.html#a9089591bf01db5135a9d52cb732b0f3c">GlobalLU_t</a>
+</li>
+<li>Mtype
+: <a class="el" href="structSuperMatrix.html#a42877db0cfad1033374474f48e4b3fc4">SuperMatrix</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>n
+: <a class="el" href="structGlobalLU__t.html#a48fcf5a7ff751514d92feeb40370fe5e">GlobalLU_t</a>
+</li>
+<li>ncol
+: <a class="el" href="structSuperMatrix.html#ab8b85bf206c36ebc2223cc2ec6acbe8c">SuperMatrix</a>
+</li>
+<li>nnz
+: <a class="el" href="structNCformat.html#affa2566dd89ea8ce6422f788887b5b27">NCformat</a>
+, <a class="el" href="structNCPformat.html#ac8c12ffc9edd0906608612727ad406ed">NCPformat</a>
+, <a class="el" href="structNRformat.html#ae3652d6a08cf47208db6abbd162bdee2">NRformat</a>
+, <a class="el" href="structSCformat.html#a3808f35bd097fbc0a39e3e65ee2a8d4a">SCformat</a>
+, <a class="el" href="structSCPformat.html#ad4b6e7424269c3cbe9a368604433870e">SCPformat</a>
+</li>
+<li>nnz_loc
+: <a class="el" href="structNRformat__loc.html#a41c309cb83dedeaa82c0e4e137ea4785">NRformat_loc</a>
+</li>
+<li>nnzL
+: <a class="el" href="structsuperlu__options__t.html#a2895f3e0cc73b730ae1b2dc14e306bfb">superlu_options_t</a>
+</li>
+<li>nnzU
+: <a class="el" href="structsuperlu__options__t.html#a4f1e7c0f5c61713355438db096175d33">superlu_options_t</a>
+</li>
+<li>nrow
+: <a class="el" href="structSuperMatrix.html#ab1d854b814f0757e7ff7e0da01c6ef43">SuperMatrix</a>
+</li>
+<li>nsuper
+: <a class="el" href="structSCformat.html#aafffc008b0b8e57b9cdf5689a527bd8c">SCformat</a>
+, <a class="el" href="structSCPformat.html#a20ee99d8cfb0cecad94373e2eb5abef8">SCPformat</a>
+</li>
+<li>num_expansions
+: <a class="el" href="structGlobalLU__t.html#a1923c63f76eab75f5022f025c25a82a7">GlobalLU_t</a>
+</li>
+<li>num_lookaheads
+: <a class="el" href="structsuperlu__options__t.html#aff4e1b4ecbbbd1e699fdd129df05534b">superlu_options_t</a>
+</li>
+<li>nzlmax
+: <a class="el" href="structGlobalLU__t.html#a1f77873222d31cd15eb781fdbf18df18">GlobalLU_t</a>
+</li>
+<li>nzlumax
+: <a class="el" href="structGlobalLU__t.html#ae67b1da1b096e92b7ddadf6e4a159481">GlobalLU_t</a>
+</li>
+<li>nzumax
+: <a class="el" href="structGlobalLU__t.html#a5238cd65bea5ca45046238d908073982">GlobalLU_t</a>
+</li>
+<li>nzval
+: <a class="el" href="structDNformat.html#a54a061275c52aa9e38f4cb65da46d48c">DNformat</a>
+, <a class="el" href="structNCformat.html#aa3e85810bb190b7359d8aaa956a64e64">NCformat</a>
+, <a class="el" href="structNCPformat.html#a519ed66fdf9da30c76c079474503c764">NCPformat</a>
+, <a class="el" href="structNRformat.html#a3933d6611dc87efede947b08ea8d83f2">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#a08b19d74f15e6475f43565035ae898ca">NRformat_loc</a>
+, <a class="el" href="structSCformat.html#a25011a4746e4cf0a6fbc38ba45a70e91">SCformat</a>
+, <a class="el" href="structSCPformat.html#a028e5f9ef15054302c1403969c37a0fb">SCPformat</a>
+</li>
+<li>nzval_colbeg
+: <a class="el" href="structSCPformat.html#aa9bae5f483aa1a22aec18f5c2393f05e">SCPformat</a>
+</li>
+<li>nzval_colend
+: <a class="el" href="structSCPformat.html#a098e9a5c87e2c0b35c82852b1910334d">SCPformat</a>
+</li>
+<li>nzval_colptr
+: <a class="el" href="structSCformat.html#a41e93b73c8bce9326f035e3647ee94ca">SCformat</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>ops
+: <a class="el" href="structSuperLUStat__t.html#aec6afa389e49ac9d04dc44e24805c99d">SuperLUStat_t</a>
+</li>
+<li>order
+: <a class="el" href="structColamd__Col__struct.html#a22ecb292b2471f0a09316656713bfe6e">Colamd_Col_struct</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>p
+: <a class="el" href="structColamd__Row__struct.html#acb0d165350cbbdad8dc4260bd48b1f80">Colamd_Row_struct</a>
+</li>
+<li>panel_histo
+: <a class="el" href="structSuperLUStat__t.html#a9a15399d38ecaf731ec300977f268b75">SuperLUStat_t</a>
+</li>
+<li>parent
+: <a class="el" href="structColamd__Col__struct.html#aabae0343baec2ef7f9681bf60a23bacf">Colamd_Col_struct</a>
+</li>
+<li>ParSymbFact
+: <a class="el" href="structsuperlu__options__t.html#ae2f1847e26bce58631ca5d58ad3d46ed">superlu_options_t</a>
+</li>
+<li>perm_c
+: <a class="el" href="structfactors__t.html#af26c51d6a48540340d440ff1c20a28cc">factors_t</a>
+</li>
+<li>perm_r
+: <a class="el" href="structfactors__t.html#af0016e789d7a575ffc8945a23b3b812a">factors_t</a>
+</li>
+<li>PivotGrowth
+: <a class="el" href="structsuperlu__options__t.html#aa75cfd534f156c78b7dc69e7e68596da">superlu_options_t</a>
+</li>
+<li>prev
+: <a class="el" href="structColamd__Col__struct.html#a23aaabe8f73f1ae9016ea4bb24d494a7">Colamd_Col_struct</a>
+</li>
+<li>PrintStat
+: <a class="el" href="structsuperlu__options__t.html#aafe514c5a01fe24b70cc636621a86576">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>r
+: <a class="el" href="structcomplex.html#a6b24d5cc84eef41dbe90b79e93de030f">complex</a>
+, <a class="el" href="structdoublecomplex.html#a7b1a3f489cadc006bfe2fda973267af6">doublecomplex</a>
+</li>
+<li>RefineInitialized
+: <a class="el" href="structsuperlu__options__t.html#a6cfb6d3c0e8d5d2c8b4b813883e395b7">superlu_options_t</a>
+</li>
+<li>RefineSteps
+: <a class="el" href="structSuperLUStat__t.html#a472eadaf612c983b8829ae40b09f411b">SuperLUStat_t</a>
+</li>
+<li>ReplaceTinyPivot
+: <a class="el" href="structsuperlu__options__t.html#a791051ffa3861ba7203b0a1da2e6bf4b">superlu_options_t</a>
+</li>
+<li>rowind
+: <a class="el" href="structNCformat.html#a16eb8492bb5694035ef3e620ea8c77b1">NCformat</a>
+, <a class="el" href="structNCPformat.html#a8a27cd5a756bc313cc3c487a84e8ba30">NCPformat</a>
+, <a class="el" href="structSCformat.html#aec8a46751f64a94238495838aaed7cd2">SCformat</a>
+, <a class="el" href="structSCPformat.html#a5b4ccbb31fa3a7c2372b5a297453e200">SCPformat</a>
+</li>
+<li>rowind_colbeg
+: <a class="el" href="structSCPformat.html#a1bd16ec6ab44636e56da09d65fbe8402">SCPformat</a>
+</li>
+<li>rowind_colend
+: <a class="el" href="structSCPformat.html#a09c1770c0baad3c1152d48587ad084b4">SCPformat</a>
+</li>
+<li>rowind_colptr
+: <a class="el" href="structSCformat.html#a7683b1730b067ae2058004f0f18ad88d">SCformat</a>
+</li>
+<li>RowPerm
+: <a class="el" href="structsuperlu__options__t.html#ad38e45769deca7564ea75caec2ad58e6">superlu_options_t</a>
+</li>
+<li>rowptr
+: <a class="el" href="structNRformat.html#a552302eb293088d4b7040f487b430ba7">NRformat</a>
+, <a class="el" href="structNRformat__loc.html#aadd0788ee704ffb7000b0485ee128061">NRformat_loc</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>score
+: <a class="el" href="structColamd__Col__struct.html#aa3cc8f4e719f65ba6fead93f272d7237">Colamd_Col_struct</a>
+</li>
+<li>shared1
+: <a class="el" href="structColamd__Col__struct.html#a54fd02e0751a496e05ed7f21a2b2a1f0">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#a2562d9df5820b202cd5e83696fc053f5">Colamd_Row_struct</a>
+</li>
+<li>shared2
+: <a class="el" href="structColamd__Col__struct.html#af228addd53ebe168293e7e5c3edd372e">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#aeb2ca96dcadf6490c614ed559acef59a">Colamd_Row_struct</a>
+</li>
+<li>shared3
+: <a class="el" href="structColamd__Col__struct.html#a5fc60d7e3cd5df5789a2999c08b47732">Colamd_Col_struct</a>
+</li>
+<li>shared4
+: <a class="el" href="structColamd__Col__struct.html#a4ff41bc973d32218127f4922e4c7019a">Colamd_Col_struct</a>
+</li>
+<li>size
+: <a class="el" href="structe__node.html#a2b5a49fe848fe66d1643a37ae2a842eb">e_node</a>
+, <a class="el" href="structLU__stack__t.html#af05e6775b79809e7bcc0c92da24c12f5">LU_stack_t</a>
+</li>
+<li>SolveInitialized
+: <a class="el" href="structsuperlu__options__t.html#a246344bda7ff7d5547101c2f01737ee7">superlu_options_t</a>
+</li>
+<li>stack
+: <a class="el" href="structGlobalLU__t.html#a9c8f24b1d7ed85996df0ab869b472b0e">GlobalLU_t</a>
+</li>
+<li>start
+: <a class="el" href="structColamd__Col__struct.html#a55c862b22c87023300b5ccb3044e0409">Colamd_Col_struct</a>
+, <a class="el" href="structColamd__Row__struct.html#a24285056395b1cf2e28ea3810d67d09d">Colamd_Row_struct</a>
+</li>
+<li>Store
+: <a class="el" href="structSuperMatrix.html#a73ebca1b46bb24536226b9378e01c5b5">SuperMatrix</a>
+</li>
+<li>Stype
+: <a class="el" href="structSuperMatrix.html#ab37e181824f50a405272451afc399952">SuperMatrix</a>
+</li>
+<li>sup_to_col
+: <a class="el" href="structSCformat.html#ad5cb1b2ae17c5fe554c3b70721718b08">SCformat</a>
+</li>
+<li>sup_to_colbeg
+: <a class="el" href="structSCPformat.html#a345ad774183c979674dd0960a930508e">SCPformat</a>
+</li>
+<li>sup_to_colend
+: <a class="el" href="structSCPformat.html#a8e470d085ca7b39645336943a1f2eae6">SCPformat</a>
+</li>
+<li>supno
+: <a class="el" href="structGlobalLU__t.html#afe003e9f68a924d5ba66c6f655bea55c">GlobalLU_t</a>
+</li>
+<li>SymmetricMode
+: <a class="el" href="structsuperlu__options__t.html#aad1b52d0366ae8601e97fab5c470c45d">superlu_options_t</a>
+</li>
+<li>SymPattern
+: <a class="el" href="structsuperlu__options__t.html#adc6cd684f5db9572895041e8ccf343b0">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>thickness
+: <a class="el" href="structColamd__Col__struct.html#aa52760c0c184f617d10b9946618ebc9b">Colamd_Col_struct</a>
+</li>
+<li>TinyPivots
+: <a class="el" href="structSuperLUStat__t.html#ad752e80fc9fa85195ec9c0e9a17b481c">SuperLUStat_t</a>
+</li>
+<li>top1
+: <a class="el" href="structLU__stack__t.html#a3ba965e6621326c518c95d791afe6fef">LU_stack_t</a>
+</li>
+<li>top2
+: <a class="el" href="structLU__stack__t.html#a1ae2a485bc81409ceb05bce271363901">LU_stack_t</a>
+</li>
+<li>total_needed
+: <a class="el" href="structmem__usage__t.html#a7225324e3925e071e95a58d49367a88a">mem_usage_t</a>
+</li>
+<li>Trans
+: <a class="el" href="structsuperlu__options__t.html#a23fa8259c7091d82f10f0dfc7718dc36">superlu_options_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>U
+: <a class="el" href="structfactors__t.html#a336bf3fd72304c337b78e71607de7d1e">factors_t</a>
+</li>
+<li>ucol
+: <a class="el" href="structGlobalLU__t.html#a80274bbd108f6f02a23611f76efb73c4">GlobalLU_t</a>
+</li>
+<li>used
+: <a class="el" href="structLU__stack__t.html#a78ad1773677b220bd843c9d84bbda869">LU_stack_t</a>
+</li>
+<li>usub
+: <a class="el" href="structGlobalLU__t.html#a96b0443ea47703100b9ecad92137dda9">GlobalLU_t</a>
+</li>
+<li>utime
+: <a class="el" href="structSuperLUStat__t.html#a5eccc9eba32b749c87f7a97991cfdc18">SuperLUStat_t</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>xlsub
+: <a class="el" href="structGlobalLU__t.html#ac6f1655e303e2947524c29182d0f6a1e">GlobalLU_t</a>
+</li>
+<li>xlusup
+: <a class="el" href="structGlobalLU__t.html#aaa63b1382a358278bd2775c921a84246">GlobalLU_t</a>
+</li>
+<li>xsup
+: <a class="el" href="structGlobalLU__t.html#a94902a11c68912c2d456a58edd29f31d">GlobalLU_t</a>
+</li>
+<li>xusub
+: <a class="el" href="structGlobalLU__t.html#a4cbf4786dd6fc6541d5e097b27ab6835">GlobalLU_t</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/get__perm__c_8c.html b/SuperLU_5.2.0/DOC/html/get__perm__c_8c.html
new file mode 100644
index 0000000..245de28
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/get__perm__c_8c.html
@@ -0,0 +1,454 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/get_perm_c.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">get_perm_c.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Matrix permutation operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for get_perm_c.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="get__perm__c_8c__incl.png" border="0" usemap="#SRC_2get__perm__c_8c" alt=""/></div>
+<map name="SRC_2get__perm__c_8c" id="SRC_2get__perm__c_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="303,80,392,107"/><area shape="rect" id="node14" href="colamd_8h.html" title="Colamd prototypes and definitions. " alt="" coords="123,80,196,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="351,155,457,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a792508355b6bef974fcd9e214de40c8e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#a792508355b6bef974fcd9e214de40c8e">genmmd_</a> (int *, int *, int *, int *, int *, int *, int *, int *, int *, int *, int *, int *)</td></tr>
+<tr class="separator:a792508355b6bef974fcd9e214de40c8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae92c26cd488b7a86b8277cee2773d8ef"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#ae92c26cd488b7a86b8277cee2773d8ef">get_colamd</a> (const int m, const int n, const int nnz, int *colptr, int *rowind, int *perm_c)</td></tr>
+<tr class="separator:ae92c26cd488b7a86b8277cee2773d8ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a90f30e2b284864f6a800a98ceaff8fbc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#a90f30e2b284864f6a800a98ceaff8fbc">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 class="separator:a90f30e2b284864f6a800a98ceaff8fbc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a486ee50799ff66abe91efa46a5950a57"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#a486ee50799ff66abe91efa46a5950a57">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 class="separator:a486ee50799ff66abe91efa46a5950a57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaecb6e6e7a3e97356050bcfdf2573796"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="get__perm__c_8c.html#aaecb6e6e7a3e97356050bcfdf2573796">get_perm_c</a> (int ispec, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c)</td></tr>
+<tr class="separator:aaecb6e6e7a3e97356050bcfdf2573796"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+August 1, 2008
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a486ee50799ff66abe91efa46a5950a57"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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>
+<a class="anchor" id="a792508355b6bef974fcd9e214de40c8e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="get__perm__c_8c_a792508355b6bef974fcd9e214de40c8e_cgraph.png" border="0" usemap="#get__perm__c_8c_a792508355b6bef974fcd9e214de40c8e_cgraph" alt=""/></div>
+<map name="get__perm__c_8c_a792508355b6bef974fcd9e214de40c8e_cgraph" id="get__perm__c_8c_a792508355b6bef974fcd9e214de40c8e_cgraph">
+<area shape="rect" id="node2" href="mmd_8c.html#aa2316cb2242b53dcc29d8702695529dc" title="slu_mmdelm_" alt="" coords="135,5,238,32"/><area shape="rect" id="node4" href="mmd_8c.html#a83b58ad42d9bbb1640df4288c6e365cc" title="slu_mmdupd_" alt="" coords="135,56,238,83"/><area shape="rect" id="node5" href="mmd_8c.html#a6b93615db0866c639c195ea23e1b9ae5" title="slu_mmdint_" alt="" coords="139,107,235,133"/><area shape="rect" id="node6" href="mmd_8c.html#a6b0bfa084ff428e2c04e1aa96968018b" title= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ae92c26cd488b7a86b8277cee2773d8ef"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="get__perm__c_8c_ae92c26cd488b7a86b8277cee2773d8ef_cgraph.png" border="0" usemap="#get__perm__c_8c_ae92c26cd488b7a86b8277cee2773d8ef_cgraph" alt=""/></div>
+<map name="get__perm__c_8c_ae92c26cd488b7a86b8277cee2773d8ef_cgraph" id="get__perm__c_8c_ae92c26cd488b7a86b8277cee2773d8ef_cgraph">
+<area shape="rect" id="node2" href="colamd_8c.html#aac7214b99bcf4db1b13547521367817f" title="colamd_recommended" alt="" coords="145,5,298,32"/><area shape="rect" id="node3" href="colamd_8c.html#acd15277a8a063dd0586e280004a92c89" title="colamd_set_defaults" alt="" coords="347,43,490,69"/><area shape="rect" id="node4" href="colamd_8c.html#a4ace2482b681af56de48dd3ba8971baf" title="colamd" alt="" coords="189,132,253,159"/><area shape="rect" id="node5" href="colamd_8c.html#ad632adbb6b5d251680 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aaecb6e6e7a3e97356050bcfdf2573796"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="get__perm__c_8c_aaecb6e6e7a3e97356050bcfdf2573796_cgraph.png" border="0" usemap="#get__perm__c_8c_aaecb6e6e7a3e97356050bcfdf2573796_cgraph" alt=""/></div>
+<map name="get__perm__c_8c_aaecb6e6e7a3e97356050bcfdf2573796_cgraph" id="get__perm__c_8c_aaecb6e6e7a3e97356050bcfdf2573796_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="145,5,261,32"/><area shape="rect" id="node3" href="get__perm__c_8c.html#a90f30e2b284864f6a800a98ceaff8fbc" title="getata" alt="" coords="173,56,232,83"/><area shape="rect" id="node4" href="get__perm__c_8c.html#a486ee50799ff66abe91efa46a5950a57" title="at_plus_a" alt="" coords="163,107,242,133"/><area shape="rect" id="node5" href="get__perm__c_8c.html#ae92c26cd4 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a90f30e2b284864f6a800a98ceaff8fbc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre><h1>Questions
+</h1>
+</pre><pre>
+ o Do I need to withhold the <em>dense</em> rows?
+ o How do I know the number of nonzeros in A'*A?
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/globals.html b/SuperLU_5.2.0/DOC/html/globals.html
new file mode 100644
index 0000000..3455c96
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/globals.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <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>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_a.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_e.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_f.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_h.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_o.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_r.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_x.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_y.html#index_y"><span>y</span></a></li>
+ <li><a href="globals_z.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_compare_()
+: <a class="el" href="ilu__cdrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">ilu_cdrop_row.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">ilu_zdrop_row.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">ilu_sdrop_row.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">ilu_ddrop_row.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/globals_defs.html b/SuperLU_5.2.0/DOC/html/globals_defs.html
new file mode 100644
index 0000000..d5be80c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/globals_defs.html
@@ -0,0 +1,575 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <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>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <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_h"><span>h</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 class="current"><a href="#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>ABORT
+: <a class="el" href="slu__util_8h.html#aa4b133a54309e2c6e4ba69f3ff1141c2">slu_util.h</a>
+</li>
+<li>abs
+: <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">mc64ad.c</a>
+</li>
+<li>ADD_
+: <a class="el" href="slu__Cnames_8h.html#a42e4b5fadd9f6757585096fa059eea29">slu_Cnames.h</a>
+</li>
+<li>ADD__
+: <a class="el" href="slu__Cnames_8h.html#a64e86942f56cb415dbbbf31c6f390542">slu_Cnames.h</a>
+</li>
+<li>ALIVE
+: <a class="el" href="colamd_8c.html#ad8beef706da0344be19d59438fcdab6d">colamd.c</a>
+</li>
+<li>ASSERT
+: <a class="el" href="colamd_8c.html#a87e006a00875d2e518652108f6cb5790">colamd.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c_add
+: <a class="el" href="slu__scomplex_8h.html#af3df9377099fd2cba886d217734ce884">slu_scomplex.h</a>
+</li>
+<li>C_CALL
+: <a class="el" href="slu__Cnames_8h.html#a26f0902a7057c96ab11966ab8404f4f6">slu_Cnames.h</a>
+</li>
+<li>c_eq
+: <a class="el" href="slu__scomplex_8h.html#a82b7c0f8931b82e92d24a076eab0e82e">slu_scomplex.h</a>
+</li>
+<li>c_sub
+: <a class="el" href="slu__scomplex_8h.html#a0fe6bb9dac5f735dd69a127519a9c841">slu_scomplex.h</a>
+</li>
+<li>cc_conj
+: <a class="el" href="slu__scomplex_8h.html#ac917679ece23ee5f61e994fb56b30e1c">slu_scomplex.h</a>
+</li>
+<li>cc_mult
+: <a class="el" href="slu__scomplex_8h.html#a515037047a218e7f77c4f495b1d6abca">slu_scomplex.h</a>
+</li>
+<li>CHECK_MALLOC
+: <a class="el" href="slu__util_8h.html#a35401f732a50d2a0af33db1ea224b1f6">slu_util.h</a>
+</li>
+<li>COL_IS_ALIVE
+: <a class="el" href="colamd_8c.html#a50f9ca65904b13f345862cb46d08d84b">colamd.c</a>
+</li>
+<li>COL_IS_DEAD
+: <a class="el" href="colamd_8c.html#aa08664bd5b8133f28dbeedc9a030fc86">colamd.c</a>
+</li>
+<li>COL_IS_DEAD_PRINCIPAL
+: <a class="el" href="colamd_8c.html#a003c0e2dae54bcb7c680333304dd4dcb">colamd.c</a>
+</li>
+<li>COLAMD_C
+: <a class="el" href="colamd_8h.html#a339fb9b07ed315667cc4542c15116c83">colamd.h</a>
+</li>
+<li>COLAMD_DEFRAG_COUNT
+: <a class="el" href="colamd_8h.html#ababfabfa19364ec563aa9c15bcc9714e">colamd.h</a>
+</li>
+<li>COLAMD_DENSE_COL
+: <a class="el" href="colamd_8h.html#af92de54efdec91d7ab64e7bec07eb12c">colamd.h</a>
+</li>
+<li>COLAMD_DENSE_ROW
+: <a class="el" href="colamd_8h.html#a45a417439d08823fa620ca00d834dd61">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_A_not_present
+: <a class="el" href="colamd_8h.html#a2347fb9e509c8bf9b97a50f96dea281c">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_A_too_small
+: <a class="el" href="colamd_8h.html#a323108d44db4186fad5a2066139f70b7">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_col_length_negative
+: <a class="el" href="colamd_8h.html#a3b6df4a489ed0c7de8ad12251cdac5d6">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_internal_error
+: <a class="el" href="colamd_8h.html#ae97b9ba07b455e4ce07c53a4d71c1169">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_ncol_negative
+: <a class="el" href="colamd_8h.html#a2feedddbe535286cbea9eca9fca91f45">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_nnz_negative
+: <a class="el" href="colamd_8h.html#a7147ea7a9d673f17ef856e9914f90c81">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_nrow_negative
+: <a class="el" href="colamd_8h.html#a8e848cfde5cdf42fcb316695305f8002">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_out_of_memory
+: <a class="el" href="colamd_8h.html#a703f11265b521c931cdd44709d141fca">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_p0_nonzero
+: <a class="el" href="colamd_8h.html#a58b5d911cc825b4334ade136bad3afd3">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_p_not_present
+: <a class="el" href="colamd_8h.html#a51d3f9714a4cb80c0f54dea5d0c5f95f">colamd.h</a>
+</li>
+<li>COLAMD_ERROR_row_index_out_of_bounds
+: <a class="el" href="colamd_8h.html#a0559e0ff07deab1841e7aaee8cde51e6">colamd.h</a>
+</li>
+<li>COLAMD_INFO1
+: <a class="el" href="colamd_8h.html#a569d56a773011e0b4e465b3f5830e80b">colamd.h</a>
+</li>
+<li>COLAMD_INFO2
+: <a class="el" href="colamd_8h.html#a2161fd78bbd688f943250d1d7583284b">colamd.h</a>
+</li>
+<li>COLAMD_INFO3
+: <a class="el" href="colamd_8h.html#a15d83814c573d742764ff83e9d1d67fc">colamd.h</a>
+</li>
+<li>COLAMD_KNOBS
+: <a class="el" href="colamd_8h.html#ae92bb10d09f7cd004f07d1baddf90548">colamd.h</a>
+</li>
+<li>COLAMD_OK
+: <a class="el" href="colamd_8h.html#aa754fd30d924c5c8d2d402fa0a482d72">colamd.h</a>
+</li>
+<li>COLAMD_OK_BUT_JUMBLED
+: <a class="el" href="colamd_8h.html#ac0d7f3882e6e9e39527aa2195dd23789">colamd.h</a>
+</li>
+<li>COLAMD_R
+: <a class="el" href="colamd_8h.html#a52e8a8827c11d9c2a1f1b87e09bc8dc0">colamd.h</a>
+</li>
+<li>COLAMD_RECOMMENDED
+: <a class="el" href="colamd_8h.html#aa6980d68bd04f7567d7d0bd40b244c2f">colamd.h</a>
+</li>
+<li>COLAMD_STATS
+: <a class="el" href="colamd_8h.html#a411703fc0a994b83ec0e00df1abfc0f7">colamd.h</a>
+</li>
+<li>COLAMD_STATUS
+: <a class="el" href="colamd_8h.html#a6a4201ce55dfa3a6375b90097e8c747e">colamd.h</a>
+</li>
+<li>cs_mult
+: <a class="el" href="slu__scomplex_8h.html#aa675d825b907fe4d939ddc2533b38bb8">slu_scomplex.h</a>
+</li>
+<li>CX
+: <a class="el" href="scsum1_8c.html#a5a76da95c549c41790389a76e12fdcb5">scsum1.c</a>
+, <a class="el" href="icmax1_8c.html#a5a76da95c549c41790389a76e12fdcb5">icmax1.c</a>
+, <a class="el" href="izmax1_8c.html#a5a76da95c549c41790389a76e12fdcb5">izmax1.c</a>
+, <a class="el" href="dzsum1_8c.html#a5a76da95c549c41790389a76e12fdcb5">dzsum1.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>d_sign
+: <a class="el" href="dlacon_8c.html#a51b3babab7bbf03500dbc5ede2a682b3">dlacon.c</a>
+, <a class="el" href="dlacon2_8c.html#a51b3babab7bbf03500dbc5ede2a682b3">dlacon2.c</a>
+, <a class="el" href="slacon2_8c.html#a51b3babab7bbf03500dbc5ede2a682b3">slacon2.c</a>
+, <a class="el" href="slacon_8c.html#a51b3babab7bbf03500dbc5ede2a682b3">slacon.c</a>
+</li>
+<li>DCOMPLEX_INCLUDE
+: <a class="el" href="slu__dcomplex_8h.html#a56454c86f7063929077dff7350bdae71">slu_dcomplex.h</a>
+</li>
+<li>DEAD
+: <a class="el" href="colamd_8c.html#a3c8793c7acb4598d2ebcd8288f29ee69">colamd.c</a>
+</li>
+<li>DEAD_NON_PRINCIPAL
+: <a class="el" href="colamd_8c.html#a0f66923672bcc495333995f7d238945f">colamd.c</a>
+</li>
+<li>DEAD_PRINCIPAL
+: <a class="el" href="colamd_8c.html#ac0adce1e7d70351cef4752f3373709af">colamd.c</a>
+</li>
+<li>DEBUG0
+: <a class="el" href="colamd_8c.html#a144524f0a43ebe1a97d576a76f6557a0">colamd.c</a>
+</li>
+<li>DEBUG1
+: <a class="el" href="colamd_8c.html#a5083dbf79682be78336cc6b458c32ab4">colamd.c</a>
+</li>
+<li>DEBUG2
+: <a class="el" href="colamd_8c.html#a65bd10ffc88aa9edca29d4f6ae0da2df">colamd.c</a>
+</li>
+<li>DEBUG3
+: <a class="el" href="colamd_8c.html#a86ce320fe5d3f3088d89fdf451943008">colamd.c</a>
+</li>
+<li>DEBUG4
+: <a class="el" href="colamd_8c.html#a0ff047166d36dd8103bd12a4fbc7f7f9">colamd.c</a>
+</li>
+<li>DoubleAlign
+: <a class="el" href="zmemory_8c.html#ac8204d321846eb4b23d563eac7e5bfa7">zmemory.c</a>
+, <a class="el" href="cmemory_8c.html#ac8204d321846eb4b23d563eac7e5bfa7">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#ac8204d321846eb4b23d563eac7e5bfa7">dmemory.c</a>
+, <a class="el" href="smemory_8c.html#ac8204d321846eb4b23d563eac7e5bfa7">smemory.c</a>
+</li>
+<li>DROP_AREA
+: <a class="el" href="slu__util_8h.html#ae56780c0f0b5afa706231cbe2b1ee82f">slu_util.h</a>
+</li>
+<li>DROP_BASIC
+: <a class="el" href="slu__util_8h.html#afb51a22d4d20fb9e39acd95129344997">slu_util.h</a>
+</li>
+<li>DROP_COLUMN
+: <a class="el" href="slu__util_8h.html#a741f1ee3e9529b1384492787d09a0c70">slu_util.h</a>
+</li>
+<li>DROP_DYNAMIC
+: <a class="el" href="slu__util_8h.html#ac6089af2caea8fef6aa343cb16fd1646">slu_util.h</a>
+</li>
+<li>DROP_INTERP
+: <a class="el" href="slu__util_8h.html#aea78484190db0dd61d91743797bf6bfe">slu_util.h</a>
+</li>
+<li>DROP_PROWS
+: <a class="el" href="slu__util_8h.html#a34a649fce94fb9a61524f3b18161aef8">slu_util.h</a>
+</li>
+<li>DROP_SECONDARY
+: <a class="el" href="slu__util_8h.html#a72349305248ecb540ca43f404884bef5">slu_util.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>EMPTY
+: <a class="el" href="colamd_8c.html#a2b7cf2a3641be7b89138615764d60ba3">colamd.c</a>
+, <a class="el" href="slu__util_8h.html#a2b7cf2a3641be7b89138615764d60ba3">slu_util.h</a>
+</li>
+<li>epsmac
+: <a class="el" href="sfgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">sfgmr.c</a>
+, <a class="el" href="fgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">fgmr.c</a>
+, <a class="el" href="dfgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">dfgmr.c</a>
+, <a class="el" href="cfgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">cfgmr.c</a>
+, <a class="el" href="zfgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">zfgmr.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>F77_CALL_C
+: <a class="el" href="slu__Cnames_8h.html#a23a1698b7e10fde5b8d52b8f3a349489">slu_Cnames.h</a>
+</li>
+<li>FALSE
+: <a class="el" href="colamd_8c.html#aa93f0eb578d23995850d61f7d61c55c1">colamd.c</a>
+, <a class="el" href="slu__util_8h.html#aa93f0eb578d23995850d61f7d61c55c1">slu_util.h</a>
+</li>
+<li>FIRSTCOL_OF_SNODE
+: <a class="el" href="slu__util_8h.html#a745e85e3ef4b1267858c9df86608518c">slu_util.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>GluIntArray
+: <a class="el" href="slu__util_8h.html#ad3754689b2ab3abc8b3afe4facdd76f3">slu_util.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>HANDLE_SIZE
+: <a class="el" href="c__fortran__cgssv_8c.html#a115eb986866b4424e9143567d902f816">c_fortran_cgssv.c</a>
+, <a class="el" href="c__fortran__zgssv_8c.html#a115eb986866b4424e9143567d902f816">c_fortran_zgssv.c</a>
+, <a class="el" href="c__fortran__sgssv_8c.html#a115eb986866b4424e9143567d902f816">c_fortran_sgssv.c</a>
+, <a class="el" href="c__fortran__dgssv_8c.html#a115eb986866b4424e9143567d902f816">c_fortran_dgssv.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>i_dnnt
+: <a class="el" href="dlacon_8c.html#adccc1e5692ca1dd160d0ca2a17e1b12c">dlacon.c</a>
+, <a class="el" href="dlacon2_8c.html#adccc1e5692ca1dd160d0ca2a17e1b12c">dlacon2.c</a>
+, <a class="el" href="slacon2_8c.html#adccc1e5692ca1dd160d0ca2a17e1b12c">slacon2.c</a>
+, <a class="el" href="slacon_8c.html#adccc1e5692ca1dd160d0ca2a17e1b12c">slacon.c</a>
+</li>
+<li>INDEX
+: <a class="el" href="colamd_8c.html#aa5fad23b2a5eed790e6661e896a506b7">colamd.c</a>
+</li>
+<li>ITMAX
+: <a class="el" href="zgsrfs_8c.html#a3641b6d4c21b7a852dbb32c2b693302e">zgsrfs.c</a>
+, <a class="el" href="sgsrfs_8c.html#a3641b6d4c21b7a852dbb32c2b693302e">sgsrfs.c</a>
+, <a class="el" href="cgsrfs_8c.html#a3641b6d4c21b7a852dbb32c2b693302e">cgsrfs.c</a>
+, <a class="el" href="dgsrfs_8c.html#a3641b6d4c21b7a852dbb32c2b693302e">dgsrfs.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>KILL_NON_PRINCIPAL_COL
+: <a class="el" href="colamd_8c.html#a0458a358e752473d86e6f21a56b44a26">colamd.c</a>
+</li>
+<li>KILL_PRINCIPAL_COL
+: <a class="el" href="colamd_8c.html#a7882929a7898e09a3de9e7676ae1aa29">colamd.c</a>
+</li>
+<li>KILL_ROW
+: <a class="el" href="colamd_8c.html#adde21248544152df48ab70b6da1b38b5">colamd.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>L_FST_SUPC
+: <a class="el" href="slu__util_8h.html#a0ea367a3afecd30b570d0a46cc819cdf">slu_util.h</a>
+</li>
+<li>L_NZ_START
+: <a class="el" href="slu__util_8h.html#a79b13489e4cd00b09633e0c5e0be1b7c">slu_util.h</a>
+</li>
+<li>L_SUB
+: <a class="el" href="slu__util_8h.html#a8de2450f2d4cf12794954b63a319c423">slu_util.h</a>
+</li>
+<li>L_SUB_START
+: <a class="el" href="slu__util_8h.html#a445a44f88349753bc17f28fbac4df382">slu_util.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>MAX
+: <a class="el" href="colamd_8c.html#afa99ec4acc4ecb2dc3c2d05da15d0e3f">colamd.c</a>
+</li>
+<li>MILU_ALPHA
+: <a class="el" href="slu__util_8h.html#a90dea7f830398b8c30be7488e24089bb">slu_util.h</a>
+</li>
+<li>min
+: <a class="el" href="mc64ad_8c.html#ac6afabdc09a49a433ee19d8a9486056d">mc64ad.c</a>
+</li>
+<li>MIN
+: <a class="el" href="colamd_8c.html#a3acffbd305ee72dcd4593c0d8af64a4f">colamd.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NBUCKS
+: <a class="el" href="util_8c.html#a70f31d2c4d8d0802751120e07028bd3a">util.c</a>
+</li>
+<li>NDEBUG
+: <a class="el" href="colamd_8c.html#a8de3ed741dadc9c979a4ff17c0a9116e">colamd.c</a>
+</li>
+<li>NO_MARKER
+: <a class="el" href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">slu_util.h</a>
+</li>
+<li>NO_MEMTYPE
+: <a class="el" href="slu__util_8h.html#ab9ccb8b9963ca083d7f36f5d3acc5744">slu_util.h</a>
+</li>
+<li>NOCHANGE
+: <a class="el" href="slu__Cnames_8h.html#af42b337af878eff44b9d6792ee59faf7">slu_Cnames.h</a>
+</li>
+<li>NODROP
+: <a class="el" href="slu__util_8h.html#aaa1b4d4ec24548decf1f389060a7d878">slu_util.h</a>
+</li>
+<li>NotDoubleAlign
+: <a class="el" href="zmemory_8c.html#ac11b1c3847a3d397e9675de40782134d">zmemory.c</a>
+, <a class="el" href="smemory_8c.html#ac11b1c3847a3d397e9675de40782134d">smemory.c</a>
+, <a class="el" href="dmemory_8c.html#ac11b1c3847a3d397e9675de40782134d">dmemory.c</a>
+, <a class="el" href="cmemory_8c.html#ac11b1c3847a3d397e9675de40782134d">cmemory.c</a>
+</li>
+<li>NUM_TEMPV
+: <a class="el" href="slu__util_8h.html#a06193b28f40a4779ae7737711642eb45">slu_util.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>OLD_CRAY
+: <a class="el" href="slu__Cnames_8h.html#af29cc13eea735d836498590d413904a4">slu_Cnames.h</a>
+</li>
+<li>ONES_COMPLEMENT
+: <a class="el" href="colamd_8c.html#af4201cc2809d450d2484680ee1b958ca">colamd.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PRINTF
+: <a class="el" href="colamd_8c.html#ae1649fc947ca37a86917a08354f48d1a">colamd.c</a>
+</li>
+<li>PRIVATE
+: <a class="el" href="colamd_8c.html#a5e151c615eda34903514212f05a5ccf8">colamd.c</a>
+</li>
+<li>PUBLIC
+: <a class="el" href="colamd_8c.html#ad17d551e31d1828c68acf40684849b7e">colamd.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>Reduce
+: <a class="el" href="cmemory_8c.html#a7b2a35bfd2e6c9d03e2a6ccdba9fa847">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#a7b2a35bfd2e6c9d03e2a6ccdba9fa847">dmemory.c</a>
+, <a class="el" href="zmemory_8c.html#a7b2a35bfd2e6c9d03e2a6ccdba9fa847">zmemory.c</a>
+, <a class="el" href="smemory_8c.html#a7b2a35bfd2e6c9d03e2a6ccdba9fa847">smemory.c</a>
+</li>
+<li>ROW_IS_ALIVE
+: <a class="el" href="colamd_8c.html#abc775359cfa45ffaf6250522c521110d">colamd.c</a>
+</li>
+<li>ROW_IS_DEAD
+: <a class="el" href="colamd_8c.html#ae200d2ac8149305712af7230f9ee24d5">colamd.c</a>
+</li>
+<li>ROW_IS_MARKED_DEAD
+: <a class="el" href="colamd_8c.html#a0d68b03acc587c11fe6dffbfede78c2d">colamd.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SCOMPLEX_INCLUDE
+: <a class="el" href="slu__scomplex_8h.html#a027d022bc2d5898eff31703adb19239c">slu_scomplex.h</a>
+</li>
+<li>SGN
+: <a class="el" href="ilu__cpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">ilu_cpivotL.c</a>
+, <a class="el" href="ilu__spivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">ilu_spivotL.c</a>
+, <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">ilu_zpivotL.c</a>
+, <a class="el" href="ilu__dpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">ilu_dpivotL.c</a>
+</li>
+<li>StackFull
+: <a class="el" href="zmemory_8c.html#a1ef4d4db4d5e1fe0719416163e0e51ae">zmemory.c</a>
+, <a class="el" href="smemory_8c.html#a1ef4d4db4d5e1fe0719416163e0e51ae">smemory.c</a>
+, <a class="el" href="cmemory_8c.html#a1ef4d4db4d5e1fe0719416163e0e51ae">cmemory.c</a>
+, <a class="el" href="dmemory_8c.html#a1ef4d4db4d5e1fe0719416163e0e51ae">dmemory.c</a>
+</li>
+<li>SUPERLU_FREE
+: <a class="el" href="slu__util_8h.html#a9672c5511c3efd9467e4d375a347c192">slu_util.h</a>
+</li>
+<li>SUPERLU_MALLOC
+: <a class="el" href="slu__util_8h.html#a55a5ed83733c30850c14cc7b3f922a54">slu_util.h</a>
+</li>
+<li>SUPERLU_MAX
+: <a class="el" href="slu__util_8h.html#adca8259e9d345c7cbaaa0608a1acdfd4">slu_util.h</a>
+</li>
+<li>SUPERLU_MIN
+: <a class="el" href="slu__util_8h.html#a7147dd5df1048562cd4ab83e9fd808d9">slu_util.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>T2_SUPER
+: <a class="el" href="ccolumn__dfs_8c.html#a5fd0635776cafb1d697263a0db693b9e">ccolumn_dfs.c</a>
+, <a class="el" href="dcolumn__dfs_8c.html#a5fd0635776cafb1d697263a0db693b9e">dcolumn_dfs.c</a>
+, <a class="el" href="zcolumn__dfs_8c.html#a5fd0635776cafb1d697263a0db693b9e">zcolumn_dfs.c</a>
+, <a class="el" href="scolumn__dfs_8c.html#a5fd0635776cafb1d697263a0db693b9e">scolumn_dfs.c</a>
+</li>
+<li>TempSpace
+: <a class="el" href="dmemory_8c.html#a70ca807c578a0c495f7ce5edb0215e2b">dmemory.c</a>
+, <a class="el" href="smemory_8c.html#a70ca807c578a0c495f7ce5edb0215e2b">smemory.c</a>
+, <a class="el" href="zmemory_8c.html#a70ca807c578a0c495f7ce5edb0215e2b">zmemory.c</a>
+, <a class="el" href="cmemory_8c.html#a70ca807c578a0c495f7ce5edb0215e2b">cmemory.c</a>
+</li>
+<li>THRESH
+: <a class="el" href="dlaqgs_8c.html#a0656018abfc9fa2821827415f5d5ea57">dlaqgs.c</a>
+, <a class="el" href="claqgs_8c.html#a0656018abfc9fa2821827415f5d5ea57">claqgs.c</a>
+, <a class="el" href="slaqgs_8c.html#a0656018abfc9fa2821827415f5d5ea57">slaqgs.c</a>
+, <a class="el" href="zlaqgs_8c.html#a0656018abfc9fa2821827415f5d5ea57">zlaqgs.c</a>
+</li>
+<li>TRUE
+: <a class="el" href="colamd_8c.html#aa8cecfc5c5c054d2875c03e77b7be15d">colamd.c</a>
+, <a class="el" href="slu__util_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">slu_util.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>U_NZ_START
+: <a class="el" href="slu__util_8h.html#ac641190b1a047ebcf224372cb3dfec68">slu_util.h</a>
+</li>
+<li>U_SUB
+: <a class="el" href="slu__util_8h.html#acbd74ce05240823854ebfcd301f200e8">slu_util.h</a>
+</li>
+<li>UPCASE
+: <a class="el" href="slu__Cnames_8h.html#acc3ddbc87aab0c0642d350d040e5bdfc">slu_Cnames.h</a>
+</li>
+<li>USER_ABORT
+: <a class="el" href="slu__util_8h.html#aaba7be0a786a716c200675ac43827e2a">slu_util.h</a>
+</li>
+<li>USER_FREE
+: <a class="el" href="slu__util_8h.html#ad7924033040c27afdb4a51ac9f8295b1">slu_util.h</a>
+</li>
+<li>USER_MALLOC
+: <a class="el" href="slu__util_8h.html#a232b101af98715228590ae6e089f4c65">slu_util.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
+<li>z_add
+: <a class="el" href="slu__dcomplex_8h.html#a35daa816dd5911bdb075aba8856f9cf0">slu_dcomplex.h</a>
+</li>
+<li>z_eq
+: <a class="el" href="slu__dcomplex_8h.html#afe2eaa3195b69824be150f4163f8d056">slu_dcomplex.h</a>
+</li>
+<li>z_sub
+: <a class="el" href="slu__dcomplex_8h.html#a8d01f55090621b481fcec184a2012ffb">slu_dcomplex.h</a>
+</li>
+<li>zd_mult
+: <a class="el" href="slu__dcomplex_8h.html#aaa361695d091f77d512454ddbee3b2b3">slu_dcomplex.h</a>
+</li>
+<li>zz_conj
+: <a class="el" href="slu__dcomplex_8h.html#a8c08104b0130f14f6f40f17bee239e80">slu_dcomplex.h</a>
+</li>
+<li>zz_mult
+: <a class="el" href="slu__dcomplex_8h.html#a008009fa4c5e6733f840478ceb0fb8ae">slu_dcomplex.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/globals_enum.html b/SuperLU_5.2.0/DOC/html/globals_enum.html
new file mode 100644
index 0000000..f7610ac
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/globals_enum.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <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>Macros</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>colperm_t
+: <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89c">superlu_enum_consts.h</a>
+</li>
+<li>DiagScale_t
+: <a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30">superlu_enum_consts.h</a>
+</li>
+<li>Dtype_t
+: <a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190">supermatrix.h</a>
+</li>
+<li>fact_t
+: <a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">superlu_enum_consts.h</a>
+</li>
+<li>IterRefine_t
+: <a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37">superlu_enum_consts.h</a>
+</li>
+<li>LU_space_t
+: <a class="el" href="superlu__enum__consts_8h.html#a494fe72ce954689dd95399ea9f1d87f6">superlu_enum_consts.h</a>
+</li>
+<li>MemType
+: <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">superlu_enum_consts.h</a>
+</li>
+<li>milu_t
+: <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">superlu_enum_consts.h</a>
+</li>
+<li>Mtype_t
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60">supermatrix.h</a>
+</li>
+<li>norm_t
+: <a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2f">superlu_enum_consts.h</a>
+</li>
+<li>PhaseType
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72">superlu_enum_consts.h</a>
+</li>
+<li>rowperm_t
+: <a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adf">superlu_enum_consts.h</a>
+</li>
+<li>stack_end_t
+: <a class="el" href="superlu__enum__consts_8h.html#a9c99a6c403d30f227aa91cf3b10f6aa4">superlu_enum_consts.h</a>
+</li>
+<li>Stype_t
+: <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796">supermatrix.h</a>
+</li>
+<li>trans_t
+: <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">superlu_enum_consts.h</a>
+</li>
+<li>yes_no_t
+: <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">superlu_enum_consts.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/globals_eval.html b/SuperLU_5.2.0/DOC/html/globals_eval.html
new file mode 100644
index 0000000..64c3d03
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/globals_eval.html
@@ -0,0 +1,412 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <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>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <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 class="current"><a href="#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BOTH
+: <a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30a627abe5a430420baf29ebe1940a7f2fb">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>COL
+: <a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30a3e66f07732b51f2cb52e13d598f8abda">superlu_enum_consts.h</a>
+</li>
+<li>COLAMD
+: <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89cafc08a15679354a375b679f7d907867c3">superlu_enum_consts.h</a>
+</li>
+<li>COLPERM
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72aed701176980ed77fa7e65315bdae5dc5">superlu_enum_consts.h</a>
+</li>
+<li>COMM
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a6f451ba8ea6ae9cd569eb91e2126376b">superlu_enum_consts.h</a>
+</li>
+<li>CONJ
+: <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62a26a53d2d0576982e73a770a90087a619">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>DIST
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72ac04fbbdf0d80a4ad25e565541deeebd7">superlu_enum_consts.h</a>
+</li>
+<li>DOFACT
+: <a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0aae0bd0c48044d1267a827ce526249e168">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>EQUIL
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72aa48ad2d4b3120ba615e725d16ec7bf29">superlu_enum_consts.h</a>
+</li>
+<li>ETREE
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a837b4404052bca5280c1c918540bc003">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>FACT
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a1b6692b56d378abb85bd49063721d034">superlu_enum_consts.h</a>
+</li>
+<li>FACTORED
+: <a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0aa86901392b6879fba18090792fe8db804">superlu_enum_consts.h</a>
+</li>
+<li>FERR
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a78fd14d7abebae04095cfbe02928f153">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>GEMV
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72aad1464db9e9e33f25ab0a3b82c6bd0c4">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>HEAD
+: <a class="el" href="superlu__enum__consts_8h.html#a9c99a6c403d30f227aa91cf3b10f6aa4a0b0955668575b21eb0ab2272aef49f76">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>INF_NORM
+: <a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2faf60f12ba71e3a0c889595249955d6cf8">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>LargeDiag
+: <a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adfae03251277f56e77cfc3989ed67adf932">superlu_enum_consts.h</a>
+</li>
+<li>LLVL
+: <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a8456acdeff4ebe8827f33f18599d3137">superlu_enum_consts.h</a>
+</li>
+<li>LSUB
+: <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a383f412552e65152b50013e6c5397baa">superlu_enum_consts.h</a>
+</li>
+<li>LUSUP
+: <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a9f159a8a95b7045670b14e7a521ac71e">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>METIS_AT_PLUS_A
+: <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89ca5a9874ccc7a94b949bdf71fd65b80061">superlu_enum_consts.h</a>
+</li>
+<li>MMD_AT_PLUS_A
+: <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89caef4136af63900170017e1edb479e2f14">superlu_enum_consts.h</a>
+</li>
+<li>MMD_ATA
+: <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89ca02f70b975e4d4fa6052812c09bdb7349">superlu_enum_consts.h</a>
+</li>
+<li>MY_PERMC
+: <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89ca7475651fbfee514ff59d61da9e101682">superlu_enum_consts.h</a>
+</li>
+<li>MY_PERMR
+: <a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adfa19f710e8ebccae9025757e877b6c87aa">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NATURAL
+: <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89ca0425aaf673bebee34014367ea7c3deb1">superlu_enum_consts.h</a>
+</li>
+<li>NO
+: <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536fa0d077f5b932ce05e5b9f30c6087a2f31">superlu_enum_consts.h</a>
+</li>
+<li>NOEQUIL
+: <a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30af1e3ee583cb194a25353b4ba7b4798cf">superlu_enum_consts.h</a>
+</li>
+<li>NOREFINE
+: <a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37a5f3a3710645b9041f06dfe164fb336a3">superlu_enum_consts.h</a>
+</li>
+<li>NOROWPERM
+: <a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adfa25895a1ae8a45131936a32274bd7cdde">superlu_enum_consts.h</a>
+</li>
+<li>NOTRANS
+: <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62a8ccffb9caebb7b4520a0653005b22f43">superlu_enum_consts.h</a>
+</li>
+<li>NPHASES
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a2b9cc65b188ff2b2b764a5f8160c4bfc">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>ONE_NORM
+: <a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2fade388e7d1af6bbb3be22c8e758d43d65">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PARMETIS
+: <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89caa7108227cd043fe50972a89b34b6d20c">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>RCOND
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a9b5c151728d8512307565994c89919d5">superlu_enum_consts.h</a>
+</li>
+<li>REFINE
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72abb218bd1ec12fd54eaada97721a82be7">superlu_enum_consts.h</a>
+</li>
+<li>RELAX
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a8abca54580953356d3e1548ddd04a97b">superlu_enum_consts.h</a>
+</li>
+<li>ROW
+: <a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30abf470e461303b909bf0dc58084ebafa0">superlu_enum_consts.h</a>
+</li>
+<li>ROWPERM
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72ae860478cf9b6cf3eb0785958149b676e">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SamePattern
+: <a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0aad57746dff8e73ad308739bc6cbee4c27">superlu_enum_consts.h</a>
+</li>
+<li>SamePattern_SameRowPerm
+: <a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0aa8814b686fe49f5ccc165c04845e112e6">superlu_enum_consts.h</a>
+</li>
+<li>SILU
+: <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0ab9ad3d6f1e495ef4761e20b58cc77453">superlu_enum_consts.h</a>
+</li>
+<li>SLU_C
+: <a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190a1b589b5f96dbc8619450aacc22d0bf39">supermatrix.h</a>
+</li>
+<li>SLU_D
+: <a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190ab5c3b3a455e3b3a64d805d76f19ac6dc">supermatrix.h</a>
+</li>
+<li>SLU_DN
+: <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796aa59ca236b51fe0c7bd7c80c70e345768">supermatrix.h</a>
+</li>
+<li>SLU_DOUBLE
+: <a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37a54bfcf28afa608b6d1ee284ec90e272c">superlu_enum_consts.h</a>
+</li>
+<li>SLU_EXTRA
+: <a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37a89c9ba1725b2d54d3a1e90cdcc58db92">superlu_enum_consts.h</a>
+</li>
+<li>SLU_GE
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60aea9ef3cae331a60a4bcc353bb57ad5db">supermatrix.h</a>
+</li>
+<li>SLU_HEL
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60abba0b28718f648302d6f710d7d66d1fb">supermatrix.h</a>
+</li>
+<li>SLU_HEU
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60abada9d0add93fd4fbe17b9d6758d38f8">supermatrix.h</a>
+</li>
+<li>SLU_NC
+: <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a0993c31a9ba98c523bfab0d759c1a628">supermatrix.h</a>
+</li>
+<li>SLU_NCP
+: <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a25e4eb65ac258dadb9abccd65337cfe4">supermatrix.h</a>
+</li>
+<li>SLU_NR
+: <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796aac74fbf90a105db9be6795b5be9221ca">supermatrix.h</a>
+</li>
+<li>SLU_NR_loc
+: <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796ab96ddd65efd6342d0ac532bb47eb39a0">supermatrix.h</a>
+</li>
+<li>SLU_S
+: <a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190a0da7fdd394e36c76e7aa215d6a79162d">supermatrix.h</a>
+</li>
+<li>SLU_SC
+: <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a79d0f76e80f9b57ebdab6a0c76720462">supermatrix.h</a>
+</li>
+<li>SLU_SCP
+: <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a35ab293720f39593ceff43e8989f4de6">supermatrix.h</a>
+</li>
+<li>SLU_SINGLE
+: <a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37aefd4227fccb513409c5f8a2f15ab61f7">superlu_enum_consts.h</a>
+</li>
+<li>SLU_SR
+: <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a9677060bfc0641fb53defdb70caa8cf5">supermatrix.h</a>
+</li>
+<li>SLU_SYL
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60a91b9ee4e608cb7c7cf7572703fbd3506">supermatrix.h</a>
+</li>
+<li>SLU_SYU
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60a0d509f1e8285653c36f81b10626fb747">supermatrix.h</a>
+</li>
+<li>SLU_TRL
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60a4defa99d9ff8ed4af7a92547b3faf9fb">supermatrix.h</a>
+</li>
+<li>SLU_TRLU
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60afee10f9836531b012b1b80cf36355b67">supermatrix.h</a>
+</li>
+<li>SLU_TRU
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60aa9aea83e745716e0da54d738feb19cba">supermatrix.h</a>
+</li>
+<li>SLU_TRUU
+: <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60a0c7113548d3d5a292cb2265477436ad7">supermatrix.h</a>
+</li>
+<li>SLU_Z
+: <a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190a1ace1e51c238b13622aaa733ef3b2a47">supermatrix.h</a>
+</li>
+<li>SMILU_1
+: <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0a183527dc1ee50ab34678f314925fdda0">superlu_enum_consts.h</a>
+</li>
+<li>SMILU_2
+: <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0a32a052178fd394b8110900fcb5702c13">superlu_enum_consts.h</a>
+</li>
+<li>SMILU_3
+: <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0a1e723dc87c76c9a21094300fc29e7274">superlu_enum_consts.h</a>
+</li>
+<li>SOL_COMM
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a31560b869ae176dae4e9160656d5b9eb">superlu_enum_consts.h</a>
+</li>
+<li>SOLVE
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72ab9fc7975179c642bbac2b6ffd8fa3579">superlu_enum_consts.h</a>
+</li>
+<li>SYMBFAC
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a2b4b71567fe3767853886bdfbc9df681">superlu_enum_consts.h</a>
+</li>
+<li>SYSTEM
+: <a class="el" href="superlu__enum__consts_8h.html#a494fe72ce954689dd95399ea9f1d87f6a57cc238145ec1361c72c327674c0d754">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>TAIL
+: <a class="el" href="superlu__enum__consts_8h.html#a9c99a6c403d30f227aa91cf3b10f6aa4a4c28487b052a2b05f3db4dc5a722b1d7">superlu_enum_consts.h</a>
+</li>
+<li>TRANS
+: <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62a1f61e3015bfe0f0c2c3fda4c5a0cdf58">superlu_enum_consts.h</a>
+</li>
+<li>TRSV
+: <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72abe6640d5e5560662c8a729e54e770ecf">superlu_enum_consts.h</a>
+</li>
+<li>TWO_NORM
+: <a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2fa0916434ec408d94e09a3db2f278fec83">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>UCOL
+: <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a68eee86a440f07e5aeb1333af7c49968">superlu_enum_consts.h</a>
+</li>
+<li>ULVL
+: <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a307244b6de1926249c921821989702db">superlu_enum_consts.h</a>
+</li>
+<li>USER
+: <a class="el" href="superlu__enum__consts_8h.html#a494fe72ce954689dd95399ea9f1d87f6ae2d30a195cee6b2961cc2c23ea4b520b">superlu_enum_consts.h</a>
+</li>
+<li>USUB
+: <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2aec445297f8e62e119a337ea2b5dd2b66">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>YES
+: <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536fa99f136a862ba5c7d16967231c29f09d6">superlu_enum_consts.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
+<li>ZOLTAN
+: <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89cabddc2b83ab41d07e8d180f52bcfb00ac">superlu_enum_consts.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/globals_func.html b/SuperLU_5.2.0/DOC/html/globals_func.html
new file mode 100644
index 0000000..64b4790
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/globals_func.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <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>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_a.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_c.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_e.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_f.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_func_g.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_h.html#index_h"><span>h</span></a></li>
+ <li><a href="globals_func_i.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_o.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_r.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_x.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_z.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_compare_()
+: <a class="el" href="ilu__cdrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">ilu_cdrop_row.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">ilu_zdrop_row.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">ilu_sdrop_row.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">ilu_ddrop_row.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/globals_type.html b/SuperLU_5.2.0/DOC/html/globals_type.html
new file mode 100644
index 0000000..af924bb
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/globals_type.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <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>Macros</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>Colamd_Col
+: <a class="el" href="colamd_8h.html#a059db10cdebbb878b50bfcd2e023315a">colamd.h</a>
+</li>
+<li>Colamd_Row
+: <a class="el" href="colamd_8h.html#a8a1ceeb79ebba705abb1d27469f4a358">colamd.h</a>
+</li>
+<li>ExpHeader
+: <a class="el" href="slu__util_8h.html#ac071de4d8a39e15f13c92a5f60bc16f0">slu_util.h</a>
+</li>
+<li>flops_t
+: <a class="el" href="slu__util_8h.html#aaae6020bb33e780ff6edbd4e45ce08ac">slu_util.h</a>
+</li>
+<li>fptr
+: <a class="el" href="c__fortran__cgssv_8c.html#a82dcbbd6066d965a90d5515105456f28">c_fortran_cgssv.c</a>
+, <a class="el" href="c__fortran__dgssv_8c.html#a82dcbbd6066d965a90d5515105456f28">c_fortran_dgssv.c</a>
+, <a class="el" href="c__fortran__sgssv_8c.html#a82dcbbd6066d965a90d5515105456f28">c_fortran_sgssv.c</a>
+, <a class="el" href="c__fortran__zgssv_8c.html#a82dcbbd6066d965a90d5515105456f28">c_fortran_zgssv.c</a>
+</li>
+<li>int_t
+: <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">slu_cdefs.h</a>
+, <a class="el" href="slu__ddefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">slu_ddefs.h</a>
+, <a class="el" href="slu__sdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">slu_sdefs.h</a>
+, <a class="el" href="slu__zdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">slu_zdefs.h</a>
+</li>
+<li>Logical
+: <a class="el" href="slu__util_8h.html#a30f473cd214dc43270f7a4d54b2887d2">slu_util.h</a>
+</li>
+<li>shortint
+: <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">mmd.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/globals_vars.html b/SuperLU_5.2.0/DOC/html/globals_vars.html
new file mode 100644
index 0000000..5786ead
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/globals_vars.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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 id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <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>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li class="current"><a href="#index_g"><span>g</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>A
+: <a class="el" href="ilu__cdrop__row_8c.html#a4f397f6aca9178eb3de2026fc159fa55">ilu_cdrop_row.c</a>
+, <a class="el" href="ilu__ddrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">ilu_ddrop_row.c</a>
+, <a class="el" href="ilu__sdrop__row_8c.html#a4f397f6aca9178eb3de2026fc159fa55">ilu_sdrop_row.c</a>
+, <a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">ilu_zdrop_row.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>GLOBAL_A
+: <a class="el" href="citersol_8c.html#ad42e5c3013507184841cdfee652a0c18">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#ad42e5c3013507184841cdfee652a0c18">citersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#ad42e5c3013507184841cdfee652a0c18">zitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#ad42e5c3013507184841cdfee652a0c18">zitersol.c</a>
+, <a class="el" href="sitersol_8c.html#ad42e5c3013507184841cdfee652a0c18">sitersol.c</a>
+, <a class="el" href="ditersol1_8c.html#ad42e5c3013507184841cdfee652a0c18">ditersol1.c</a>
+, <a class="el" href="ditersol_8c.html#ad42e5c3013507184841cdfee652a0c18">ditersol.c</a>
+, <a class="el" href="sitersol1_8c.html#ad42e5c3013507184841cdfee652a0c18">sitersol1.c</a>
+</li>
+<li>GLOBAL_A_ORIG
+: <a class="el" href="citersol1_8c.html#af1beb2a8fb47df4eb505addfef02814c">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#af1beb2a8fb47df4eb505addfef02814c">ditersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#af1beb2a8fb47df4eb505addfef02814c">sitersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#af1beb2a8fb47df4eb505addfef02814c">zitersol1.c</a>
+</li>
+<li>GLOBAL_C
+: <a class="el" href="zitersol_8c.html#ac5dce1561e620f6a6f6b6f17d82df4e8">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#ac5dce1561e620f6a6f6b6f17d82df4e8">zitersol1.c</a>
+, <a class="el" href="citersol_8c.html#a3e8f028a8a340f260f7ac67973072999">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#a3e8f028a8a340f260f7ac67973072999">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#ac5dce1561e620f6a6f6b6f17d82df4e8">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#ac5dce1561e620f6a6f6b6f17d82df4e8">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#a3e8f028a8a340f260f7ac67973072999">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#a3e8f028a8a340f260f7ac67973072999">sitersol1.c</a>
+</li>
+<li>GLOBAL_EQUED
+: <a class="el" href="citersol1_8c.html#a869338b25a186a486edd0cf1850a7fbb">citersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#a869338b25a186a486edd0cf1850a7fbb">ditersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#a869338b25a186a486edd0cf1850a7fbb">sitersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#a869338b25a186a486edd0cf1850a7fbb">zitersol1.c</a>
+</li>
+<li>GLOBAL_L
+: <a class="el" href="zitersol_8c.html#a0f5cf27b325ef2874c953290f74c9d0a">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#a0f5cf27b325ef2874c953290f74c9d0a">zitersol1.c</a>
+, <a class="el" href="citersol_8c.html#a0f5cf27b325ef2874c953290f74c9d0a">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#a0f5cf27b325ef2874c953290f74c9d0a">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#a0f5cf27b325ef2874c953290f74c9d0a">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#a0f5cf27b325ef2874c953290f74c9d0a">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#a0f5cf27b325ef2874c953290f74c9d0a">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#a0f5cf27b325ef2874c953290f74c9d0a">sitersol1.c</a>
+</li>
+<li>GLOBAL_MEM_USAGE
+: <a class="el" href="citersol_8c.html#a19718c440adb41fbebcb4bafedbf932c">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#a19718c440adb41fbebcb4bafedbf932c">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#a19718c440adb41fbebcb4bafedbf932c">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#a19718c440adb41fbebcb4bafedbf932c">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#a19718c440adb41fbebcb4bafedbf932c">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#a19718c440adb41fbebcb4bafedbf932c">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#a19718c440adb41fbebcb4bafedbf932c">zitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#a19718c440adb41fbebcb4bafedbf932c">zitersol1.c</a>
+</li>
+<li>GLOBAL_OPTIONS
+: <a class="el" href="citersol_8c.html#a64b516645b16ef03c6fd0d692e6eb277">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#a64b516645b16ef03c6fd0d692e6eb277">citersol1.c</a>
+, <a class="el" href="sitersol1_8c.html#a64b516645b16ef03c6fd0d692e6eb277">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#a64b516645b16ef03c6fd0d692e6eb277">zitersol.c</a>
+, <a class="el" href="ditersol_8c.html#a64b516645b16ef03c6fd0d692e6eb277">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#a64b516645b16ef03c6fd0d692e6eb277">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#a64b516645b16ef03c6fd0d692e6eb277">sitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#a64b516645b16ef03c6fd0d692e6eb277">zitersol1.c</a>
+</li>
+<li>GLOBAL_PERM_C
+: <a class="el" href="sitersol1_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">sitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">zitersol.c</a>
+, <a class="el" href="citersol_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">ditersol.c</a>
+, <a class="el" href="ditersol1_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">ditersol1.c</a>
+, <a class="el" href="sitersol_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">sitersol.c</a>
+, <a class="el" href="zitersol1_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">zitersol1.c</a>
+</li>
+<li>GLOBAL_PERM_R
+: <a class="el" href="citersol_8c.html#a5a42ee721355f1c852f770661834be93">citersol.c</a>
+, <a class="el" href="ditersol1_8c.html#a5a42ee721355f1c852f770661834be93">ditersol1.c</a>
+, <a class="el" href="ditersol_8c.html#a5a42ee721355f1c852f770661834be93">ditersol.c</a>
+, <a class="el" href="citersol1_8c.html#a5a42ee721355f1c852f770661834be93">citersol1.c</a>
+, <a class="el" href="sitersol_8c.html#a5a42ee721355f1c852f770661834be93">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#a5a42ee721355f1c852f770661834be93">sitersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#a5a42ee721355f1c852f770661834be93">zitersol1.c</a>
+, <a class="el" href="zitersol_8c.html#a5a42ee721355f1c852f770661834be93">zitersol.c</a>
+</li>
+<li>GLOBAL_R
+: <a class="el" href="citersol_8c.html#a4ff9f80047e0b810344d85feb96941ef">citersol.c</a>
+, <a class="el" href="citersol1_8c.html#a4ff9f80047e0b810344d85feb96941ef">citersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#a8cb83de814c7fbf89011ba08bb602ce0">zitersol1.c</a>
+, <a class="el" href="ditersol_8c.html#a8cb83de814c7fbf89011ba08bb602ce0">ditersol.c</a>
+, <a class="el" href="zitersol_8c.html#a8cb83de814c7fbf89011ba08bb602ce0">zitersol.c</a>
+, <a class="el" href="sitersol_8c.html#a4ff9f80047e0b810344d85feb96941ef">sitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#a4ff9f80047e0b810344d85feb96941ef">sitersol1.c</a>
+, <a class="el" href="ditersol1_8c.html#a8cb83de814c7fbf89011ba08bb602ce0">ditersol1.c</a>
+</li>
+<li>GLOBAL_STAT
+: <a class="el" href="zitersol1_8c.html#a96a062252c26544370e8feae987c6d16">zitersol1.c</a>
+, <a class="el" href="sitersol_8c.html#a96a062252c26544370e8feae987c6d16">sitersol.c</a>
+, <a class="el" href="citersol_8c.html#a96a062252c26544370e8feae987c6d16">citersol.c</a>
+, <a class="el" href="ditersol1_8c.html#a96a062252c26544370e8feae987c6d16">ditersol1.c</a>
+, <a class="el" href="zitersol_8c.html#a96a062252c26544370e8feae987c6d16">zitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#a96a062252c26544370e8feae987c6d16">sitersol1.c</a>
+, <a class="el" href="citersol1_8c.html#a96a062252c26544370e8feae987c6d16">citersol1.c</a>
+, <a class="el" href="ditersol_8c.html#a96a062252c26544370e8feae987c6d16">ditersol.c</a>
+</li>
+<li>GLOBAL_U
+: <a class="el" href="zitersol_8c.html#a000ad5c2198e4309802b4478ed08a98c">zitersol.c</a>
+, <a class="el" href="sitersol1_8c.html#a000ad5c2198e4309802b4478ed08a98c">sitersol1.c</a>
+, <a class="el" href="citersol_8c.html#a000ad5c2198e4309802b4478ed08a98c">citersol.c</a>
+, <a class="el" href="ditersol_8c.html#a000ad5c2198e4309802b4478ed08a98c">ditersol.c</a>
+, <a class="el" href="sitersol_8c.html#a000ad5c2198e4309802b4478ed08a98c">sitersol.c</a>
+, <a class="el" href="ditersol1_8c.html#a000ad5c2198e4309802b4478ed08a98c">ditersol1.c</a>
+, <a class="el" href="zitersol1_8c.html#a000ad5c2198e4309802b4478ed08a98c">zitersol1.c</a>
+, <a class="el" href="citersol1_8c.html#a000ad5c2198e4309802b4478ed08a98c">citersol1.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/heap__relax__snode_8c.html b/SuperLU_5.2.0/DOC/html/heap__relax__snode_8c.html
new file mode 100644
index 0000000..c46c7b3
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/heap__relax__snode_8c.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/heap_relax_snode.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">heap_relax_snode.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Identify the initial relaxed supernodes.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for heap_relax_snode.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="heap__relax__snode_8c__incl.png" border="0" usemap="#SRC_2heap__relax__snode_8c" alt=""/></div>
+<map name="SRC_2heap__relax__snode_8c" id="SRC_2heap__relax__snode_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a059d36bb76b7562c9bb2cbd7870e7ffe"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="heap__relax__snode_8c.html#a059d36bb76b7562c9bb2cbd7870e7ffe">heap_relax_snode</a> (const int n, int *et, const int relax_columns, int *descendants, int *relax_end)</td></tr>
+<tr class="separator:a059d36bb76b7562c9bb2cbd7870e7ffe"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a059d36bb76b7562c9bb2cbd7870e7ffe"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="relax__snode_8c.html#ad70bc12cb9031ab8aba4a37a18be46e3">relax_snode()</a> - Identify the initial relaxed supernodes, assuming that
+ the matrix has been reordered according to the postorder of the etree.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="heap__relax__snode_8c_a059d36bb76b7562c9bb2cbd7870e7ffe_cgraph.png" border="0" usemap="#heap__relax__snode_8c_a059d36bb76b7562c9bb2cbd7870e7ffe_cgraph" alt=""/></div>
+<map name="heap__relax__snode_8c_a059d36bb76b7562c9bb2cbd7870e7ffe_cgraph" id="heap__relax__snode_8c_a059d36bb76b7562c9bb2cbd7870e7ffe_cgraph">
+<area shape="rect" id="node2" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="196,5,271,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a44084fde835d2ccaa25e9fd942a72b7a" title="TreePostorder" alt="" coords="181,56,285,83"/><area shape="rect" id="node7" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="214,107,253,133"/><area shape="rect" id="node4" href="sp__co [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/html__mainpage_8h.html b/SuperLU_5.2.0/DOC/html/html__mainpage_8h.html
new file mode 100644
index 0000000..64cb158
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/html__mainpage_8h.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/html_mainpage.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">html_mainpage.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="html__mainpage_8h_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/icmax1_8c.html b/SuperLU_5.2.0/DOC/html/icmax1_8c.html
new file mode 100644
index 0000000..cfeee60
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/icmax1_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/icmax1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">icmax1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Finds the index of the element whose real part has maximum absolute value.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for icmax1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="icmax1_8c__incl.png" border="0" usemap="#SRC_2icmax1_8c" alt=""/></div>
+<map name="SRC_2icmax1_8c" id="SRC_2icmax1_8c">
+<area shape="rect" id="node3" href="slu__scomplex_8h.html" title="Header file for complex operations. " alt="" coords="91,80,204,107"/><area shape="rect" id="node4" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="229,80,336,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a5a76da95c549c41790389a76e12fdcb5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="icmax1_8c.html#a5a76da95c549c41790389a76e12fdcb5">CX</a>(I) cx[(I)-1]</td></tr>
+<tr class="separator:a5a76da95c549c41790389a76e12fdcb5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a53b891600ab40c636f315c490c39749e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="icmax1_8c.html#a53b891600ab40c636f315c490c39749e">icmax1_slu</a> (int *n, <a class="el" href="structcomplex.html">complex</a> *cx, int *incx)</td></tr>
+<tr class="separator:a53b891600ab40c636f315c490c39749e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a5a76da95c549c41790389a76e12fdcb5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CX</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">I</td><td>)</td>
+ <td> cx[(I)-1]</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a53b891600ab40c636f315c490c39749e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int icmax1_slu </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> ICMAX1 finds the index of the element whose real part has maximum
+ absolute value.</pre><pre> Based on ICAMAX from Level 1 BLAS.
+ The change is to use the 'genuine' absolute value.</pre><pre> Contributed by Nick Higham for use with CLACON.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre> N (input) INT
+ The number of elements in the vector CX.</pre><pre> CX (input) COMPLEX array, dimension (N)
+ The vector whose elements will be summed.</pre><pre> INCX (input) INT
+ The spacing between successive values of CX. INCX >= 1.
+</p>
+<hr/>
+
+ </pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__ccolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__ccolumn__dfs_8c.html
new file mode 100644
index 0000000..cb1790b
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__ccolumn__dfs_8c.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_ccolumn_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_ccolumn_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs a symbolic factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_ccolumn_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__ccolumn__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__ccolumn__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__ccolumn__dfs_8c" id="SRC_2ilu__ccolumn__dfs_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a61b8082fdb8acb13c983c11acaea87ba"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ccolumn__dfs_8c.html#a61b8082fdb8acb13c983c11acaea87ba">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>
+<tr class="separator:a61b8082fdb8acb13c983c11acaea87ba"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a61b8082fdb8acb13c983c11acaea87ba"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ILU_CCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__ccolumn__dfs_8c_a61b8082fdb8acb13c983c11acaea87ba_cgraph.png" border="0" usemap="#ilu__ccolumn__dfs_8c_a61b8082fdb8acb13c983c11acaea87ba_cgraph" alt=""/></div>
+<map name="ilu__ccolumn__dfs_8c_a61b8082fdb8acb13c983c11acaea87ba_cgraph" id="ilu__ccolumn__dfs_8c_a61b8082fdb8acb13c983c11acaea87ba_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="193,31,260,57"/><area shape="rect" id="node4" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="171,81,283,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="349,31,432,57"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__ccopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/ilu__ccopy__to__ucol_8c.html
new file mode 100644
index 0000000..57da3ad
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__ccopy__to__ucol_8c.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_ccopy_to_ucol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_ccopy_to_ucol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Copy a computed column of U to the compressed data structure and drop some small entries.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_ccopy_to_ucol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__ccopy__to__ucol_8c__incl.png" border="0" usemap="#SRC_2ilu__ccopy__to__ucol_8c" alt=""/></div>
+<map name="SRC_2ilu__ccopy__to__ucol_8c" id="SRC_2ilu__ccopy__to__ucol_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:adb60937f3436da2e6d66dc11af4317e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ccopy__to__ucol_8c.html#adb60937f3436da2e6d66dc11af4317e6">ccopy_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+<tr class="separator:adb60937f3436da2e6d66dc11af4317e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a069fdcfba5148dfc923017db03d7eab1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ccopy__to__ucol_8c.html#a069fdcfba5148dfc923017db03d7eab1">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#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t [...]
+<tr class="separator:a069fdcfba5148dfc923017db03d7eab1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory
+November, 2010
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="adb60937f3436da2e6d66dc11af4317e6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a069fdcfba5148dfc923017db03d7eab1"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__ccopy__to__ucol_8c_a069fdcfba5148dfc923017db03d7eab1_cgraph.png" border="0" usemap="#ilu__ccopy__to__ucol_8c_a069fdcfba5148dfc923017db03d7eab1_cgraph" alt=""/></div>
+<map name="ilu__ccopy__to__ucol_8c_a069fdcfba5148dfc923017db03d7eab1_cgraph" id="ilu__ccopy__to__ucol_8c_a069fdcfba5148dfc923017db03d7eab1_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="207,56,268,83"/><area shape="rect" id="node3" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="181,107,293,133"/><area shape="rect" id="node10" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords=" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__cdrop__row_8c.html b/SuperLU_5.2.0/DOC/html/ilu__cdrop__row_8c.html
new file mode 100644
index 0000000..b357c2c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__cdrop__row_8c.html
@@ -0,0 +1,520 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_cdrop_row.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_cdrop_row.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Drop small rows from L.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_cdrop_row.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__cdrop__row_8c__incl.png" border="0" usemap="#SRC_2ilu__cdrop__row_8c" alt=""/></div>
+<map name="SRC_2ilu__cdrop__row_8c" id="SRC_2ilu__cdrop__row_8c">
+<area shape="rect" id="node4" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="497,80,585,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="181,155,288,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="312,155,413,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a99bbeac6877c802badc06579386125b7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#a99bbeac6877c802badc06579386125b7">cswap_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+<tr class="separator:a99bbeac6877c802badc06579386125b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad2fab81da5258afef212287a41f4e8bc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#ad2fab81da5258afef212287a41f4e8bc">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 class="separator:ad2fab81da5258afef212287a41f4e8bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb60937f3436da2e6d66dc11af4317e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#adb60937f3436da2e6d66dc11af4317e6">ccopy_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+<tr class="separator:adb60937f3436da2e6d66dc11af4317e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44105172934892274bea9807a5b2037f"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#a44105172934892274bea9807a5b2037f">scasum_</a> (int *, <a class="el" href="structcomplex.html">complex</a> *, int *)</td></tr>
+<tr class="separator:a44105172934892274bea9807a5b2037f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef10aeea1f2500610ded919305e8e84c"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#aef10aeea1f2500610ded919305e8e84c">scnrm2_</a> (int *, <a class="el" href="structcomplex.html">complex</a> *, int *)</td></tr>
+<tr class="separator:aef10aeea1f2500610ded919305e8e84c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61a0022627cc1977966c0067f1f12e26"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#a61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+<tr class="separator:a61a0022627cc1977966c0067f1f12e26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22f0fa95a896ad561e0ab57fea1ef330"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#a22f0fa95a896ad561e0ab57fea1ef330">icamax_</a> (int *, <a class="el" href="structcomplex.html">complex</a>[], int *)</td></tr>
+<tr class="separator:a22f0fa95a896ad561e0ab57fea1ef330"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ddf1742e9078a786574bb5aa80aed2a"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">_compare_</a> (const void *a, const void *b)</td></tr>
+<tr class="separator:a8ddf1742e9078a786574bb5aa80aed2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab6bca119c9d5eab7210d0009835e399f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#ab6bca119c9d5eab7210d0009835e399f">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 [...]
+<tr class="separator:ab6bca119c9d5eab7210d0009835e399f"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a4f397f6aca9178eb3de2026fc159fa55"><td class="memItemLeft" align="right" valign="top">static float * </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cdrop__row_8c.html#a4f397f6aca9178eb3de2026fc159fa55">A</a></td></tr>
+<tr class="separator:a4f397f6aca9178eb3de2026fc159fa55"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8ddf1742e9078a786574bb5aa80aed2a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad2fab81da5258afef212287a41f4e8bc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adb60937f3436da2e6d66dc11af4317e6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a99bbeac6877c802badc06579386125b7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a61a0022627cc1977966c0067f1f12e26"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a22f0fa95a896ad561e0ab57fea1ef330"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab6bca119c9d5eab7210d0009835e399f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__cdrop__row_8c.html#ab6bca119c9d5eab7210d0009835e399f">ilu_cdrop_row()</a> - Drop some small rows from the previous
+ supernode (L-part only).
+</pre>
+</div>
+</div>
+<a class="anchor" id="a44105172934892274bea9807a5b2037f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aef10aeea1f2500610ded919305e8e84c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a4f397f6aca9178eb3de2026fc159fa55"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">float* A</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__cpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__cpanel__dfs_8c.html
new file mode 100644
index 0000000..e4dc6a9
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__cpanel__dfs_8c.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_cpanel_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_cpanel_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>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>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_cpanel_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__cpanel__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__cpanel__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__cpanel__dfs_8c" id="SRC_2ilu__cpanel__dfs_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae528c7a140b699babac3d212a4cfbe4b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cpanel__dfs_8c.html#ae528c7a140b699babac3d212a4cfbe4b">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, <a class="el" href [...]
+<tr class="separator:ae528c7a140b699babac3d212a4cfbe4b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae528c7a140b699babac3d212a4cfbe4b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__cpanel__dfs_8c_ae528c7a140b699babac3d212a4cfbe4b_cgraph.png" border="0" usemap="#ilu__cpanel__dfs_8c_ae528c7a140b699babac3d212a4cfbe4b_cgraph" alt=""/></div>
+<map name="ilu__cpanel__dfs_8c_ae528c7a140b699babac3d212a4cfbe4b_cgraph" id="ilu__cpanel__dfs_8c_ae528c7a140b699babac3d212a4cfbe4b_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="160,5,224,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__cpivotL_8c.html b/SuperLU_5.2.0/DOC/html/ilu__cpivotL_8c.html
new file mode 100644
index 0000000..579963b
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__cpivotL_8c.html
@@ -0,0 +1,235 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_cpivotL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_cpivotL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numerical pivoting.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_cpivotL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__cpivotL_8c__incl.png" border="0" usemap="#SRC_2ilu__cpivotL_8c" alt=""/></div>
+<map name="SRC_2ilu__cpivotL_8c" id="SRC_2ilu__cpivotL_8c">
+<area shape="rect" id="node4" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="497,80,585,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="181,155,288,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="312,155,413,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a95ed41486ca0ed53262e4b8934d4afac"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN</a>(x) ((x)>=0?1:-1)</td></tr>
+<tr class="separator:a95ed41486ca0ed53262e4b8934d4afac"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5eadb2e028608a33e9de84d4d6895796"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__cpivotL_8c.html#a5eadb2e028608a33e9de84d4d6895796">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#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, < [...]
+<tr class="separator:a5eadb2e028608a33e9de84d4d6895796"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a95ed41486ca0ed53262e4b8934d4afac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SGN</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x</td><td>)</td>
+ <td> ((x)>=0?1:-1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5eadb2e028608a33e9de84d4d6895796"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__cpivotL_8c_a5eadb2e028608a33e9de84d4d6895796_cgraph.png" border="0" usemap="#ilu__cpivotL_8c_a5eadb2e028608a33e9de84d4d6895796_cgraph" alt=""/></div>
+<map name="ilu__cpivotL_8c_a5eadb2e028608a33e9de84d4d6895796_cgraph" id="ilu__cpivotL_8c_a5eadb2e028608a33e9de84d4d6895796_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="139,5,203,32"/><area shape="rect" id="node3" href="scomplex_8c.html#aee98d3dfc6ee26d36a2e095bd28414e5" title="SIGN functions for complex number. Returns z/abs(z) " alt="" coords="142,56,199,83"/><area shape="rect" id="node5" href="scomplex_8c.html#a19814f5030befb85c4bb07e0fac34a7b" title="Complex Division c = a/b. " alt="" coord [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__csnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__csnode__dfs_8c.html
new file mode 100644
index 0000000..7e354ee
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__csnode__dfs_8c.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_csnode_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_csnode_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Determines the union of row structures of columns within the relaxed node.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__cdefs_8h_source.html">slu_cdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_csnode_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__csnode__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__csnode__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__csnode__dfs_8c" id="SRC_2ilu__csnode__dfs_8c">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aa6c4a4029db106e8dd56bc0fe1f0090b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__csnode__dfs_8c.html#aa6c4a4029db106e8dd56bc0fe1f0090b">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>
+<tr class="separator:aa6c4a4029db106e8dd56bc0fe1f0090b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aa6c4a4029db106e8dd56bc0fe1f0090b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__csnode__dfs_8c.html#aa6c4a4029db106e8dd56bc0fe1f0090b">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__csnode__dfs_8c_aa6c4a4029db106e8dd56bc0fe1f0090b_cgraph.png" border="0" usemap="#ilu__csnode__dfs_8c_aa6c4a4029db106e8dd56bc0fe1f0090b_cgraph" alt=""/></div>
+<map name="ilu__csnode__dfs_8c_aa6c4a4029db106e8dd56bc0fe1f0090b_cgraph" id="ilu__csnode__dfs_8c_aa6c4a4029db106e8dd56bc0fe1f0090b_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="163,107,275,133"/><area shape="rect" id="node3" href="cmemory_8c.html#a3996260179c0a72397776571b4b19164" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="347,81,418,108"/><area shape="rect" id="node8" href="cmemory_8c.html#a43ff5010762c14ea7591d23cf48403a3" title="cmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__dcolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__dcolumn__dfs_8c.html
new file mode 100644
index 0000000..50f95f3
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__dcolumn__dfs_8c.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_dcolumn_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_dcolumn_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs a symbolic factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_dcolumn_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__dcolumn__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__dcolumn__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__dcolumn__dfs_8c" id="SRC_2ilu__dcolumn__dfs_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af164b7b553eed616e2ed95144698fe7a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dcolumn__dfs_8c.html#af164b7b553eed616e2ed95144698fe7a">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>
+<tr class="separator:af164b7b553eed616e2ed95144698fe7a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af164b7b553eed616e2ed95144698fe7a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ILU_DCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__dcolumn__dfs_8c_af164b7b553eed616e2ed95144698fe7a_cgraph.png" border="0" usemap="#ilu__dcolumn__dfs_8c_af164b7b553eed616e2ed95144698fe7a_cgraph" alt=""/></div>
+<map name="ilu__dcolumn__dfs_8c_af164b7b553eed616e2ed95144698fe7a_cgraph" id="ilu__dcolumn__dfs_8c_af164b7b553eed616e2ed95144698fe7a_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="193,31,260,57"/><area shape="rect" id="node4" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="171,81,283,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="349,31,432,57"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__dcopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/ilu__dcopy__to__ucol_8c.html
new file mode 100644
index 0000000..e554c61
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__dcopy__to__ucol_8c.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_dcopy_to_ucol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_dcopy_to_ucol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Copy a computed column of U to the compressed data structure and drop some small entries.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_dcopy_to_ucol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__dcopy__to__ucol_8c__incl.png" border="0" usemap="#SRC_2ilu__dcopy__to__ucol_8c" alt=""/></div>
+<map name="SRC_2ilu__dcopy__to__ucol_8c" id="SRC_2ilu__dcopy__to__ucol_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a24a0d368c78074384922e9d10b43f820"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820">dcopy_</a> (int *, double[], int *, double[], int *)</td></tr>
+<tr class="separator:a24a0d368c78074384922e9d10b43f820"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1802613180b46ffdb7b058a42c38716"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dcopy__to__ucol_8c.html#ab1802613180b46ffdb7b058a42c38716">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#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, double drop_tol, int quota, double [...]
+<tr class="separator:ab1802613180b46ffdb7b058a42c38716"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory
+November, 2010
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a24a0d368c78074384922e9d10b43f820"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab1802613180b46ffdb7b058a42c38716"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__dcopy__to__ucol_8c_ab1802613180b46ffdb7b058a42c38716_cgraph.png" border="0" usemap="#ilu__dcopy__to__ucol_8c_ab1802613180b46ffdb7b058a42c38716_cgraph" alt=""/></div>
+<map name="ilu__dcopy__to__ucol_8c_ab1802613180b46ffdb7b058a42c38716_cgraph" id="ilu__dcopy__to__ucol_8c_ab1802613180b46ffdb7b058a42c38716_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="207,56,268,83"/><area shape="rect" id="node3" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="181,107,293,133"/><area shape="rect" id="node10" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="205,157,269,184"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__ddrop__row_8c.html b/SuperLU_5.2.0/DOC/html/ilu__ddrop__row_8c.html
new file mode 100644
index 0000000..f80edd6
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__ddrop__row_8c.html
@@ -0,0 +1,529 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_ddrop_row.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_ddrop_row.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Drop small rows from L.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_ddrop_row.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__ddrop__row_8c__incl.png" border="0" usemap="#SRC_2ilu__ddrop__row_8c" alt=""/></div>
+<map name="SRC_2ilu__ddrop__row_8c" id="SRC_2ilu__ddrop__row_8c">
+<area shape="rect" id="node4" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="385,80,473,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="135,155,241,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="265,155,367,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a009fa596702c2777985e4fca6477566e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#a009fa596702c2777985e4fca6477566e">dswap_</a> (int *, double[], int *, double[], int *)</td></tr>
+<tr class="separator:a009fa596702c2777985e4fca6477566e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5112358cf2de43341aaff9fba0066afc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#a5112358cf2de43341aaff9fba0066afc">daxpy_</a> (int *, double *, double[], int *, double[], int *)</td></tr>
+<tr class="separator:a5112358cf2de43341aaff9fba0066afc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a24a0d368c78074384922e9d10b43f820"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#a24a0d368c78074384922e9d10b43f820">dcopy_</a> (int *, double[], int *, double[], int *)</td></tr>
+<tr class="separator:a24a0d368c78074384922e9d10b43f820"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abe00831e789ca38cf884de56ddf70bd7"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#abe00831e789ca38cf884de56ddf70bd7">dasum_</a> (int *, double *, int *)</td></tr>
+<tr class="separator:abe00831e789ca38cf884de56ddf70bd7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad36414a4f46a1195a7f6c5d3480d3118"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#ad36414a4f46a1195a7f6c5d3480d3118">dnrm2_</a> (int *, double *, int *)</td></tr>
+<tr class="separator:ad36414a4f46a1195a7f6c5d3480d3118"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61a0022627cc1977966c0067f1f12e26"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#a61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+<tr class="separator:a61a0022627cc1977966c0067f1f12e26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afdb24942915626f5de65c50cb31c267a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#afdb24942915626f5de65c50cb31c267a">idamax_</a> (int *, double[], int *)</td></tr>
+<tr class="separator:afdb24942915626f5de65c50cb31c267a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ddf1742e9078a786574bb5aa80aed2a"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">_compare_</a> (const void *a, const void *b)</td></tr>
+<tr class="separator:a8ddf1742e9078a786574bb5aa80aed2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a380317801e05b11930fd1e094db34179"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#a380317801e05b11930fd1e094db34179">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 [...]
+<tr class="separator:a380317801e05b11930fd1e094db34179"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ac900805a486cbb8489e3c176ed6e0d8e"><td class="memItemLeft" align="right" valign="top">static double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ddrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a></td></tr>
+<tr class="separator:ac900805a486cbb8489e3c176ed6e0d8e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8ddf1742e9078a786574bb5aa80aed2a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abe00831e789ca38cf884de56ddf70bd7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5112358cf2de43341aaff9fba0066afc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a24a0d368c78074384922e9d10b43f820"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad36414a4f46a1195a7f6c5d3480d3118"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a61a0022627cc1977966c0067f1f12e26"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a009fa596702c2777985e4fca6477566e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afdb24942915626f5de65c50cb31c267a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a380317801e05b11930fd1e094db34179"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__ddrop__row_8c.html#a380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a> - Drop some small rows from the previous
+ supernode (L-part only).
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__ddrop__row_8c_a380317801e05b11930fd1e094db34179_cgraph.png" border="0" usemap="#ilu__ddrop__row_8c_a380317801e05b11930fd1e094db34179_cgraph" alt=""/></div>
+<map name="ilu__ddrop__row_8c_a380317801e05b11930fd1e094db34179_cgraph" id="ilu__ddrop__row_8c_a380317801e05b11930fd1e094db34179_cgraph">
+<area shape="rect" id="node2" href="ilu__ddrop__row_8c.html#abe00831e789ca38cf884de56ddf70bd7" title="dasum_" alt="" coords="167,5,235,32"/><area shape="rect" id="node3" href="ilu__ddrop__row_8c.html#ad36414a4f46a1195a7f6c5d3480d3118" title="dnrm2_" alt="" coords="169,56,234,83"/><area shape="rect" id="node4" href="ilu__ddrop__row_8c.html#afdb24942915626f5de65c50cb31c267a" title="idamax_" alt="" coords="166,107,237,133"/><area shape="rect" id="node5" href="ilu__ddrop__row_8c.html#a511235 [...]
+</div>
+</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ac900805a486cbb8489e3c176ed6e0d8e"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* A</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__dpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__dpanel__dfs_8c.html
new file mode 100644
index 0000000..12b8c46
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__dpanel__dfs_8c.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_dpanel_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_dpanel_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>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>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_dpanel_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__dpanel__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__dpanel__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__dpanel__dfs_8c" id="SRC_2ilu__dpanel__dfs_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0a3d016444b041668956824248d22439"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dpanel__dfs_8c.html#a0a3d016444b041668956824248d22439">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, double *dense, dou [...]
+<tr class="separator:a0a3d016444b041668956824248d22439"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0a3d016444b041668956824248d22439"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__dpivotL_8c.html b/SuperLU_5.2.0/DOC/html/ilu__dpivotL_8c.html
new file mode 100644
index 0000000..d150849
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__dpivotL_8c.html
@@ -0,0 +1,226 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_dpivotL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_dpivotL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numerical pivoting.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_dpivotL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__dpivotL_8c__incl.png" border="0" usemap="#SRC_2ilu__dpivotL_8c" alt=""/></div>
+<map name="SRC_2ilu__dpivotL_8c" id="SRC_2ilu__dpivotL_8c">
+<area shape="rect" id="node4" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="375,80,464,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="125,155,232,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="256,155,357,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a95ed41486ca0ed53262e4b8934d4afac"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN</a>(x) ((x)>=0?1:-1)</td></tr>
+<tr class="separator:a95ed41486ca0ed53262e4b8934d4afac"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a058d843996bb36b73784b80aae05f04b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dpivotL_8c.html#a058d843996bb36b73784b80aae05f04b">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#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, d [...]
+<tr class="separator:a058d843996bb36b73784b80aae05f04b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a95ed41486ca0ed53262e4b8934d4afac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SGN</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x</td><td>)</td>
+ <td> ((x)>=0?1:-1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a058d843996bb36b73784b80aae05f04b"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__dsnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__dsnode__dfs_8c.html
new file mode 100644
index 0000000..22084e7
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__dsnode__dfs_8c.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_dsnode_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_dsnode_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Determines the union of row structures of columns within the relaxed node.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_dsnode_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__dsnode__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__dsnode__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__dsnode__dfs_8c" id="SRC_2ilu__dsnode__dfs_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a66dbc4626e59d14b4d3458c4eb841829"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__dsnode__dfs_8c.html#a66dbc4626e59d14b4d3458c4eb841829">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>
+<tr class="separator:a66dbc4626e59d14b4d3458c4eb841829"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a66dbc4626e59d14b4d3458c4eb841829"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__dsnode__dfs_8c.html#a66dbc4626e59d14b4d3458c4eb841829">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__dsnode__dfs_8c_a66dbc4626e59d14b4d3458c4eb841829_cgraph.png" border="0" usemap="#ilu__dsnode__dfs_8c_a66dbc4626e59d14b4d3458c4eb841829_cgraph" alt=""/></div>
+<map name="ilu__dsnode__dfs_8c_a66dbc4626e59d14b4d3458c4eb841829_cgraph" id="ilu__dsnode__dfs_8c_a66dbc4626e59d14b4d3458c4eb841829_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="163,107,275,133"/><area shape="rect" id="node3" href="dmemory_8c.html#afe3104df9ace895f5332843534ae99b4" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="347,81,418,108"/><area shape="rect" id="node8" href="dmemory_8c.html#a5c9b1e24d07635068c014999d44672aa" title="dmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__heap__relax__snode_8c.html b/SuperLU_5.2.0/DOC/html/ilu__heap__relax__snode_8c.html
new file mode 100644
index 0000000..3778b02
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__heap__relax__snode_8c.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_heap_relax_snode.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_heap_relax_snode.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Identify the initial relaxed supernodes.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_heap_relax_snode.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__heap__relax__snode_8c__incl.png" border="0" usemap="#SRC_2ilu__heap__relax__snode_8c" alt=""/></div>
+<map name="SRC_2ilu__heap__relax__snode_8c" id="SRC_2ilu__heap__relax__snode_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,96,363,123"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,171,628,197"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,171,753,197"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aac1a978dda622cdb58c3c2eaee4b4030"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__heap__relax__snode_8c.html#aac1a978dda622cdb58c3c2eaee4b4030">ilu_heap_relax_snode</a> (const int n, int *et, const int relax_columns, int *descendants, int *relax_end, int *relax_fsupc)</td></tr>
+<tr class="separator:aac1a978dda622cdb58c3c2eaee4b4030"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 1, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aac1a978dda622cdb58c3c2eaee4b4030"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__heap__relax__snode_8c.html#aac1a978dda622cdb58c3c2eaee4b4030">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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__heap__relax__snode_8c_aac1a978dda622cdb58c3c2eaee4b4030_cgraph.png" border="0" usemap="#ilu__heap__relax__snode_8c_aac1a978dda622cdb58c3c2eaee4b4030_cgraph" alt=""/></div>
+<map name="ilu__heap__relax__snode_8c_aac1a978dda622cdb58c3c2eaee4b4030_cgraph" id="ilu__heap__relax__snode_8c_aac1a978dda622cdb58c3c2eaee4b4030_cgraph">
+<area shape="rect" id="node2" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="215,5,289,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a44084fde835d2ccaa25e9fd942a72b7a" title="TreePostorder" alt="" coords="200,56,304,83"/><area shape="rect" id="node7" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="233,107,271,133"/><area shape="rect" id="node4" href="sp__co [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__relax__snode_8c.html b/SuperLU_5.2.0/DOC/html/ilu__relax__snode_8c.html
new file mode 100644
index 0000000..8adce2f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__relax__snode_8c.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_relax_snode.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_relax_snode.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Identify initial relaxed supernodes.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_relax_snode.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__relax__snode_8c__incl.png" border="0" usemap="#SRC_2ilu__relax__snode_8c" alt=""/></div>
+<map name="SRC_2ilu__relax__snode_8c" id="SRC_2ilu__relax__snode_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae0e2bbb8507d800766030635a3bd5a7e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__relax__snode_8c.html#ae0e2bbb8507d800766030635a3bd5a7e">ilu_relax_snode</a> (const int n, int *et, const int relax_columns, int *descendants, int *relax_end, int *relax_fsupc)</td></tr>
+<tr class="separator:ae0e2bbb8507d800766030635a3bd5a7e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 1, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae0e2bbb8507d800766030635a3bd5a7e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__relax__snode_8c.html#ae0e2bbb8507d800766030635a3bd5a7e">ilu_relax_snode()</a> - Identify the initial relaxed supernodes, assuming
+ that the matrix has been reordered according to the postorder of the
+ etree.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__relax__snode_8c_ae0e2bbb8507d800766030635a3bd5a7e_cgraph.png" border="0" usemap="#ilu__relax__snode_8c_ae0e2bbb8507d800766030635a3bd5a7e_cgraph" alt=""/></div>
+<map name="ilu__relax__snode_8c_ae0e2bbb8507d800766030635a3bd5a7e_cgraph" id="ilu__relax__snode_8c_ae0e2bbb8507d800766030635a3bd5a7e_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="166,5,205,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__scolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__scolumn__dfs_8c.html
new file mode 100644
index 0000000..9d04e45
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__scolumn__dfs_8c.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_scolumn_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_scolumn_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs a symbolic factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_scolumn_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__scolumn__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__scolumn__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__scolumn__dfs_8c" id="SRC_2ilu__scolumn__dfs_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a7cca59251907bd7e1973d394487f74af"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__scolumn__dfs_8c.html#a7cca59251907bd7e1973d394487f74af">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>
+<tr class="separator:a7cca59251907bd7e1973d394487f74af"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a7cca59251907bd7e1973d394487f74af"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ILU_SCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__scolumn__dfs_8c_a7cca59251907bd7e1973d394487f74af_cgraph.png" border="0" usemap="#ilu__scolumn__dfs_8c_a7cca59251907bd7e1973d394487f74af_cgraph" alt=""/></div>
+<map name="ilu__scolumn__dfs_8c_a7cca59251907bd7e1973d394487f74af_cgraph" id="ilu__scolumn__dfs_8c_a7cca59251907bd7e1973d394487f74af_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="193,31,260,57"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="171,81,283,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="349,31,432,57"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__scopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/ilu__scopy__to__ucol_8c.html
new file mode 100644
index 0000000..03205a7
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__scopy__to__ucol_8c.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_scopy_to_ucol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_scopy_to_ucol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Copy a computed column of U to the compressed data structure and drop some small entries.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_scopy_to_ucol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__scopy__to__ucol_8c__incl.png" border="0" usemap="#SRC_2ilu__scopy__to__ucol_8c" alt=""/></div>
+<map name="SRC_2ilu__scopy__to__ucol_8c" id="SRC_2ilu__scopy__to__ucol_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af839d60e0d4028df30ea1106ce429210"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__scopy__to__ucol_8c.html#af839d60e0d4028df30ea1106ce429210">scopy_</a> (int *, float[], int *, float[], int *)</td></tr>
+<tr class="separator:af839d60e0d4028df30ea1106ce429210"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aac49754df15a9466857a0eca885f9444"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__scopy__to__ucol_8c.html#aac49754df15a9466857a0eca885f9444">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#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, double drop_tol, int quota, float * [...]
+<tr class="separator:aac49754df15a9466857a0eca885f9444"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory
+November, 2010
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aac49754df15a9466857a0eca885f9444"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__scopy__to__ucol_8c_aac49754df15a9466857a0eca885f9444_cgraph.png" border="0" usemap="#ilu__scopy__to__ucol_8c_aac49754df15a9466857a0eca885f9444_cgraph" alt=""/></div>
+<map name="ilu__scopy__to__ucol_8c_aac49754df15a9466857a0eca885f9444_cgraph" id="ilu__scopy__to__ucol_8c_aac49754df15a9466857a0eca885f9444_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="207,56,268,83"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="181,107,293,133"/><area shape="rect" id="node10" href="ilu__scopy__to__ucol_8c.html#af839d60e0d4028df30ea1106ce429210" title="scopy_" alt="" coords="205,157,269,184"/><area shape [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="af839d60e0d4028df30ea1106ce429210"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__sdrop__row_8c.html b/SuperLU_5.2.0/DOC/html/ilu__sdrop__row_8c.html
new file mode 100644
index 0000000..dd795ac
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__sdrop__row_8c.html
@@ -0,0 +1,529 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_sdrop_row.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_sdrop_row.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Drop small rows from L.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_sdrop_row.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__sdrop__row_8c__incl.png" border="0" usemap="#SRC_2ilu__sdrop__row_8c" alt=""/></div>
+<map name="SRC_2ilu__sdrop__row_8c" id="SRC_2ilu__sdrop__row_8c">
+<area shape="rect" id="node4" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="385,80,473,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="135,155,241,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="265,155,367,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2ea44e9849dcb189a4e81f09d97e3c95"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#a2ea44e9849dcb189a4e81f09d97e3c95">sswap_</a> (int *, float[], int *, float[], int *)</td></tr>
+<tr class="separator:a2ea44e9849dcb189a4e81f09d97e3c95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade8ba65d9c44f41e97cf2c40a772cff7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#ade8ba65d9c44f41e97cf2c40a772cff7">saxpy_</a> (int *, float *, float[], int *, float[], int *)</td></tr>
+<tr class="separator:ade8ba65d9c44f41e97cf2c40a772cff7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af839d60e0d4028df30ea1106ce429210"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#af839d60e0d4028df30ea1106ce429210">scopy_</a> (int *, float[], int *, float[], int *)</td></tr>
+<tr class="separator:af839d60e0d4028df30ea1106ce429210"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a43ef780d8b669dc0b19d41fa6727124f"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#a43ef780d8b669dc0b19d41fa6727124f">sasum_</a> (int *, float *, int *)</td></tr>
+<tr class="separator:a43ef780d8b669dc0b19d41fa6727124f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac419c8b8797339212c62cd423e3e652c"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#ac419c8b8797339212c62cd423e3e652c">snrm2_</a> (int *, float *, int *)</td></tr>
+<tr class="separator:ac419c8b8797339212c62cd423e3e652c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61a0022627cc1977966c0067f1f12e26"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#a61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+<tr class="separator:a61a0022627cc1977966c0067f1f12e26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a18eff2aa758918dee76e31b812c88c9f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#a18eff2aa758918dee76e31b812c88c9f">isamax_</a> (int *, float[], int *)</td></tr>
+<tr class="separator:a18eff2aa758918dee76e31b812c88c9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ddf1742e9078a786574bb5aa80aed2a"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">_compare_</a> (const void *a, const void *b)</td></tr>
+<tr class="separator:a8ddf1742e9078a786574bb5aa80aed2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d9b169f47790d6eed41107efb445867"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#a0d9b169f47790d6eed41107efb445867">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 [...]
+<tr class="separator:a0d9b169f47790d6eed41107efb445867"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a4f397f6aca9178eb3de2026fc159fa55"><td class="memItemLeft" align="right" valign="top">static float * </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__sdrop__row_8c.html#a4f397f6aca9178eb3de2026fc159fa55">A</a></td></tr>
+<tr class="separator:a4f397f6aca9178eb3de2026fc159fa55"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8ddf1742e9078a786574bb5aa80aed2a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a61a0022627cc1977966c0067f1f12e26"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0d9b169f47790d6eed41107efb445867"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__sdrop__row_8c.html#a0d9b169f47790d6eed41107efb445867">ilu_sdrop_row()</a> - Drop some small rows from the previous
+ supernode (L-part only).
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__sdrop__row_8c_a0d9b169f47790d6eed41107efb445867_cgraph.png" border="0" usemap="#ilu__sdrop__row_8c_a0d9b169f47790d6eed41107efb445867_cgraph" alt=""/></div>
+<map name="ilu__sdrop__row_8c_a0d9b169f47790d6eed41107efb445867_cgraph" id="ilu__sdrop__row_8c_a0d9b169f47790d6eed41107efb445867_cgraph">
+<area shape="rect" id="node2" href="ilu__sdrop__row_8c.html#a43ef780d8b669dc0b19d41fa6727124f" title="sasum_" alt="" coords="167,5,235,32"/><area shape="rect" id="node3" href="ilu__sdrop__row_8c.html#ac419c8b8797339212c62cd423e3e652c" title="snrm2_" alt="" coords="169,56,234,83"/><area shape="rect" id="node4" href="ilu__sdrop__row_8c.html#a18eff2aa758918dee76e31b812c88c9f" title="isamax_" alt="" coords="166,107,237,133"/><area shape="rect" id="node5" href="ilu__sdrop__row_8c.html#ade8ba6 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a18eff2aa758918dee76e31b812c88c9f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a43ef780d8b669dc0b19d41fa6727124f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ade8ba65d9c44f41e97cf2c40a772cff7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af839d60e0d4028df30ea1106ce429210"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac419c8b8797339212c62cd423e3e652c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2ea44e9849dcb189a4e81f09d97e3c95"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a4f397f6aca9178eb3de2026fc159fa55"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">float* A</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__spanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__spanel__dfs_8c.html
new file mode 100644
index 0000000..c5eea61
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__spanel__dfs_8c.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_spanel_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_spanel_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>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>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_spanel_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__spanel__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__spanel__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__spanel__dfs_8c" id="SRC_2ilu__spanel__dfs_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:afffee4e945eab223be6daa1759e98f60"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__spanel__dfs_8c.html#afffee4e945eab223be6daa1759e98f60">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, float *dense, floa [...]
+<tr class="separator:afffee4e945eab223be6daa1759e98f60"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="afffee4e945eab223be6daa1759e98f60"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__spivotL_8c.html b/SuperLU_5.2.0/DOC/html/ilu__spivotL_8c.html
new file mode 100644
index 0000000..f889158
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__spivotL_8c.html
@@ -0,0 +1,226 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_spivotL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_spivotL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numerical pivoting.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_spivotL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__spivotL_8c__incl.png" border="0" usemap="#SRC_2ilu__spivotL_8c" alt=""/></div>
+<map name="SRC_2ilu__spivotL_8c" id="SRC_2ilu__spivotL_8c">
+<area shape="rect" id="node4" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="375,80,464,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="125,155,232,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="256,155,357,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a95ed41486ca0ed53262e4b8934d4afac"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__spivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN</a>(x) ((x)>=0?1:-1)</td></tr>
+<tr class="separator:a95ed41486ca0ed53262e4b8934d4afac"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9da652b68b6ecee45919cf56f256b7e0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__spivotL_8c.html#a9da652b68b6ecee45919cf56f256b7e0">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#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, f [...]
+<tr class="separator:a9da652b68b6ecee45919cf56f256b7e0"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a95ed41486ca0ed53262e4b8934d4afac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SGN</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x</td><td>)</td>
+ <td> ((x)>=0?1:-1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a9da652b68b6ecee45919cf56f256b7e0"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__ssnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__ssnode__dfs_8c.html
new file mode 100644
index 0000000..b16d9b8
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__ssnode__dfs_8c.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_ssnode_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_ssnode_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Determines the union of row structures of columns within the relaxed node.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_ssnode_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__ssnode__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__ssnode__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__ssnode__dfs_8c" id="SRC_2ilu__ssnode__dfs_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a510a9174e442a65aaa83f9ce97390f85"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__ssnode__dfs_8c.html#a510a9174e442a65aaa83f9ce97390f85">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>
+<tr class="separator:a510a9174e442a65aaa83f9ce97390f85"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a510a9174e442a65aaa83f9ce97390f85"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__ssnode__dfs_8c.html#a510a9174e442a65aaa83f9ce97390f85">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__ssnode__dfs_8c_a510a9174e442a65aaa83f9ce97390f85_cgraph.png" border="0" usemap="#ilu__ssnode__dfs_8c_a510a9174e442a65aaa83f9ce97390f85_cgraph" alt=""/></div>
+<map name="ilu__ssnode__dfs_8c_a510a9174e442a65aaa83f9ce97390f85_cgraph" id="ilu__ssnode__dfs_8c_a510a9174e442a65aaa83f9ce97390f85_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="163,107,275,133"/><area shape="rect" id="node3" href="smemory_8c.html#aa2862f14356be7d9f12bfdfc175137a1" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="347,81,418,108"/><area shape="rect" id="node8" href="smemory_8c.html#a658f955c5532813bd0490502efae563f" title="smemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__zcolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__zcolumn__dfs_8c.html
new file mode 100644
index 0000000..eef7a3b
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__zcolumn__dfs_8c.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_zcolumn_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_zcolumn_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs a symbolic factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_zcolumn_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zcolumn__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__zcolumn__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__zcolumn__dfs_8c" id="SRC_2ilu__zcolumn__dfs_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae44a937bcd7d34ad6b18ad859680d8f1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zcolumn__dfs_8c.html#ae44a937bcd7d34ad6b18ad859680d8f1">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>
+<tr class="separator:ae44a937bcd7d34ad6b18ad859680d8f1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae44a937bcd7d34ad6b18ad859680d8f1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ILU_ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zcolumn__dfs_8c_ae44a937bcd7d34ad6b18ad859680d8f1_cgraph.png" border="0" usemap="#ilu__zcolumn__dfs_8c_ae44a937bcd7d34ad6b18ad859680d8f1_cgraph" alt=""/></div>
+<map name="ilu__zcolumn__dfs_8c_ae44a937bcd7d34ad6b18ad859680d8f1_cgraph" id="ilu__zcolumn__dfs_8c_ae44a937bcd7d34ad6b18ad859680d8f1_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="193,31,260,57"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="171,81,283,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="349,31,432,57"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__zcopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/ilu__zcopy__to__ucol_8c.html
new file mode 100644
index 0000000..5b3aa8c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__zcopy__to__ucol_8c.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_zcopy_to_ucol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_zcopy_to_ucol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Copy a computed column of U to the compressed data structure and drop some small entries.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_zcopy_to_ucol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zcopy__to__ucol_8c__incl.png" border="0" usemap="#SRC_2ilu__zcopy__to__ucol_8c" alt=""/></div>
+<map name="SRC_2ilu__zcopy__to__ucol_8c" id="SRC_2ilu__zcopy__to__ucol_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aad105755c4a253c2d6dbce95720abb48"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zcopy__to__ucol_8c.html#aad105755c4a253c2d6dbce95720abb48">zcopy_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+<tr class="separator:aad105755c4a253c2d6dbce95720abb48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab3c195f1b0db2f8686e3be3dc5107007"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zcopy__to__ucol_8c.html#ab3c195f1b0db2f8686e3be3dc5107007">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#a0cb73c13a7c2390c3a9a0a891347 [...]
+<tr class="separator:ab3c195f1b0db2f8686e3be3dc5107007"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory
+November, 2010
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab3c195f1b0db2f8686e3be3dc5107007"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zcopy__to__ucol_8c_ab3c195f1b0db2f8686e3be3dc5107007_cgraph.png" border="0" usemap="#ilu__zcopy__to__ucol_8c_ab3c195f1b0db2f8686e3be3dc5107007_cgraph" alt=""/></div>
+<map name="ilu__zcopy__to__ucol_8c_ab3c195f1b0db2f8686e3be3dc5107007_cgraph" id="ilu__zcopy__to__ucol_8c_ab3c195f1b0db2f8686e3be3dc5107007_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="207,56,268,83"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="181,107,293,133"/><area shape="rect" id="node10" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="20 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aad105755c4a253c2d6dbce95720abb48"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__zdrop__row_8c.html b/SuperLU_5.2.0/DOC/html/ilu__zdrop__row_8c.html
new file mode 100644
index 0000000..ce85ba8
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__zdrop__row_8c.html
@@ -0,0 +1,520 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_zdrop_row.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_zdrop_row.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Drop small rows from L.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_zdrop_row.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zdrop__row_8c__incl.png" border="0" usemap="#SRC_2ilu__zdrop__row_8c" alt=""/></div>
+<map name="SRC_2ilu__zdrop__row_8c" id="SRC_2ilu__zdrop__row_8c">
+<area shape="rect" id="node4" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="497,80,585,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="181,155,288,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="312,155,413,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a20051222dca15b4b236d9758042171cf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#a20051222dca15b4b236d9758042171cf">zswap_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+<tr class="separator:a20051222dca15b4b236d9758042171cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aceb6d1d72184759746247bd55dcede0f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#aceb6d1d72184759746247bd55dcede0f">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 class="separator:aceb6d1d72184759746247bd55dcede0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad105755c4a253c2d6dbce95720abb48"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#aad105755c4a253c2d6dbce95720abb48">zcopy_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+<tr class="separator:aad105755c4a253c2d6dbce95720abb48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afafebe5a243783e920465d5985076dae"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#afafebe5a243783e920465d5985076dae">dzasum_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *)</td></tr>
+<tr class="separator:afafebe5a243783e920465d5985076dae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7e669e96b4c0ad6e2000684a34e798b7"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#a7e669e96b4c0ad6e2000684a34e798b7">dznrm2_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *)</td></tr>
+<tr class="separator:a7e669e96b4c0ad6e2000684a34e798b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61a0022627cc1977966c0067f1f12e26"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#a61a0022627cc1977966c0067f1f12e26">dnrm2_</a> (int *, double[], int *)</td></tr>
+<tr class="separator:a61a0022627cc1977966c0067f1f12e26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8bf573faadaf4a6cead386258c1421c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#af8bf573faadaf4a6cead386258c1421c">izamax_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+<tr class="separator:af8bf573faadaf4a6cead386258c1421c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ddf1742e9078a786574bb5aa80aed2a"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#a8ddf1742e9078a786574bb5aa80aed2a">_compare_</a> (const void *a, const void *b)</td></tr>
+<tr class="separator:a8ddf1742e9078a786574bb5aa80aed2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4b8c50d3afed76a8b9809673a7da4f3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#af4b8c50d3afed76a8b9809673a7da4f3">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 [...]
+<tr class="separator:af4b8c50d3afed76a8b9809673a7da4f3"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ac900805a486cbb8489e3c176ed6e0d8e"><td class="memItemLeft" align="right" valign="top">static double * </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a></td></tr>
+<tr class="separator:ac900805a486cbb8489e3c176ed6e0d8e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8ddf1742e9078a786574bb5aa80aed2a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a61a0022627cc1977966c0067f1f12e26"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afafebe5a243783e920465d5985076dae"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7e669e96b4c0ad6e2000684a34e798b7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af4b8c50d3afed76a8b9809673a7da4f3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__zdrop__row_8c.html#af4b8c50d3afed76a8b9809673a7da4f3">ilu_zdrop_row()</a> - Drop some small rows from the previous
+ supernode (L-part only).
+</pre>
+</div>
+</div>
+<a class="anchor" id="af8bf573faadaf4a6cead386258c1421c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aceb6d1d72184759746247bd55dcede0f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aad105755c4a253c2d6dbce95720abb48"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a20051222dca15b4b236d9758042171cf"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ac900805a486cbb8489e3c176ed6e0d8e"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* A</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__zpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__zpanel__dfs_8c.html
new file mode 100644
index 0000000..9a56671
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__zpanel__dfs_8c.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_zpanel_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_zpanel_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>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>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_zpanel_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zpanel__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__zpanel__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__zpanel__dfs_8c" id="SRC_2ilu__zpanel__dfs_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a8bc5f8a774d7fab0ba65cd9bca243435"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zpanel__dfs_8c.html#a8bc5f8a774d7fab0ba65cd9bca243435">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, <a class="el" href [...]
+<tr class="separator:a8bc5f8a774d7fab0ba65cd9bca243435"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8bc5f8a774d7fab0ba65cd9bca243435"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zpanel__dfs_8c_a8bc5f8a774d7fab0ba65cd9bca243435_cgraph.png" border="0" usemap="#ilu__zpanel__dfs_8c_a8bc5f8a774d7fab0ba65cd9bca243435_cgraph" alt=""/></div>
+<map name="ilu__zpanel__dfs_8c_a8bc5f8a774d7fab0ba65cd9bca243435_cgraph" id="ilu__zpanel__dfs_8c_a8bc5f8a774d7fab0ba65cd9bca243435_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="160,5,224,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__zpivotL_8c.html b/SuperLU_5.2.0/DOC/html/ilu__zpivotL_8c.html
new file mode 100644
index 0000000..c744d33
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__zpivotL_8c.html
@@ -0,0 +1,235 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_zpivotL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_zpivotL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numerical pivoting.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_zpivotL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zpivotL_8c__incl.png" border="0" usemap="#SRC_2ilu__zpivotL_8c" alt=""/></div>
+<map name="SRC_2ilu__zpivotL_8c" id="SRC_2ilu__zpivotL_8c">
+<area shape="rect" id="node4" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="497,80,585,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="181,155,288,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="312,155,413,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a95ed41486ca0ed53262e4b8934d4afac"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN</a>(x) ((x)>=0?1:-1)</td></tr>
+<tr class="separator:a95ed41486ca0ed53262e4b8934d4afac"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a857e99bebbdf102f2b9d2ef4a25d1135"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zpivotL_8c.html#a857e99bebbdf102f2b9d2ef4a25d1135">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#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> milu, < [...]
+<tr class="separator:a857e99bebbdf102f2b9d2ef4a25d1135"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a95ed41486ca0ed53262e4b8934d4afac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SGN</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x</td><td>)</td>
+ <td> ((x)>=0?1:-1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a857e99bebbdf102f2b9d2ef4a25d1135"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zpivotL_8c_a857e99bebbdf102f2b9d2ef4a25d1135_cgraph.png" border="0" usemap="#ilu__zpivotL_8c_a857e99bebbdf102f2b9d2ef4a25d1135_cgraph" alt=""/></div>
+<map name="ilu__zpivotL_8c_a857e99bebbdf102f2b9d2ef4a25d1135_cgraph" id="ilu__zpivotL_8c_a857e99bebbdf102f2b9d2ef4a25d1135_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="139,5,203,32"/><area shape="rect" id="node3" href="dcomplex_8c.html#a36451f8af6b7bd3a4d5f655ead8d5ee4" title="SIGN functions for complex number. Returns z/abs(z) " alt="" coords="142,56,199,83"/><area shape="rect" id="node5" href="dcomplex_8c.html#a4cfde2671a83833a15c5b48517781db0" title="Complex Division c = a/b. " alt="" coord [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ilu__zsnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ilu__zsnode__dfs_8c.html
new file mode 100644
index 0000000..c2fb32b
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ilu__zsnode__dfs_8c.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ilu_zsnode_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ilu_zsnode_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Determines the union of row structures of columns within the relaxed node.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ilu_zsnode_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zsnode__dfs_8c__incl.png" border="0" usemap="#SRC_2ilu__zsnode__dfs_8c" alt=""/></div>
+<map name="SRC_2ilu__zsnode__dfs_8c" id="SRC_2ilu__zsnode__dfs_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6fa78a3059d75e11a66434992dddafab"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ilu__zsnode__dfs_8c.html#a6fa78a3059d75e11a66434992dddafab">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>
+<tr class="separator:a6fa78a3059d75e11a66434992dddafab"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a6fa78a3059d75e11a66434992dddafab"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__zsnode__dfs_8c.html#a6fa78a3059d75e11a66434992dddafab">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ilu__zsnode__dfs_8c_a6fa78a3059d75e11a66434992dddafab_cgraph.png" border="0" usemap="#ilu__zsnode__dfs_8c_a6fa78a3059d75e11a66434992dddafab_cgraph" alt=""/></div>
+<map name="ilu__zsnode__dfs_8c_a6fa78a3059d75e11a66434992dddafab_cgraph" id="ilu__zsnode__dfs_8c_a6fa78a3059d75e11a66434992dddafab_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="163,107,275,133"/><area shape="rect" id="node3" href="zmemory_8c.html#a67833ee9526cec0b31d0f26e527b97df" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="347,81,418,108"/><area shape="rect" id="node8" href="zmemory_8c.html#a17416eb78c42063624b6859d9f88820b" title="zmemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/index.html b/SuperLU_5.2.0/DOC/html/index.html
new file mode 100644
index 0000000..6361fbe
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/index.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SuperLU Documentation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">SuperLU Documentation </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>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>
+<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 numb [...]
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/izmax1_8c.html b/SuperLU_5.2.0/DOC/html/izmax1_8c.html
new file mode 100644
index 0000000..414cfc1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/izmax1_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/izmax1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">izmax1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Finds the index of the element whose real part has maximum absolute value.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for izmax1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="izmax1_8c__incl.png" border="0" usemap="#SRC_2izmax1_8c" alt=""/></div>
+<map name="SRC_2izmax1_8c" id="SRC_2izmax1_8c">
+<area shape="rect" id="node3" href="slu__dcomplex_8h.html" title="Header file for complex operations. " alt="" coords="91,80,204,107"/><area shape="rect" id="node4" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="229,80,336,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a5a76da95c549c41790389a76e12fdcb5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="izmax1_8c.html#a5a76da95c549c41790389a76e12fdcb5">CX</a>(I) cx[(I)-1]</td></tr>
+<tr class="separator:a5a76da95c549c41790389a76e12fdcb5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aaf53fd062f8467a96cf58270c87e398a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="izmax1_8c.html#aaf53fd062f8467a96cf58270c87e398a">izmax1_slu</a> (int *n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *cx, int *incx)</td></tr>
+<tr class="separator:aaf53fd062f8467a96cf58270c87e398a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a5a76da95c549c41790389a76e12fdcb5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CX</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">I</td><td>)</td>
+ <td> cx[(I)-1]</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aaf53fd062f8467a96cf58270c87e398a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int izmax1_slu </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> IZMAX1 finds the index of the element whose real part has maximum
+ absolute value.</pre><pre> Based on IZAMAX from Level 1 BLAS.
+ The change is to use the 'genuine' absolute value.</pre><pre> Contributed by Nick Higham for use with ZLACON.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre> N (input) INT
+ The number of elements in the vector CX.</pre><pre> CX (input) COMPLEX*16 array, dimension (N)
+ The vector whose elements will be summed.</pre><pre> INCX (input) INT
+ The spacing between successive values of CX. INCX >= 1.
+</p>
+<hr/>
+
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/mark__relax_8c.html b/SuperLU_5.2.0/DOC/html/mark__relax_8c.html
new file mode 100644
index 0000000..dbf6669
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/mark__relax_8c.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/mark_relax.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">mark_relax.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Record the rows pivoted by the relaxed supernodes.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for mark_relax.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="mark__relax_8c__incl.png" border="0" usemap="#SRC_2mark__relax_8c" alt=""/></div>
+<map name="SRC_2mark__relax_8c" id="SRC_2mark__relax_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5e85b0273eec011f0027d8506a20350e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mark__relax_8c.html#a5e85b0273eec011f0027d8506a20350e">mark_relax</a> (int n, int *relax_end, int *relax_fsupc, int *xa_begin, int *xa_end, int *asub, int *marker)</td></tr>
+<tr class="separator:a5e85b0273eec011f0027d8506a20350e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 1, 2009
+<</p>
+<dl class="section pre"><dt>Precondition</dt><dd>>
+</dd></dl>
+</pre></div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5e85b0273eec011f0027d8506a20350e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="mark__relax_8c.html#a5e85b0273eec011f0027d8506a20350e">mark_relax()</a> - record the rows used by the relaxed supernodes.
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/mc64ad_8c.html b/SuperLU_5.2.0/DOC/html/mc64ad_8c.html
new file mode 100644
index 0000000..3748233
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/mc64ad_8c.html
@@ -0,0 +1,951 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/mc64ad.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">mc64ad.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for mc64ad.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="mc64ad_8c__incl.png" border="0" usemap="#SRC_2mc64ad_8c" alt=""/></div>
+<map name="SRC_2mc64ad_8c" id="SRC_2mc64ad_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a6a010865b10e541735fa2da8f3cd062d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs</a>(a) ((a) >= 0) ? (a) : -(a)</td></tr>
+<tr class="separator:a6a010865b10e541735fa2da8f3cd062d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac6afabdc09a49a433ee19d8a9486056d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#ac6afabdc09a49a433ee19d8a9486056d">min</a>(a, b) ((a) < (b)) ? (a) : (b)</td></tr>
+<tr class="separator:ac6afabdc09a49a433ee19d8a9486056d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a49a5219ef8d6345ee5ae5a34aea76ed6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#a49a5219ef8d6345ee5ae5a34aea76ed6">mc64id_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *icntl)</td></tr>
+<tr class="separator:a49a5219ef8d6345ee5ae5a34aea76ed6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a122c4a344cc189495e32b7b7f6123e69"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#a122c4a344cc189495e32b7b7f6123e69">mc64ad_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *job, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t [...]
+<tr class="separator:a122c4a344cc189495e32b7b7f6123e69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a03d088da1e7d8454a0fd4e1d1840b96c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#a03d088da1e7d8454a0fd4e1d1840b96c">mc64bd_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</ [...]
+<tr class="separator:a03d088da1e7d8454a0fd4e1d1840b96c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a23f5c353dc0f33b3171101060a9a555f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#a23f5c353dc0f33b3171101060a9a555f">mc64dd_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *i__, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t [...]
+<tr class="separator:a23f5c353dc0f33b3171101060a9a555f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3926b73b0b519feef70eae9ed9cf282c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#a3926b73b0b519feef70eae9ed9cf282c">mc64ed_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *qlen, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_ [...]
+<tr class="separator:a3926b73b0b519feef70eae9ed9cf282c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9b0c810c63b7faf051b21e97a636285c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#a9b0c810c63b7faf051b21e97a636285c">mc64fd_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *pos0, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_ [...]
+<tr class="separator:a9b0c810c63b7faf051b21e97a636285c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbb9a61e53f59a675c30dfd821aad16f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#adbb9a61e53f59a675c30dfd821aad16f">mc64rd_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</ [...]
+<tr class="separator:adbb9a61e53f59a675c30dfd821aad16f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aea1b4d8e05692a715e334f472f9a4313"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#aea1b4d8e05692a715e334f472f9a4313">mc64sd_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</ [...]
+<tr class="separator:aea1b4d8e05692a715e334f472f9a4313"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a77573ca4776db28859b0ead94b728dc1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#a77573ca4776db28859b0ead94b728dc1">mc64qd_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *ip, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t< [...]
+<tr class="separator:a77573ca4776db28859b0ead94b728dc1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52c18d1d9fc3efefba36ba67456b46d1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#a52c18d1d9fc3efefba36ba67456b46d1">mc64ud_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *id, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t< [...]
+<tr class="separator:a52c18d1d9fc3efefba36ba67456b46d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:add3e26b831b8b4bc818b93c4fdce7174"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="mc64ad_8c.html#add3e26b831b8b4bc818b93c4fdce7174">mc64wd_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *n, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</ [...]
+<tr class="separator:add3e26b831b8b4bc818b93c4fdce7174"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a6a010865b10e541735fa2da8f3cd062d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define abs</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a</td><td>)</td>
+ <td> ((a) >= 0) ? (a) : -(a)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac6afabdc09a49a433ee19d8a9486056d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define min</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> ((a) < (b)) ? (a) : (b)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a122c4a344cc189495e32b7b7f6123e69"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="mc64ad_8c_a122c4a344cc189495e32b7b7f6123e69_cgraph.png" border="0" usemap="#mc64ad_8c_a122c4a344cc189495e32b7b7f6123e69_cgraph" alt=""/></div>
+<map name="mc64ad_8c_a122c4a344cc189495e32b7b7f6123e69_cgraph" id="mc64ad_8c_a122c4a344cc189495e32b7b7f6123e69_cgraph">
+<area shape="rect" id="node2" href="mc64ad_8c.html#a03d088da1e7d8454a0fd4e1d1840b96c" title="mc64bd_" alt="" coords="131,107,205,133"/><area shape="rect" id="node6" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="263,157,324,184"/><area shape="rect" id="node7" href="mc64ad_8c.html#adbb9a61e53f59a675c30dfd821aad16f" title="mc64rd_" alt="" coords="132,259,204,285"/><area shape="rect" id="node8" href="mc64ad_8c.html#aea1b4d8e05692a715e334f472f9a4313" titl [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a03d088da1e7d8454a0fd4e1d1840b96c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64bd_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="mc64ad_8c_a03d088da1e7d8454a0fd4e1d1840b96c_cgraph.png" border="0" usemap="#mc64ad_8c_a03d088da1e7d8454a0fd4e1d1840b96c_cgraph" alt=""/></div>
+<map name="mc64ad_8c_a03d088da1e7d8454a0fd4e1d1840b96c_cgraph" id="mc64ad_8c_a03d088da1e7d8454a0fd4e1d1840b96c_cgraph">
+<area shape="rect" id="node2" href="mc64ad_8c.html#a23f5c353dc0f33b3171101060a9a555f" title="mc64dd_" alt="" coords="128,5,203,32"/><area shape="rect" id="node3" href="mc64ad_8c.html#a3926b73b0b519feef70eae9ed9cf282c" title="mc64ed_" alt="" coords="128,56,203,83"/><area shape="rect" id="node4" href="mc64ad_8c.html#a9b0c810c63b7faf051b21e97a636285c" title="mc64fd_" alt="" coords="129,107,201,133"/><area shape="rect" id="node5" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title=" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a23f5c353dc0f33b3171101060a9a555f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64dd_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"><em>iway</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3926b73b0b519feef70eae9ed9cf282c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ed_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"><em>iway</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9b0c810c63b7faf051b21e97a636285c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64fd_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"><em>iway</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a49a5219ef8d6345ee5ae5a34aea76ed6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"><em>icntl</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a77573ca4776db28859b0ead94b728dc1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64qd_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adbb9a61e53f59a675c30dfd821aad16f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64rd_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aea1b4d8e05692a715e334f472f9a4313"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64sd_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"><em>iw4</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="mc64ad_8c_aea1b4d8e05692a715e334f472f9a4313_cgraph.png" border="0" usemap="#mc64ad_8c_aea1b4d8e05692a715e334f472f9a4313_cgraph" alt=""/></div>
+<map name="mc64ad_8c_aea1b4d8e05692a715e334f472f9a4313_cgraph" id="mc64ad_8c_aea1b4d8e05692a715e334f472f9a4313_cgraph">
+<area shape="rect" id="node2" href="mc64ad_8c.html#a77573ca4776db28859b0ead94b728dc1" title="mc64qd_" alt="" coords="128,5,203,32"/><area shape="rect" id="node3" href="mc64ad_8c.html#a52c18d1d9fc3efefba36ba67456b46d1" title="mc64ud_" alt="" coords="128,56,203,83"/><area shape="rect" id="node4" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="135,107,196,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a52c18d1d9fc3efefba36ba67456b46d1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ud_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"><em>out</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="add3e26b831b8b4bc818b93c4fdce7174"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64wd_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="mc64ad_8c_add3e26b831b8b4bc818b93c4fdce7174_cgraph.png" border="0" usemap="#mc64ad_8c_add3e26b831b8b4bc818b93c4fdce7174_cgraph" alt=""/></div>
+<map name="mc64ad_8c_add3e26b831b8b4bc818b93c4fdce7174_cgraph" id="mc64ad_8c_add3e26b831b8b4bc818b93c4fdce7174_cgraph">
+<area shape="rect" id="node2" href="mc64ad_8c.html#a23f5c353dc0f33b3171101060a9a555f" title="mc64dd_" alt="" coords="133,5,208,32"/><area shape="rect" id="node3" href="mc64ad_8c.html#a3926b73b0b519feef70eae9ed9cf282c" title="mc64ed_" alt="" coords="133,56,208,83"/><area shape="rect" id="node4" href="mc64ad_8c.html#a9b0c810c63b7faf051b21e97a636285c" title="mc64fd_" alt="" coords="135,107,207,133"/><area shape="rect" id="node5" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title=" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/memory_8c.html b/SuperLU_5.2.0/DOC/html/memory_8c.html
new file mode 100644
index 0000000..1188c50
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/memory_8c.html
@@ -0,0 +1,321 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/memory.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">memory.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Precision-independent memory-related routines.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for memory.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="memory_8c__incl.png" border="0" usemap="#SRC_2memory_8c" alt=""/></div>
+<map name="SRC_2memory_8c" id="SRC_2memory_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9ab2cc28807c3b5f5ca8eb9b85ea1f3f"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#a9ab2cc28807c3b5f5ca8eb9b85ea1f3f">superlu_malloc</a> (size_t size)</td></tr>
+<tr class="separator:a9ab2cc28807c3b5f5ca8eb9b85ea1f3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a50cc6d9102542bf48b24f6d21cfa7deb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#a50cc6d9102542bf48b24f6d21cfa7deb">superlu_free</a> (void *addr)</td></tr>
+<tr class="separator:a50cc6d9102542bf48b24f6d21cfa7deb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbbe5a57b4ed64564c887fb52d798c54"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#adbbe5a57b4ed64564c887fb52d798c54">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 class="memdesc:adbbe5a57b4ed64564c887fb52d798c54"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for integer working arrays. <a href="#adbbe5a57b4ed64564c887fb52d798c54">More...</a><br/></td></tr>
+<tr class="separator:adbbe5a57b4ed64564c887fb52d798c54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b606bbd7cce73c19bffca851721e9ac"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#a3b606bbd7cce73c19bffca851721e9ac">copy_mem_int</a> (int howmany, void *old, void *new)</td></tr>
+<tr class="separator:a3b606bbd7cce73c19bffca851721e9ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a6637190072609a7dcdec007bd98113"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#a9a6637190072609a7dcdec007bd98113">user_bcopy</a> (char *src, char *dest, int bytes)</td></tr>
+<tr class="separator:a9a6637190072609a7dcdec007bd98113"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a49bbe20102e5b541c8e8963afa2bd46a"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a">intMalloc</a> (int n)</td></tr>
+<tr class="separator:a49bbe20102e5b541c8e8963afa2bd46a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf51f82a79c361236a2d825a59a63403"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403">intCalloc</a> (int n)</td></tr>
+<tr class="separator:aaf51f82a79c361236a2d825a59a63403"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a3b606bbd7cce73c19bffca851721e9ac"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaf51f82a79c361236a2d825a59a63403"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a49bbe20102e5b541c8e8963afa2bd46a"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adbbe5a57b4ed64564c887fb52d798c54"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="memory_8c_adbbe5a57b4ed64564c887fb52d798c54_cgraph.png" border="0" usemap="#memory_8c_adbbe5a57b4ed64564c887fb52d798c54_cgraph" alt=""/></div>
+<map name="memory_8c_adbbe5a57b4ed64564c887fb52d798c54_cgraph" id="memory_8c_adbbe5a57b4ed64564c887fb52d798c54_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="131,5,170,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a50cc6d9102542bf48b24f6d21cfa7deb"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9ab2cc28807c3b5f5ca8eb9b85ea1f3f"></a>
+<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></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>) </p>
+
+</div>
+</div>
+<a class="anchor" id="a9a6637190072609a7dcdec007bd98113"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/mmd_8c.html b/SuperLU_5.2.0/DOC/html/mmd_8c.html
new file mode 100644
index 0000000..c0d23b6
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/mmd_8c.html
@@ -0,0 +1,498 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/mmd.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">mmd.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a499793cc10102eec3d98eda5229216f9"><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a></td></tr>
+<tr class="separator:a499793cc10102eec3d98eda5229216f9"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a7b73e4f4f1dee202474aee4a3b2e1146"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#a7b73e4f4f1dee202474aee4a3b2e1146">genmmd_</a> (int *neqns, int *xadj, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *adjncy, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *invp, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98 [...]
+<tr class="separator:a7b73e4f4f1dee202474aee4a3b2e1146"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b93615db0866c639c195ea23e1b9ae5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#a6b93615db0866c639c195ea23e1b9ae5">slu_mmdint_</a> (int *neqns, int *xadj, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *adjncy, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *dhead, <a class="el" href="mmd_8c.html#a499793cc10102ee [...]
+<tr class="separator:a6b93615db0866c639c195ea23e1b9ae5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa2316cb2242b53dcc29d8702695529dc"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#aa2316cb2242b53dcc29d8702695529dc">slu_mmdelm_</a> (int *mdnode, int *xadj, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *adjncy, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *dhead, <a class="el" href="mmd_8c.html#a499793cc10102e [...]
+<tr class="separator:aa2316cb2242b53dcc29d8702695529dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83b58ad42d9bbb1640df4288c6e365cc"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#a83b58ad42d9bbb1640df4288c6e365cc">slu_mmdupd_</a> (int *ehead, int *neqns, int *xadj, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *adjncy, int *delta, int *mdeg, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *dhead, <a class="el" [...]
+<tr class="separator:a83b58ad42d9bbb1640df4288c6e365cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b0bfa084ff428e2c04e1aa96968018b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mmd_8c.html#a6b0bfa084ff428e2c04e1aa96968018b">slu_mmdnum_</a> (int *neqns, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *perm, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a> *invp, <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda522921 [...]
+<tr class="separator:a6b0bfa084ff428e2c04e1aa96968018b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="a499793cc10102eec3d98eda5229216f9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="mmd_8c.html#a499793cc10102eec3d98eda5229216f9">shortint</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a7b73e4f4f1dee202474aee4a3b2e1146"></a>
+<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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="mmd_8c_a7b73e4f4f1dee202474aee4a3b2e1146_cgraph.png" border="0" usemap="#mmd_8c_a7b73e4f4f1dee202474aee4a3b2e1146_cgraph" alt=""/></div>
+<map name="mmd_8c_a7b73e4f4f1dee202474aee4a3b2e1146_cgraph" id="mmd_8c_a7b73e4f4f1dee202474aee4a3b2e1146_cgraph">
+<area shape="rect" id="node2" href="mmd_8c.html#aa2316cb2242b53dcc29d8702695529dc" title="slu_mmdelm_" alt="" coords="135,5,238,32"/><area shape="rect" id="node4" href="mmd_8c.html#a83b58ad42d9bbb1640df4288c6e365cc" title="slu_mmdupd_" alt="" coords="135,56,238,83"/><area shape="rect" id="node5" href="mmd_8c.html#a6b93615db0866c639c195ea23e1b9ae5" title="slu_mmdint_" alt="" coords="139,107,235,133"/><area shape="rect" id="node6" href="mmd_8c.html#a6b0bfa084ff428e2c04e1aa96968018b" title= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa2316cb2242b53dcc29d8702695529dc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int slu_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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="mmd_8c_aa2316cb2242b53dcc29d8702695529dc_cgraph.png" border="0" usemap="#mmd_8c_aa2316cb2242b53dcc29d8702695529dc_cgraph" alt=""/></div>
+<map name="mmd_8c_aa2316cb2242b53dcc29d8702695529dc_cgraph" id="mmd_8c_aa2316cb2242b53dcc29d8702695529dc_cgraph">
+<area shape="rect" id="node2" href="sp__coletree_8c.html#ab7bc8447f8976dbb19c60dc2e1a12905" title="link" alt="" coords="157,5,200,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a6b93615db0866c639c195ea23e1b9ae5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int slu_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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+ <td class="paramname"><em>marker</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6b0bfa084ff428e2c04e1aa96968018b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int slu_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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">shortint</a> * </td>
+ <td class="paramname"><em>qsize</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a83b58ad42d9bbb1640df4288c6e365cc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int slu_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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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#a499793cc10102eec3d98eda5229216f9">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="mmd_8c_a83b58ad42d9bbb1640df4288c6e365cc_cgraph.png" border="0" usemap="#mmd_8c_a83b58ad42d9bbb1640df4288c6e365cc_cgraph" alt=""/></div>
+<map name="mmd_8c_a83b58ad42d9bbb1640df4288c6e365cc_cgraph" id="mmd_8c_a83b58ad42d9bbb1640df4288c6e365cc_cgraph">
+<area shape="rect" id="node2" href="sp__coletree_8c.html#ab7bc8447f8976dbb19c60dc2e1a12905" title="link" alt="" coords="157,5,200,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/qselect_8c.html b/SuperLU_5.2.0/DOC/html/qselect_8c.html
new file mode 100644
index 0000000..61f6936
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/qselect_8c.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/qselect.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">qselect.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Quickselect: returns the k-th (zero-based) largest value in A[].
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for qselect.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="qselect_8c__incl.png" border="0" usemap="#SRC_2qselect_8c" alt=""/></div>
+<map name="SRC_2qselect_8c" id="SRC_2qselect_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a55283ff1f5ff561072afe7c8ad6ac218"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="qselect_8c.html#a55283ff1f5ff561072afe7c8ad6ac218">dqselect</a> (int n, double <a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>[], int k)</td></tr>
+<tr class="separator:a55283ff1f5ff561072afe7c8ad6ac218"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a36bc5d24fe074bc4f3cfb65d7f0ae8"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="qselect_8c.html#a5a36bc5d24fe074bc4f3cfb65d7f0ae8">sqselect</a> (int n, float <a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>[], int k)</td></tr>
+<tr class="separator:a5a36bc5d24fe074bc4f3cfb65d7f0ae8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory.
+November, 2010
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a55283ff1f5ff561072afe7c8ad6ac218"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a36bc5d24fe074bc4f3cfb65d7f0ae8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/relax__snode_8c.html b/SuperLU_5.2.0/DOC/html/relax__snode_8c.html
new file mode 100644
index 0000000..cb220c8
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/relax__snode_8c.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/relax_snode.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">relax_snode.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Identify initial relaxed supernodes.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for relax_snode.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="relax__snode_8c__incl.png" border="0" usemap="#SRC_2relax__snode_8c" alt=""/></div>
+<map name="SRC_2relax__snode_8c" id="SRC_2relax__snode_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad70bc12cb9031ab8aba4a37a18be46e3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="relax__snode_8c.html#ad70bc12cb9031ab8aba4a37a18be46e3">relax_snode</a> (const int n, int *et, const int relax_columns, int *descendants, int *relax_end)</td></tr>
+<tr class="separator:ad70bc12cb9031ab8aba4a37a18be46e3"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad70bc12cb9031ab8aba4a37a18be46e3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="relax__snode_8c.html#ad70bc12cb9031ab8aba4a37a18be46e3">relax_snode()</a> - Identify the initial relaxed supernodes, assuming that
+ the matrix has been reordered according to the postorder of the etree.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="relax__snode_8c_ad70bc12cb9031ab8aba4a37a18be46e3_cgraph.png" border="0" usemap="#relax__snode_8c_ad70bc12cb9031ab8aba4a37a18be46e3_cgraph" alt=""/></div>
+<map name="relax__snode_8c_ad70bc12cb9031ab8aba4a37a18be46e3_cgraph" id="relax__snode_8c_ad70bc12cb9031ab8aba4a37a18be46e3_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="147,5,186,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/scolumn__bmod_8c.html b/SuperLU_5.2.0/DOC/html/scolumn__bmod_8c.html
new file mode 100644
index 0000000..559cad4
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/scolumn__bmod_8c.html
@@ -0,0 +1,321 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/scolumn_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">scolumn_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>performs numeric block updates
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for scolumn_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="scolumn__bmod_8c__incl.png" border="0" usemap="#SRC_2scolumn__bmod_8c" alt=""/></div>
+<map name="SRC_2scolumn__bmod_8c" id="SRC_2scolumn__bmod_8c">
+<area shape="rect" id="node4" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="310,80,399,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="392,155,499,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="523,155,624,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a25ea48f4f948c68a423f5bd3929e3c1f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__bmod_8c.html#a25ea48f4f948c68a423f5bd3929e3c1f">susolve</a> (int, int, float *, float *)</td></tr>
+<tr class="memdesc:a25ea48f4f948c68a423f5bd3929e3c1f"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a25ea48f4f948c68a423f5bd3929e3c1f">More...</a><br/></td></tr>
+<tr class="separator:a25ea48f4f948c68a423f5bd3929e3c1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__bmod_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c">slsolve</a> (int, int, float *, float *)</td></tr>
+<tr class="memdesc:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#aa8bbeb2abbd5a10ac13fa9b48504691c">More...</a><br/></td></tr>
+<tr class="separator:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__bmod_8c.html#ab452e957171a4d0d9cfe6abb3d8a950c">smatvec</a> (int, int, int, float *, float *, float *)</td></tr>
+<tr class="memdesc:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#ab452e957171a4d0d9cfe6abb3d8a950c">More...</a><br/></td></tr>
+<tr class="separator:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac89043410fd16fe2b8d3b2c902fec9f7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__bmod_8c.html#ac89043410fd16fe2b8d3b2c902fec9f7">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)</ [...]
+<tr class="separator:ac89043410fd16fe2b8d3b2c902fec9f7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac89043410fd16fe2b8d3b2c902fec9f7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose:
+</h1>
+</pre><pre>
+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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="scolumn__bmod_8c_ac89043410fd16fe2b8d3b2c902fec9f7_cgraph.png" border="0" usemap="#scolumn__bmod_8c_ac89043410fd16fe2b8d3b2c902fec9f7_cgraph" alt=""/></div>
+<map name="scolumn__bmod_8c_ac89043410fd16fe2b8d3b2c902fec9f7_cgraph" id="scolumn__bmod_8c_ac89043410fd16fe2b8d3b2c902fec9f7_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#aab583b502d3953688a3fa27a9f4bbf1e" title="strsv_" alt="" coords="192,5,251,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#ae29fbdb32369b70973b05d14fc3420c9" title="sgemv_" alt="" coords="187,56,255,83"/><area shape="rect" id="node4" href="scolumn__bmod_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c" title="Solves a dense UNIT lower triangular system. " alt="" coords="190,107,253,133"/><area shape="rect" id="node5" href="scolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa8bbeb2abbd5a10ac13fa9b48504691c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab452e957171a4d0d9cfe6abb3d8a950c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a25ea48f4f948c68a423f5bd3929e3c1f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/scolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/scolumn__dfs_8c.html
new file mode 100644
index 0000000..7286075
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/scolumn__dfs_8c.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/scolumn_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">scolumn_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs a symbolic factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for scolumn_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="scolumn__dfs_8c__incl.png" border="0" usemap="#SRC_2scolumn__dfs_8c" alt=""/></div>
+<map name="SRC_2scolumn__dfs_8c" id="SRC_2scolumn__dfs_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a5fd0635776cafb1d697263a0db693b9e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__dfs_8c.html#a5fd0635776cafb1d697263a0db693b9e">T2_SUPER</a></td></tr>
+<tr class="memdesc:a5fd0635776cafb1d697263a0db693b9e"><td class="mdescLeft"> </td><td class="mdescRight">What type of supernodes we want. <a href="#a5fd0635776cafb1d697263a0db693b9e">More...</a><br/></td></tr>
+<tr class="separator:a5fd0635776cafb1d697263a0db693b9e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac9a044320fe8bfbb051a344686a4cb7d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="scolumn__dfs_8c.html#ac9a044320fe8bfbb051a344686a4cb7d">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>
+<tr class="separator:ac9a044320fe8bfbb051a344686a4cb7d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a5fd0635776cafb1d697263a0db693b9e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define T2_SUPER</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac9a044320fe8bfbb051a344686a4cb7d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ SCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="scolumn__dfs_8c_ac9a044320fe8bfbb051a344686a4cb7d_cgraph.png" border="0" usemap="#scolumn__dfs_8c_ac9a044320fe8bfbb051a344686a4cb7d_cgraph" alt=""/></div>
+<map name="scolumn__dfs_8c_ac9a044320fe8bfbb051a344686a4cb7d_cgraph" id="scolumn__dfs_8c_ac9a044320fe8bfbb051a344686a4cb7d_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="172,31,239,57"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="149,81,261,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="328,31,411,57"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/scomplex_8c.html b/SuperLU_5.2.0/DOC/html/scomplex_8c.html
new file mode 100644
index 0000000..8abdba0
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/scomplex_8c.html
@@ -0,0 +1,288 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/scomplex.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">scomplex.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Common arithmetic for complex type.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for scomplex.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="scomplex_8c__incl.png" border="0" usemap="#SRC_2scomplex_8c" alt=""/></div>
+<map name="SRC_2scomplex_8c" id="SRC_2scomplex_8c">
+<area shape="rect" id="node5" href="slu__scomplex_8h.html" title="Header file for complex operations. " alt="" coords="266,80,379,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a19814f5030befb85c4bb07e0fac34a7b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#a19814f5030befb85c4bb07e0fac34a7b">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 class="memdesc:a19814f5030befb85c4bb07e0fac34a7b"><td class="mdescLeft"> </td><td class="mdescRight">Complex Division c = a/b. <a href="#a19814f5030befb85c4bb07e0fac34a7b">More...</a><br/></td></tr>
+<tr class="separator:a19814f5030befb85c4bb07e0fac34a7b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afc2967f7b71477625eb58de94a6e4c71"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71">c_abs</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+<tr class="memdesc:afc2967f7b71477625eb58de94a6e4c71"><td class="mdescLeft"> </td><td class="mdescRight">Returns sqrt(z.r^2 + z.i^2) <a href="#afc2967f7b71477625eb58de94a6e4c71">More...</a><br/></td></tr>
+<tr class="separator:afc2967f7b71477625eb58de94a6e4c71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a6e9259e2eadc976a783d1b0e8f013b"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b">c_abs1</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+<tr class="memdesc:a6a6e9259e2eadc976a783d1b0e8f013b"><td class="mdescLeft"> </td><td class="mdescRight">Approximates the abs. Returns abs(z.r) + abs(z.i) <a href="#a6a6e9259e2eadc976a783d1b0e8f013b">More...</a><br/></td></tr>
+<tr class="separator:a6a6e9259e2eadc976a783d1b0e8f013b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6111d345ee625a35d42da30db28c6041"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#a6111d345ee625a35d42da30db28c6041">c_exp</a> (<a class="el" href="structcomplex.html">complex</a> *r, <a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+<tr class="memdesc:a6111d345ee625a35d42da30db28c6041"><td class="mdescLeft"> </td><td class="mdescRight">Return the exponentiation. <a href="#a6111d345ee625a35d42da30db28c6041">More...</a><br/></td></tr>
+<tr class="separator:a6111d345ee625a35d42da30db28c6041"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:add0e09f7411e03b7516ddedacd6a59df"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#add0e09f7411e03b7516ddedacd6a59df">r_cnjg</a> (<a class="el" href="structcomplex.html">complex</a> *r, <a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+<tr class="memdesc:add0e09f7411e03b7516ddedacd6a59df"><td class="mdescLeft"> </td><td class="mdescRight">Return the complex conjugate. <a href="#add0e09f7411e03b7516ddedacd6a59df">More...</a><br/></td></tr>
+<tr class="separator:add0e09f7411e03b7516ddedacd6a59df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab6bc19479c8838286f451d5d9a6c86a3"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="scomplex_8c.html#ab6bc19479c8838286f451d5d9a6c86a3">r_imag</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+<tr class="memdesc:ab6bc19479c8838286f451d5d9a6c86a3"><td class="mdescLeft"> </td><td class="mdescRight">Return the imaginary part. <a href="#ab6bc19479c8838286f451d5d9a6c86a3">More...</a><br/></td></tr>
+<tr class="separator:ab6bc19479c8838286f451d5d9a6c86a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aee98d3dfc6ee26d36a2e095bd28414e5"><td class="memItemLeft" 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#aee98d3dfc6ee26d36a2e095bd28414e5">c_sgn</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+<tr class="memdesc:aee98d3dfc6ee26d36a2e095bd28414e5"><td class="mdescLeft"> </td><td class="mdescRight">SIGN functions for complex number. Returns z/abs(z) <a href="#aee98d3dfc6ee26d36a2e095bd28414e5">More...</a><br/></td></tr>
+<tr class="separator:aee98d3dfc6ee26d36a2e095bd28414e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e9b533cd4055cb200a5d63152754898"><td class="memItemLeft" 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#a8e9b533cd4055cb200a5d63152754898">c_sqrt</a> (<a class="el" href="structcomplex.html">complex</a> *z)</td></tr>
+<tr class="memdesc:a8e9b533cd4055cb200a5d63152754898"><td class="mdescLeft"> </td><td class="mdescRight">Square-root of a complex number. <a href="#a8e9b533cd4055cb200a5d63152754898">More...</a><br/></td></tr>
+<tr class="separator:a8e9b533cd4055cb200a5d63152754898"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>This file defines common arithmetic operations for complex type.
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="afc2967f7b71477625eb58de94a6e4c71"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6a6e9259e2eadc976a783d1b0e8f013b"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19814f5030befb85c4bb07e0fac34a7b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6111d345ee625a35d42da30db28c6041"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aee98d3dfc6ee26d36a2e095bd28414e5"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="scomplex_8c_aee98d3dfc6ee26d36a2e095bd28414e5_cgraph.png" border="0" usemap="#scomplex_8c_aee98d3dfc6ee26d36a2e095bd28414e5_cgraph" alt=""/></div>
+<map name="scomplex_8c_aee98d3dfc6ee26d36a2e095bd28414e5_cgraph" id="scomplex_8c_aee98d3dfc6ee26d36a2e095bd28414e5_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="113,5,170,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a8e9b533cd4055cb200a5d63152754898"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="add0e09f7411e03b7516ddedacd6a59df"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab6bc19479c8838286f451d5d9a6c86a3"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/scopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/scopy__to__ucol_8c.html
new file mode 100644
index 0000000..3801f51
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/scopy__to__ucol_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/scopy_to_ucol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">scopy_to_ucol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Copy a computed column of U to the compressed data structure.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for scopy_to_ucol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="scopy__to__ucol_8c__incl.png" border="0" usemap="#SRC_2scopy__to__ucol_8c" alt=""/></div>
+<map name="SRC_2scopy__to__ucol_8c" id="SRC_2scopy__to__ucol_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab44d465713c602e68295999c003daf7d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="scopy__to__ucol_8c.html#ab44d465713c602e68295999c003daf7d">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>
+<tr class="separator:ab44d465713c602e68295999c003daf7d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab44d465713c602e68295999c003daf7d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="scopy__to__ucol_8c_ab44d465713c602e68295999c003daf7d_cgraph.png" border="0" usemap="#scopy__to__ucol_8c_ab44d465713c602e68295999c003daf7d_cgraph" alt=""/></div>
+<map name="scopy__to__ucol_8c_ab44d465713c602e68295999c003daf7d_cgraph" id="scopy__to__ucol_8c_ab44d465713c602e68295999c003daf7d_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="160,107,272,133"/><area shape="rect" id="node3" href="smemory_8c.html#aa2862f14356be7d9f12bfdfc175137a1" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="345,81,415,108"/><area shape="rect" id="node8" href="smemory_8c.html#a658f955c5532813bd0490502efae563f" title="smemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/scsum1_8c.html b/SuperLU_5.2.0/DOC/html/scsum1_8c.html
new file mode 100644
index 0000000..9752148
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/scsum1_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/scsum1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">scsum1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Takes sum of the absolute values of a complex vector and returns a single precision result.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for scsum1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="scsum1_8c__incl.png" border="0" usemap="#SRC_2scsum1_8c" alt=""/></div>
+<map name="SRC_2scsum1_8c" id="SRC_2scsum1_8c">
+<area shape="rect" id="node2" href="slu__scomplex_8h.html" title="Header file for complex operations. " alt="" coords="5,80,117,107"/><area shape="rect" id="node3" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="143,80,249,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a5a76da95c549c41790389a76e12fdcb5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="scsum1_8c.html#a5a76da95c549c41790389a76e12fdcb5">CX</a>(I) cx[(I)-1]</td></tr>
+<tr class="separator:a5a76da95c549c41790389a76e12fdcb5"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5d604b880c9214d7550424041c3850aa"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="scsum1_8c.html#a5d604b880c9214d7550424041c3850aa">scsum1_slu</a> (int *n, <a class="el" href="structcomplex.html">complex</a> *cx, int *incx)</td></tr>
+<tr class="separator:a5d604b880c9214d7550424041c3850aa"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a5a76da95c549c41790389a76e12fdcb5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CX</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">I</td><td>)</td>
+ <td> cx[(I)-1]</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5d604b880c9214d7550424041c3850aa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double scsum1_slu </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> SCSUM1 takes the sum of the absolute values of a complex
+ vector and returns a single precision result.</pre><pre> Based on SCASUM from the Level 1 BLAS.
+ The change is to use the 'genuine' absolute value.</pre><pre> Contributed by Nick Higham for use with CLACON.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre> N (input) INT
+ The number of elements in the vector CX.</pre><pre> CX (input) COMPLEX array, dimension (N)
+ The vector whose elements will be summed.</pre><pre> INCX (input) INT
+ The spacing between successive values of CX. INCX > 0.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="scsum1_8c_a5d604b880c9214d7550424041c3850aa_cgraph.png" border="0" usemap="#scsum1_8c_a5d604b880c9214d7550424041c3850aa_cgraph" alt=""/></div>
+<map name="scsum1_8c_a5d604b880c9214d7550424041c3850aa_cgraph" id="scsum1_8c_a5d604b880c9214d7550424041c3850aa_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="147,5,205,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sdiagonal_8c.html b/SuperLU_5.2.0/DOC/html/sdiagonal_8c.html
new file mode 100644
index 0000000..b45a8f1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sdiagonal_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sdiagonal.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sdiagonal.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Auxiliary routines to work with diagonal elements.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sdiagonal.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sdiagonal_8c__incl.png" border="0" usemap="#SRC_2sdiagonal_8c" alt=""/></div>
+<map name="SRC_2sdiagonal_8c" id="SRC_2sdiagonal_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4ca1f3e4bce5bcd3e19bc3932cbb1206"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sdiagonal_8c.html#a4ca1f3e4bce5bcd3e19bc3932cbb1206">sfill_diag</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+<tr class="separator:a4ca1f3e4bce5bcd3e19bc3932cbb1206"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1c23412db51d68adf32515fa5bdc9c88"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sdiagonal_8c.html#a1c23412db51d68adf32515fa5bdc9c88">sdominate</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+<tr class="separator:a1c23412db51d68adf32515fa5bdc9c88"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1c23412db51d68adf32515fa5bdc9c88"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sdiagonal_8c_a1c23412db51d68adf32515fa5bdc9c88_cgraph.png" border="0" usemap="#sdiagonal_8c_a1c23412db51d68adf32515fa5bdc9c88_cgraph" alt=""/></div>
+<map name="sdiagonal_8c_a1c23412db51d68adf32515fa5bdc9c88_cgraph" id="sdiagonal_8c_a1c23412db51d68adf32515fa5bdc9c88_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a42361c3ce2ba81d149ffba01fbd6f138" title="floatMalloc" alt="" coords="136,5,221,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="141,56,216,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ca1f3e4bce5bcd3e19bc3932cbb1206"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sdiagonal_8c_a4ca1f3e4bce5bcd3e19bc3932cbb1206_cgraph.png" border="0" usemap="#sdiagonal_8c_a4ca1f3e4bce5bcd3e19bc3932cbb1206_cgraph" alt=""/></div>
+<map name="sdiagonal_8c_a4ca1f3e4bce5bcd3e19bc3932cbb1206_cgraph" id="sdiagonal_8c_a4ca1f3e4bce5bcd3e19bc3932cbb1206_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a42361c3ce2ba81d149ffba01fbd6f138" title="floatMalloc" alt="" coords="128,5,213,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="133,56,208,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sfgmr_8c.html b/SuperLU_5.2.0/DOC/html/sfgmr_8c.html
new file mode 100644
index 0000000..1d995c1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sfgmr_8c.html
@@ -0,0 +1,261 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/sfgmr.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sfgmr.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>flexible GMRES from ITSOL developed by Yousef Saad.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sfgmr.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sfgmr_8c__incl.png" border="0" usemap="#EXAMPLE_2sfgmr_8c" alt=""/></div>
+<map name="EXAMPLE_2sfgmr_8c" id="EXAMPLE_2sfgmr_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a70fac857a29f956523d4c8c05e13f177"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="sfgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">epsmac</a> 1.0e-16</td></tr>
+<tr class="separator:a70fac857a29f956523d4c8c05e13f177"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6152533add9e764be3ad22884976d20d"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="sfgmr_8c.html#a6152533add9e764be3ad22884976d20d">sdot_</a> (int *, float[], int *, float[], int *)</td></tr>
+<tr class="separator:a6152533add9e764be3ad22884976d20d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ed20001c29f50f0a4f3261861086cc8"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="sfgmr_8c.html#a4ed20001c29f50f0a4f3261861086cc8">snrm2_</a> (int *, float[], int *)</td></tr>
+<tr class="separator:a4ed20001c29f50f0a4f3261861086cc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ace249a05c158a15db1e6526e955f35ee"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sfgmr_8c.html#ace249a05c158a15db1e6526e955f35ee">sfgmr</a> (int n, void(*<a class="el" href="ssp__blas2_8c.html#ab452e957171a4d0d9cfe6abb3d8a950c">smatvec</a>)(float, float[], float, float[]), void(*<a class="el" href="sitersol1_8c.html#aba0747af8c12b8617ee149febff83471">spsolve</a>)(int, float[], float[]), flo [...]
+<tr class="separator:ace249a05c158a15db1e6526e955f35ee"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a70fac857a29f956523d4c8c05e13f177"></a>
+<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">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a6152533add9e764be3ad22884976d20d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ace249a05c158a15db1e6526e955f35ee"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sfgmr_8c_ace249a05c158a15db1e6526e955f35ee_cgraph.png" border="0" usemap="#sfgmr_8c_ace249a05c158a15db1e6526e955f35ee_cgraph" alt=""/></div>
+<map name="sfgmr_8c_ace249a05c158a15db1e6526e955f35ee_cgraph" id="sfgmr_8c_ace249a05c158a15db1e6526e955f35ee_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a42361c3ce2ba81d149ffba01fbd6f138" title="floatMalloc" alt="" coords="628,259,713,285"/><area shape="rect" id="node3" href="scolumn__bmod_8c.html#ab452e957171a4d0d9cfe6abb3d8a950c" title="Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. " alt="" coords="109,385,181,412"/><area shape="rect" id="node4" href="sfgmr_8c.html#a4ed20001c29f50f0a4f3261861086cc8" title="snrm2_" alt="" coords="113,436,178,463"/><area shape [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ed20001c29f50f0a4f3261861086cc8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sgscon_8c.html b/SuperLU_5.2.0/DOC/html/sgscon_8c.html
new file mode 100644
index 0000000..32907d1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sgscon_8c.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sgscon.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sgscon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Estimates reciprocal of the condition number of a general matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sgscon.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgscon_8c__incl.png" border="0" usemap="#SRC_2sgscon_8c" alt=""/></div>
+<map name="SRC_2sgscon_8c" id="SRC_2sgscon_8c">
+<area shape="rect" id="node3" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a76b21c7561d5bce81821a76c3465601b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgscon_8c.html#a76b21c7561d5bce81821a76c3465601b">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) [...]
+<tr class="separator:a76b21c7561d5bce81821a76c3465601b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 5.0) --
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+July 25, 2015</pre><pre>Modified from lapack routines SGECON.
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a76b21c7561d5bce81821a76c3465601b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><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><pre> RCOND (output) float*
+ The reciprocal of the condition number of the matrix A,
+ computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><pre> INFO (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgscon_8c_a76b21c7561d5bce81821a76c3465601b_cgraph.png" border="0" usemap="#sgscon_8c_a76b21c7561d5bce81821a76c3465601b_cgraph" alt=""/></div>
+<map name="sgscon_8c_a76b21c7561d5bce81821a76c3465601b_cgraph" id="sgscon_8c_a76b21c7561d5bce81821a76c3465601b_cgraph">
+<area shape="rect" id="node2" href="slacon2_8c.html#ad34d61602254b2aad398e30cc3c5436d" title="slacon2_" alt="" coords="117,107,192,133"/><area shape="rect" id="node7" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="241,208,324,235"/><area shape="rect" id="node8" href="slu__cdefs_8h.html#a3e1230bff11a9e47c35555299bcdcf1b" title="floatCalloc" alt="" coords="241,259,325,285"/><area shape="rect" id="node9" href="memory_8c.html#a49bbe20102e5b54 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sgsequ_8c.html b/SuperLU_5.2.0/DOC/html/sgsequ_8c.html
new file mode 100644
index 0000000..62cb9e1
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sgsequ_8c.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sgsequ.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sgsequ.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes row and column scalings.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sgsequ.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgsequ_8c__incl.png" border="0" usemap="#SRC_2sgsequ_8c" alt=""/></div>
+<map name="SRC_2sgsequ_8c" id="SRC_2sgsequ_8c">
+<area shape="rect" id="node3" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad8a808e807e38c32c08cfbeadb088f08"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsequ_8c.html#ad8a808e807e38c32c08cfbeadb088f08">sgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, float *r, float *c, float *rowcnd, float *colcnd, float *amax, int *info)</td></tr>
+<tr class="memdesc:ad8a808e807e38c32c08cfbeadb088f08"><td class="mdescLeft"> </td><td class="mdescRight">Driver related. <a href="#ad8a808e807e38c32c08cfbeadb088f08">More...</a><br/></td></tr>
+<tr class="separator:ad8a808e807e38c32c08cfbeadb088f08"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from LAPACK routine SGEEQU
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad8a808e807e38c32c08cfbeadb088f08"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (output) float*, size A->nrow
+ If INFO = 0 or INFO > M, R contains the row scale factors
+ for A.</pre><pre> C (output) float*, size A->ncol
+ If INFO = 0, C contains the column scale factors for A.</pre><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><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><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><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
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgsequ_8c_ad8a808e807e38c32c08cfbeadb088f08_cgraph.png" border="0" usemap="#sgsequ_8c_ad8a808e807e38c32c08cfbeadb088f08_cgraph" alt=""/></div>
+<map name="sgsequ_8c_ad8a808e807e38c32c08cfbeadb088f08_cgraph" id="sgsequ_8c_ad8a808e807e38c32c08cfbeadb088f08_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="128,5,189,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="117,56,200,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sgsisx_8c.html b/SuperLU_5.2.0/DOC/html/sgsisx_8c.html
new file mode 100644
index 0000000..bda69a8
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sgsisx_8c.html
@@ -0,0 +1,516 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sgsisx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sgsisx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an approximate solutions of linear equations A*X=B or A'*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sgsisx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgsisx_8c__incl.png" border="0" usemap="#SRC_2sgsisx_8c" alt=""/></div>
+<map name="SRC_2sgsisx_8c" id="SRC_2sgsisx_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aeb28973d99fb224f455e24d4f2928e86"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsisx_8c.html#aeb28973d99fb224f455e24d4f2928e86">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int * [...]
+<tr class="separator:aeb28973d99fb224f455e24d4f2928e86"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.2) –
+Lawrence Berkeley National Laboratory.
+November, 2010
+August, 2011
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aeb28973d99fb224f455e24d4f2928e86"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a8c16e3d29bb8fbcc614ed6f77372b616">sgsitrf()</a>.
+An estimation of the condition number is provided.
+The routine performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><pre> 1.7. options->IterRefine is not used</pre><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * sum(dropped entries);
+ = SMILU_3:
+ U(i,i) := U(i,i) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * 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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><pre> 2.7. If options->IterRefine is not used.</pre><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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#ad8a808e807e38c32c08cfbeadb088f08" 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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgsisx_8c_aeb28973d99fb224f455e24d4f2928e86_cgraph.png" border="0" usemap="#sgsisx_8c_aeb28973d99fb224f455e24d4f2928e86_cgraph" alt=""/></div>
+<map name="sgsisx_8c_aeb28973d99fb224f455e24d4f2928e86_cgraph" id="sgsisx_8c_aeb28973d99fb224f455e24d4f2928e86_cgraph">
+<area shape="rect" id="node2" href="slangs_8c.html#a201bfd9f2017cf5904aada9f21f23ab2" title="slangs" alt="" coords="182,5,242,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="604,157,665,184"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="739,613,821,640"/><area shape="rect" id="node5" href="slu__util_8h.html#a72be96e75e58564c4322ef9e [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sgsitrf_8c.html b/SuperLU_5.2.0/DOC/html/sgsitrf_8c.html
new file mode 100644
index 0000000..76bb2cf
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sgsitrf_8c.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sgsitrf.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sgsitrf.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an ILU factorization of a general sparse matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sgsitrf.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgsitrf_8c__incl.png" border="0" usemap="#SRC_2sgsitrf_8c" alt=""/></div>
+<map name="SRC_2sgsitrf_8c" id="SRC_2sgsitrf_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a8c16e3d29bb8fbcc614ed6f77372b616"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsitrf_8c.html#a8c16e3d29bb8fbcc614ed6f77372b616">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int p [...]
+<tr class="separator:a8c16e3d29bb8fbcc614ed6f77372b616"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009</pre><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8c16e3d29bb8fbcc614ed6f77372b616"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the ILU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">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#a380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgsitrf_8c_a8c16e3d29bb8fbcc614ed6f77372b616_cgraph.png" border="0" usemap="#sgsitrf_8c_a8c16e3d29bb8fbcc614ed6f77372b616_cgraph" alt=""/></div>
+<map name="sgsitrf_8c_a8c16e3d29bb8fbcc614ed6f77372b616_cgraph" id="sgsitrf_8c_a8c16e3d29bb8fbcc614ed6f77372b616_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#af68715ec86cde90aa31fec07164d6ea6" title="Memory-related. " alt="" coords="157,309,251,336"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="363,56,437,83"/><area shape="rect" id="node10" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="531,867,597,893"/><area shape="rect" id="node12" href="memory_8c.html#adbbe5a57b4ed6 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sgsrfs_8c.html b/SuperLU_5.2.0/DOC/html/sgsrfs_8c.html
new file mode 100644
index 0000000..74f56f5
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sgsrfs_8c.html
@@ -0,0 +1,287 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sgsrfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sgsrfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Improves computed solution to a system of inear equations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sgsrfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgsrfs_8c__incl.png" border="0" usemap="#SRC_2sgsrfs_8c" alt=""/></div>
+<map name="SRC_2sgsrfs_8c" id="SRC_2sgsrfs_8c">
+<area shape="rect" id="node3" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a3641b6d4c21b7a852dbb32c2b693302e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsrfs_8c.html#a3641b6d4c21b7a852dbb32c2b693302e">ITMAX</a> 5</td></tr>
+<tr class="separator:a3641b6d4c21b7a852dbb32c2b693302e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aa619758588187cd5ad69a10a808d18f6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgsrfs_8c.html#aa619758588187cd5ad69a10a808d18f6">sgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a> [...]
+<tr class="separator:aa619758588187cd5ad69a10a808d18f6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Modified from lapack routine SGERFS
+Last modified: December 3, 2015
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a3641b6d4c21b7a852dbb32c2b693302e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ITMAX 5</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aa619758588187cd5ad69a10a808d18f6"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> SGSRFS improves the computed solution to a system of linear
+ equations and provides error bounds and backward error estimates for
+ the solution.</pre><pre> If equilibration was performed, the system becomes:
+ (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use column-wise storage scheme,
+ i.e., U has types: Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><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><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><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><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><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><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><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#a9b6e1e555af9cf109ef3a584054a91e2">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><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><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><pre> stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre> info (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value</pre><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><pre> ITMAX is the maximum number of steps of iterative refinement.</pre><pre></pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgsrfs_8c_aa619758588187cd5ad69a10a808d18f6_cgraph.png" border="0" usemap="#sgsrfs_8c_aa619758588187cd5ad69a10a808d18f6_cgraph" alt=""/></div>
+<map name="sgsrfs_8c_aa619758588187cd5ad69a10a808d18f6_cgraph" id="sgsrfs_8c_aa619758588187cd5ad69a10a808d18f6_cgraph">
+<area shape="rect" id="node2" href="slacon2_8c.html#ad34d61602254b2aad398e30cc3c5436d" title="slacon2_" alt="" coords="116,107,191,133"/><area shape="rect" id="node5" href="ilu__scopy__to__ucol_8c.html#af839d60e0d4028df30ea1106ce429210" title="scopy_" alt="" coords="253,157,317,184"/><area shape="rect" id="node7" href="ilu__sdrop__row_8c.html#ade8ba65d9c44f41e97cf2c40a772cff7" title="saxpy_" alt="" coords="121,208,185,235"/><area shape="rect" id="node8" href="input__error_8c.html#a583285 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sgssv_8c.html b/SuperLU_5.2.0/DOC/html/sgssv_8c.html
new file mode 100644
index 0000000..e0e92de
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sgssv_8c.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sgssv.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sgssv.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves the system of linear equations A*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sgssv.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgssv_8c__incl.png" border="0" usemap="#SRC_2sgssv_8c" alt=""/></div>
+<map name="SRC_2sgssv_8c" id="SRC_2sgssv_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6d5d8cc5159f2230fc059d0e382a63b8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgssv_8c.html#a6d5d8cc5159f2230fc059d0e382a63b8">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *pe [...]
+<tr class="memdesc:a6d5d8cc5159f2230fc059d0e382a63b8"><td class="mdescLeft"> </td><td class="mdescRight">Driver routines. <a href="#a6d5d8cc5159f2230fc059d0e382a63b8">More...</a><br/></td></tr>
+<tr class="separator:a6d5d8cc5159f2230fc059d0e382a63b8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 3.0) --
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a6d5d8cc5159f2230fc059d0e382a63b8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>SGSSV solves the system of linear equations A*X=B, using the
+LU factorization from SGSTRF. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><pre> 1.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ above algorithm to the transpose of A:</pre><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><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><pre> 2.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> If options->RowPerm = MY_PERMR or
+ options->Fact = SamePattern_SameRowPerm, perm_r is an
+ input argument.
+ otherwise it is an output argument.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgssv_8c_a6d5d8cc5159f2230fc059d0e382a63b8_cgraph.png" border="0" usemap="#sgssv_8c_a6d5d8cc5159f2230fc059d0e382a63b8_cgraph" alt=""/></div>
+<map name="sgssv_8c_a6d5d8cc5159f2230fc059d0e382a63b8_cgraph" id="sgssv_8c_a6d5d8cc5159f2230fc059d0e382a63b8_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="747,1779,829,1805"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#abb3d30eea43abc536793244e7564e70d" title="Supernodal LU factor related. " alt="" coords="360,563,533,589"/><area shape="rect" id="node4" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="389,5,505,32"/><area shape="rect" id="node5" href="get [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sgssvx_8c.html b/SuperLU_5.2.0/DOC/html/sgssvx_8c.html
new file mode 100644
index 0000000..f018bed
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sgssvx_8c.html
@@ -0,0 +1,481 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sgssvx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sgssvx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves the system of linear equations A*X=B or A'*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sgssvx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgssvx_8c__incl.png" border="0" usemap="#SRC_2sgssvx_8c" alt=""/></div>
+<map name="SRC_2sgssvx_8c" id="SRC_2sgssvx_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af9f64ed49b9ab2d93af6a1100e38ae6d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgssvx_8c.html#af9f64ed49b9ab2d93af6a1100e38ae6d">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int * [...]
+<tr class="separator:af9f64ed49b9ab2d93af6a1100e38ae6d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af9f64ed49b9ab2d93af6a1100e38ae6d"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Error bounds on the solution and
+a condition estimate are also provided. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><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><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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgssvx_8c_af9f64ed49b9ab2d93af6a1100e38ae6d_cgraph.png" border="0" usemap="#sgssvx_8c_af9f64ed49b9ab2d93af6a1100e38ae6d_cgraph" alt=""/></div>
+<map name="sgssvx_8c_af9f64ed49b9ab2d93af6a1100e38ae6d_cgraph" id="sgssvx_8c_af9f64ed49b9ab2d93af6a1100e38ae6d_cgraph">
+<area shape="rect" id="node2" href="slangs_8c.html#a201bfd9f2017cf5904aada9f21f23ab2" title="slangs" alt="" coords="185,5,245,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="416,107,477,133"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="741,284,824,311"/><area shape="rect" id="node5" href="slu__util_8h.html#a72be96e75e58564c4322ef9e [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sgstrf_8c.html b/SuperLU_5.2.0/DOC/html/sgstrf_8c.html
new file mode 100644
index 0000000..164f81c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sgstrf_8c.html
@@ -0,0 +1,309 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sgstrf.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sgstrf.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an LU factorization of a general sparse matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sgstrf.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgstrf_8c__incl.png" border="0" usemap="#SRC_2sgstrf_8c" alt=""/></div>
+<map name="SRC_2sgstrf_8c" id="SRC_2sgstrf_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a7f9874cec10809f11998cc3d9cb88f8b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrf_8c.html#a7f9874cec10809f11998cc3d9cb88f8b">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int pan [...]
+<tr class="separator:a7f9874cec10809f11998cc3d9cb88f8b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a7f9874cec10809f11998cc3d9cb88f8b"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the LU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a77baf210393e04fa71d4e73b5e60e556">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__sdefs_8h.html" title="Header file for real operations. ">slu_sdefs.h</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgstrf_8c_a7f9874cec10809f11998cc3d9cb88f8b_cgraph.png" border="0" usemap="#sgstrf_8c_a7f9874cec10809f11998cc3d9cb88f8b_cgraph" alt=""/></div>
+<map name="sgstrf_8c_a7f9874cec10809f11998cc3d9cb88f8b_cgraph" id="sgstrf_8c_a7f9874cec10809f11998cc3d9cb88f8b_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="528,917,595,944"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#af68715ec86cde90aa31fec07164d6ea6" title="Memory-related. " alt="" coords="155,157,248,184"/><area shape="rect" id="node6" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="360,208,435,235"/><area shape="rect" id="node16" href="memory_8c.html#adbbe5a57b4ed [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sgstrs_8c.html b/SuperLU_5.2.0/DOC/html/sgstrs_8c.html
new file mode 100644
index 0000000..e4ac9e4
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sgstrs_8c.html
@@ -0,0 +1,368 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sgstrs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sgstrs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves a system using LU factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sgstrs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgstrs_8c__incl.png" border="0" usemap="#SRC_2sgstrs_8c" alt=""/></div>
+<map name="SRC_2sgstrs_8c" id="SRC_2sgstrs_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a25ea48f4f948c68a423f5bd3929e3c1f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#a25ea48f4f948c68a423f5bd3929e3c1f">susolve</a> (int, int, float *, float *)</td></tr>
+<tr class="memdesc:a25ea48f4f948c68a423f5bd3929e3c1f"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a25ea48f4f948c68a423f5bd3929e3c1f">More...</a><br/></td></tr>
+<tr class="separator:a25ea48f4f948c68a423f5bd3929e3c1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c">slsolve</a> (int, int, float *, float *)</td></tr>
+<tr class="memdesc:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#aa8bbeb2abbd5a10ac13fa9b48504691c">More...</a><br/></td></tr>
+<tr class="separator:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#ab452e957171a4d0d9cfe6abb3d8a950c">smatvec</a> (int, int, int, float *, float *, float *)</td></tr>
+<tr class="memdesc:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#ab452e957171a4d0d9cfe6abb3d8a950c">More...</a><br/></td></tr>
+<tr class="separator:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9b6e1e555af9cf109ef3a584054a91e2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#a9b6e1e555af9cf109ef3a584054a91e2">sgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">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 [...]
+<tr class="separator:a9b6e1e555af9cf109ef3a584054a91e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad582f185cce067a3f9dd4225248af758"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sgstrs_8c.html#ad582f185cce067a3f9dd4225248af758">sprint_soln</a> (int n, int nrhs, float *soln)</td></tr>
+<tr class="separator:ad582f185cce067a3f9dd4225248af758"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a9b6e1e555af9cf109ef3a584054a91e2"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre>info (output) int*
+ = 0: successful exit
+ < 0: if info = -i, the i-th argument had an illegal value
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sgstrs_8c_a9b6e1e555af9cf109ef3a584054a91e2_cgraph.png" border="0" usemap="#sgstrs_8c_a9b6e1e555af9cf109ef3a584054a91e2_cgraph" alt=""/></div>
+<map name="sgstrs_8c_a9b6e1e555af9cf109ef3a584054a91e2_cgraph" id="sgstrs_8c_a9b6e1e555af9cf109ef3a584054a91e2_cgraph">
+<area shape="rect" id="node2" href="sgstrs_8c.html#ad582f185cce067a3f9dd4225248af758" title="sprint_soln" alt="" coords="112,5,197,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="247,56,329,83"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a3e1230bff11a9e47c35555299bcdcf1b" title="floatCalloc" alt="" coords="246,107,330,133"/><area shape="rect" id="node5" href="slu__cdefs_8h.html#a42361c3ce2ba81 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa8bbeb2abbd5a10ac13fa9b48504691c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab452e957171a4d0d9cfe6abb3d8a950c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad582f185cce067a3f9dd4225248af758"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a25ea48f4f948c68a423f5bd3929e3c1f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sitersol1_8c.html b/SuperLU_5.2.0/DOC/html/sitersol1_8c.html
new file mode 100644
index 0000000..918f2cd
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sitersol1_8c.html
@@ -0,0 +1,399 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/sitersol1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">sitersol1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Example #2 showing how to use ILU to precondition GMRES.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sitersol1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sitersol1_8c__incl.png" border="0" usemap="#EXAMPLE_2sitersol1_8c" alt=""/></div>
+<map name="EXAMPLE_2sitersol1_8c" id="EXAMPLE_2sitersol1_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aba0747af8c12b8617ee149febff83471"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#aba0747af8c12b8617ee149febff83471">spsolve</a> (int n, float x[], float y[])</td></tr>
+<tr class="separator:aba0747af8c12b8617ee149febff83471"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad45b4dfe6fd3558b4c213cc08128d3a1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#ad45b4dfe6fd3558b4c213cc08128d3a1">smatvec_mult</a> (float alpha, float x[], float beta, float y[])</td></tr>
+<tr class="separator:ad45b4dfe6fd3558b4c213cc08128d3a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a869338b25a186a486edd0cf1850a7fbb"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#a869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a></td></tr>
+<tr class="separator:a869338b25a186a486edd0cf1850a7fbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a64b516645b16ef03c6fd0d692e6eb277"><td class="memItemLeft" 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#a64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+<tr class="separator:a64b516645b16ef03c6fd0d692e6eb277"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ff9f80047e0b810344d85feb96941ef"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#a4ff9f80047e0b810344d85feb96941ef">GLOBAL_R</a></td></tr>
+<tr class="separator:a4ff9f80047e0b810344d85feb96941ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e8f028a8a340f260f7ac67973072999"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#a3e8f028a8a340f260f7ac67973072999">GLOBAL_C</a></td></tr>
+<tr class="separator:a3e8f028a8a340f260f7ac67973072999"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+<tr class="separator:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a42ee721355f1c852f770661834be93"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol1_8c.html#a5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+<tr class="separator:a5a42ee721355f1c852f770661834be93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad42e5c3013507184841cdfee652a0c18"><td class="memItemLeft" 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#ad42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+<tr class="separator:ad42e5c3013507184841cdfee652a0c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1beb2a8fb47df4eb505addfef02814c"><td class="memItemLeft" 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#af1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a></td></tr>
+<tr class="separator:af1beb2a8fb47df4eb505addfef02814c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memItemLeft" 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#a0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+<tr class="separator:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a000ad5c2198e4309802b4478ed08a98c"><td class="memItemLeft" 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#a000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+<tr class="separator:a000ad5c2198e4309802b4478ed08a98c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96a062252c26544370e8feae987c6d16"><td class="memItemLeft" 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#a96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+<tr class="separator:a96a062252c26544370e8feae987c6d16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19718c440adb41fbebcb4bafedbf932c"><td class="memItemLeft" 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#a19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+<tr class="separator:a19718c440adb41fbebcb4bafedbf932c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.0) –
+Lawrence Berkeley National Laboratory
+November, 2010
+August, 2011</pre><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><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
+dynamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><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><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sitersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#sitersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="sitersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="sitersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="sitersol1_8c.html#ad45b4dfe6fd3558b4c213cc08128d3a1" title="smatvec_mult" alt="" coords="144,5,248,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#a9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="520,56,603,83"/><area shape="rect" id="node4" href="sitersol1_8c.html#aba0747af8c12b8617ee149febff83471" title="spsolve" alt="" co [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad45b4dfe6fd3558b4c213cc08128d3a1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sitersol1_8c_ad45b4dfe6fd3558b4c213cc08128d3a1_cgraph.png" border="0" usemap="#sitersol1_8c_ad45b4dfe6fd3558b4c213cc08128d3a1_cgraph" alt=""/></div>
+<map name="sitersol1_8c_ad45b4dfe6fd3558b4c213cc08128d3a1_cgraph" id="sitersol1_8c_ad45b4dfe6fd3558b4c213cc08128d3a1_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="288,5,371,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aba0747af8c12b8617ee149febff83471"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sitersol1_8c_aba0747af8c12b8617ee149febff83471_cgraph.png" border="0" usemap="#sitersol1_8c_aba0747af8c12b8617ee149febff83471_cgraph" alt=""/></div>
+<map name="sitersol1_8c_aba0747af8c12b8617ee149febff83471_cgraph" id="sitersol1_8c_aba0747af8c12b8617ee149febff83471_cgraph">
+<area shape="rect" id="node2" href="ilu__scopy__to__ucol_8c.html#af839d60e0d4028df30ea1106ce429210" title="scopy_" alt="" coords="120,525,184,552"/><area shape="rect" id="node3" href="sgstrs_8c.html#a9b6e1e555af9cf109ef3a584054a91e2" title="sgstrs" alt="" coords="300,284,359,311"/><area shape="rect" id="node19" href="sgsisx_8c.html#aeb28973d99fb224f455e24d4f2928e86" title="sgsisx" alt="" coords="122,943,182,969"/><area shape="rect" id="node4" href="sgstrs_8c.html#ad582f185cce067a3f9dd422 [...]
+</div>
+</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ad42e5c3013507184841cdfee652a0c18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* GLOBAL_A</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af1beb2a8fb47df4eb505addfef02814c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_A_ORIG</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3e8f028a8a340f260f7ac67973072999"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float * GLOBAL_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a869338b25a186a486edd0cf1850a7fbb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* GLOBAL_EQUED</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f5cf27b325ef2874c953290f74c9d0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_L</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19718c440adb41fbebcb4bafedbf932c"></a>
+<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>* GLOBAL_MEM_USAGE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a64b516645b16ef03c6fd0d692e6eb277"></a>
+<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>* GLOBAL_OPTIONS</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afbcb1904a71d92b04c1aef1cede6c4b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GLOBAL_PERM_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a42ee721355f1c852f770661834be93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int * GLOBAL_PERM_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4ff9f80047e0b810344d85feb96941ef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float* GLOBAL_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a96a062252c26544370e8feae987c6d16"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* GLOBAL_STAT</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a000ad5c2198e4309802b4478ed08a98c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sitersol_8c.html b/SuperLU_5.2.0/DOC/html/sitersol_8c.html
new file mode 100644
index 0000000..85753c6
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sitersol_8c.html
@@ -0,0 +1,371 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/sitersol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">sitersol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Example #1 showing how to use ILU to precondition GMRES.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sitersol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sitersol_8c__incl.png" border="0" usemap="#EXAMPLE_2sitersol_8c" alt=""/></div>
+<map name="EXAMPLE_2sitersol_8c" id="EXAMPLE_2sitersol_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aba0747af8c12b8617ee149febff83471"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#aba0747af8c12b8617ee149febff83471">spsolve</a> (int n, float x[], float y[])</td></tr>
+<tr class="separator:aba0747af8c12b8617ee149febff83471"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad45b4dfe6fd3558b4c213cc08128d3a1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#ad45b4dfe6fd3558b4c213cc08128d3a1">smatvec_mult</a> (float alpha, float x[], float beta, float y[])</td></tr>
+<tr class="separator:ad45b4dfe6fd3558b4c213cc08128d3a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a64b516645b16ef03c6fd0d692e6eb277"><td class="memItemLeft" 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#a64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+<tr class="separator:a64b516645b16ef03c6fd0d692e6eb277"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ff9f80047e0b810344d85feb96941ef"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#a4ff9f80047e0b810344d85feb96941ef">GLOBAL_R</a></td></tr>
+<tr class="separator:a4ff9f80047e0b810344d85feb96941ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e8f028a8a340f260f7ac67973072999"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#a3e8f028a8a340f260f7ac67973072999">GLOBAL_C</a></td></tr>
+<tr class="separator:a3e8f028a8a340f260f7ac67973072999"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+<tr class="separator:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a42ee721355f1c852f770661834be93"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sitersol_8c.html#a5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+<tr class="separator:a5a42ee721355f1c852f770661834be93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad42e5c3013507184841cdfee652a0c18"><td class="memItemLeft" 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#ad42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+<tr class="separator:ad42e5c3013507184841cdfee652a0c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memItemLeft" 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#a0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+<tr class="separator:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a000ad5c2198e4309802b4478ed08a98c"><td class="memItemLeft" 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#a000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+<tr class="separator:a000ad5c2198e4309802b4478ed08a98c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96a062252c26544370e8feae987c6d16"><td class="memItemLeft" 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#a96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+<tr class="separator:a96a062252c26544370e8feae987c6d16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19718c440adb41fbebcb4bafedbf932c"><td class="memItemLeft" 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#a19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+<tr class="separator:a19718c440adb41fbebcb4bafedbf932c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.0) –
+Lawrence Berkeley National Laboratory
+November, 2010
+August, 2011</pre><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><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
+dynamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><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><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sitersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#sitersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="sitersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="sitersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="sitersol_8c.html#ad45b4dfe6fd3558b4c213cc08128d3a1" title="smatvec_mult" alt="" coords="144,5,248,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#a9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="520,56,603,83"/><area shape="rect" id="node4" href="sitersol_8c.html#aba0747af8c12b8617ee149febff83471" title="spsolve" alt="" coor [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad45b4dfe6fd3558b4c213cc08128d3a1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sitersol_8c_ad45b4dfe6fd3558b4c213cc08128d3a1_cgraph.png" border="0" usemap="#sitersol_8c_ad45b4dfe6fd3558b4c213cc08128d3a1_cgraph" alt=""/></div>
+<map name="sitersol_8c_ad45b4dfe6fd3558b4c213cc08128d3a1_cgraph" id="sitersol_8c_ad45b4dfe6fd3558b4c213cc08128d3a1_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="288,5,371,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aba0747af8c12b8617ee149febff83471"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sitersol_8c_aba0747af8c12b8617ee149febff83471_cgraph.png" border="0" usemap="#sitersol_8c_aba0747af8c12b8617ee149febff83471_cgraph" alt=""/></div>
+<map name="sitersol_8c_aba0747af8c12b8617ee149febff83471_cgraph" id="sitersol_8c_aba0747af8c12b8617ee149febff83471_cgraph">
+<area shape="rect" id="node2" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="120,525,184,552"/><area shape="rect" id="node3" href="sgstrs_8c.html#a9b6e1e555af9cf109ef3a584054a91e2" title="sgstrs" alt="" coords="300,284,359,311"/><area shape="rect" id="node19" href="sgsisx_8c.html#aeb28973d99fb224f455e24d4f2928e86" title="sgsisx" alt="" coords="122,943,182,969"/><area shape="rect" id="node4" href="sgstrs_8c.html#ad582f185cce067a3f9dd422 [...]
+</div>
+</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ad42e5c3013507184841cdfee652a0c18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* GLOBAL_A</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3e8f028a8a340f260f7ac67973072999"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float * GLOBAL_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f5cf27b325ef2874c953290f74c9d0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_L</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19718c440adb41fbebcb4bafedbf932c"></a>
+<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>* GLOBAL_MEM_USAGE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a64b516645b16ef03c6fd0d692e6eb277"></a>
+<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>* GLOBAL_OPTIONS</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afbcb1904a71d92b04c1aef1cede6c4b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GLOBAL_PERM_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a42ee721355f1c852f770661834be93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int * GLOBAL_PERM_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4ff9f80047e0b810344d85feb96941ef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float* GLOBAL_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a96a062252c26544370e8feae987c6d16"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* GLOBAL_STAT</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a000ad5c2198e4309802b4478ed08a98c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slacon_8c.html b/SuperLU_5.2.0/DOC/html/slacon_8c.html
new file mode 100644
index 0000000..391f3c3
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slacon_8c.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slacon.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slacon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Estimates the 1-norm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__Cnames_8h_source.html">slu_Cnames.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slacon.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="slacon_8c__incl.png" border="0" usemap="#SRC_2slacon_8c" alt=""/></div>
+<map name="SRC_2slacon_8c" id="SRC_2slacon_8c">
+<area shape="rect" id="node3" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="92,80,199,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a51b3babab7bbf03500dbc5ede2a682b3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slacon_8c.html#a51b3babab7bbf03500dbc5ede2a682b3">d_sign</a>(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */</td></tr>
+<tr class="separator:a51b3babab7bbf03500dbc5ede2a682b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adccc1e5692ca1dd160d0ca2a17e1b12c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slacon_8c.html#adccc1e5692ca1dd160d0ca2a17e1b12c">i_dnnt</a>(a) ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */</td></tr>
+<tr class="separator:adccc1e5692ca1dd160d0ca2a17e1b12c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a865b6cfd089f47842f95ecfcb1c88355"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slacon_8c.html#a865b6cfd089f47842f95ecfcb1c88355">slacon_</a> (int *n, float *v, float *x, int *isgn, float *est, int *kase)</td></tr>
+<tr class="separator:a865b6cfd089f47842f95ecfcb1c88355"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a51b3babab7bbf03500dbc5ede2a682b3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define d_sign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adccc1e5692ca1dd160d0ca2a17e1b12c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define i_dnnt</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a</td><td>)</td>
+ <td> ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a865b6cfd089f47842f95ecfcb1c88355"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> SLACON estimates the 1-norm of a square matrix A.
+ Reverse communication is used for evaluating matrix-vector products.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre> N (input) INT
+ The order of the matrix. N >= 1.</pre><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><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><pre> ISGN (workspace) INT array, dimension (N)</pre><pre> EST (output) FLOAT PRECISION
+ An estimate (a lower bound) for norm(A).</pre><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><pre> Further Details
+ ======= =======</pre><pre> Contributed by Nick Higham, University of Manchester.
+ Originally named CONEST, dated March 16, 1988.</pre><pre> Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of
+ a real or complex matrix, with applications to condition estimation",
+</p>
+<h1>ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.
+</h1>
+</pre><pre>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slacon_8c_a865b6cfd089f47842f95ecfcb1c88355_cgraph.png" border="0" usemap="#slacon_8c_a865b6cfd089f47842f95ecfcb1c88355_cgraph" alt=""/></div>
+<map name="slacon_8c_a865b6cfd089f47842f95ecfcb1c88355_cgraph" id="slacon_8c_a865b6cfd089f47842f95ecfcb1c88355_cgraph">
+<area shape="rect" id="node2" href="ilu__sdrop__row_8c.html#a18eff2aa758918dee76e31b812c88c9f" title="isamax_" alt="" coords="121,5,191,32"/><area shape="rect" id="node3" href="ilu__sdrop__row_8c.html#a43ef780d8b669dc0b19d41fa6727124f" title="sasum_" alt="" coords="122,56,190,83"/><area shape="rect" id="node4" href="ilu__scopy__to__ucol_8c.html#af839d60e0d4028df30ea1106ce429210" title="scopy_" alt="" coords="124,107,188,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slangs_8c.html b/SuperLU_5.2.0/DOC/html/slangs_8c.html
new file mode 100644
index 0000000..d212b50
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slangs_8c.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slangs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slangs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Returns the value of the one norm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slangs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="slangs_8c__incl.png" border="0" usemap="#SRC_2slangs_8c" alt=""/></div>
+<map name="SRC_2slangs_8c" id="SRC_2slangs_8c">
+<area shape="rect" id="node3" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a201bfd9f2017cf5904aada9f21f23ab2"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slangs_8c.html#a201bfd9f2017cf5904aada9f21f23ab2">slangs</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a201bfd9f2017cf5904aada9f21f23ab2"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from lapack routine SLANGE
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a201bfd9f2017cf5904aada9f21f23ab2"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre><h1>Description
+</h1>
+</pre><pre></pre><pre> SLANGE returns the value</pre><pre> SLANGE = ( max(<a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A(i,j))</a>), 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><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(<a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A(i,j))</a>) is not a matrix norm.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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.
+</p>
+<hr/>
+
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slaqgs_8c.html b/SuperLU_5.2.0/DOC/html/slaqgs_8c.html
new file mode 100644
index 0000000..c4ce37f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slaqgs_8c.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slaqgs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slaqgs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Equlibrates a general sprase matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slaqgs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="slaqgs_8c__incl.png" border="0" usemap="#SRC_2slaqgs_8c" alt=""/></div>
+<map name="SRC_2slaqgs_8c" id="SRC_2slaqgs_8c">
+<area shape="rect" id="node3" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0656018abfc9fa2821827415f5d5ea57"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slaqgs_8c.html#a0656018abfc9fa2821827415f5d5ea57">THRESH</a> (0.1)</td></tr>
+<tr class="separator:a0656018abfc9fa2821827415f5d5ea57"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af44216962efdebc7e1117b273743e84f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slaqgs_8c.html#af44216962efdebc7e1117b273743e84f">slaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, float *r, float *c, float rowcnd, float colcnd, float amax, char *equed)</td></tr>
+<tr class="separator:af44216962efdebc7e1117b273743e84f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from LAPACK routine SLAQGE
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a0656018abfc9fa2821827415f5d5ea57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define THRESH (0.1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af44216962efdebc7e1117b273743e84f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> SLAQGS equilibrates a general sparse M by N matrix A using the row and
+ scaling factors in the vectors R and C.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (input) float*, dimension (A->nrow)
+ The row scale factors for A.</pre><pre> C (input) float*, dimension (A->ncol)
+ The column scale factors for A.</pre><pre> ROWCND (input) float
+ Ratio of the smallest R(i) to the largest R(i).</pre><pre> COLCND (input) float
+ Ratio of the smallest C(i) to the largest C(i).</pre><pre> AMAX (input) float
+ Absolute value of largest matrix entry.</pre><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><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slaqgs_8c_af44216962efdebc7e1117b273743e84f_cgraph.png" border="0" usemap="#slaqgs_8c_af44216962efdebc7e1117b273743e84f_cgraph" alt=""/></div>
+<map name="slaqgs_8c_af44216962efdebc7e1117b273743e84f_cgraph" id="slaqgs_8c_af44216962efdebc7e1117b273743e84f_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="115,5,176,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sldperm_8c.html b/SuperLU_5.2.0/DOC/html/sldperm_8c.html
new file mode 100644
index 0000000..7291b76
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sldperm_8c.html
@@ -0,0 +1,324 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sldperm.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sldperm.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Finds a row permutation so that the matrix has large entries on the diagonal.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sldperm.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sldperm_8c__incl.png" border="0" usemap="#SRC_2sldperm_8c" alt=""/></div>
+<map name="SRC_2sldperm_8c" id="SRC_2sldperm_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1e6fb0c8dd36aef071ef165136ece781"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="sldperm_8c.html#a1e6fb0c8dd36aef071ef165136ece781">mc64id_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *)</td></tr>
+<tr class="separator:a1e6fb0c8dd36aef071ef165136ece781"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bf33c16a135cdc671242aed1705e1cd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="sldperm_8c.html#a1bf33c16a135cdc671242aed1705e1cd">mc64ad_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</ [...]
+<tr class="separator:a1bf33c16a135cdc671242aed1705e1cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6c181d905cb61481e86ddfce701e74a0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sldperm_8c.html#a6c181d905cb61481e86ddfce701e74a0">sldperm</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> job, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> n, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623 [...]
+<tr class="separator:a6c181d905cb61481e86ddfce701e74a0"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1bf33c16a135cdc671242aed1705e1cd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[] </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1e6fb0c8dd36aef071ef165136ece781"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6c181d905cb61481e86ddfce701e74a0"></a>
+<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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> SLDPERM finds a row permutation so that the matrix has large
+ entries on the diagonal.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre>n (input) int
+ The order of the matrix.</pre><pre>nnz (input) int
+ The number of nonzeros in the matrix.</pre><pre>adjncy (input) int*, of size nnz
+ The adjacency structure of the matrix, which contains the row
+ indices of the nonzeros.</pre><pre>colptr (input) int*, of size n+1
+ The pointers to the beginning of each column in ADJNCY.</pre><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><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><pre>u (output) double*, of size n
+ If job = 5, the natural logarithms of the row scaling factors.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sldperm_8c_a6c181d905cb61481e86ddfce701e74a0_cgraph.png" border="0" usemap="#sldperm_8c_a6c181d905cb61481e86ddfce701e74a0_cgraph" alt=""/></div>
+<map name="sldperm_8c_a6c181d905cb61481e86ddfce701e74a0_cgraph" id="sldperm_8c_a6c181d905cb61481e86ddfce701e74a0_cgraph">
+<area shape="rect" id="node2" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="137,5,212,32"/><area shape="rect" id="node3" href="slu__util_8h.html#ade363dcb4babb66fa0e5f51bd2e6e42c" title="slu_PrintInt10" alt="" coords="123,56,226,83"/><area shape="rect" id="node4" href="sldperm_8c.html#a1e6fb0c8dd36aef071ef165136ece781" title="mc64id_" alt="" coords="139,107,210,133"/><area shape="rect" id="node5" href="sldperm_8c.html#a1bf33c16a135cdc671242aed17 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slinsol1_8c.html b/SuperLU_5.2.0/DOC/html/slinsol1_8c.html
new file mode 100644
index 0000000..c0c6c51
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slinsol1_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/slinsol1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slinsol1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slinsol1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsol1_8c__incl.png" border="0" usemap="#EXAMPLE_2slinsol1_8c" alt=""/></div>
+<map name="EXAMPLE_2slinsol1_8c" id="EXAMPLE_2slinsol1_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsol1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#slinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="slinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="slinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,157,263,184"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#a6ad9d9454734717431356db0e8eb5deb" title="Auxiliary routines. " alt="" coords="162,259,230,285"/><area shape="rect" id="node7" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="815,791,889,817"/><area shape="rect" id=" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slinsol_8c.html b/SuperLU_5.2.0/DOC/html/slinsol_8c.html
new file mode 100644
index 0000000..a961bd6
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slinsol_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/slinsol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slinsol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slinsol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsol_8c__incl.png" border="0" usemap="#EXAMPLE_2slinsol_8c" alt=""/></div>
+<map name="EXAMPLE_2slinsol_8c" id="EXAMPLE_2slinsol_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsol_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#slinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="slinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="slinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,157,263,184"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#a6ad9d9454734717431356db0e8eb5deb" title="Auxiliary routines. " alt="" coords="162,259,230,285"/><area shape="rect" id="node7" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="815,791,889,817"/><area shape="rect" id=" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slinsolx1_8c.html b/SuperLU_5.2.0/DOC/html/slinsolx1_8c.html
new file mode 100644
index 0000000..d8188cf
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slinsolx1_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/slinsolx1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slinsolx1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slinsolx1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsolx1_8c__incl.png" border="0" usemap="#EXAMPLE_2slinsolx1_8c" alt=""/></div>
+<map name="EXAMPLE_2slinsolx1_8c" id="EXAMPLE_2slinsolx1_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a26a449fe0e6f4599404be8f78ed31f20"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx1_8c.html#a26a449fe0e6f4599404be8f78ed31f20">parse_command_line</a> (int argc, char *argv[], int *lwork, float *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d6 [...]
+<tr class="separator:a26a449fe0e6f4599404be8f78ed31f20"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#slinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="slinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="slinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slinsolx1_8c.html#a26a449fe0e6f4599404be8f78ed31f20" title="parse_command_line" alt="" coords="123,132,269,159"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,183,263,209"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#a6ad9d9454734717431356db0e8eb5deb" title="Auxiliary routines. " alt="" coords="162,233,230,260"/><area shape [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a26a449fe0e6f4599404be8f78ed31f20"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slinsolx2_8c.html b/SuperLU_5.2.0/DOC/html/slinsolx2_8c.html
new file mode 100644
index 0000000..5a5b881
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slinsolx2_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/slinsolx2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slinsolx2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slinsolx2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsolx2_8c__incl.png" border="0" usemap="#EXAMPLE_2slinsolx2_8c" alt=""/></div>
+<map name="EXAMPLE_2slinsolx2_8c" id="EXAMPLE_2slinsolx2_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx2_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a693ba86aac49435e82cf3a57a4412744"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx2_8c.html#a693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d [...]
+<tr class="separator:a693ba86aac49435e82cf3a57a4412744"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#slinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="slinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="slinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slinsolx2_8c.html#a693ba86aac49435e82cf3a57a4412744" title="parse_command_line" alt="" coords="123,132,269,159"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,183,263,209"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#a6ad9d9454734717431356db0e8eb5deb" title="Auxiliary routines. " alt="" coords="162,233,230,260"/><area shape [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a693ba86aac49435e82cf3a57a4412744"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slinsolx_8c.html b/SuperLU_5.2.0/DOC/html/slinsolx_8c.html
new file mode 100644
index 0000000..d4da860
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slinsolx_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/slinsolx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slinsolx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slinsolx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsolx_8c__incl.png" border="0" usemap="#EXAMPLE_2slinsolx_8c" alt=""/></div>
+<map name="EXAMPLE_2slinsolx_8c" id="EXAMPLE_2slinsolx_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a26a449fe0e6f4599404be8f78ed31f20"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slinsolx_8c.html#a26a449fe0e6f4599404be8f78ed31f20">parse_command_line</a> (int argc, char *argv[], int *lwork, float *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62 [...]
+<tr class="separator:a26a449fe0e6f4599404be8f78ed31f20"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#slinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="slinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="slinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slinsolx_8c.html#a26a449fe0e6f4599404be8f78ed31f20" title="parse_command_line" alt="" coords="123,132,269,159"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,183,263,209"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#a6ad9d9454734717431356db0e8eb5deb" title="Auxiliary routines. " alt="" coords="162,233,230,260"/><area shape= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a26a449fe0e6f4599404be8f78ed31f20"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slu__Cnames_8h.html b/SuperLU_5.2.0/DOC/html/slu__Cnames_8h.html
new file mode 100644
index 0000000..e8cd2d8
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slu__Cnames_8h.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slu_Cnames.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> </div>
+ <div class="headertitle">
+<div class="title">slu_Cnames.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Macros defining how C routines will be called.
+<a href="#details">More...</a></p>
+<div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__Cnames_8h__dep__incl.png" border="0" usemap="#SRC_2slu__Cnames_8hdep" alt=""/></div>
+<map name="SRC_2slu__Cnames_8hdep" id="SRC_2slu__Cnames_8hdep">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="2009,80,2132,107"/><area shape="rect" id="node33" href="clacon_8c.html" title="Estimates the 1-norm. " alt="" coords="2156,80,2260,107"/><area shape="rect" id="node34" href="clacon2_8c.html" title="Estimates the 1-norm. " alt="" coords="2285,80,2395,107"/><area shape="rect" id="node35" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="2 [...]
+</div>
+</div>
+<p><a href="slu__Cnames_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a42e4b5fadd9f6757585096fa059eea29"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#a42e4b5fadd9f6757585096fa059eea29">ADD_</a> 0</td></tr>
+<tr class="separator:a42e4b5fadd9f6757585096fa059eea29"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a64e86942f56cb415dbbbf31c6f390542"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#a64e86942f56cb415dbbbf31c6f390542">ADD__</a> 1</td></tr>
+<tr class="separator:a64e86942f56cb415dbbbf31c6f390542"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af42b337af878eff44b9d6792ee59faf7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#af42b337af878eff44b9d6792ee59faf7">NOCHANGE</a> 2</td></tr>
+<tr class="separator:af42b337af878eff44b9d6792ee59faf7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc3ddbc87aab0c0642d350d040e5bdfc"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#acc3ddbc87aab0c0642d350d040e5bdfc">UPCASE</a> 3</td></tr>
+<tr class="separator:acc3ddbc87aab0c0642d350d040e5bdfc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af29cc13eea735d836498590d413904a4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#af29cc13eea735d836498590d413904a4">OLD_CRAY</a> 4</td></tr>
+<tr class="separator:af29cc13eea735d836498590d413904a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a26f0902a7057c96ab11966ab8404f4f6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#a26f0902a7057c96ab11966ab8404f4f6">C_CALL</a> 5</td></tr>
+<tr class="separator:a26f0902a7057c96ab11966ab8404f4f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a23a1698b7e10fde5b8d52b8f3a349489"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__Cnames_8h.html#a23a1698b7e10fde5b8d52b8f3a349489">F77_CALL_C</a> <a class="el" href="slu__Cnames_8h.html#a42e4b5fadd9f6757585096fa059eea29">ADD_</a></td></tr>
+<tr class="separator:a23a1698b7e10fde5b8d52b8f3a349489"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 1, 1997</pre><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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a42e4b5fadd9f6757585096fa059eea29"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ADD_ 0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a64e86942f56cb415dbbbf31c6f390542"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ADD__ 1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a26f0902a7057c96ab11966ab8404f4f6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define C_CALL 5</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a23a1698b7e10fde5b8d52b8f3a349489"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define F77_CALL_C <a class="el" href="slu__Cnames_8h.html#a42e4b5fadd9f6757585096fa059eea29">ADD_</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af42b337af878eff44b9d6792ee59faf7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NOCHANGE 2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af29cc13eea735d836498590d413904a4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define OLD_CRAY 4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acc3ddbc87aab0c0642d350d040e5bdfc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define UPCASE 3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slu__cdefs_8h.html b/SuperLU_5.2.0/DOC/html/slu__cdefs_8h.html
new file mode 100644
index 0000000..a67a014
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slu__cdefs_8h.html
@@ -0,0 +1,6304 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slu_cdefs.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slu_cdefs.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for real operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include <limits.h></code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <stdint.h></code><br/>
+<code>#include <string.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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slu_cdefs.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h__incl.png" border="0" usemap="#SRC_2slu__cdefs_8h" alt=""/></div>
+<map name="SRC_2slu__cdefs_8h" id="SRC_2slu__cdefs_8h">
+<area shape="rect" id="node8" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,80,628,107"/><area shape="rect" id="node9" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,80,753,107"/><area shape="rect" id="node10" href="slu__util_8h.html" title="Utility header file. " alt="" coords="281,80,355,107"/><area shape="rect" id="node13" href="slu__scomplex_8h.html" title="Header file for complex operations. " alt= [...]
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h__dep__incl.png" border="0" usemap="#SRC_2slu__cdefs_8hdep" alt=""/></div>
+<map name="SRC_2slu__cdefs_8hdep" id="SRC_2slu__cdefs_8hdep">
+<area shape="rect" id="node2" href="ccolumn__bmod_8c.html" title="performs numeric block updates " alt="" coords="5,80,159,107"/><area shape="rect" id="node3" href="ccolumn__dfs_8c.html" title="Performs a symbolic factorization. " alt="" coords="185,80,324,107"/><area shape="rect" id="node4" href="ccopy__to__ucol_8c.html" title="Copy a computed column of U to the compressed data structure. " alt="" coords="349,80,499,107"/><area shape="rect" id="node5" href="cdiagonal_8c.html" title="Aux [...]
+</div>
+</div>
+<p><a href="slu__cdefs_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ab6fd6105e64ed14a0c9281326f05e623"><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a></td></tr>
+<tr class="separator:ab6fd6105e64ed14a0c9281326f05e623"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a58aff6521bb64732e981ce5779820a89"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a58aff6521bb64732e981ce5779820a89">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="structSup [...]
+<tr class="memdesc:a58aff6521bb64732e981ce5779820a89"><td class="mdescLeft"> </td><td class="mdescRight">Driver routines. <a href="#a58aff6521bb64732e981ce5779820a89">More...</a><br/></td></tr>
+<tr class="separator:a58aff6521bb64732e981ce5779820a89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a45d0fd21bdf74779e04aaa7c8b710aae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a45d0fd21bdf74779e04aaa7c8b710aae">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 [...]
+<tr class="separator:a45d0fd21bdf74779e04aaa7c8b710aae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a908282efea752470dcd38f794b435dbc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a908282efea752470dcd38f794b435dbc">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="structSu [...]
+<tr class="separator:a908282efea752470dcd38f794b435dbc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a755fdda1a11de97ea604a1838cc264ad"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a755fdda1a11de97ea604a1838cc264ad">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 [...]
+<tr class="separator:a755fdda1a11de97ea604a1838cc264ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f54bdbff678075fdf06720bbb299346"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a4f54bdbff678075fdf06720bbb299346">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t [...]
+<tr class="memdesc:a4f54bdbff678075fdf06720bbb299346"><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related. <a href="#a4f54bdbff678075fdf06720bbb299346">More...</a><br/></td></tr>
+<tr class="separator:a4f54bdbff678075fdf06720bbb299346"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a866240e7f5a35e821bc898d2e5ba26fc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a866240e7f5a35e821bc898d2e5ba26fc">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t [...]
+<tr class="separator:a866240e7f5a35e821bc898d2e5ba26fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2b7edfb65023104b0f88f5aaab393248"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a2b7edfb65023104b0f88f5aaab393248">cCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a2b7edfb65023104b0f88f5aaab393248"><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B. <a href="#a2b7edfb65023104b0f88f5aaab393248">More...</a><br/></td></tr>
+<tr class="separator:a2b7edfb65023104b0f88f5aaab393248"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9af123cab0520e5800a1b60668a09de6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a9af123cab0520e5800a1b60668a09de6">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class=" [...]
+<tr class="separator:a9af123cab0520e5800a1b60668a09de6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63d7d14c6a2312b9f95844e5055deae9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a63d7d14c6a2312b9f95844e5055deae9">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#a9d2ddedeb2a3d92e95 [...]
+<tr class="separator:a63d7d14c6a2312b9f95844e5055deae9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7378a64fc445fa7e0101059d7353f4ac"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a7378a64fc445fa7e0101059d7353f4ac">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 class="separator:a7378a64fc445fa7e0101059d7353f4ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8086902aa8be3fc7d04c3c82ec3a79dc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a8086902aa8be3fc7d04c3c82ec3a79dc">countnz</a> (const int, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a8086902aa8be3fc7d04c3c82ec3a79dc"><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="#a8086902aa8be3fc7d04c3c82ec3a79dc">More...</a><br/></td></tr>
+<tr class="separator:a8086902aa8be3fc7d04c3c82ec3a79dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae8eb367a0a2fcdf734738bc9630df85"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#aae8eb367a0a2fcdf734738bc9630df85">ilu_countnz</a> (const int, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:aae8eb367a0a2fcdf734738bc9630df85"><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U. <a href="#aae8eb367a0a2fcdf734738bc9630df85">More...</a><br/></td></tr>
+<tr class="separator:aae8eb367a0a2fcdf734738bc9630df85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7061332d759d7e4d73c1b2e5cb0bf2bf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a7061332d759d7e4d73c1b2e5cb0bf2bf">fixupL</a> (const int, const int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a7061332d759d7e4d73c1b2e5cb0bf2bf"><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="#a7061332d759d7e4d73c1b2e5cb0bf2bf">More...</a><br/></td></tr>
+<tr class="separator:a7061332d759d7e4d73c1b2e5cb0bf2bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22ec97af17a44cd9aae6aeae3de50e87"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a22ec97af17a44cd9aae6aeae3de50e87">callocateA</a> (int, int, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+<tr class="memdesc:a22ec97af17a44cd9aae6aeae3de50e87"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A. <a href="#a22ec97af17a44cd9aae6aeae3de50e87">More...</a><br/></td></tr>
+<tr class="separator:a22ec97af17a44cd9aae6aeae3de50e87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ac01851ed3a365dca3ac93bcb6afac9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a0ac01851ed3a365dca3ac93bcb6afac9">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> * [...]
+<tr class="separator:a0ac01851ed3a365dca3ac93bcb6afac9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac98da7d6b5809dadb1cae9bc019619ce"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ac98da7d6b5809dadb1cae9bc019619ce">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 class="separator:ac98da7d6b5809dadb1cae9bc019619ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aab1987caf36c8eedcf605b59e56a9d5d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#aab1987caf36c8eedcf605b59e56a9d5d">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="structSuperLUSta [...]
+<tr class="memdesc:aab1987caf36c8eedcf605b59e56a9d5d"><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode. <a href="#aab1987caf36c8eedcf605b59e56a9d5d">More...</a><br/></td></tr>
+<tr class="separator:aab1987caf36c8eedcf605b59e56a9d5d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a780968651deed587e187bd7661edbb20"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a780968651deed587e187bd7661edbb20">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="structG [...]
+<tr class="separator:a780968651deed587e187bd7661edbb20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac37d9a28b8745daf72ae1d5ad29c140d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ac37d9a28b8745daf72ae1d5ad29c140d">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=" [...]
+<tr class="separator:ac37d9a28b8745daf72ae1d5ad29c140d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6aace79c0009c9a5a32219753f51b695"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a6aace79c0009c9a5a32219753f51b695">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 class="separator:a6aace79c0009c9a5a32219753f51b695"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19d15802e430420a5512a8e9bbe42d64"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a19d15802e430420a5512a8e9bbe42d64">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="structS [...]
+<tr class="separator:a19d15802e430420a5512a8e9bbe42d64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a247f30177d193339d293899fe702afe6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a247f30177d193339d293899fe702afe6">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 class="separator:a247f30177d193339d293899fe702afe6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4a31e35e95f28f69549ffa45bebd4499"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a4a31e35e95f28f69549ffa45bebd4499">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 class="separator:a4a31e35e95f28f69549ffa45bebd4499"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65d7df9e58c2415f455dbe6db9a99f2b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a65d7df9e58c2415f455dbe6db9a99f2b">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 class="separator:a65d7df9e58c2415f455dbe6db9a99f2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a88701835280a367a90b9ea2a73f946f0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a88701835280a367a90b9ea2a73f946f0">creadmt</a> (int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+<tr class="separator:a88701835280a367a90b9ea2a73f946f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f454dd3045fdd51e8bf0d29c7561fe5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a7f454dd3045fdd51e8bf0d29c7561fe5">cGenXtrue</a> (int, int, <a class="el" href="structcomplex.html">complex</a> *, int)</td></tr>
+<tr class="separator:a7f454dd3045fdd51e8bf0d29c7561fe5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aafc07318b1802f00402e7d8afbeaaeae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#aafc07318b1802f00402e7d8afbeaaeae">cFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, int, <a class="el" href="structcomplex.html">complex</a> *, int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" hre [...]
+<tr class="memdesc:aafc07318b1802f00402e7d8afbeaaeae"><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="#aafc07318b1802f00402e7d8afbeaaeae">More...</a><br/></td></tr>
+<tr class="separator:aafc07318b1802f00402e7d8afbeaaeae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa45033d577ad2afbe488a837d6aba8cf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#aa45033d577ad2afbe488a837d6aba8cf">cgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a clas [...]
+<tr class="separator:aa45033d577ad2afbe488a837d6aba8cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19b9b4ceb07538159f349fe7d2a968c8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a19b9b4ceb07538159f349fe7d2a968c8">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> [...]
+<tr class="separator:a19b9b4ceb07538159f349fe7d2a968c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7a85f8c55c71b4f4d454c4d62ffbfae"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ac7a85f8c55c71b4f4d454c4d62ffbfae">cldperm</a> (int, int, int, int[], int[], <a class="el" href="structcomplex.html">complex</a>[], int[], float[], float[])</td></tr>
+<tr class="separator:ac7a85f8c55c71b4f4d454c4d62ffbfae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac4e46d9d75c94503e94b4599960479d7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ac4e46d9d75c94503e94b4599960479d7">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 class="separator:ac4e46d9d75c94503e94b4599960479d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9f427fadf45d56409840775c99ce8967"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a9f427fadf45d56409840775c99ce8967">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="s [...]
+<tr class="separator:a9f427fadf45d56409840775c99ce8967"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a94b01af5a7e93ca2cc3cf52717e767a0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a94b01af5a7e93ca2cc3cf52717e767a0">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 class="separator:a94b01af5a7e93ca2cc3cf52717e767a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa9bf5072c6b1c6803b1dba973ac4be3e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#aa9bf5072c6b1c6803b1dba973ac4be3e">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#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, int, <a class="el" href="structcomplex. [...]
+<tr class="separator:aa9bf5072c6b1c6803b1dba973ac4be3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac4edc9f45dad6dd53caca13240690633"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ac4edc9f45dad6dd53caca13240690633">ilu_cpivotL</a> (const int, const double, int *, int *, int, int *, int *, int *, int *, double, <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, <a class="el" href="structcomplex.html">complex</a>, <a class="e [...]
+<tr class="separator:ac4edc9f45dad6dd53caca13240690633"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf639d4fcc71c90f3e966b47787ad834"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#acf639d4fcc71c90f3e966b47787ad834">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 class="separator:acf639d4fcc71c90f3e966b47787ad834"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad34b27648bc5b43d1ad19dd017f8273f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#ad34b27648bc5b43d1ad19dd017f8273f">cgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, float *, float *, float *, float *, int *)</td></tr>
+<tr class="memdesc:ad34b27648bc5b43d1ad19dd017f8273f"><td class="mdescLeft"> </td><td class="mdescRight">Driver related. <a href="#ad34b27648bc5b43d1ad19dd017f8273f">More...</a><br/></td></tr>
+<tr class="separator:ad34b27648bc5b43d1ad19dd017f8273f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbc57dc56d0c962aa148a573895883b0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#adbc57dc56d0c962aa148a573895883b0">claqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, float *, float, float, float, char *)</td></tr>
+<tr class="separator:adbc57dc56d0c962aa148a573895883b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2ca330446884f122ee31f4f2b5243abe"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a2ca330446884f122ee31f4f2b5243abe">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 class="separator:a2ca330446884f122ee31f4f2b5243abe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a5b1cc4e96708825cc21108ebbeb061"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a9a5b1cc4e96708825cc21108ebbeb061">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 class="separator:a9a5b1cc4e96708825cc21108ebbeb061"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a64715c1d0510eaf5f8e37f2465e9e8d6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a64715c1d0510eaf5f8e37f2465e9e8d6">cgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="s [...]
+<tr class="separator:a64715c1d0510eaf5f8e37f2465e9e8d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8299a994a223b7178314fe7faff74508"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a8299a994a223b7178314fe7faff74508">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__ [...]
+<tr class="memdesc:a8299a994a223b7178314fe7faff74508"><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b. <a href="#a8299a994a223b7178314fe7faff74508">More...</a><br/></td></tr>
+<tr class="separator:a8299a994a223b7178314fe7faff74508"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a59e320a29e9ded59a46e8d64619ffac6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a59e320a29e9ded59a46e8d64619ffac6">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 clas [...]
+<tr class="memdesc:a59e320a29e9ded59a46e8d64619ffac6"><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="#a59e320a29e9ded59a46e8d64619ffac6">More...</a><br/></td></tr>
+<tr class="separator:a59e320a29e9ded59a46e8d64619ffac6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0473a1696817ed02c501ca8af8ff0285"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a0473a1696817ed02c501ca8af8ff0285">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.htm [...]
+<tr class="separator:a0473a1696817ed02c501ca8af8ff0285"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b49252f1cab66e35ac47ac1afb2adec"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec">smach</a> (char *)</td></tr>
+<tr class="separator:a1b49252f1cab66e35ac47ac1afb2adec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f124ea0294cce1fb4c467b1d63ac209"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a0f124ea0294cce1fb4c467b1d63ac209">cLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">fact_t</a>, void *, int, int, int, int, int, float, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html [...]
+<tr class="memdesc:a0f124ea0294cce1fb4c467b1d63ac209"><td class="mdescLeft"> </td><td class="mdescRight">Memory-related. <a href="#a0f124ea0294cce1fb4c467b1d63ac209">More...</a><br/></td></tr>
+<tr class="separator:a0f124ea0294cce1fb4c467b1d63ac209"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3bbcd362fb260a0dba5488a3e4ee926"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#af3bbcd362fb260a0dba5488a3e4ee926">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 class="memdesc:af3bbcd362fb260a0dba5488a3e4ee926"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays. <a href="#af3bbcd362fb260a0dba5488a3e4ee926">More...</a><br/></td></tr>
+<tr class="separator:af3bbcd362fb260a0dba5488a3e4ee926"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa759583daf08db801cf6fe8018442d4c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#aa759583daf08db801cf6fe8018442d4c">cLUWorkFree</a> (int *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:aa759583daf08db801cf6fe8018442d4c"><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines. <a href="#aa759583daf08db801cf6fe8018442d4c">More...</a><br/></td></tr>
+<tr class="separator:aa759583daf08db801cf6fe8018442d4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a255ed62863700298939edfda48ae534a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a255ed62863700298939edfda48ae534a">cLUMemXpand</a> (int, int, <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a>, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a255ed62863700298939edfda48ae534a"><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization. <a href="#a255ed62863700298939edfda48ae534a">More...</a><br/></td></tr>
+<tr class="separator:a255ed62863700298939edfda48ae534a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb98fa14a907e0e848a35e896d4040db"><td class="memItemLeft" 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#adb98fa14a907e0e848a35e896d4040db">complexMalloc</a> (int)</td></tr>
+<tr class="separator:adb98fa14a907e0e848a35e896d4040db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af558e3813415369a8805c473a7eaa5e8"><td class="memItemLeft" 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#af558e3813415369a8805c473a7eaa5e8">complexCalloc</a> (int)</td></tr>
+<tr class="separator:af558e3813415369a8805c473a7eaa5e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42361c3ce2ba81d149ffba01fbd6f138"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a42361c3ce2ba81d149ffba01fbd6f138">floatMalloc</a> (int)</td></tr>
+<tr class="separator:a42361c3ce2ba81d149ffba01fbd6f138"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e1230bff11a9e47c35555299bcdcf1b"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a3e1230bff11a9e47c35555299bcdcf1b">floatCalloc</a> (int)</td></tr>
+<tr class="separator:a3e1230bff11a9e47c35555299bcdcf1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acea36c2598bb3f8a27b6985634d2b8e9"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#acea36c2598bb3f8a27b6985634d2b8e9">cmemory_usage</a> (const int, const int, const int, const int)</td></tr>
+<tr class="separator:acea36c2598bb3f8a27b6985634d2b8e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ac9ff71eef6bf8c52c41eb9209a0caf"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a7ac9ff71eef6bf8c52c41eb9209a0caf">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 class="separator:a7ac9ff71eef6bf8c52c41eb9209a0caf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a97e43257315ae194779ffe9c3dc9c213"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a97e43257315ae194779ffe9c3dc9c213">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 class="separator:a97e43257315ae194779ffe9c3dc9c213"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbb7f5420729ee98bec39e75e7d32a8a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#afbb7f5420729ee98bec39e75e7d32a8a">creadhb</a> (FILE *, int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+<tr class="memdesc:afbb7f5420729ee98bec39e75e7d32a8a"><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines. <a href="#afbb7f5420729ee98bec39e75e7d32a8a">More...</a><br/></td></tr>
+<tr class="separator:afbb7f5420729ee98bec39e75e7d32a8a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cce050053c795f6b9c52174008bf775"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a0cce050053c795f6b9c52174008bf775">creadrb</a> (int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+<tr class="separator:a0cce050053c795f6b9c52174008bf775"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c84a33df79e533f6167e4a1e9ce89cb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a7c84a33df79e533f6167e4a1e9ce89cb">creadtriple</a> (int *, int *, int *, <a class="el" href="structcomplex.html">complex</a> **, int **, int **)</td></tr>
+<tr class="separator:a7c84a33df79e533f6167e4a1e9ce89cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3891d961d41be3af94b755b27d371c1d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a3891d961d41be3af94b755b27d371c1d">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 class="memdesc:a3891d961d41be3af94b755b27d371c1d"><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage. <a href="#a3891d961d41be3af94b755b27d371c1d">More...</a><br/></td></tr>
+<tr class="separator:a3891d961d41be3af94b755b27d371c1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a614eea417aeb37825463637f47c980ba"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a614eea417aeb37825463637f47c980ba">cfill</a> (<a class="el" href="structcomplex.html">complex</a> *, int, <a class="el" href="structcomplex.html">complex</a>)</td></tr>
+<tr class="memdesc:a614eea417aeb37825463637f47c980ba"><td class="mdescLeft"> </td><td class="mdescRight">Fills a complex precision array with a given value. <a href="#a614eea417aeb37825463637f47c980ba">More...</a><br/></td></tr>
+<tr class="separator:a614eea417aeb37825463637f47c980ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a293818022b119a511598f4766c54a1ee"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a293818022b119a511598f4766c54a1ee">cinf_norm_error</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a293818022b119a511598f4766c54a1ee"><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector. <a href="#a293818022b119a511598f4766c54a1ee">More...</a><br/></td></tr>
+<tr class="separator:a293818022b119a511598f4766c54a1ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98d44fe59660f87330b0172151a76141"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a98d44fe59660f87330b0172151a76141">sqselect</a> (int, float *, int)</td></tr>
+<tr class="separator:a98d44fe59660f87330b0172151a76141"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af091472c1fb3c085c384bf52b3bebd8d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#af091472c1fb3c085c384bf52b3bebd8d">cPrint_CompCol_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:af091472c1fb3c085c384bf52b3bebd8d"><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging. <a href="#af091472c1fb3c085c384bf52b3bebd8d">More...</a><br/></td></tr>
+<tr class="separator:af091472c1fb3c085c384bf52b3bebd8d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8482f76b710a91d26250bca719b9d00c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a8482f76b710a91d26250bca719b9d00c">cPrint_SuperNode_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:a8482f76b710a91d26250bca719b9d00c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1cbad8400b16c776b112f20b8645757d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a1cbad8400b16c776b112f20b8645757d">cPrint_Dense_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:a1cbad8400b16c776b112f20b8645757d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f43048c524cbdac07232ab635e67364"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a4f43048c524cbdac07232ab635e67364">cprint_lu_col</a> (char *, int, int, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a4f43048c524cbdac07232ab635e67364"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor. <a href="#a4f43048c524cbdac07232ab635e67364">More...</a><br/></td></tr>
+<tr class="separator:a4f43048c524cbdac07232ab635e67364"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad0c06e9adc1e29a0ab2e78c38119bb4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#aad0c06e9adc1e29a0ab2e78c38119bb4">print_double_vec</a> (char *, int, double *)</td></tr>
+<tr class="separator:aad0c06e9adc1e29a0ab2e78c38119bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa7ef430d74759ea4a757c3706af34559"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#aa7ef430d74759ea4a757c3706af34559">ccheck_tempv</a> (int, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:aa7ef430d74759ea4a757c3706af34559"><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="#aa7ef430d74759ea4a757c3706af34559">More...</a><br/></td></tr>
+<tr class="separator:aa7ef430d74759ea4a757c3706af34559"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8608efef419a79417a0761909b4db765"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a8608efef419a79417a0761909b4db765">cgemm_</a> (const char *, const char *, const int *, const int *, const int *, const <a class="el" href="structcomplex.html">complex</a> *, const <a class="el" href="structcomplex.html">complex</a> *, const int *, const <a class="el" href="structcomplex.html [...]
+<tr class="memdesc:a8608efef419a79417a0761909b4db765"><td class="mdescLeft"> </td><td class="mdescRight">BLAS. <a href="#a8608efef419a79417a0761909b4db765">More...</a><br/></td></tr>
+<tr class="separator:a8608efef419a79417a0761909b4db765"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f95eb0c9c167ab10b919c77fe7b3079"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a6f95eb0c9c167ab10b919c77fe7b3079">ctrsv_</a> (char *, char *, char *, int *, <a class="el" href="structcomplex.html">complex</a> *, int *, <a class="el" href="structcomplex.html">complex</a> *, int *)</td></tr>
+<tr class="separator:a6f95eb0c9c167ab10b919c77fe7b3079"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a969f1516d6b982552cc529ee77913826"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a969f1516d6b982552cc529ee77913826">ctrsm_</a> (char *, char *, char *, char *, int *, 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 class="separator:a969f1516d6b982552cc529ee77913826"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56ba57f6e1b5e139e6c168c21d56f873"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__cdefs_8h.html#a56ba57f6e1b5e139e6c168c21d56f873">cgemv_</a> (char *, int *, int *, <a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *a, int *, <a class="el" href="structcomplex.html">complex</a> *, int *, <a class="el" href="structcomplex.html">comp [...]
+<tr class="separator:a56ba57f6e1b5e139e6c168c21d56f873"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November, 2010</pre><pre>Global data structures used in LU factorization -</pre><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><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><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><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><pre> The last column structures (for pruning) will be removed
+ after the numercial LU factorization phase.</pre><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><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> </div><h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ab6fd6105e64ed14a0c9281326f05e623"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a22ec97af17a44cd9aae6aeae3de50e87"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a22ec97af17a44cd9aae6aeae3de50e87_cgraph.png" border="0" usemap="#slu__cdefs_8h_a22ec97af17a44cd9aae6aeae3de50e87_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a22ec97af17a44cd9aae6aeae3de50e87_cgraph" id="slu__cdefs_8h_a22ec97af17a44cd9aae6aeae3de50e87_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="136,5,245,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="153,56,228,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa7ef430d74759ea4a757c3706af34559"></a>
+<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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19d15802e430420a5512a8e9bbe42d64"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose:
+</h1>
+</pre><pre>
+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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a19d15802e430420a5512a8e9bbe42d64_cgraph.png" border="0" usemap="#slu__cdefs_8h_a19d15802e430420a5512a8e9bbe42d64_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a19d15802e430420a5512a8e9bbe42d64_cgraph" id="slu__cdefs_8h_a19d15802e430420a5512a8e9bbe42d64_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a6f95eb0c9c167ab10b919c77fe7b3079" title="ctrsv_" alt="" coords="192,5,251,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a56ba57f6e1b5e139e6c168c21d56f873" title="cgemv_" alt="" coords="187,56,255,83"/><area shape="rect" id="node4" href="ccolumn__bmod_8c.html#a39d81cbea11f613524e674a8c2e18c5f" title="Solves a dense UNIT lower triangular system. " alt="" coords="190,107,253,133"/><area shape="rect" id="node5" href="ccolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a6aace79c0009c9a5a32219753f51b695"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ CCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a6aace79c0009c9a5a32219753f51b695_cgraph.png" border="0" usemap="#slu__cdefs_8h_a6aace79c0009c9a5a32219753f51b695_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a6aace79c0009c9a5a32219753f51b695_cgraph" id="slu__cdefs_8h_a6aace79c0009c9a5a32219753f51b695_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="172,31,239,57"/><area shape="rect" id="node4" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="149,81,261,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="328,31,411,57"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a3891d961d41be3af94b755b27d371c1d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a3891d961d41be3af94b755b27d371c1d_cgraph.png" border="0" usemap="#slu__cdefs_8h_a3891d961d41be3af94b755b27d371c1d_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a3891d961d41be3af94b755b27d371c1d_cgraph" id="slu__cdefs_8h_a3891d961d41be3af94b755b27d371c1d_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="224,5,333,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="241,56,316,83"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="242,107,315,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a2b7edfb65023104b0f88f5aaab393248"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7378a64fc445fa7e0101059d7353f4ac"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Copies a two-dimensional matrix X to another matrix Y.</p>
+
+</div>
+</div>
+<a class="anchor" id="a247f30177d193339d293899fe702afe6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a247f30177d193339d293899fe702afe6_cgraph.png" border="0" usemap="#slu__cdefs_8h_a247f30177d193339d293899fe702afe6_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a247f30177d193339d293899fe702afe6_cgraph" id="slu__cdefs_8h_a247f30177d193339d293899fe702afe6_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="160,107,272,133"/><area shape="rect" id="node3" href="cmemory_8c.html#a3996260179c0a72397776571b4b19164" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="345,81,415,108"/><area shape="rect" id="node8" href="cmemory_8c.html#a43ff5010762c14ea7591d23cf48403a3" title="cmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4f54bdbff678075fdf06720bbb299346"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a866240e7f5a35e821bc898d2e5ba26fc"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9af123cab0520e5800a1b60668a09de6"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a63d7d14c6a2312b9f95844e5055deae9"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a614eea417aeb37825463637f47c980ba"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aafc07318b1802f00402e7d8afbeaaeae"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_aafc07318b1802f00402e7d8afbeaaeae_cgraph.png" border="0" usemap="#slu__cdefs_8h_aafc07318b1802f00402e7d8afbeaaeae_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_aafc07318b1802f00402e7d8afbeaaeae_cgraph" id="slu__cdefs_8h_aafc07318b1802f00402e7d8afbeaaeae_cgraph">
+<area shape="rect" id="node2" href="csp__blas3_8c.html#a23c01569bec7ec0c247eb5df98f67841" title="sp_cgemm" alt="" coords="129,5,215,32"/><area shape="rect" id="node3" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="264,5,347,32"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a8608efef419a79417a0761909b4db765"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int cgemm_ </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </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">const int * </td>
+ <td class="paramname">, </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">const <a class="el" href="structcomplex.html">complex</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structcomplex.html">complex</a> * </td>
+ <td class="paramname">, </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">const <a class="el" href="structcomplex.html">complex</a> * </td>
+ <td class="paramname">, </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">const <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">const int * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a56ba57f6e1b5e139e6c168c21d56f873"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int cgemv_ </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"><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"><em>a</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"><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"><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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7f454dd3045fdd51e8bf0d29c7561fe5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2ca330446884f122ee31f4f2b5243abe"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><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><pre> RCOND (output) float*
+ The reciprocal of the condition number of the matrix A,
+ computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><pre> INFO (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a2ca330446884f122ee31f4f2b5243abe_cgraph.png" border="0" usemap="#slu__cdefs_8h_a2ca330446884f122ee31f4f2b5243abe_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a2ca330446884f122ee31f4f2b5243abe_cgraph" id="slu__cdefs_8h_a2ca330446884f122ee31f4f2b5243abe_cgraph">
+<area shape="rect" id="node2" href="clacon2_8c.html#a230a94eeb40949490e64e84c4089b646" title="clacon2_" alt="" coords="117,132,192,159"/><area shape="rect" id="node8" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="253,259,336,285"/><area shape="rect" id="node9" href="cmemory_8c.html#a1e625ecaeb259e2dd79667ffbfb816c0" title="complexCalloc" alt="" coords="241,309,349,336"/><area shape="rect" id="node10" href="csp__blas2_8c.html#a51cbd689a51 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad34b27648bc5b43d1ad19dd017f8273f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (output) float*, size A->nrow
+ If INFO = 0 or INFO > M, R contains the row scale factors
+ for A.</pre><pre> C (output) float*, size A->ncol
+ If INFO = 0, C contains the column scale factors for A.</pre><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><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><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><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
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_ad34b27648bc5b43d1ad19dd017f8273f_cgraph.png" border="0" usemap="#slu__cdefs_8h_ad34b27648bc5b43d1ad19dd017f8273f_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_ad34b27648bc5b43d1ad19dd017f8273f_cgraph" id="slu__cdefs_8h_ad34b27648bc5b43d1ad19dd017f8273f_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="128,5,189,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="117,56,200,83"/><area shape="rect" id="node4" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="127,107,191,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a908282efea752470dcd38f794b435dbc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a755fdda1a11de97ea604a1838cc264ad"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a9bf92a834b43a4e163a5ae5c32a9ea4c">cgsitrf()</a>.
+An estimation of the condition number is provided.
+The routine performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><pre> 1.7. options->IterRefine is not used</pre><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * sum(dropped entries);
+ = SMILU_3:
+ U(i,i) := U(i,i) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * 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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><pre> 2.7. If options->IterRefine is not used.</pre><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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#a36bb68fea3ee44ff05eb7da2ee059fa5" 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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a755fdda1a11de97ea604a1838cc264ad_cgraph.png" border="0" usemap="#slu__cdefs_8h_a755fdda1a11de97ea604a1838cc264ad_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a755fdda1a11de97ea604a1838cc264ad_cgraph" id="slu__cdefs_8h_a755fdda1a11de97ea604a1838cc264ad_cgraph">
+<area shape="rect" id="node2" href="clangs_8c.html#a3e9baabe44cf6d5779cae55b80bc5763" title="clangs" alt="" coords="182,5,242,32"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="413,157,475,184"/><area shape="rect" id="node5" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="739,208,821,235"/><area shape="rect" id="node6" href="slu__util_8h.html#a72be96e75e58564c4322ef9e [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a19b9b4ceb07538159f349fe7d2a968c8"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the ILU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">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#a380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a19b9b4ceb07538159f349fe7d2a968c8_cgraph.png" border="0" usemap="#slu__cdefs_8h_a19b9b4ceb07538159f349fe7d2a968c8_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a19b9b4ceb07538159f349fe7d2a968c8_cgraph" id="slu__cdefs_8h_a19b9b4ceb07538159f349fe7d2a968c8_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a6b958c6272421d091bdd9a2e7fdbafcd" title="Allocate storage for the data structures common to all factor routines. " alt="" coords="157,309,251,336"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="363,56,437,83"/><area shape="rect" id="node12" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="531,563,597,589"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a64715c1d0510eaf5f8e37f2465e9e8d6"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> CGSRFS improves the computed solution to a system of linear
+ equations and provides error bounds and backward error estimates for
+ the solution.</pre><pre> If equilibration was performed, the system becomes:
+ (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use column-wise storage scheme,
+ i.e., U has types: Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><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><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><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><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><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><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><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#a19517b9d29e4faf9ae777ca6fb9d415b">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><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><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><pre> stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre> info (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value</pre><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><pre> ITMAX is the maximum number of steps of iterative refinement.</pre><pre></pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a64715c1d0510eaf5f8e37f2465e9e8d6_cgraph.png" border="0" usemap="#slu__cdefs_8h_a64715c1d0510eaf5f8e37f2465e9e8d6_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a64715c1d0510eaf5f8e37f2465e9e8d6_cgraph" id="slu__cdefs_8h_a64715c1d0510eaf5f8e37f2465e9e8d6_cgraph">
+<area shape="rect" id="node2" href="clacon2_8c.html#a230a94eeb40949490e64e84c4089b646" title="clacon2_" alt="" coords="116,137,191,164"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="267,36,328,63"/><area shape="rect" id="node6" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="426,87,483,113"/><area shape="rect" id="node7" href="ilu__ccopy__to__ucol_8c.htm [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a58aff6521bb64732e981ce5779820a89"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>CGSSV solves the system of linear equations A*X=B, using the
+LU factorization from CGSTRF. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><pre> 1.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ above algorithm to the transpose of A:</pre><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><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><pre> 2.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> If options->RowPerm = MY_PERMR or
+ options->Fact = SamePattern_SameRowPerm, perm_r is an
+ input argument.
+ otherwise it is an output argument.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a58aff6521bb64732e981ce5779820a89_cgraph.png" border="0" usemap="#slu__cdefs_8h_a58aff6521bb64732e981ce5779820a89_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a58aff6521bb64732e981ce5779820a89_cgraph" id="slu__cdefs_8h_a58aff6521bb64732e981ce5779820a89_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="747,1779,829,1805"/><area shape="rect" id="node3" href="cutil_8c.html#abb6caf8afa858f9adaf0ff8421ac03dd" title="Supernodal LU factor related. " alt="" coords="360,563,533,589"/><area shape="rect" id="node4" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="389,5,505,32"/><area shape="rect" id="node5" href="get__per [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a45d0fd21bdf74779e04aaa7c8b710aae"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Error bounds on the solution and
+a condition estimate are also provided. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><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><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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a45d0fd21bdf74779e04aaa7c8b710aae_cgraph.png" border="0" usemap="#slu__cdefs_8h_a45d0fd21bdf74779e04aaa7c8b710aae_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a45d0fd21bdf74779e04aaa7c8b710aae_cgraph" id="slu__cdefs_8h_a45d0fd21bdf74779e04aaa7c8b710aae_cgraph">
+<area shape="rect" id="node2" href="clangs_8c.html#a3e9baabe44cf6d5779cae55b80bc5763" title="clangs" alt="" coords="185,226,245,253"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="416,74,477,101"/><area shape="rect" id="node5" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="741,353,824,380"/><area shape="rect" id="node6" href="slu__util_8h.html#a72be96e75e58564c4322ef [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0ac01851ed3a365dca3ac93bcb6afac9"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the LU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a052edfd06c5aeab7a37b5fa558a06602">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__cdefs_8h.html" title="Header file for real operations. ">slu_cdefs.h</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a0ac01851ed3a365dca3ac93bcb6afac9_cgraph.png" border="0" usemap="#slu__cdefs_8h_a0ac01851ed3a365dca3ac93bcb6afac9_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a0ac01851ed3a365dca3ac93bcb6afac9_cgraph" id="slu__cdefs_8h_a0ac01851ed3a365dca3ac93bcb6afac9_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="528,632,595,659"/><area shape="rect" id="node4" href="cmemory_8c.html#a6b958c6272421d091bdd9a2e7fdbafcd" title="Allocate storage for the data structures common to all factor routines. " alt="" coords="155,176,248,203"/><area shape="rect" id="node6" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="360,303,435,330"/><area shape="rec [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa45033d577ad2afbe488a837d6aba8cf"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_C, Mtype = SLU_TRLU.</pre><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#aa8247db8d5947bb40d0811c770a255c7">cgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_C, Mtype = SLU_TRU.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre>info (output) int*
+ = 0: successful exit
+ < 0: if info = -i, the i-th argument had an illegal value
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_aa45033d577ad2afbe488a837d6aba8cf_cgraph.png" border="0" usemap="#slu__cdefs_8h_aa45033d577ad2afbe488a837d6aba8cf_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_aa45033d577ad2afbe488a837d6aba8cf_cgraph" id="slu__cdefs_8h_aa45033d577ad2afbe488a837d6aba8cf_cgraph">
+<area shape="rect" id="node2" href="cgstrs_8c.html#ae8df96516a8a07b44c8e82c6ae734ab6" title="cprint_soln" alt="" coords="124,5,209,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="283,107,365,133"/><area shape="rect" id="node4" href="cmemory_8c.html#a1e625ecaeb259e2dd79667ffbfb816c0" title="complexCalloc" alt="" coords="270,157,378,184"/><area shape="rect" id="node5" href="cmemory_8c.html#a0af029f557e5014a [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a293818022b119a511598f4766c54a1ee"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a293818022b119a511598f4766c54a1ee_cgraph.png" border="0" usemap="#slu__cdefs_8h_a293818022b119a511598f4766c54a1ee_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a293818022b119a511598f4766c54a1ee_cgraph" id="slu__cdefs_8h_a293818022b119a511598f4766c54a1ee_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="166,5,223,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="adbc57dc56d0c962aa148a573895883b0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> CLAQGS equilibrates a general sparse M by N matrix A using the row and
+ scaling factors in the vectors R and C.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (input) float*, dimension (A->nrow)
+ The row scale factors for A.</pre><pre> C (input) float*, dimension (A->ncol)
+ The column scale factors for A.</pre><pre> ROWCND (input) float
+ Ratio of the smallest R(i) to the largest R(i).</pre><pre> COLCND (input) float
+ Ratio of the smallest C(i) to the largest C(i).</pre><pre> AMAX (input) float
+ Absolute value of largest matrix entry.</pre><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><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_adbc57dc56d0c962aa148a573895883b0_cgraph.png" border="0" usemap="#slu__cdefs_8h_adbc57dc56d0c962aa148a573895883b0_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_adbc57dc56d0c962aa148a573895883b0_cgraph" id="slu__cdefs_8h_adbc57dc56d0c962aa148a573895883b0_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="115,5,176,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ac7a85f8c55c71b4f4d454c4d62ffbfae"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f124ea0294cce1fb4c467b1d63ac209"></a>
+<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#ac785c8235480e5cfef9848d89c047c0a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a0f124ea0294cce1fb4c467b1d63ac209_cgraph.png" border="0" usemap="#slu__cdefs_8h_a0f124ea0294cce1fb4c467b1d63ac209_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a0f124ea0294cce1fb4c467b1d63ac209_cgraph" id="slu__cdefs_8h_a0f124ea0294cce1fb4c467b1d63ac209_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#ac62dd03d1789ef6363db31ad2491ada9" title="Setup the memory model to be used for factorization. " alt="" coords="157,5,257,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="169,56,244,83"/><area shape="rect" id="node4" href="cmemory_8c.html#afdfe5f4689b0aaedf46d034809711754" title="cuser_malloc" alt="" coords="337,183,436,209"/><area shape="rect" id="node5" href="c [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a255ed62863700298939edfda48ae534a"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+Return value: 0 - successful return
+ > 0 - number of bytes allocated when run out of space
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a255ed62863700298939edfda48ae534a_cgraph.png" border="0" usemap="#slu__cdefs_8h_a255ed62863700298939edfda48ae534a_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a255ed62863700298939edfda48ae534a_cgraph" id="slu__cdefs_8h_a255ed62863700298939edfda48ae534a_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a3996260179c0a72397776571b4b19164" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="190,81,261,108"/><area shape="rect" id="node7" href="cmemory_8c.html#a43ff5010762c14ea7591d23cf48403a3" title="cmemory_usage" alt="" coords="166,132,285,159"/><area shape="rect" id="node3" href="cmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="352,5,459,32"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa759583daf08db801cf6fe8018442d4c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acea36c2598bb3f8a27b6985634d2b8e9"></a>
+<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">, </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">const int </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af558e3813415369a8805c473a7eaa5e8"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adb98fa14a907e0e848a35e896d4040db"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8086902aa8be3fc7d04c3c82ec3a79dc"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac37d9a28b8745daf72ae1d5ad29c140d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre> Before entering this routine, the original nonzeros in the panel
+ were already copied into the spa[m,w].</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_ac37d9a28b8745daf72ae1d5ad29c140d_cgraph.png" border="0" usemap="#slu__cdefs_8h_ac37d9a28b8745daf72ae1d5ad29c140d_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_ac37d9a28b8745daf72ae1d5ad29c140d_cgraph" id="slu__cdefs_8h_ac37d9a28b8745daf72ae1d5ad29c140d_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a6f95eb0c9c167ab10b919c77fe7b3079" title="ctrsv_" alt="" coords="159,56,217,83"/><area shape="rect" id="node5" href="cpanel__bmod_8c.html#a39d81cbea11f613524e674a8c2e18c5f" title="Solves a dense UNIT lower triangular system. " alt="" coords="157,107,219,133"/><area shape="rect" id="node6" href="slu__c [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a780968651deed587e187bd7661edbb20"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<a class="anchor" id="a9a5b1cc4e96708825cc21108ebbeb061"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>Compute the reciprocal pivot growth factor of the leading ncols columns
+of the matrix, using the formula:
+ min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>ncols (input) int
+ The number of columns of matrices A, L and U.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a9a5b1cc4e96708825cc21108ebbeb061_cgraph.png" border="0" usemap="#slu__cdefs_8h_a9a5b1cc4e96708825cc21108ebbeb061_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a9a5b1cc4e96708825cc21108ebbeb061_cgraph" id="slu__cdefs_8h_a9a5b1cc4e96708825cc21108ebbeb061_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="156,5,217,32"/><area shape="rect" id="node3" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="155,56,219,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4a31e35e95f28f69549ffa45bebd4499"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a4a31e35e95f28f69549ffa45bebd4499_cgraph.png" border="0" usemap="#slu__cdefs_8h_a4a31e35e95f28f69549ffa45bebd4499_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a4a31e35e95f28f69549ffa45bebd4499_cgraph" id="slu__cdefs_8h_a4a31e35e95f28f69549ffa45bebd4499_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="117,5,181,32"/><area shape="rect" id="node3" href="scomplex_8c.html#a19814f5030befb85c4bb07e0fac34a7b" title="Complex Division c = a/b. " alt="" coords="123,56,176,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="af091472c1fb3c085c384bf52b3bebd8d"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1cbad8400b16c776b112f20b8645757d"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4f43048c524cbdac07232ab635e67364"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8482f76b710a91d26250bca719b9d00c"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a65d7df9e58c2415f455dbe6db9a99f2b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Prunes the L-structure of supernodes whose L-structure
+ contains the current pivot row "pivrow"
+</pre>
+</div>
+</div>
+<a class="anchor" id="a7ac9ff71eef6bf8c52c41eb9209a0caf"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a7ac9ff71eef6bf8c52c41eb9209a0caf_cgraph.png" border="0" usemap="#slu__cdefs_8h_a7ac9ff71eef6bf8c52c41eb9209a0caf_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a7ac9ff71eef6bf8c52c41eb9209a0caf_cgraph" id="slu__cdefs_8h_a7ac9ff71eef6bf8c52c41eb9209a0caf_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="269,5,352,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afbb7f5420729ee98bec39e75e7d32a8a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void creadhb </td>
+ <td>(</td>
+ <td class="paramtype">FILE * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_afbb7f5420729ee98bec39e75e7d32a8a_cgraph.png" border="0" usemap="#slu__cdefs_8h_afbb7f5420729ee98bec39e75e7d32a8a_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_afbb7f5420729ee98bec39e75e7d32a8a_cgraph" id="slu__cdefs_8h_afbb7f5420729ee98bec39e75e7d32a8a_cgraph">
+<area shape="rect" id="node2" href="creadhb_8c.html#ad09b12d41114fe05457517797a07cc18" title="Eat up the rest of the current line. " alt="" coords="145,5,233,32"/><area shape="rect" id="node3" href="cmemory_8c.html#ad952b424acd036108ca2f5a0bd9d3739" title="Allocate storage for original matrix A. " alt="" coords="148,56,231,83"/><area shape="rect" id="node6" href="creadhb_8c.html#a5c4a2643da5963b5476e372f988bbd8d" title="cParseIntFormat" alt="" coords="130,107,249,133"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a88701835280a367a90b9ea2a73f946f0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0cce050053c795f6b9c52174008bf775"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a0cce050053c795f6b9c52174008bf775_cgraph.png" border="0" usemap="#slu__cdefs_8h_a0cce050053c795f6b9c52174008bf775_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a0cce050053c795f6b9c52174008bf775_cgraph" id="slu__cdefs_8h_a0cce050053c795f6b9c52174008bf775_cgraph">
+<area shape="rect" id="node2" href="creadrb_8c.html#a2d52636395e794c245819afa89a9898d" title="Eat up the rest of the current line. " alt="" coords="143,5,231,32"/><area shape="rect" id="node3" href="cmemory_8c.html#ad952b424acd036108ca2f5a0bd9d3739" title="Allocate storage for original matrix A. " alt="" coords="145,56,228,83"/><area shape="rect" id="node6" href="creadrb_8c.html#a9cd499747b7a42c6086b922fc9e37844" title="cParseIntFormat" alt="" coords="127,107,246,133"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7c84a33df79e533f6167e4a1e9ce89cb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a7c84a33df79e533f6167e4a1e9ce89cb_cgraph.png" border="0" usemap="#slu__cdefs_8h_a7c84a33df79e533f6167e4a1e9ce89cb_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a7c84a33df79e533f6167e4a1e9ce89cb_cgraph" id="slu__cdefs_8h_a7c84a33df79e533f6167e4a1e9ce89cb_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#ad952b424acd036108ca2f5a0bd9d3739" title="Allocate storage for original matrix A. " alt="" coords="136,31,219,57"/><area shape="rect" id="node3" href="cmemory_8c.html#a0af029f557e5014a2d6797436b925f53" title="complexMalloc" alt="" coords="267,5,376,32"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="284,56,359,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="af3bbcd362fb260a0dba5488a3e4ee926"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_af3bbcd362fb260a0dba5488a3e4ee926_cgraph.png" border="0" usemap="#slu__cdefs_8h_af3bbcd362fb260a0dba5488a3e4ee926_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_af3bbcd362fb260a0dba5488a3e4ee926_cgraph" id="slu__cdefs_8h_af3bbcd362fb260a0dba5488a3e4ee926_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="144,5,211,32"/><area shape="rect" id="node4" href="cutil_8c.html#a0987feeb2bd380db917660cde3352ec7" title="Fills a complex precision array with a given value. " alt="" coords="156,56,199,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="259,5,341,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aab1987caf36c8eedcf605b59e56a9d5d"></a>
+<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">, </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">const 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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_aab1987caf36c8eedcf605b59e56a9d5d_cgraph.png" border="0" usemap="#slu__cdefs_8h_aab1987caf36c8eedcf605b59e56a9d5d_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_aab1987caf36c8eedcf605b59e56a9d5d_cgraph" id="slu__cdefs_8h_aab1987caf36c8eedcf605b59e56a9d5d_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a6f95eb0c9c167ab10b919c77fe7b3079" title="ctrsv_" alt="" coords="164,5,223,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a56ba57f6e1b5e139e6c168c21d56f873" title="cgemv_" alt="" coords="159,56,227,83"/><area shape="rect" id="node4" href="ccolumn__bmod_8c.html#a39d81cbea11f613524e674a8c2e18c5f" title="Solves a dense UNIT lower triangular system. " alt="" coords="162,107,225,133"/><area shape="rect" id="node5" href="ccolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ac98da7d6b5809dadb1cae9bc019619ce"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="csnode__dfs_8c.html#a1c7b34abd214279177619773ad24b759">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_ac98da7d6b5809dadb1cae9bc019619ce_cgraph.png" border="0" usemap="#slu__cdefs_8h_ac98da7d6b5809dadb1cae9bc019619ce_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_ac98da7d6b5809dadb1cae9bc019619ce_cgraph" id="slu__cdefs_8h_ac98da7d6b5809dadb1cae9bc019619ce_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="144,107,256,133"/><area shape="rect" id="node3" href="cmemory_8c.html#a3996260179c0a72397776571b4b19164" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="329,81,399,108"/><area shape="rect" id="node8" href="cmemory_8c.html#a43ff5010762c14ea7591d23cf48403a3" title="cmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a969f1516d6b982552cc529ee77913826"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int ctrsm_ </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">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>
+ </tr>
+ <tr>
+ <td class="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">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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6f95eb0c9c167ab10b919c77fe7b3079"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int ctrsv_ </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">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"><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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7061332d759d7e4d73c1b2e5cb0bf2bf"></a>
+<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">, </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3e1230bff11a9e47c35555299bcdcf1b"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a42361c3ce2ba81d149ffba01fbd6f138"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a94b01af5a7e93ca2cc3cf52717e767a0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ILU_CCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a94b01af5a7e93ca2cc3cf52717e767a0_cgraph.png" border="0" usemap="#slu__cdefs_8h_a94b01af5a7e93ca2cc3cf52717e767a0_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a94b01af5a7e93ca2cc3cf52717e767a0_cgraph" id="slu__cdefs_8h_a94b01af5a7e93ca2cc3cf52717e767a0_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="193,31,260,57"/><area shape="rect" id="node4" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="171,81,283,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="349,31,432,57"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa9bf5072c6b1c6803b1dba973ac4be3e"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_aa9bf5072c6b1c6803b1dba973ac4be3e_cgraph.png" border="0" usemap="#slu__cdefs_8h_aa9bf5072c6b1c6803b1dba973ac4be3e_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_aa9bf5072c6b1c6803b1dba973ac4be3e_cgraph" id="slu__cdefs_8h_aa9bf5072c6b1c6803b1dba973ac4be3e_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="207,56,268,83"/><area shape="rect" id="node3" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="181,107,293,133"/><area shape="rect" id="node10" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords=" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acf639d4fcc71c90f3e966b47787ad834"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aae8eb367a0a2fcdf734738bc9630df85"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9f427fadf45d56409840775c99ce8967"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a9f427fadf45d56409840775c99ce8967_cgraph.png" border="0" usemap="#slu__cdefs_8h_a9f427fadf45d56409840775c99ce8967_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a9f427fadf45d56409840775c99ce8967_cgraph" id="slu__cdefs_8h_a9f427fadf45d56409840775c99ce8967_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="160,5,224,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4edc9f45dad6dd53caca13240690633"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_ac4edc9f45dad6dd53caca13240690633_cgraph.png" border="0" usemap="#slu__cdefs_8h_ac4edc9f45dad6dd53caca13240690633_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_ac4edc9f45dad6dd53caca13240690633_cgraph" id="slu__cdefs_8h_ac4edc9f45dad6dd53caca13240690633_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#a6a6e9259e2eadc976a783d1b0e8f013b" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="139,5,203,32"/><area shape="rect" id="node3" href="scomplex_8c.html#aee98d3dfc6ee26d36a2e095bd28414e5" title="SIGN functions for complex number. Returns z/abs(z) " alt="" coords="142,56,199,83"/><area shape="rect" id="node5" href="scomplex_8c.html#a19814f5030befb85c4bb07e0fac34a7b" title="Complex Division c = a/b. " alt="" coord [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a97e43257315ae194779ffe9c3dc9c213"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a97e43257315ae194779ffe9c3dc9c213_cgraph.png" border="0" usemap="#slu__cdefs_8h_a97e43257315ae194779ffe9c3dc9c213_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a97e43257315ae194779ffe9c3dc9c213_cgraph" id="slu__cdefs_8h_a97e43257315ae194779ffe9c3dc9c213_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="176,5,243,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="291,5,373,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4e46d9d75c94503e94b4599960479d7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__csnode__dfs_8c.html#aa6c4a4029db106e8dd56bc0fe1f0090b">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_ac4e46d9d75c94503e94b4599960479d7_cgraph.png" border="0" usemap="#slu__cdefs_8h_ac4e46d9d75c94503e94b4599960479d7_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_ac4e46d9d75c94503e94b4599960479d7_cgraph" id="slu__cdefs_8h_ac4e46d9d75c94503e94b4599960479d7_cgraph">
+<area shape="rect" id="node2" href="cmemory_8c.html#a8f2864f34ca668aeccb8298052a5c449" title="Expand the data structures for L and U during the factorization. " alt="" coords="163,107,275,133"/><area shape="rect" id="node3" href="cmemory_8c.html#a3996260179c0a72397776571b4b19164" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="347,81,418,108"/><area shape="rect" id="node8" href="cmemory_8c.html#a43ff5010762c14ea7591d23cf48403a3" title="cmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aad0c06e9adc1e29a0ab2e78c38119bb4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1b49252f1cab66e35ac47ac1afb2adec"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float smach </td>
+ <td>(</td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0473a1696817ed02c501ca8af8ff0285"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> sp_c performs one of the matrix-matrix operations</pre><pre> C := alpha*op( A )*op( B ) + beta*C,</pre><pre> where op( X ) is one of</pre><pre> op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ),</pre><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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> ALPHA - (input) complex
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><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 max( 1, n ).
+ Unchanged on exit.</pre><pre> BETA - (input) complex
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then C need not be set on input.</pre><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><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 max(1,m).
+ Unchanged on exit.</pre><pre> ==== Sparse Level 3 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a0473a1696817ed02c501ca8af8ff0285_cgraph.png" border="0" usemap="#slu__cdefs_8h_a0473a1696817ed02c501ca8af8ff0285_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a0473a1696817ed02c501ca8af8ff0285_cgraph" id="slu__cdefs_8h_a0473a1696817ed02c501ca8af8ff0285_cgraph">
+<area shape="rect" id="node2" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="141,5,224,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,5,355,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a59e320a29e9ded59a46e8d64619ffac6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="csp__blas2_8c.html#a1adbbd2f478e6a22843d82a07d42fb63" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y...">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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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^H*x + beta*y.</pre><pre> ALPHA - (input) complex
+ On entry, ALPHA specifies the scalar alpha.</pre><pre> A - (input) SuperMatrix*
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients.</pre><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><pre> INCX - (input) int
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.</pre><pre> BETA - (input) complex
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.</pre><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><pre> INCY - (input) int
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.</pre><pre> ==== Sparse Level 2 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a59e320a29e9ded59a46e8d64619ffac6_cgraph.png" border="0" usemap="#slu__cdefs_8h_a59e320a29e9ded59a46e8d64619ffac6_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a59e320a29e9ded59a46e8d64619ffac6_cgraph" id="slu__cdefs_8h_a59e320a29e9ded59a46e8d64619ffac6_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="136,5,219,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a8299a994a223b7178314fe7faff74508"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="csp__blas2_8c.html#a51cbd689a51632885b9b034002631a6e" 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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><pre> info - (output) int*
+ If *info = -i, the i-th argument had an illegal value.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__cdefs_8h_a8299a994a223b7178314fe7faff74508_cgraph.png" border="0" usemap="#slu__cdefs_8h_a8299a994a223b7178314fe7faff74508_cgraph" alt=""/></div>
+<map name="slu__cdefs_8h_a8299a994a223b7178314fe7faff74508_cgraph" id="slu__cdefs_8h_a8299a994a223b7178314fe7faff74508_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="139,5,221,32"/><area shape="rect" id="node3" href="cmemory_8c.html#a1e625ecaeb259e2dd79667ffbfb816c0" title="complexCalloc" alt="" coords="126,56,234,83"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a6f95eb0c9c167ab10b919c77fe7b3079" title="ctrsv_" alt="" coords="151,107,209,133"/><area shape="rect" id="node5" href="slu__cdefs_8h.html#a56ba57f6e1b5e139 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a98d44fe59660f87330b0172151a76141"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slu__dcomplex_8h.html b/SuperLU_5.2.0/DOC/html/slu__dcomplex_8h.html
new file mode 100644
index 0000000..a32713e
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slu__dcomplex_8h.html
@@ -0,0 +1,526 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slu_dcomplex.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slu_dcomplex.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for complex operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__dcomplex_8h__dep__incl.png" border="0" usemap="#SRC_2slu__dcomplex_8hdep" alt=""/></div>
+<map name="SRC_2slu__dcomplex_8hdep" id="SRC_2slu__dcomplex_8hdep">
+<area shape="rect" id="node2" href="dcomplex_8c.html" title="Common arithmetic for complex type. " alt="" coords="2781,80,2904,107"/><area shape="rect" id="node3" href="dzsum1_8c.html" title="Takes sum of the absolute values of a complex vector and returns a double precision result..." alt="" coords="2928,80,3039,107"/><area shape="rect" id="node4" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="3064,80,3187,107"/><area shape="rect" id="node47" href="iz [...]
+</div>
+</div>
+<p><a href="slu__dcomplex_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structdoublecomplex.html">doublecomplex</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a56454c86f7063929077dff7350bdae71"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a56454c86f7063929077dff7350bdae71">DCOMPLEX_INCLUDE</a></td></tr>
+<tr class="separator:a56454c86f7063929077dff7350bdae71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a35daa816dd5911bdb075aba8856f9cf0"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a35daa816dd5911bdb075aba8856f9cf0">z_add</a>(c, a, b)</td></tr>
+<tr class="memdesc:a35daa816dd5911bdb075aba8856f9cf0"><td class="mdescLeft"> </td><td class="mdescRight">Complex Addition c = a + b. <a href="#a35daa816dd5911bdb075aba8856f9cf0">More...</a><br/></td></tr>
+<tr class="separator:a35daa816dd5911bdb075aba8856f9cf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d01f55090621b481fcec184a2012ffb"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a8d01f55090621b481fcec184a2012ffb">z_sub</a>(c, a, b)</td></tr>
+<tr class="memdesc:a8d01f55090621b481fcec184a2012ffb"><td class="mdescLeft"> </td><td class="mdescRight">Complex Subtraction c = a - b. <a href="#a8d01f55090621b481fcec184a2012ffb">More...</a><br/></td></tr>
+<tr class="separator:a8d01f55090621b481fcec184a2012ffb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa361695d091f77d512454ddbee3b2b3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#aaa361695d091f77d512454ddbee3b2b3">zd_mult</a>(c, a, b)</td></tr>
+<tr class="memdesc:aaa361695d091f77d512454ddbee3b2b3"><td class="mdescLeft"> </td><td class="mdescRight">Complex-Double Multiplication. <a href="#aaa361695d091f77d512454ddbee3b2b3">More...</a><br/></td></tr>
+<tr class="separator:aaa361695d091f77d512454ddbee3b2b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a008009fa4c5e6733f840478ceb0fb8ae"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a008009fa4c5e6733f840478ceb0fb8ae">zz_mult</a>(c, a, b)</td></tr>
+<tr class="memdesc:a008009fa4c5e6733f840478ceb0fb8ae"><td class="mdescLeft"> </td><td class="mdescRight">Complex-Complex Multiplication. <a href="#a008009fa4c5e6733f840478ceb0fb8ae">More...</a><br/></td></tr>
+<tr class="separator:a008009fa4c5e6733f840478ceb0fb8ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8c08104b0130f14f6f40f17bee239e80"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a8c08104b0130f14f6f40f17bee239e80">zz_conj</a>(a, b)</td></tr>
+<tr class="separator:a8c08104b0130f14f6f40f17bee239e80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe2eaa3195b69824be150f4163f8d056"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#afe2eaa3195b69824be150f4163f8d056">z_eq</a>(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i )</td></tr>
+<tr class="memdesc:afe2eaa3195b69824be150f4163f8d056"><td class="mdescLeft"> </td><td class="mdescRight">Complex equality testing. <a href="#afe2eaa3195b69824be150f4163f8d056">More...</a><br/></td></tr>
+<tr class="separator:afe2eaa3195b69824be150f4163f8d056"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:abfe979e43a797b71939e267913abf791"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#abfe979e43a797b71939e267913abf791">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 class="memdesc:abfe979e43a797b71939e267913abf791"><td class="mdescLeft"> </td><td class="mdescRight">Complex Division c = a/b. <a href="#abfe979e43a797b71939e267913abf791">More...</a><br/></td></tr>
+<tr class="separator:abfe979e43a797b71939e267913abf791"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a56231cc660c4a63d58ec6f02754b7d41"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a56231cc660c4a63d58ec6f02754b7d41">z_abs</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:a56231cc660c4a63d58ec6f02754b7d41"><td class="mdescLeft"> </td><td class="mdescRight">Returns sqrt(z.r^2 + z.i^2) <a href="#a56231cc660c4a63d58ec6f02754b7d41">More...</a><br/></td></tr>
+<tr class="separator:a56231cc660c4a63d58ec6f02754b7d41"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a366281128462d1635073d7794fda008a"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a366281128462d1635073d7794fda008a">z_abs1</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:a366281128462d1635073d7794fda008a"><td class="mdescLeft"> </td><td class="mdescRight">Approximates the abs. Returns abs(z.r) + abs(z.i) <a href="#a366281128462d1635073d7794fda008a">More...</a><br/></td></tr>
+<tr class="separator:a366281128462d1635073d7794fda008a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a90ddba9274fa6a571dadf228763fee4b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a90ddba9274fa6a571dadf228763fee4b">z_exp</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:a90ddba9274fa6a571dadf228763fee4b"><td class="mdescLeft"> </td><td class="mdescRight">Return the exponentiation. <a href="#a90ddba9274fa6a571dadf228763fee4b">More...</a><br/></td></tr>
+<tr class="separator:a90ddba9274fa6a571dadf228763fee4b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a753978ee017e26dbdab16a40cf45b2cb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a753978ee017e26dbdab16a40cf45b2cb">d_cnjg</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *r, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *z)</td></tr>
+<tr class="memdesc:a753978ee017e26dbdab16a40cf45b2cb"><td class="mdescLeft"> </td><td class="mdescRight">Return the complex conjugate. <a href="#a753978ee017e26dbdab16a40cf45b2cb">More...</a><br/></td></tr>
+<tr class="separator:a753978ee017e26dbdab16a40cf45b2cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7a81445c4ec55ec40b6c5f3014887e61"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__dcomplex_8h.html#a7a81445c4ec55ec40b6c5f3014887e61">d_imag</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:a7a81445c4ec55ec40b6c5f3014887e61"><td class="mdescLeft"> </td><td class="mdescRight">Return the imaginary part. <a href="#a7a81445c4ec55ec40b6c5f3014887e61">More...</a><br/></td></tr>
+<tr class="separator:a7a81445c4ec55ec40b6c5f3014887e61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab05d15baf3424d677bf6784414882b21"><td class="memItemLeft" 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#ab05d15baf3424d677bf6784414882b21">z_sgn</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:ab05d15baf3424d677bf6784414882b21"><td class="mdescLeft"> </td><td class="mdescRight">SIGN functions for complex number. Returns z/abs(z) <a href="#ab05d15baf3424d677bf6784414882b21">More...</a><br/></td></tr>
+<tr class="separator:ab05d15baf3424d677bf6784414882b21"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1e4793bdd705299497404ce177c3dcd"><td class="memItemLeft" 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#ac1e4793bdd705299497404ce177c3dcd">z_sqrt</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:ac1e4793bdd705299497404ce177c3dcd"><td class="mdescLeft"> </td><td class="mdescRight">Square-root of a complex number. <a href="#ac1e4793bdd705299497404ce177c3dcd">More...</a><br/></td></tr>
+<tr class="separator:ac1e4793bdd705299497404ce177c3dcd"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+ – SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Contains definitions for various complex operations.
+This header file is to be included in source files z*.c
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a56454c86f7063929077dff7350bdae71"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DCOMPLEX_INCLUDE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a35daa816dd5911bdb075aba8856f9cf0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define z_add</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ (c)->r = (a)->r + (b)->r; \</div>
+<div class="line"> (c)->i = (a)->i + (b)->i; }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="afe2eaa3195b69824be150f4163f8d056"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define z_eq</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> ( (a)->r == (b)->r && (a)->i == (b)->i )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8d01f55090621b481fcec184a2012ffb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define z_sub</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ (c)->r = (a)->r - (b)->r; \</div>
+<div class="line"> (c)->i = (a)->i - (b)->i; }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="aaa361695d091f77d512454ddbee3b2b3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define zd_mult</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ (c)->r = (a)->r * (b); \</div>
+<div class="line"> (c)->i = (a)->i * (b); }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a8c08104b0130f14f6f40f17bee239e80"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define zz_conj</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ \</div>
+<div class="line"> (a)->r = (b)->r; \</div>
+<div class="line"> (a)->i = -((b)->i); \</div>
+<div class="line"> }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a008009fa4c5e6733f840478ceb0fb8ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define zz_mult</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ \</div>
+<div class="line"> double cr, ci; \</div>
+<div class="line"> cr = (a)->r * (b)->r - (a)->i * (b)->i; \</div>
+<div class="line"> ci = (a)->i * (b)->r + (a)->r * (b)->i; \</div>
+<div class="line"> (c)->r = cr; \</div>
+<div class="line"> (c)->i = ci; \</div>
+<div class="line"> }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a753978ee017e26dbdab16a40cf45b2cb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7a81445c4ec55ec40b6c5f3014887e61"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a56231cc660c4a63d58ec6f02754b7d41"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a366281128462d1635073d7794fda008a"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abfe979e43a797b71939e267913abf791"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a90ddba9274fa6a571dadf228763fee4b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab05d15baf3424d677bf6784414882b21"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__dcomplex_8h_ab05d15baf3424d677bf6784414882b21_cgraph.png" border="0" usemap="#slu__dcomplex_8h_ab05d15baf3424d677bf6784414882b21_cgraph" alt=""/></div>
+<map name="slu__dcomplex_8h_ab05d15baf3424d677bf6784414882b21_cgraph" id="slu__dcomplex_8h_ab05d15baf3424d677bf6784414882b21_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="113,5,170,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ac1e4793bdd705299497404ce177c3dcd"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slu__ddefs_8h.html b/SuperLU_5.2.0/DOC/html/slu__ddefs_8h.html
new file mode 100644
index 0000000..bb9c650
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slu__ddefs_8h.html
@@ -0,0 +1,6233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slu_ddefs.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slu_ddefs.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for real operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include <limits.h></code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <stdint.h></code><br/>
+<code>#include <string.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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slu_ddefs.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h__incl.png" border="0" usemap="#SRC_2slu__ddefs_8h" alt=""/></div>
+<map name="SRC_2slu__ddefs_8h" id="SRC_2slu__ddefs_8h">
+<area shape="rect" id="node8" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,80,628,107"/><area shape="rect" id="node9" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,80,753,107"/><area shape="rect" id="node10" href="slu__util_8h.html" title="Utility header file. " alt="" coords="281,80,355,107"/><area shape="rect" id="node12" href="superlu__enum__consts_8h.html" title="enum constants header file " alt=" [...]
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h__dep__incl.png" border="0" usemap="#SRC_2slu__ddefs_8hdep" alt=""/></div>
+<map name="SRC_2slu__ddefs_8hdep" id="SRC_2slu__ddefs_8hdep">
+<area shape="rect" id="node2" href="dcolumn__bmod_8c.html" title="performs numeric block updates " alt="" coords="5,88,159,115"/><area shape="rect" id="node3" href="dcolumn__dfs_8c.html" title="Performs a symbolic factorization. " alt="" coords="185,88,324,115"/><area shape="rect" id="node4" href="dcopy__to__ucol_8c.html" title="Copy a computed column of U to the compressed data structure. " alt="" coords="349,88,499,115"/><area shape="rect" id="node5" href="ddiagonal_8c.html" title="Aux [...]
+</div>
+</div>
+<p><a href="slu__ddefs_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ab6fd6105e64ed14a0c9281326f05e623"><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a></td></tr>
+<tr class="separator:ab6fd6105e64ed14a0c9281326f05e623"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2c8a0856fb555c352ed0f43989d1d71e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a2c8a0856fb555c352ed0f43989d1d71e">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="structSup [...]
+<tr class="memdesc:a2c8a0856fb555c352ed0f43989d1d71e"><td class="mdescLeft"> </td><td class="mdescRight">Driver routines. <a href="#a2c8a0856fb555c352ed0f43989d1d71e">More...</a><br/></td></tr>
+<tr class="separator:a2c8a0856fb555c352ed0f43989d1d71e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a16b88b28808cca08c651969b7ae7d773"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a16b88b28808cca08c651969b7ae7d773">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< [...]
+<tr class="separator:a16b88b28808cca08c651969b7ae7d773"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a044b42d8bf8016b19c9013e9bee6d6e7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a044b42d8bf8016b19c9013e9bee6d6e7">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="structSu [...]
+<tr class="separator:a044b42d8bf8016b19c9013e9bee6d6e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e01adf6a40c76148c1ca1994bf854b7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a8e01adf6a40c76148c1ca1994bf854b7">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< [...]
+<tr class="separator:a8e01adf6a40c76148c1ca1994bf854b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3a3d0af1360639f21edacae8f93eb828"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a3a3d0af1360639f21edacae8f93eb828">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html [...]
+<tr class="memdesc:a3a3d0af1360639f21edacae8f93eb828"><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related. <a href="#a3a3d0af1360639f21edacae8f93eb828">More...</a><br/></td></tr>
+<tr class="separator:a3a3d0af1360639f21edacae8f93eb828"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0807ebe794e4353779d2947e9df0f485"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a0807ebe794e4353779d2947e9df0f485">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html [...]
+<tr class="separator:a0807ebe794e4353779d2947e9df0f485"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a21c06d544ecb9028142abd70a583dd68"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a21c06d544ecb9028142abd70a583dd68">dCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a21c06d544ecb9028142abd70a583dd68"><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B. <a href="#a21c06d544ecb9028142abd70a583dd68">More...</a><br/></td></tr>
+<tr class="separator:a21c06d544ecb9028142abd70a583dd68"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a08d9d6bf3069c89c0c1207967599c4fc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a08d9d6bf3069c89c0c1207967599c4fc">dCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, double *, int, <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#a7987cb2a28ec87 [...]
+<tr class="separator:a08d9d6bf3069c89c0c1207967599c4fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a649094ccbc54eaed4ca787fd970049f6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a649094ccbc54eaed4ca787fd970049f6">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" hr [...]
+<tr class="separator:a649094ccbc54eaed4ca787fd970049f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9bf038cd2c143a48a14a562ca1f67e27"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a9bf038cd2c143a48a14a562ca1f67e27">dCopy_Dense_Matrix</a> (int, int, double *, int, double *, int)</td></tr>
+<tr class="separator:a9bf038cd2c143a48a14a562ca1f67e27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8086902aa8be3fc7d04c3c82ec3a79dc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a8086902aa8be3fc7d04c3c82ec3a79dc">countnz</a> (const int, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a8086902aa8be3fc7d04c3c82ec3a79dc"><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="#a8086902aa8be3fc7d04c3c82ec3a79dc">More...</a><br/></td></tr>
+<tr class="separator:a8086902aa8be3fc7d04c3c82ec3a79dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae8eb367a0a2fcdf734738bc9630df85"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#aae8eb367a0a2fcdf734738bc9630df85">ilu_countnz</a> (const int, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:aae8eb367a0a2fcdf734738bc9630df85"><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U. <a href="#aae8eb367a0a2fcdf734738bc9630df85">More...</a><br/></td></tr>
+<tr class="separator:aae8eb367a0a2fcdf734738bc9630df85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7061332d759d7e4d73c1b2e5cb0bf2bf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a7061332d759d7e4d73c1b2e5cb0bf2bf">fixupL</a> (const int, const int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a7061332d759d7e4d73c1b2e5cb0bf2bf"><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="#a7061332d759d7e4d73c1b2e5cb0bf2bf">More...</a><br/></td></tr>
+<tr class="separator:a7061332d759d7e4d73c1b2e5cb0bf2bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3a86154bfb6453d6358ef52ab1ecfe2d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a3a86154bfb6453d6358ef52ab1ecfe2d">dallocateA</a> (int, int, double **, int **, int **)</td></tr>
+<tr class="memdesc:a3a86154bfb6453d6358ef52ab1ecfe2d"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A. <a href="#a3a86154bfb6453d6358ef52ab1ecfe2d">More...</a><br/></td></tr>
+<tr class="separator:a3a86154bfb6453d6358ef52ab1ecfe2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a711d15e746198e86cb53270d33ef0e3c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a711d15e746198e86cb53270d33ef0e3c">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> * [...]
+<tr class="separator:a711d15e746198e86cb53270d33ef0e3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab0fe8232652578797bee690fcd8adfd0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ab0fe8232652578797bee690fcd8adfd0">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 class="separator:ab0fe8232652578797bee690fcd8adfd0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a289847afa67421491f96367c7f2fe90f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a289847afa67421491f96367c7f2fe90f">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 class="memdesc:a289847afa67421491f96367c7f2fe90f"><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode. <a href="#a289847afa67421491f96367c7f2fe90f">More...</a><br/></td></tr>
+<tr class="separator:a289847afa67421491f96367c7f2fe90f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aca83bf1fa16a64ea2ee575574a8bb969"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#aca83bf1fa16a64ea2ee575574a8bb969">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 class="separator:aca83bf1fa16a64ea2ee575574a8bb969"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a22cfb6f57857cc7cb3d853ee5467656f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a22cfb6f57857cc7cb3d853ee5467656f">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 class="separator:a22cfb6f57857cc7cb3d853ee5467656f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1414b492a902b8da3c2e1b620b922644"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a1414b492a902b8da3c2e1b620b922644">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 class="separator:a1414b492a902b8da3c2e1b620b922644"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a351174e818ab7d5149ec9dc116b3a242"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a351174e818ab7d5149ec9dc116b3a242">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 class="separator:a351174e818ab7d5149ec9dc116b3a242"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9dfcee23fab091d05a4301e25b3b4227"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a9dfcee23fab091d05a4301e25b3b4227">dcopy_to_ucol</a> (int, int, int *, int *, int *, double *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:a9dfcee23fab091d05a4301e25b3b4227"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a09624f0c44de80ee2731e44a333ee01c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a09624f0c44de80ee2731e44a333ee01c">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 class="separator:a09624f0c44de80ee2731e44a333ee01c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98c8e37fbd3e285de80ae5ebc633c64a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a98c8e37fbd3e285de80ae5ebc633c64a">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 class="separator:a98c8e37fbd3e285de80ae5ebc633c64a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aefc4e420b7fa27a770b4b9db6ba5cfc4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#aefc4e420b7fa27a770b4b9db6ba5cfc4">dreadmt</a> (int *, int *, int *, double **, int **, int **)</td></tr>
+<tr class="separator:aefc4e420b7fa27a770b4b9db6ba5cfc4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aebd8d273c58591dc435e1afd4e837d9f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#aebd8d273c58591dc435e1afd4e837d9f">dGenXtrue</a> (int, int, double *, int)</td></tr>
+<tr class="separator:aebd8d273c58591dc435e1afd4e837d9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aac4705e1c2b9892fd11115ef3cd40bb8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#aac4705e1c2b9892fd11115ef3cd40bb8">dFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, int, double *, int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *) [...]
+<tr class="memdesc:aac4705e1c2b9892fd11115ef3cd40bb8"><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="#aac4705e1c2b9892fd11115ef3cd40bb8">More...</a><br/></td></tr>
+<tr class="separator:aac4705e1c2b9892fd11115ef3cd40bb8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d42744f59d84a50b19aa4c28cf7aded"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a8d42744f59d84a50b19aa4c28cf7aded">dgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a clas [...]
+<tr class="separator:a8d42744f59d84a50b19aa4c28cf7aded"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42cf56e529c477cb0b370c0115767614"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a42cf56e529c477cb0b370c0115767614">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> [...]
+<tr class="separator:a42cf56e529c477cb0b370c0115767614"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad48bb6b5f8ebecb3263b80aa0588b62e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ad48bb6b5f8ebecb3263b80aa0588b62e">dldperm</a> (int, int, int, int[], int[], double[], int[], double[], double[])</td></tr>
+<tr class="separator:ad48bb6b5f8ebecb3263b80aa0588b62e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acd3bf891014254c364adbb0d1b2d1f49"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#acd3bf891014254c364adbb0d1b2d1f49">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 class="separator:acd3bf891014254c364adbb0d1b2d1f49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ebb5502086dbb04d4dd640de81de410"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a5ebb5502086dbb04d4dd640de81de410">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 class="separator:a5ebb5502086dbb04d4dd640de81de410"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b9639419ceb1d7b476f000292022a24"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a4b9639419ceb1d7b476f000292022a24">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 class="separator:a4b9639419ceb1d7b476f000292022a24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7448553ebd9bd2f4dd9d19c2a988ae8e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a7448553ebd9bd2f4dd9d19c2a988ae8e">ilu_dcopy_to_ucol</a> (int, int, int *, int *, int *, double *, int, <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, int, double *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, [...]
+<tr class="separator:a7448553ebd9bd2f4dd9d19c2a988ae8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19d8e83d74fdc411c1f10d76574e4b31"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a19d8e83d74fdc411c1f10d76574e4b31">ilu_dpivotL</a> (const int, const double, int *, int *, int, int *, int *, int *, int *, double, <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</ [...]
+<tr class="separator:a19d8e83d74fdc411c1f10d76574e4b31"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac127b5fda718241500c5a6ee7dae0df5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ac127b5fda718241500c5a6ee7dae0df5">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 class="separator:ac127b5fda718241500c5a6ee7dae0df5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afba0263dae6d5d3a700e9e7a120d6b87"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#afba0263dae6d5d3a700e9e7a120d6b87">dgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, double *, double *, double *, double *, int *)</td></tr>
+<tr class="memdesc:afba0263dae6d5d3a700e9e7a120d6b87"><td class="mdescLeft"> </td><td class="mdescRight">Driver related. <a href="#afba0263dae6d5d3a700e9e7a120d6b87">More...</a><br/></td></tr>
+<tr class="separator:afba0263dae6d5d3a700e9e7a120d6b87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c3a821ed273808f662ddd41be6c6c97"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a7c3a821ed273808f662ddd41be6c6c97">dlaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, double *, double, double, double, char *)</td></tr>
+<tr class="separator:a7c3a821ed273808f662ddd41be6c6c97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1a5e04478d6d6e4f714fee3080f5a065"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a1a5e04478d6d6e4f714fee3080f5a065">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 class="separator:a1a5e04478d6d6e4f714fee3080f5a065"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c1536c187133a8a8ea5d856a222eec5"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a2c1536c187133a8a8ea5d856a222eec5">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 class="separator:a2c1536c187133a8a8ea5d856a222eec5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a424f8b36e210117c4dea0c590e977bb4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a424f8b36e210117c4dea0c590e977bb4">dgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="s [...]
+<tr class="separator:a424f8b36e210117c4dea0c590e977bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af7ab3b2b81d10a67b258956bfc468740"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#af7ab3b2b81d10a67b258956bfc468740">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 class="memdesc:af7ab3b2b81d10a67b258956bfc468740"><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b. <a href="#af7ab3b2b81d10a67b258956bfc468740">More...</a><br/></td></tr>
+<tr class="separator:af7ab3b2b81d10a67b258956bfc468740"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a505f6c005fe6a0cdcbf00512a1e4823a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a505f6c005fe6a0cdcbf00512a1e4823a">sp_dgemv</a> (char *, double, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, int, double, double *, int)</td></tr>
+<tr class="memdesc:a505f6c005fe6a0cdcbf00512a1e4823a"><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="#a505f6c005fe6a0cdcbf00512a1e4823a">More...</a><br/></td></tr>
+<tr class="separator:a505f6c005fe6a0cdcbf00512a1e4823a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab776edfed8eb517dc4d037e76ed2bb24"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ab776edfed8eb517dc4d037e76ed2bb24">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 class="separator:ab776edfed8eb517dc4d037e76ed2bb24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a532ff1aed405ef9b1c54654bcab207b7"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a532ff1aed405ef9b1c54654bcab207b7">dmach</a> (char *)</td></tr>
+<tr class="separator:a532ff1aed405ef9b1c54654bcab207b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa93b6921e772245253231d545072e93c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#aa93b6921e772245253231d545072e93c">dLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">fact_t</a>, void *, int, int, int, int, int, double, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.htm [...]
+<tr class="memdesc:aa93b6921e772245253231d545072e93c"><td class="mdescLeft"> </td><td class="mdescRight">Memory-related. <a href="#aa93b6921e772245253231d545072e93c">More...</a><br/></td></tr>
+<tr class="separator:aa93b6921e772245253231d545072e93c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6248d2471a710335359db300b35c5066"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a6248d2471a710335359db300b35c5066">dSetRWork</a> (int, int, double *, double **, double **)</td></tr>
+<tr class="memdesc:a6248d2471a710335359db300b35c5066"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays. <a href="#a6248d2471a710335359db300b35c5066">More...</a><br/></td></tr>
+<tr class="separator:a6248d2471a710335359db300b35c5066"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae7976837d1936a3150abf5dd62f0c211"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ae7976837d1936a3150abf5dd62f0c211">dLUWorkFree</a> (int *, double *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:ae7976837d1936a3150abf5dd62f0c211"><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines. <a href="#ae7976837d1936a3150abf5dd62f0c211">More...</a><br/></td></tr>
+<tr class="separator:ae7976837d1936a3150abf5dd62f0c211"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cc8cb916b6bf5f2238c374aa7339f4c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a4cc8cb916b6bf5f2238c374aa7339f4c">dLUMemXpand</a> (int, int, <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a>, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a4cc8cb916b6bf5f2238c374aa7339f4c"><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization. <a href="#a4cc8cb916b6bf5f2238c374aa7339f4c">More...</a><br/></td></tr>
+<tr class="separator:a4cc8cb916b6bf5f2238c374aa7339f4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47c4cf79f8c6305147a70de6da2696ac"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a47c4cf79f8c6305147a70de6da2696ac">doubleMalloc</a> (int)</td></tr>
+<tr class="separator:a47c4cf79f8c6305147a70de6da2696ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2b7be732f4d725dd35799d772473625e"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a2b7be732f4d725dd35799d772473625e">doubleCalloc</a> (int)</td></tr>
+<tr class="separator:a2b7be732f4d725dd35799d772473625e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa7bf96909e8e3579499f46a84b28d9df"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#aa7bf96909e8e3579499f46a84b28d9df">dmemory_usage</a> (const int, const int, const int, const int)</td></tr>
+<tr class="separator:aa7bf96909e8e3579499f46a84b28d9df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa28191998cfaddc30d4728535a39d996"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#aa28191998cfaddc30d4728535a39d996">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 class="separator:aa28191998cfaddc30d4728535a39d996"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b3370283f8f5ce4a3fb0207247cc8e2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a7b3370283f8f5ce4a3fb0207247cc8e2">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 class="separator:a7b3370283f8f5ce4a3fb0207247cc8e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:add340abfd86599e85d576ebb8179b129"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#add340abfd86599e85d576ebb8179b129">dreadhb</a> (FILE *, int *, int *, int *, double **, int **, int **)</td></tr>
+<tr class="memdesc:add340abfd86599e85d576ebb8179b129"><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines. <a href="#add340abfd86599e85d576ebb8179b129">More...</a><br/></td></tr>
+<tr class="separator:add340abfd86599e85d576ebb8179b129"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f74181ecc009862e39a3d512c9dc1ae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a6f74181ecc009862e39a3d512c9dc1ae">dreadrb</a> (int *, int *, int *, double **, int **, int **)</td></tr>
+<tr class="separator:a6f74181ecc009862e39a3d512c9dc1ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acd7d7ca64b596f459db7e62897c6130a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#acd7d7ca64b596f459db7e62897c6130a">dreadtriple</a> (int *, int *, int *, double **, int **, int **)</td></tr>
+<tr class="separator:acd7d7ca64b596f459db7e62897c6130a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afab4013ae32ca6413508cefa1e8143d5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#afab4013ae32ca6413508cefa1e8143d5">dCompRow_to_CompCol</a> (int, int, int, double *, int *, int *, double **, int **, int **)</td></tr>
+<tr class="memdesc:afab4013ae32ca6413508cefa1e8143d5"><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage. <a href="#afab4013ae32ca6413508cefa1e8143d5">More...</a><br/></td></tr>
+<tr class="separator:afab4013ae32ca6413508cefa1e8143d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab20cdc6e4aed319a43b967496932b3e0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ab20cdc6e4aed319a43b967496932b3e0">dfill</a> (double *, int, double)</td></tr>
+<tr class="memdesc:ab20cdc6e4aed319a43b967496932b3e0"><td class="mdescLeft"> </td><td class="mdescRight">Fills a double precision array with a given value. <a href="#ab20cdc6e4aed319a43b967496932b3e0">More...</a><br/></td></tr>
+<tr class="separator:ab20cdc6e4aed319a43b967496932b3e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad778c065ce9768d1f971d8a556752f11"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ad778c065ce9768d1f971d8a556752f11">dinf_norm_error</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *)</td></tr>
+<tr class="memdesc:ad778c065ce9768d1f971d8a556752f11"><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector. <a href="#ad778c065ce9768d1f971d8a556752f11">More...</a><br/></td></tr>
+<tr class="separator:ad778c065ce9768d1f971d8a556752f11"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a293d5d2ac72e4e528ee06d634cb6b59a"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a293d5d2ac72e4e528ee06d634cb6b59a">dqselect</a> (int, double *, int)</td></tr>
+<tr class="separator:a293d5d2ac72e4e528ee06d634cb6b59a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4908a093c1b9d8d96e3fbba6c29673c1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a4908a093c1b9d8d96e3fbba6c29673c1">dPrint_CompCol_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a4908a093c1b9d8d96e3fbba6c29673c1"><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging. <a href="#a4908a093c1b9d8d96e3fbba6c29673c1">More...</a><br/></td></tr>
+<tr class="separator:a4908a093c1b9d8d96e3fbba6c29673c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad6acd040a093d5858b9b77d347be954c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ad6acd040a093d5858b9b77d347be954c">dPrint_SuperNode_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:ad6acd040a093d5858b9b77d347be954c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad440b7616886349fe2cde5ac490b0f7d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ad440b7616886349fe2cde5ac490b0f7d">dPrint_Dense_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:ad440b7616886349fe2cde5ac490b0f7d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a61c31548694df9784dc2612febfedc00"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a61c31548694df9784dc2612febfedc00">dprint_lu_col</a> (char *, int, int, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a61c31548694df9784dc2612febfedc00"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor. <a href="#a61c31548694df9784dc2612febfedc00">More...</a><br/></td></tr>
+<tr class="separator:a61c31548694df9784dc2612febfedc00"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad0c06e9adc1e29a0ab2e78c38119bb4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#aad0c06e9adc1e29a0ab2e78c38119bb4">print_double_vec</a> (char *, int, double *)</td></tr>
+<tr class="separator:aad0c06e9adc1e29a0ab2e78c38119bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad0b7b40545835903f0fef98e4c380883"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ad0b7b40545835903f0fef98e4c380883">dcheck_tempv</a> (int, double *)</td></tr>
+<tr class="memdesc:ad0b7b40545835903f0fef98e4c380883"><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="#ad0b7b40545835903f0fef98e4c380883">More...</a><br/></td></tr>
+<tr class="separator:ad0b7b40545835903f0fef98e4c380883"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc7c47067de037060e4c4227ee6aaa48"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#acc7c47067de037060e4c4227ee6aaa48">dgemm_</a> (const char *, const char *, const int *, const int *, const int *, const double *, const double *, const int *, const double *, const int *, const double *, double *, const int *)</td></tr>
+<tr class="memdesc:acc7c47067de037060e4c4227ee6aaa48"><td class="mdescLeft"> </td><td class="mdescRight">BLAS. <a href="#acc7c47067de037060e4c4227ee6aaa48">More...</a><br/></td></tr>
+<tr class="separator:acc7c47067de037060e4c4227ee6aaa48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8bf1e89ca04a7d8384577eb9842e9ffa"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a8bf1e89ca04a7d8384577eb9842e9ffa">dtrsv_</a> (char *, char *, char *, int *, double *, int *, double *, int *)</td></tr>
+<tr class="separator:a8bf1e89ca04a7d8384577eb9842e9ffa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98496794e14272b95cd4ba4c09c526d2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#a98496794e14272b95cd4ba4c09c526d2">dtrsm_</a> (char *, char *, char *, char *, int *, int *, double *, double *, int *, double *, int *)</td></tr>
+<tr class="separator:a98496794e14272b95cd4ba4c09c526d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab9959831d583511b25c4de2ebb2448e2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__ddefs_8h.html#ab9959831d583511b25c4de2ebb2448e2">dgemv_</a> (char *, int *, int *, double *, double *a, int *, double *, int *, double *, double *, int *)</td></tr>
+<tr class="separator:ab9959831d583511b25c4de2ebb2448e2"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November, 2010</pre><pre>Global data structures used in LU factorization -</pre><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><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><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><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><pre> The last column structures (for pruning) will be removed
+ after the numercial LU factorization phase.</pre><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><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> </div><h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ab6fd6105e64ed14a0c9281326f05e623"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8086902aa8be3fc7d04c3c82ec3a79dc"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3a86154bfb6453d6358ef52ab1ecfe2d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a3a86154bfb6453d6358ef52ab1ecfe2d_cgraph.png" border="0" usemap="#slu__ddefs_8h_a3a86154bfb6453d6358ef52ab1ecfe2d_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a3a86154bfb6453d6358ef52ab1ecfe2d_cgraph" id="slu__ddefs_8h_a3a86154bfb6453d6358ef52ab1ecfe2d_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="136,5,235,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="148,56,223,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad0b7b40545835903f0fef98e4c380883"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a351174e818ab7d5149ec9dc116b3a242"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose:
+</h1>
+</pre><pre>
+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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a351174e818ab7d5149ec9dc116b3a242_cgraph.png" border="0" usemap="#slu__ddefs_8h_a351174e818ab7d5149ec9dc116b3a242_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a351174e818ab7d5149ec9dc116b3a242_cgraph" id="slu__ddefs_8h_a351174e818ab7d5149ec9dc116b3a242_cgraph">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html#a8bf1e89ca04a7d8384577eb9842e9ffa" title="dtrsv_" alt="" coords="192,5,251,32"/><area shape="rect" id="node3" href="slu__ddefs_8h.html#ab9959831d583511b25c4de2ebb2448e2" title="dgemv_" alt="" coords="187,56,255,83"/><area shape="rect" id="node4" href="dcolumn__bmod_8c.html#a56d27043eac0282b0d0e4106acedb083" title="Solves a dense UNIT lower triangular system. " alt="" coords="190,107,253,133"/><area shape="rect" id="node5" href="dcolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a1414b492a902b8da3c2e1b620b922644"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ DCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a1414b492a902b8da3c2e1b620b922644_cgraph.png" border="0" usemap="#slu__ddefs_8h_a1414b492a902b8da3c2e1b620b922644_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a1414b492a902b8da3c2e1b620b922644_cgraph" id="slu__ddefs_8h_a1414b492a902b8da3c2e1b620b922644_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="172,31,239,57"/><area shape="rect" id="node4" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="149,81,261,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="328,31,411,57"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afab4013ae32ca6413508cefa1e8143d5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_afab4013ae32ca6413508cefa1e8143d5_cgraph.png" border="0" usemap="#slu__ddefs_8h_afab4013ae32ca6413508cefa1e8143d5_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_afab4013ae32ca6413508cefa1e8143d5_cgraph" id="slu__ddefs_8h_afab4013ae32ca6413508cefa1e8143d5_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="224,5,323,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="236,56,311,83"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="237,107,310,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a21c06d544ecb9028142abd70a583dd68"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9bf038cd2c143a48a14a562ca1f67e27"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Copies a two-dimensional matrix X to another matrix Y.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9dfcee23fab091d05a4301e25b3b4227"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a9dfcee23fab091d05a4301e25b3b4227_cgraph.png" border="0" usemap="#slu__ddefs_8h_a9dfcee23fab091d05a4301e25b3b4227_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a9dfcee23fab091d05a4301e25b3b4227_cgraph" id="slu__ddefs_8h_a9dfcee23fab091d05a4301e25b3b4227_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="160,107,272,133"/><area shape="rect" id="node3" href="dmemory_8c.html#afe3104df9ace895f5332843534ae99b4" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="345,81,415,108"/><area shape="rect" id="node8" href="dmemory_8c.html#a5c9b1e24d07635068c014999d44672aa" title="dmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a3a3d0af1360639f21edacae8f93eb828"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0807ebe794e4353779d2947e9df0f485"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a08d9d6bf3069c89c0c1207967599c4fc"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a649094ccbc54eaed4ca787fd970049f6"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab20cdc6e4aed319a43b967496932b3e0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aac4705e1c2b9892fd11115ef3cd40bb8"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_aac4705e1c2b9892fd11115ef3cd40bb8_cgraph.png" border="0" usemap="#slu__ddefs_8h_aac4705e1c2b9892fd11115ef3cd40bb8_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_aac4705e1c2b9892fd11115ef3cd40bb8_cgraph" id="slu__ddefs_8h_aac4705e1c2b9892fd11115ef3cd40bb8_cgraph">
+<area shape="rect" id="node2" href="dsp__blas3_8c.html#a6c8c4772ca0f241a43c5561b646fb749" title="sp_dgemm" alt="" coords="129,5,215,32"/><area shape="rect" id="node3" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="264,5,347,32"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acc7c47067de037060e4c4227ee6aaa48"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dgemm_ </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </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">const int * </td>
+ <td class="paramname">, </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">const double * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const double * </td>
+ <td class="paramname">, </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">const double * </td>
+ <td class="paramname">, </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">const 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">const int * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab9959831d583511b25c4de2ebb2448e2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dgemv_ </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">double * </td>
+ <td class="paramname">, </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">, </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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aebd8d273c58591dc435e1afd4e837d9f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1a5e04478d6d6e4f714fee3080f5a065"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><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><pre> RCOND (output) double*
+ The reciprocal of the condition number of the matrix A,
+ computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><pre> INFO (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a1a5e04478d6d6e4f714fee3080f5a065_cgraph.png" border="0" usemap="#slu__ddefs_8h_a1a5e04478d6d6e4f714fee3080f5a065_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a1a5e04478d6d6e4f714fee3080f5a065_cgraph" id="slu__ddefs_8h_a1a5e04478d6d6e4f714fee3080f5a065_cgraph">
+<area shape="rect" id="node2" href="dlacon2_8c.html#a2c302d4fb016bb92527dcd1e360198c3" title="dlacon2_" alt="" coords="117,107,192,133"/><area shape="rect" id="node6" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="248,157,331,184"/><area shape="rect" id="node7" href="dmemory_8c.html#ac8b6d99155644578a5e5542c32040cfe" title="doubleCalloc" alt="" coords="241,208,338,235"/><area shape="rect" id="node8" href="memory_8c.html#a49bbe20102e5b541c [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afba0263dae6d5d3a700e9e7a120d6b87"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (output) double*, size A->nrow
+ If INFO = 0 or INFO > M, R contains the row scale factors
+ for A.</pre><pre> C (output) double*, size A->ncol
+ If INFO = 0, C contains the column scale factors for A.</pre><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><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><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><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
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_afba0263dae6d5d3a700e9e7a120d6b87_cgraph.png" border="0" usemap="#slu__ddefs_8h_afba0263dae6d5d3a700e9e7a120d6b87_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_afba0263dae6d5d3a700e9e7a120d6b87_cgraph" id="slu__ddefs_8h_afba0263dae6d5d3a700e9e7a120d6b87_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="128,5,189,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="117,56,200,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a044b42d8bf8016b19c9013e9bee6d6e7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8e01adf6a40c76148c1ca1994bf854b7"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#ac36e874ce15790ca0b059fab7eed0466">dgsitrf()</a>.
+An estimation of the condition number is provided.
+The routine performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><pre> 1.7. options->IterRefine is not used</pre><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * sum(dropped entries);
+ = SMILU_3:
+ U(i,i) := U(i,i) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * 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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><pre> 2.7. If options->IterRefine is not used.</pre><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a8e01adf6a40c76148c1ca1994bf854b7_cgraph.png" border="0" usemap="#slu__ddefs_8h_a8e01adf6a40c76148c1ca1994bf854b7_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a8e01adf6a40c76148c1ca1994bf854b7_cgraph" id="slu__ddefs_8h_a8e01adf6a40c76148c1ca1994bf854b7_cgraph">
+<area shape="rect" id="node2" href="dlangs_8c.html#a75a53f4464b95c63adad9e1f63f44d1c" title="dlangs" alt="" coords="182,5,242,32"/><area shape="rect" id="node3" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="604,157,665,184"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="739,613,821,640"/><area shape="rect" id="node5" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a42cf56e529c477cb0b370c0115767614"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the ILU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">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#a380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a42cf56e529c477cb0b370c0115767614_cgraph.png" border="0" usemap="#slu__ddefs_8h_a42cf56e529c477cb0b370c0115767614_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a42cf56e529c477cb0b370c0115767614_cgraph" id="slu__ddefs_8h_a42cf56e529c477cb0b370c0115767614_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#ae2ca2ac5e9a763fd3f07487343e4522e" title="Allocate storage for the data structures common to all factor routines. " alt="" coords="157,309,251,336"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="363,56,437,83"/><area shape="rect" id="node10" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="531,867,597,893"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a424f8b36e210117c4dea0c590e977bb4"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> DGSRFS improves the computed solution to a system of linear
+ equations and provides error bounds and backward error estimates for
+ the solution.</pre><pre> If equilibration was performed, the system becomes:
+ (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use column-wise storage scheme,
+ i.e., U has types: Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><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><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><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><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><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><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><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#a6e3eace519372b7dfcd053e0d3614fc1">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><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><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><pre> stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre> info (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value</pre><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><pre> ITMAX is the maximum number of steps of iterative refinement.</pre><pre></pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a424f8b36e210117c4dea0c590e977bb4_cgraph.png" border="0" usemap="#slu__ddefs_8h_a424f8b36e210117c4dea0c590e977bb4_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a424f8b36e210117c4dea0c590e977bb4_cgraph" id="slu__ddefs_8h_a424f8b36e210117c4dea0c590e977bb4_cgraph">
+<area shape="rect" id="node2" href="dlacon2_8c.html#a2c302d4fb016bb92527dcd1e360198c3" title="dlacon2_" alt="" coords="116,56,191,83"/><area shape="rect" id="node5" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="260,107,324,133"/><area shape="rect" id="node6" href="ilu__ddrop__row_8c.html#a5112358cf2de43341aaff9fba0066afc" title="daxpy_" alt="" coords="121,157,185,184"/><area shape="rect" id="node7" href="input__error_8c.html#a5832852b [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a2c8a0856fb555c352ed0f43989d1d71e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>DGSSV solves the system of linear equations A*X=B, using the
+LU factorization from DGSTRF. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><pre> 1.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ above algorithm to the transpose of A:</pre><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><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><pre> 2.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> If options->RowPerm = MY_PERMR or
+ options->Fact = SamePattern_SameRowPerm, perm_r is an
+ input argument.
+ otherwise it is an output argument.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a2c8a0856fb555c352ed0f43989d1d71e_cgraph.png" border="0" usemap="#slu__ddefs_8h_a2c8a0856fb555c352ed0f43989d1d71e_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a2c8a0856fb555c352ed0f43989d1d71e_cgraph" id="slu__ddefs_8h_a2c8a0856fb555c352ed0f43989d1d71e_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="747,1779,829,1805"/><area shape="rect" id="node3" href="dutil_8c.html#a4a177c54dafbe3640c26caa49eeee1de" title="Supernodal LU factor related. " alt="" coords="360,563,533,589"/><area shape="rect" id="node4" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="389,5,505,32"/><area shape="rect" id="node5" href="get__per [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a16b88b28808cca08c651969b7ae7d773"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Error bounds on the solution and
+a condition estimate are also provided. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><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><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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a16b88b28808cca08c651969b7ae7d773_cgraph.png" border="0" usemap="#slu__ddefs_8h_a16b88b28808cca08c651969b7ae7d773_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a16b88b28808cca08c651969b7ae7d773_cgraph" id="slu__ddefs_8h_a16b88b28808cca08c651969b7ae7d773_cgraph">
+<area shape="rect" id="node2" href="dlangs_8c.html#a75a53f4464b95c63adad9e1f63f44d1c" title="dlangs" alt="" coords="185,5,245,32"/><area shape="rect" id="node3" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="416,107,477,133"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="741,284,824,311"/><area shape="rect" id="node5" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a711d15e746198e86cb53270d33ef0e3c"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the LU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__ddefs_8h.html" title="Header file for real operations. ">slu_ddefs.h</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a711d15e746198e86cb53270d33ef0e3c_cgraph.png" border="0" usemap="#slu__ddefs_8h_a711d15e746198e86cb53270d33ef0e3c_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a711d15e746198e86cb53270d33ef0e3c_cgraph" id="slu__ddefs_8h_a711d15e746198e86cb53270d33ef0e3c_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="528,917,595,944"/><area shape="rect" id="node4" href="dmemory_8c.html#ae2ca2ac5e9a763fd3f07487343e4522e" title="Allocate storage for the data structures common to all factor routines. " alt="" coords="155,157,248,184"/><area shape="rect" id="node6" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="360,208,435,235"/><area shape="rec [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a8d42744f59d84a50b19aa4c28cf7aded"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_D, Mtype = SLU_TRLU.</pre><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#a2dcd838f80168641f20fd576b4a51b25">dgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_D, Mtype = SLU_TRU.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre>info (output) int*
+ = 0: successful exit
+ < 0: if info = -i, the i-th argument had an illegal value
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a8d42744f59d84a50b19aa4c28cf7aded_cgraph.png" border="0" usemap="#slu__ddefs_8h_a8d42744f59d84a50b19aa4c28cf7aded_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a8d42744f59d84a50b19aa4c28cf7aded_cgraph" id="slu__ddefs_8h_a8d42744f59d84a50b19aa4c28cf7aded_cgraph">
+<area shape="rect" id="node2" href="dgstrs_8c.html#a1532445fd4c7e1e91d5bd11dbf78364f" title="dprint_soln" alt="" coords="119,5,204,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="267,56,349,83"/><area shape="rect" id="node4" href="dmemory_8c.html#ac8b6d99155644578a5e5542c32040cfe" title="doubleCalloc" alt="" coords="259,107,357,133"/><area shape="rect" id="node5" href="dmemory_8c.html#a8f2b9305cb611c37e7f [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad778c065ce9768d1f971d8a556752f11"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7c3a821ed273808f662ddd41be6c6c97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> DLAQGS equilibrates a general sparse M by N matrix A using the row and
+ scaling factors in the vectors R and C.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (input) double*, dimension (A->nrow)
+ The row scale factors for A.</pre><pre> C (input) double*, dimension (A->ncol)
+ The column scale factors for A.</pre><pre> ROWCND (input) double
+ Ratio of the smallest R(i) to the largest R(i).</pre><pre> COLCND (input) double
+ Ratio of the smallest C(i) to the largest C(i).</pre><pre> AMAX (input) double
+ Absolute value of largest matrix entry.</pre><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><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a7c3a821ed273808f662ddd41be6c6c97_cgraph.png" border="0" usemap="#slu__ddefs_8h_a7c3a821ed273808f662ddd41be6c6c97_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a7c3a821ed273808f662ddd41be6c6c97_cgraph" id="slu__ddefs_8h_a7c3a821ed273808f662ddd41be6c6c97_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="115,5,176,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad48bb6b5f8ebecb3263b80aa0588b62e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa93b6921e772245253231d545072e93c"></a>
+<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#ac785c8235480e5cfef9848d89c047c0a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_aa93b6921e772245253231d545072e93c_cgraph.png" border="0" usemap="#slu__ddefs_8h_aa93b6921e772245253231d545072e93c_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_aa93b6921e772245253231d545072e93c_cgraph" id="slu__ddefs_8h_aa93b6921e772245253231d545072e93c_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#acb29e96116d7b170d6f021a87a4763e6" title="Setup the memory model to be used for factorization. " alt="" coords="157,5,257,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="169,56,244,83"/><area shape="rect" id="node4" href="dmemory_8c.html#a00f228f45bab7594bea821b70eedbf51" title="duser_malloc" alt="" coords="331,183,429,209"/><area shape="rect" id="node5" href="d [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4cc8cb916b6bf5f2238c374aa7339f4c"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+Return value: 0 - successful return
+ > 0 - number of bytes allocated when run out of space
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a4cc8cb916b6bf5f2238c374aa7339f4c_cgraph.png" border="0" usemap="#slu__ddefs_8h_a4cc8cb916b6bf5f2238c374aa7339f4c_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a4cc8cb916b6bf5f2238c374aa7339f4c_cgraph" id="slu__ddefs_8h_a4cc8cb916b6bf5f2238c374aa7339f4c_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#afe3104df9ace895f5332843534ae99b4" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="190,81,261,108"/><area shape="rect" id="node7" href="dmemory_8c.html#a5c9b1e24d07635068c014999d44672aa" title="dmemory_usage" alt="" coords="166,132,285,159"/><area shape="rect" id="node3" href="dmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="345,5,452,32"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ae7976837d1936a3150abf5dd62f0c211"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a532ff1aed405ef9b1c54654bcab207b7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double dmach </td>
+ <td>(</td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa7bf96909e8e3579499f46a84b28d9df"></a>
+<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">, </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">const int </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2b7be732f4d725dd35799d772473625e"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a47c4cf79f8c6305147a70de6da2696ac"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a22cfb6f57857cc7cb3d853ee5467656f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre> Before entering this routine, the original nonzeros in the panel
+ were already copied into the spa[m,w].</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a22cfb6f57857cc7cb3d853ee5467656f_cgraph.png" border="0" usemap="#slu__ddefs_8h_a22cfb6f57857cc7cb3d853ee5467656f_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a22cfb6f57857cc7cb3d853ee5467656f_cgraph" id="slu__ddefs_8h_a22cfb6f57857cc7cb3d853ee5467656f_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node4" href="slu__ddefs_8h.html#a8bf1e89ca04a7d8384577eb9842e9ffa" title="dtrsv_" alt="" coords="159,56,217,83"/><area shape="rect" id="node5" href="dpanel__bmod_8c.html#a56d27043eac0282b0d0e4106acedb083" title="Solves a dense UNIT lower triangular system. " alt="" coords="157,107,219,133"/><area shape="rect" id="node6" href="slu__d [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aca83bf1fa16a64ea2ee575574a8bb969"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<a class="anchor" id="a2c1536c187133a8a8ea5d856a222eec5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>Compute the reciprocal pivot growth factor of the leading ncols columns
+of the matrix, using the formula:
+ min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>ncols (input) int
+ The number of columns of matrices A, L and U.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a2c1536c187133a8a8ea5d856a222eec5_cgraph.png" border="0" usemap="#slu__ddefs_8h_a2c1536c187133a8a8ea5d856a222eec5_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a2c1536c187133a8a8ea5d856a222eec5_cgraph" id="slu__ddefs_8h_a2c1536c187133a8a8ea5d856a222eec5_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="155,5,216,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a09624f0c44de80ee2731e44a333ee01c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+</div>
+</div>
+<a class="anchor" id="a4908a093c1b9d8d96e3fbba6c29673c1"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad440b7616886349fe2cde5ac490b0f7d"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a61c31548694df9784dc2612febfedc00"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad6acd040a093d5858b9b77d347be954c"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a98c8e37fbd3e285de80ae5ebc633c64a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Prunes the L-structure of supernodes whose L-structure
+ contains the current pivot row "pivrow"
+</pre>
+</div>
+</div>
+<a class="anchor" id="a293d5d2ac72e4e528ee06d634cb6b59a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa28191998cfaddc30d4728535a39d996"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_aa28191998cfaddc30d4728535a39d996_cgraph.png" border="0" usemap="#slu__ddefs_8h_aa28191998cfaddc30d4728535a39d996_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_aa28191998cfaddc30d4728535a39d996_cgraph" id="slu__ddefs_8h_aa28191998cfaddc30d4728535a39d996_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="269,5,352,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="add340abfd86599e85d576ebb8179b129"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dreadhb </td>
+ <td>(</td>
+ <td class="paramtype">FILE * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_add340abfd86599e85d576ebb8179b129_cgraph.png" border="0" usemap="#slu__ddefs_8h_add340abfd86599e85d576ebb8179b129_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_add340abfd86599e85d576ebb8179b129_cgraph" id="slu__ddefs_8h_add340abfd86599e85d576ebb8179b129_cgraph">
+<area shape="rect" id="node2" href="dreadhb_8c.html#ab87732418a8ca2e99d65165ea7f9a2c5" title="Eat up the rest of the current line. " alt="" coords="145,5,233,32"/><area shape="rect" id="node3" href="dmemory_8c.html#aeed250713fbfb3fac567d7a503774ccc" title="Allocate storage for original matrix A. " alt="" coords="148,56,231,83"/><area shape="rect" id="node6" href="dreadhb_8c.html#a84a11fcb3558dba9f846610da6fbec2c" title="dParseIntFormat" alt="" coords="130,107,249,133"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aefc4e420b7fa27a770b4b9db6ba5cfc4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6f74181ecc009862e39a3d512c9dc1ae"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a6f74181ecc009862e39a3d512c9dc1ae_cgraph.png" border="0" usemap="#slu__ddefs_8h_a6f74181ecc009862e39a3d512c9dc1ae_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a6f74181ecc009862e39a3d512c9dc1ae_cgraph" id="slu__ddefs_8h_a6f74181ecc009862e39a3d512c9dc1ae_cgraph">
+<area shape="rect" id="node2" href="dreadrb_8c.html#af815bcc4cd6c6b297588886829ce6cb2" title="Eat up the rest of the current line. " alt="" coords="143,5,231,32"/><area shape="rect" id="node3" href="dmemory_8c.html#aeed250713fbfb3fac567d7a503774ccc" title="Allocate storage for original matrix A. " alt="" coords="145,56,228,83"/><area shape="rect" id="node6" href="dreadrb_8c.html#ae766b0ec3051c146313ff37802decbb7" title="dParseIntFormat" alt="" coords="127,107,246,133"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acd7d7ca64b596f459db7e62897c6130a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_acd7d7ca64b596f459db7e62897c6130a_cgraph.png" border="0" usemap="#slu__ddefs_8h_acd7d7ca64b596f459db7e62897c6130a_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_acd7d7ca64b596f459db7e62897c6130a_cgraph" id="slu__ddefs_8h_acd7d7ca64b596f459db7e62897c6130a_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#aeed250713fbfb3fac567d7a503774ccc" title="Allocate storage for original matrix A. " alt="" coords="136,31,219,57"/><area shape="rect" id="node3" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="267,5,365,32"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="279,56,353,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a6248d2471a710335359db300b35c5066"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a6248d2471a710335359db300b35c5066_cgraph.png" border="0" usemap="#slu__ddefs_8h_a6248d2471a710335359db300b35c5066_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a6248d2471a710335359db300b35c5066_cgraph" id="slu__ddefs_8h_a6248d2471a710335359db300b35c5066_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="144,5,211,32"/><area shape="rect" id="node4" href="dutil_8c.html#a5594dfec40e37514e00e85a90e8973b5" title="Fills a double precision array with a given value. " alt="" coords="156,56,199,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="259,5,341,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a289847afa67421491f96367c7f2fe90f"></a>
+<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">, </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">const 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"><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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a289847afa67421491f96367c7f2fe90f_cgraph.png" border="0" usemap="#slu__ddefs_8h_a289847afa67421491f96367c7f2fe90f_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a289847afa67421491f96367c7f2fe90f_cgraph" id="slu__ddefs_8h_a289847afa67421491f96367c7f2fe90f_cgraph">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html#a8bf1e89ca04a7d8384577eb9842e9ffa" title="dtrsv_" alt="" coords="164,5,223,32"/><area shape="rect" id="node3" href="slu__ddefs_8h.html#ab9959831d583511b25c4de2ebb2448e2" title="dgemv_" alt="" coords="159,56,227,83"/><area shape="rect" id="node4" href="dcolumn__bmod_8c.html#a56d27043eac0282b0d0e4106acedb083" title="Solves a dense UNIT lower triangular system. " alt="" coords="162,107,225,133"/><area shape="rect" id="node5" href="dcolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab0fe8232652578797bee690fcd8adfd0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="dsnode__dfs_8c.html#a80b831678c233741661d8386d8736da1">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_ab0fe8232652578797bee690fcd8adfd0_cgraph.png" border="0" usemap="#slu__ddefs_8h_ab0fe8232652578797bee690fcd8adfd0_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_ab0fe8232652578797bee690fcd8adfd0_cgraph" id="slu__ddefs_8h_ab0fe8232652578797bee690fcd8adfd0_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="144,107,256,133"/><area shape="rect" id="node3" href="dmemory_8c.html#afe3104df9ace895f5332843534ae99b4" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="329,81,399,108"/><area shape="rect" id="node8" href="dmemory_8c.html#a5c9b1e24d07635068c014999d44672aa" title="dmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a98496794e14272b95cd4ba4c09c526d2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dtrsm_ </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">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>
+ </tr>
+ <tr>
+ <td class="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">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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8bf1e89ca04a7d8384577eb9842e9ffa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dtrsv_ </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">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>
+ </tr>
+ <tr>
+ <td class="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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7061332d759d7e4d73c1b2e5cb0bf2bf"></a>
+<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">, </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aae8eb367a0a2fcdf734738bc9630df85"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4b9639419ceb1d7b476f000292022a24"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ILU_DCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a4b9639419ceb1d7b476f000292022a24_cgraph.png" border="0" usemap="#slu__ddefs_8h_a4b9639419ceb1d7b476f000292022a24_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a4b9639419ceb1d7b476f000292022a24_cgraph" id="slu__ddefs_8h_a4b9639419ceb1d7b476f000292022a24_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="193,31,260,57"/><area shape="rect" id="node4" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="171,81,283,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="349,31,432,57"/><area shape="rect" i [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7448553ebd9bd2f4dd9d19c2a988ae8e"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a7448553ebd9bd2f4dd9d19c2a988ae8e_cgraph.png" border="0" usemap="#slu__ddefs_8h_a7448553ebd9bd2f4dd9d19c2a988ae8e_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a7448553ebd9bd2f4dd9d19c2a988ae8e_cgraph" id="slu__ddefs_8h_a7448553ebd9bd2f4dd9d19c2a988ae8e_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="207,56,268,83"/><area shape="rect" id="node3" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="181,107,293,133"/><area shape="rect" id="node10" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="205,157,269,184"/><area shape="rect" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ac127b5fda718241500c5a6ee7dae0df5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5ebb5502086dbb04d4dd640de81de410"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<a class="anchor" id="a19d8e83d74fdc411c1f10d76574e4b31"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+</div>
+</div>
+<a class="anchor" id="a7b3370283f8f5ce4a3fb0207247cc8e2"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a7b3370283f8f5ce4a3fb0207247cc8e2_cgraph.png" border="0" usemap="#slu__ddefs_8h_a7b3370283f8f5ce4a3fb0207247cc8e2_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a7b3370283f8f5ce4a3fb0207247cc8e2_cgraph" id="slu__ddefs_8h_a7b3370283f8f5ce4a3fb0207247cc8e2_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="176,5,243,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="291,5,373,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acd3bf891014254c364adbb0d1b2d1f49"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__dsnode__dfs_8c.html#a66dbc4626e59d14b4d3458c4eb841829">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_acd3bf891014254c364adbb0d1b2d1f49_cgraph.png" border="0" usemap="#slu__ddefs_8h_acd3bf891014254c364adbb0d1b2d1f49_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_acd3bf891014254c364adbb0d1b2d1f49_cgraph" id="slu__ddefs_8h_acd3bf891014254c364adbb0d1b2d1f49_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a9aff5dfe301496ef7c9234789975c043" title="Expand the data structures for L and U during the factorization. " alt="" coords="163,107,275,133"/><area shape="rect" id="node3" href="dmemory_8c.html#afe3104df9ace895f5332843534ae99b4" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="347,81,418,108"/><area shape="rect" id="node8" href="dmemory_8c.html#a5c9b1e24d07635068c014999d44672aa" title="dmemory_usage" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aad0c06e9adc1e29a0ab2e78c38119bb4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab776edfed8eb517dc4d037e76ed2bb24"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> sp_d performs one of the matrix-matrix operations</pre><pre> C := alpha*op( A )*op( B ) + beta*C,</pre><pre> where op( X ) is one of</pre><pre> op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ),</pre><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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> ALPHA - (input) double
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><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 max( 1, n ).
+ Unchanged on exit.</pre><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><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><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 max(1,m).
+ Unchanged on exit.</pre><pre> ==== Sparse Level 3 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_ab776edfed8eb517dc4d037e76ed2bb24_cgraph.png" border="0" usemap="#slu__ddefs_8h_ab776edfed8eb517dc4d037e76ed2bb24_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_ab776edfed8eb517dc4d037e76ed2bb24_cgraph" id="slu__ddefs_8h_ab776edfed8eb517dc4d037e76ed2bb24_cgraph">
+<area shape="rect" id="node2" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="141,5,224,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,5,355,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a505f6c005fe6a0cdcbf00512a1e4823a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="dsp__blas2_8c.html#a221dfb4c5cbc550095a989c61fec4993" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y...">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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><pre> ALPHA - (input) double
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><pre> INCX - (input) int
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.</pre><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><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><pre> INCY - (input) int
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.</pre><pre> ==== Sparse Level 2 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_a505f6c005fe6a0cdcbf00512a1e4823a_cgraph.png" border="0" usemap="#slu__ddefs_8h_a505f6c005fe6a0cdcbf00512a1e4823a_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_a505f6c005fe6a0cdcbf00512a1e4823a_cgraph" id="slu__ddefs_8h_a505f6c005fe6a0cdcbf00512a1e4823a_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="136,5,219,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="af7ab3b2b81d10a67b258956bfc468740"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="dsp__blas2_8c.html#aaa92ff654356fe62f70ebef5815627e4" 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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><pre> info - (output) int*
+ If *info = -i, the i-th argument had an illegal value.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__ddefs_8h_af7ab3b2b81d10a67b258956bfc468740_cgraph.png" border="0" usemap="#slu__ddefs_8h_af7ab3b2b81d10a67b258956bfc468740_cgraph" alt=""/></div>
+<map name="slu__ddefs_8h_af7ab3b2b81d10a67b258956bfc468740_cgraph" id="slu__ddefs_8h_af7ab3b2b81d10a67b258956bfc468740_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="133,5,216,32"/><area shape="rect" id="node3" href="dmemory_8c.html#ac8b6d99155644578a5e5542c32040cfe" title="doubleCalloc" alt="" coords="126,56,223,83"/><area shape="rect" id="node4" href="slu__ddefs_8h.html#a8bf1e89ca04a7d8384577eb9842e9ffa" title="dtrsv_" alt="" coords="145,107,204,133"/><area shape="rect" id="node5" href="slu__ddefs_8h.html#ab9959831d583511b2 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slu__scomplex_8h.html b/SuperLU_5.2.0/DOC/html/slu__scomplex_8h.html
new file mode 100644
index 0000000..c78123e
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slu__scomplex_8h.html
@@ -0,0 +1,526 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slu_scomplex.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slu_scomplex.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for complex operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__scomplex_8h__dep__incl.png" border="0" usemap="#SRC_2slu__scomplex_8hdep" alt=""/></div>
+<map name="SRC_2slu__scomplex_8hdep" id="SRC_2slu__scomplex_8hdep">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="2905,80,3028,107"/><area shape="rect" id="node45" href="clacon_8c.html" title="Estimates the 1-norm. " alt="" coords="3052,80,3156,107"/><area shape="rect" id="node46" href="clacon2_8c.html" title="Estimates the 1-norm. " alt="" coords="3181,80,3291,107"/><area shape="rect" id="node47" href="cmyblas2_8c.html" title="Level 2 Blas operations. " alt="" coords="3316,80,343 [...]
+</div>
+</div>
+<p><a href="slu__scomplex_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structcomplex.html">complex</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a027d022bc2d5898eff31703adb19239c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a027d022bc2d5898eff31703adb19239c">SCOMPLEX_INCLUDE</a></td></tr>
+<tr class="separator:a027d022bc2d5898eff31703adb19239c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3df9377099fd2cba886d217734ce884"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#af3df9377099fd2cba886d217734ce884">c_add</a>(c, a, b)</td></tr>
+<tr class="memdesc:af3df9377099fd2cba886d217734ce884"><td class="mdescLeft"> </td><td class="mdescRight">Complex Addition c = a + b. <a href="#af3df9377099fd2cba886d217734ce884">More...</a><br/></td></tr>
+<tr class="separator:af3df9377099fd2cba886d217734ce884"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0fe6bb9dac5f735dd69a127519a9c841"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a0fe6bb9dac5f735dd69a127519a9c841">c_sub</a>(c, a, b)</td></tr>
+<tr class="memdesc:a0fe6bb9dac5f735dd69a127519a9c841"><td class="mdescLeft"> </td><td class="mdescRight">Complex Subtraction c = a - b. <a href="#a0fe6bb9dac5f735dd69a127519a9c841">More...</a><br/></td></tr>
+<tr class="separator:a0fe6bb9dac5f735dd69a127519a9c841"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa675d825b907fe4d939ddc2533b38bb8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#aa675d825b907fe4d939ddc2533b38bb8">cs_mult</a>(c, a, b)</td></tr>
+<tr class="memdesc:aa675d825b907fe4d939ddc2533b38bb8"><td class="mdescLeft"> </td><td class="mdescRight">Complex-Double Multiplication. <a href="#aa675d825b907fe4d939ddc2533b38bb8">More...</a><br/></td></tr>
+<tr class="separator:aa675d825b907fe4d939ddc2533b38bb8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a515037047a218e7f77c4f495b1d6abca"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a515037047a218e7f77c4f495b1d6abca">cc_mult</a>(c, a, b)</td></tr>
+<tr class="memdesc:a515037047a218e7f77c4f495b1d6abca"><td class="mdescLeft"> </td><td class="mdescRight">Complex-Complex Multiplication. <a href="#a515037047a218e7f77c4f495b1d6abca">More...</a><br/></td></tr>
+<tr class="separator:a515037047a218e7f77c4f495b1d6abca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac917679ece23ee5f61e994fb56b30e1c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#ac917679ece23ee5f61e994fb56b30e1c">cc_conj</a>(a, b)</td></tr>
+<tr class="separator:ac917679ece23ee5f61e994fb56b30e1c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a82b7c0f8931b82e92d24a076eab0e82e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a82b7c0f8931b82e92d24a076eab0e82e">c_eq</a>(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i )</td></tr>
+<tr class="memdesc:a82b7c0f8931b82e92d24a076eab0e82e"><td class="mdescLeft"> </td><td class="mdescRight">Complex equality testing. <a href="#a82b7c0f8931b82e92d24a076eab0e82e">More...</a><br/></td></tr>
+<tr class="separator:a82b7c0f8931b82e92d24a076eab0e82e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6b7d3c87a3029e808bb32eed7dad81f7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a6b7d3c87a3029e808bb32eed7dad81f7">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 class="memdesc:a6b7d3c87a3029e808bb32eed7dad81f7"><td class="mdescLeft"> </td><td class="mdescRight">Complex Division c = a/b. <a href="#a6b7d3c87a3029e808bb32eed7dad81f7">More...</a><br/></td></tr>
+<tr class="separator:a6b7d3c87a3029e808bb32eed7dad81f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af55ee2cd6c55b5ad16136940080c9f67"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#af55ee2cd6c55b5ad16136940080c9f67">c_abs</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:af55ee2cd6c55b5ad16136940080c9f67"><td class="mdescLeft"> </td><td class="mdescRight">Returns sqrt(z.r^2 + z.i^2) <a href="#af55ee2cd6c55b5ad16136940080c9f67">More...</a><br/></td></tr>
+<tr class="separator:af55ee2cd6c55b5ad16136940080c9f67"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47b65089087d28e542f04907937cb8a9"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a47b65089087d28e542f04907937cb8a9">c_abs1</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a47b65089087d28e542f04907937cb8a9"><td class="mdescLeft"> </td><td class="mdescRight">Approximates the abs. Returns abs(z.r) + abs(z.i) <a href="#a47b65089087d28e542f04907937cb8a9">More...</a><br/></td></tr>
+<tr class="separator:a47b65089087d28e542f04907937cb8a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a36d8645ac9bf1eb00128329fe5edb982"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a36d8645ac9bf1eb00128329fe5edb982">c_exp</a> (<a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a36d8645ac9bf1eb00128329fe5edb982"><td class="mdescLeft"> </td><td class="mdescRight">Return the exponentiation. <a href="#a36d8645ac9bf1eb00128329fe5edb982">More...</a><br/></td></tr>
+<tr class="separator:a36d8645ac9bf1eb00128329fe5edb982"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0837d7f15d3b03860fdd17de957c788c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a0837d7f15d3b03860fdd17de957c788c">r_cnjg</a> (<a class="el" href="structcomplex.html">complex</a> *, <a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a0837d7f15d3b03860fdd17de957c788c"><td class="mdescLeft"> </td><td class="mdescRight">Return the complex conjugate. <a href="#a0837d7f15d3b03860fdd17de957c788c">More...</a><br/></td></tr>
+<tr class="separator:a0837d7f15d3b03860fdd17de957c788c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29e2cb7ddb38711cdae8f6dc4481a80f"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__scomplex_8h.html#a29e2cb7ddb38711cdae8f6dc4481a80f">r_imag</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a29e2cb7ddb38711cdae8f6dc4481a80f"><td class="mdescLeft"> </td><td class="mdescRight">Return the imaginary part. <a href="#a29e2cb7ddb38711cdae8f6dc4481a80f">More...</a><br/></td></tr>
+<tr class="separator:a29e2cb7ddb38711cdae8f6dc4481a80f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8b1147936f5b008b9cba0a9745199519"><td class="memItemLeft" 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#a8b1147936f5b008b9cba0a9745199519">c_sgn</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:a8b1147936f5b008b9cba0a9745199519"><td class="mdescLeft"> </td><td class="mdescRight">SIGN functions for complex number. Returns z/abs(z) <a href="#a8b1147936f5b008b9cba0a9745199519">More...</a><br/></td></tr>
+<tr class="separator:a8b1147936f5b008b9cba0a9745199519"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad2e9c9356a42769f53e741e68e1aac9d"><td class="memItemLeft" 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#ad2e9c9356a42769f53e741e68e1aac9d">c_sqrt</a> (<a class="el" href="structcomplex.html">complex</a> *)</td></tr>
+<tr class="memdesc:ad2e9c9356a42769f53e741e68e1aac9d"><td class="mdescLeft"> </td><td class="mdescRight">Square-root of a complex number. <a href="#ad2e9c9356a42769f53e741e68e1aac9d">More...</a><br/></td></tr>
+<tr class="separator:ad2e9c9356a42769f53e741e68e1aac9d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+ – SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Contains definitions for various complex operations.
+This header file is to be included in source files c*.c
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="af3df9377099fd2cba886d217734ce884"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define c_add</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ (c)->r = (a)->r + (b)->r; \</div>
+<div class="line"> (c)->i = (a)->i + (b)->i; }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a82b7c0f8931b82e92d24a076eab0e82e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define c_eq</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> ( (a)->r == (b)->r && (a)->i == (b)->i )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0fe6bb9dac5f735dd69a127519a9c841"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define c_sub</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ (c)->r = (a)->r - (b)->r; \</div>
+<div class="line"> (c)->i = (a)->i - (b)->i; }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="ac917679ece23ee5f61e994fb56b30e1c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define cc_conj</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ \</div>
+<div class="line"> (a)->r = (b)->r; \</div>
+<div class="line"> (a)->i = -((b)->i); \</div>
+<div class="line"> }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a515037047a218e7f77c4f495b1d6abca"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define cc_mult</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ \</div>
+<div class="line"> float cr, ci; \</div>
+<div class="line"> cr = (a)->r * (b)->r - (a)->i * (b)->i; \</div>
+<div class="line"> ci = (a)->i * (b)->r + (a)->r * (b)->i; \</div>
+<div class="line"> (c)->r = cr; \</div>
+<div class="line"> (c)->i = ci; \</div>
+<div class="line"> }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="aa675d825b907fe4d939ddc2533b38bb8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define cs_mult</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ (c)->r = (a)->r * (b); \</div>
+<div class="line"> (c)->i = (a)->i * (b); }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a027d022bc2d5898eff31703adb19239c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SCOMPLEX_INCLUDE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af55ee2cd6c55b5ad16136940080c9f67"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a47b65089087d28e542f04907937cb8a9"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6b7d3c87a3029e808bb32eed7dad81f7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a36d8645ac9bf1eb00128329fe5edb982"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8b1147936f5b008b9cba0a9745199519"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__scomplex_8h_a8b1147936f5b008b9cba0a9745199519_cgraph.png" border="0" usemap="#slu__scomplex_8h_a8b1147936f5b008b9cba0a9745199519_cgraph" alt=""/></div>
+<map name="slu__scomplex_8h_a8b1147936f5b008b9cba0a9745199519_cgraph" id="slu__scomplex_8h_a8b1147936f5b008b9cba0a9745199519_cgraph">
+<area shape="rect" id="node2" href="scomplex_8c.html#afc2967f7b71477625eb58de94a6e4c71" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="113,5,170,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad2e9c9356a42769f53e741e68e1aac9d"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0837d7f15d3b03860fdd17de957c788c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a29e2cb7ddb38711cdae8f6dc4481a80f"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slu__sdefs_8h.html b/SuperLU_5.2.0/DOC/html/slu__sdefs_8h.html
new file mode 100644
index 0000000..7b6e556
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slu__sdefs_8h.html
@@ -0,0 +1,6233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slu_sdefs.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slu_sdefs.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for real operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include <limits.h></code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <stdint.h></code><br/>
+<code>#include <string.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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slu_sdefs.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h__incl.png" border="0" usemap="#SRC_2slu__sdefs_8h" alt=""/></div>
+<map name="SRC_2slu__sdefs_8h" id="SRC_2slu__sdefs_8h">
+<area shape="rect" id="node8" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,80,628,107"/><area shape="rect" id="node9" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,80,753,107"/><area shape="rect" id="node10" href="slu__util_8h.html" title="Utility header file. " alt="" coords="281,80,355,107"/><area shape="rect" id="node12" href="superlu__enum__consts_8h.html" title="enum constants header file " alt=" [...]
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h__dep__incl.png" border="0" usemap="#SRC_2slu__sdefs_8hdep" alt=""/></div>
+<map name="SRC_2slu__sdefs_8hdep" id="SRC_2slu__sdefs_8hdep">
+<area shape="rect" id="node2" href="ilu__scolumn__dfs_8c.html" title="Performs a symbolic factorization. " alt="" coords="5,80,164,107"/><area shape="rect" id="node3" href="ilu__scopy__to__ucol_8c.html" title="Copy a computed column of U to the compressed data structure and drop some small entries. " alt="" coords="189,80,360,107"/><area shape="rect" id="node4" href="ilu__sdrop__row_8c.html" title="Drop small rows from L. " alt="" coords="384,80,531,107"/><area shape="rect" id="node5" hr [...]
+</div>
+</div>
+<p><a href="slu__sdefs_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ab6fd6105e64ed14a0c9281326f05e623"><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a></td></tr>
+<tr class="separator:ab6fd6105e64ed14a0c9281326f05e623"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a44bbae3b1218d951ed229c461a5f14b6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a44bbae3b1218d951ed229c461a5f14b6">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="structSup [...]
+<tr class="memdesc:a44bbae3b1218d951ed229c461a5f14b6"><td class="mdescLeft"> </td><td class="mdescRight">Driver routines. <a href="#a44bbae3b1218d951ed229c461a5f14b6">More...</a><br/></td></tr>
+<tr class="separator:a44bbae3b1218d951ed229c461a5f14b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9e5f2ccee873d436a117b99b2bec60da"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a9e5f2ccee873d436a117b99b2bec60da">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 [...]
+<tr class="separator:a9e5f2ccee873d436a117b99b2bec60da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff6cdbb84f0fbd4cbce7a64ea1f7eb20"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aff6cdbb84f0fbd4cbce7a64ea1f7eb20">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="structSu [...]
+<tr class="separator:aff6cdbb84f0fbd4cbce7a64ea1f7eb20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a30fcf6fe814189a632a72220d5a303f8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a30fcf6fe814189a632a72220d5a303f8">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 [...]
+<tr class="separator:a30fcf6fe814189a632a72220d5a303f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abb3d30eea43abc536793244e7564e70d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#abb3d30eea43abc536793244e7564e70d">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html# [...]
+<tr class="memdesc:abb3d30eea43abc536793244e7564e70d"><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related. <a href="#abb3d30eea43abc536793244e7564e70d">More...</a><br/></td></tr>
+<tr class="separator:abb3d30eea43abc536793244e7564e70d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a77496309d539716f616365a2515aa653"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a77496309d539716f616365a2515aa653">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html# [...]
+<tr class="separator:a77496309d539716f616365a2515aa653"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7369dba9a8c3e34a27bdc9eba73cbe3e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a7369dba9a8c3e34a27bdc9eba73cbe3e">sCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a7369dba9a8c3e34a27bdc9eba73cbe3e"><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B. <a href="#a7369dba9a8c3e34a27bdc9eba73cbe3e">More...</a><br/></td></tr>
+<tr class="separator:a7369dba9a8c3e34a27bdc9eba73cbe3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aca98118f5539f098beff0b70c041c2e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aca98118f5539f098beff0b70c041c2e6">sCreate_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int, int, float *, int, <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" href="supermatrix_8h.html#a7987cb2a28ec879 [...]
+<tr class="separator:aca98118f5539f098beff0b70c041c2e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4386b0d87e1c8886b58fcf9d243bc12"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#af4386b0d87e1c8886b58fcf9d243bc12">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a>, <a class="el" hre [...]
+<tr class="separator:af4386b0d87e1c8886b58fcf9d243bc12"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ef26ab4351b4ab39c2ef3d0ff5d6cb5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a5ef26ab4351b4ab39c2ef3d0ff5d6cb5">sCopy_Dense_Matrix</a> (int, int, float *, int, float *, int)</td></tr>
+<tr class="separator:a5ef26ab4351b4ab39c2ef3d0ff5d6cb5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8086902aa8be3fc7d04c3c82ec3a79dc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a8086902aa8be3fc7d04c3c82ec3a79dc">countnz</a> (const int, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a8086902aa8be3fc7d04c3c82ec3a79dc"><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="#a8086902aa8be3fc7d04c3c82ec3a79dc">More...</a><br/></td></tr>
+<tr class="separator:a8086902aa8be3fc7d04c3c82ec3a79dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae8eb367a0a2fcdf734738bc9630df85"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aae8eb367a0a2fcdf734738bc9630df85">ilu_countnz</a> (const int, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:aae8eb367a0a2fcdf734738bc9630df85"><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U. <a href="#aae8eb367a0a2fcdf734738bc9630df85">More...</a><br/></td></tr>
+<tr class="separator:aae8eb367a0a2fcdf734738bc9630df85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7061332d759d7e4d73c1b2e5cb0bf2bf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a7061332d759d7e4d73c1b2e5cb0bf2bf">fixupL</a> (const int, const int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a7061332d759d7e4d73c1b2e5cb0bf2bf"><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="#a7061332d759d7e4d73c1b2e5cb0bf2bf">More...</a><br/></td></tr>
+<tr class="separator:a7061332d759d7e4d73c1b2e5cb0bf2bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaef6f98786d0bd76103237385ddbeb9f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aaef6f98786d0bd76103237385ddbeb9f">sallocateA</a> (int, int, float **, int **, int **)</td></tr>
+<tr class="memdesc:aaef6f98786d0bd76103237385ddbeb9f"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A. <a href="#aaef6f98786d0bd76103237385ddbeb9f">More...</a><br/></td></tr>
+<tr class="separator:aaef6f98786d0bd76103237385ddbeb9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a77f83568633bc0ce7ec5adcb351c1497"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a77f83568633bc0ce7ec5adcb351c1497">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> * [...]
+<tr class="separator:a77f83568633bc0ce7ec5adcb351c1497"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad9d54c8dfc11f1e034b4b7175be60ffb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ad9d54c8dfc11f1e034b4b7175be60ffb">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 class="separator:ad9d54c8dfc11f1e034b4b7175be60ffb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a60e60255360fae0b1458da070690a3a2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a60e60255360fae0b1458da070690a3a2">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 class="memdesc:a60e60255360fae0b1458da070690a3a2"><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode. <a href="#a60e60255360fae0b1458da070690a3a2">More...</a><br/></td></tr>
+<tr class="separator:a60e60255360fae0b1458da070690a3a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a77baf210393e04fa71d4e73b5e60e556"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a77baf210393e04fa71d4e73b5e60e556">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 class="separator:a77baf210393e04fa71d4e73b5e60e556"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51486936a9ff5079afed80eb5bf8a3e0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a51486936a9ff5079afed80eb5bf8a3e0">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 class="separator:a51486936a9ff5079afed80eb5bf8a3e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a20dc9300377cb7240572ba34a31af3d1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a20dc9300377cb7240572ba34a31af3d1">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 class="separator:a20dc9300377cb7240572ba34a31af3d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae21004feb23626f7ea648b46657a257a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ae21004feb23626f7ea648b46657a257a">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 class="separator:ae21004feb23626f7ea648b46657a257a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a249a312149bcf091fcc8adbd0c536cb2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a249a312149bcf091fcc8adbd0c536cb2">scopy_to_ucol</a> (int, int, int *, int *, int *, float *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:a249a312149bcf091fcc8adbd0c536cb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad7ddf03faedae25b4d73e0b6b33bf50c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ad7ddf03faedae25b4d73e0b6b33bf50c">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 class="separator:ad7ddf03faedae25b4d73e0b6b33bf50c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf9da2c45289246ef663fc4a96d1ad78"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#acf9da2c45289246ef663fc4a96d1ad78">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 class="separator:acf9da2c45289246ef663fc4a96d1ad78"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab345670a95db3f9c4b9c451224db8227"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ab345670a95db3f9c4b9c451224db8227">sreadmt</a> (int *, int *, int *, float **, int **, int **)</td></tr>
+<tr class="separator:ab345670a95db3f9c4b9c451224db8227"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab79adc3c2d496feb17f359aa303211fc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ab79adc3c2d496feb17f359aa303211fc">sGenXtrue</a> (int, int, float *, int)</td></tr>
+<tr class="separator:ab79adc3c2d496feb17f359aa303211fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8b784b5551863e8d50047ee280c34cf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ac8b784b5551863e8d50047ee280c34cf">sFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, int, float *, int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)< [...]
+<tr class="memdesc:ac8b784b5551863e8d50047ee280c34cf"><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="#ac8b784b5551863e8d50047ee280c34cf">More...</a><br/></td></tr>
+<tr class="separator:ac8b784b5551863e8d50047ee280c34cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aea450a9c52512127d6eaaebf0a65f9ce"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aea450a9c52512127d6eaaebf0a65f9ce">sgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a clas [...]
+<tr class="separator:aea450a9c52512127d6eaaebf0a65f9ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acaa9941535fb0b2fdbd7b3287da5f2a0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#acaa9941535fb0b2fdbd7b3287da5f2a0">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> [...]
+<tr class="separator:acaa9941535fb0b2fdbd7b3287da5f2a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a69557d06b4e300aa6aca944561f3bb32"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a69557d06b4e300aa6aca944561f3bb32">sldperm</a> (int, int, int, int[], int[], float[], int[], float[], float[])</td></tr>
+<tr class="separator:a69557d06b4e300aa6aca944561f3bb32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a714eccb6cd0fb1fc0920e8a52489f1a5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a714eccb6cd0fb1fc0920e8a52489f1a5">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 class="separator:a714eccb6cd0fb1fc0920e8a52489f1a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa91b3297a15ace9ac5abd65c5e708f2d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aa91b3297a15ace9ac5abd65c5e708f2d">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 class="separator:aa91b3297a15ace9ac5abd65c5e708f2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aab2366ea3e2cdcbf51b976432fc43616"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aab2366ea3e2cdcbf51b976432fc43616">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 class="separator:aab2366ea3e2cdcbf51b976432fc43616"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a35a18be483569110edc1665d13e260e3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a35a18be483569110edc1665d13e260e3">ilu_scopy_to_ucol</a> (int, int, int *, int *, int *, float *, int, <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, int, float *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *, fl [...]
+<tr class="separator:a35a18be483569110edc1665d13e260e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7f61e0a95c151f53f8a400bc9c6192e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ab7f61e0a95c151f53f8a400bc9c6192e">ilu_spivotL</a> (const int, const double, int *, int *, int, int *, int *, int *, int *, double, <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, float, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a [...]
+<tr class="separator:ab7f61e0a95c151f53f8a400bc9c6192e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f5e67d3b2d715a388ca99bb28387fb9"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a5f5e67d3b2d715a388ca99bb28387fb9">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 class="separator:a5f5e67d3b2d715a388ca99bb28387fb9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3dbdb406f2fb8b186f0f8d3a4cd2d60d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a3dbdb406f2fb8b186f0f8d3a4cd2d60d">sgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, float *, float *, float *, float *, int *)</td></tr>
+<tr class="memdesc:a3dbdb406f2fb8b186f0f8d3a4cd2d60d"><td class="mdescLeft"> </td><td class="mdescRight">Driver related. <a href="#a3dbdb406f2fb8b186f0f8d3a4cd2d60d">More...</a><br/></td></tr>
+<tr class="separator:a3dbdb406f2fb8b186f0f8d3a4cd2d60d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe4b556cd9d484f53606d114f83649d4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#afe4b556cd9d484f53606d114f83649d4">slaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, float *, float, float, float, char *)</td></tr>
+<tr class="separator:afe4b556cd9d484f53606d114f83649d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1c910cf12639a22a03727ad204575b3b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a1c910cf12639a22a03727ad204575b3b">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 class="separator:a1c910cf12639a22a03727ad204575b3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acb8787465a6296109b9a306d5a315ff8"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#acb8787465a6296109b9a306d5a315ff8">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 class="separator:acb8787465a6296109b9a306d5a315ff8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae824bcb507f76ad3053d845352fb6b3d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ae824bcb507f76ad3053d845352fb6b3d">sgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="s [...]
+<tr class="separator:ae824bcb507f76ad3053d845352fb6b3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa6d287b6b9bcaf72a692343e614c429c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aa6d287b6b9bcaf72a692343e614c429c">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 class="memdesc:aa6d287b6b9bcaf72a692343e614c429c"><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b. <a href="#aa6d287b6b9bcaf72a692343e614c429c">More...</a><br/></td></tr>
+<tr class="separator:aa6d287b6b9bcaf72a692343e614c429c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9e543b2d14781b56ef349114012b4fc9"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a9e543b2d14781b56ef349114012b4fc9">sp_sgemv</a> (char *, float, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *, int, float, float *, int)</td></tr>
+<tr class="memdesc:a9e543b2d14781b56ef349114012b4fc9"><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="#a9e543b2d14781b56ef349114012b4fc9">More...</a><br/></td></tr>
+<tr class="separator:a9e543b2d14781b56ef349114012b4fc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a35b4a0e44c32443df609069021d27812"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a35b4a0e44c32443df609069021d27812">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 class="separator:a35b4a0e44c32443df609069021d27812"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b49252f1cab66e35ac47ac1afb2adec"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec">smach</a> (char *)</td></tr>
+<tr class="separator:a1b49252f1cab66e35ac47ac1afb2adec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af68715ec86cde90aa31fec07164d6ea6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#af68715ec86cde90aa31fec07164d6ea6">sLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">fact_t</a>, void *, int, int, int, int, int, float, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html [...]
+<tr class="memdesc:af68715ec86cde90aa31fec07164d6ea6"><td class="mdescLeft"> </td><td class="mdescRight">Memory-related. <a href="#af68715ec86cde90aa31fec07164d6ea6">More...</a><br/></td></tr>
+<tr class="separator:af68715ec86cde90aa31fec07164d6ea6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab5b2859bf1ef1900506dfa702574c6ad"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ab5b2859bf1ef1900506dfa702574c6ad">sSetRWork</a> (int, int, float *, float **, float **)</td></tr>
+<tr class="memdesc:ab5b2859bf1ef1900506dfa702574c6ad"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays. <a href="#ab5b2859bf1ef1900506dfa702574c6ad">More...</a><br/></td></tr>
+<tr class="separator:ab5b2859bf1ef1900506dfa702574c6ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9035f0d2a50cf5d8e29287572bd1be83"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a9035f0d2a50cf5d8e29287572bd1be83">sLUWorkFree</a> (int *, float *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a9035f0d2a50cf5d8e29287572bd1be83"><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines. <a href="#a9035f0d2a50cf5d8e29287572bd1be83">More...</a><br/></td></tr>
+<tr class="separator:a9035f0d2a50cf5d8e29287572bd1be83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9af26d0426eb0bb63755880f2e67e7b7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7">sLUMemXpand</a> (int, int, <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a>, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a9af26d0426eb0bb63755880f2e67e7b7"><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization. <a href="#a9af26d0426eb0bb63755880f2e67e7b7">More...</a><br/></td></tr>
+<tr class="separator:a9af26d0426eb0bb63755880f2e67e7b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42361c3ce2ba81d149ffba01fbd6f138"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a42361c3ce2ba81d149ffba01fbd6f138">floatMalloc</a> (int)</td></tr>
+<tr class="separator:a42361c3ce2ba81d149ffba01fbd6f138"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e1230bff11a9e47c35555299bcdcf1b"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a3e1230bff11a9e47c35555299bcdcf1b">floatCalloc</a> (int)</td></tr>
+<tr class="separator:a3e1230bff11a9e47c35555299bcdcf1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab50ebebf3a620086366b6c310d52d681"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ab50ebebf3a620086366b6c310d52d681">smemory_usage</a> (const int, const int, const int, const int)</td></tr>
+<tr class="separator:ab50ebebf3a620086366b6c310d52d681"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1357f9a3b2ffb9522883ad84affa63e3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a1357f9a3b2ffb9522883ad84affa63e3">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 class="separator:a1357f9a3b2ffb9522883ad84affa63e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb260ae3f26e2179b1cf33c3e754d6f1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#adb260ae3f26e2179b1cf33c3e754d6f1">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 class="separator:adb260ae3f26e2179b1cf33c3e754d6f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6ad9d9454734717431356db0e8eb5deb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a6ad9d9454734717431356db0e8eb5deb">sreadhb</a> (FILE *, int *, int *, int *, float **, int **, int **)</td></tr>
+<tr class="memdesc:a6ad9d9454734717431356db0e8eb5deb"><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines. <a href="#a6ad9d9454734717431356db0e8eb5deb">More...</a><br/></td></tr>
+<tr class="separator:a6ad9d9454734717431356db0e8eb5deb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad992a573876b4abfe192ec2bc207f6b0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ad992a573876b4abfe192ec2bc207f6b0">sreadrb</a> (int *, int *, int *, float **, int **, int **)</td></tr>
+<tr class="separator:ad992a573876b4abfe192ec2bc207f6b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae99cb18465c8992235a7bc003237f692"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ae99cb18465c8992235a7bc003237f692">sreadtriple</a> (int *, int *, int *, float **, int **, int **)</td></tr>
+<tr class="separator:ae99cb18465c8992235a7bc003237f692"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef4be8ddf6a62ef48ca8dfc3a6992634"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aef4be8ddf6a62ef48ca8dfc3a6992634">sCompRow_to_CompCol</a> (int, int, int, float *, int *, int *, float **, int **, int **)</td></tr>
+<tr class="memdesc:aef4be8ddf6a62ef48ca8dfc3a6992634"><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage. <a href="#aef4be8ddf6a62ef48ca8dfc3a6992634">More...</a><br/></td></tr>
+<tr class="separator:aef4be8ddf6a62ef48ca8dfc3a6992634"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2d734e40276e89a3ef04bf79bc21acb6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a2d734e40276e89a3ef04bf79bc21acb6">sfill</a> (float *, int, float)</td></tr>
+<tr class="memdesc:a2d734e40276e89a3ef04bf79bc21acb6"><td class="mdescLeft"> </td><td class="mdescRight">Fills a float precision array with a given value. <a href="#a2d734e40276e89a3ef04bf79bc21acb6">More...</a><br/></td></tr>
+<tr class="separator:a2d734e40276e89a3ef04bf79bc21acb6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba0eeda28d139bf88878880edd3cca5a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aba0eeda28d139bf88878880edd3cca5a">sinf_norm_error</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, float *)</td></tr>
+<tr class="memdesc:aba0eeda28d139bf88878880edd3cca5a"><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector. <a href="#aba0eeda28d139bf88878880edd3cca5a">More...</a><br/></td></tr>
+<tr class="separator:aba0eeda28d139bf88878880edd3cca5a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98d44fe59660f87330b0172151a76141"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a98d44fe59660f87330b0172151a76141">sqselect</a> (int, float *, int)</td></tr>
+<tr class="separator:a98d44fe59660f87330b0172151a76141"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5cd6efad9d9fb7aef8a984f5e3cff66b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a5cd6efad9d9fb7aef8a984f5e3cff66b">sPrint_CompCol_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a5cd6efad9d9fb7aef8a984f5e3cff66b"><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging. <a href="#a5cd6efad9d9fb7aef8a984f5e3cff66b">More...</a><br/></td></tr>
+<tr class="separator:a5cd6efad9d9fb7aef8a984f5e3cff66b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeb289a84407c9cbbb33cdf3dbb1dacbe"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aeb289a84407c9cbbb33cdf3dbb1dacbe">sPrint_SuperNode_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:aeb289a84407c9cbbb33cdf3dbb1dacbe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25b29c47333295f4aa744e541e277ea0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a25b29c47333295f4aa744e541e277ea0">sPrint_Dense_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:a25b29c47333295f4aa744e541e277ea0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a297455c494a78c098b2bf418edbc6b16"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a297455c494a78c098b2bf418edbc6b16">sprint_lu_col</a> (char *, int, int, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a297455c494a78c098b2bf418edbc6b16"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor. <a href="#a297455c494a78c098b2bf418edbc6b16">More...</a><br/></td></tr>
+<tr class="separator:a297455c494a78c098b2bf418edbc6b16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad0c06e9adc1e29a0ab2e78c38119bb4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aad0c06e9adc1e29a0ab2e78c38119bb4">print_double_vec</a> (char *, int, double *)</td></tr>
+<tr class="separator:aad0c06e9adc1e29a0ab2e78c38119bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afaeba209bf02be915b199402a1367ee0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#afaeba209bf02be915b199402a1367ee0">scheck_tempv</a> (int, float *)</td></tr>
+<tr class="memdesc:afaeba209bf02be915b199402a1367ee0"><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="#afaeba209bf02be915b199402a1367ee0">More...</a><br/></td></tr>
+<tr class="separator:afaeba209bf02be915b199402a1367ee0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab822504d3d60a944da04997b4f91e067"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ab822504d3d60a944da04997b4f91e067">sgemm_</a> (const char *, const char *, const int *, const int *, const int *, const float *, const float *, const int *, const float *, const int *, const float *, float *, const int *)</td></tr>
+<tr class="memdesc:ab822504d3d60a944da04997b4f91e067"><td class="mdescLeft"> </td><td class="mdescRight">BLAS. <a href="#ab822504d3d60a944da04997b4f91e067">More...</a><br/></td></tr>
+<tr class="separator:ab822504d3d60a944da04997b4f91e067"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aab583b502d3953688a3fa27a9f4bbf1e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#aab583b502d3953688a3fa27a9f4bbf1e">strsv_</a> (char *, char *, char *, int *, float *, int *, float *, int *)</td></tr>
+<tr class="separator:aab583b502d3953688a3fa27a9f4bbf1e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a68de665c44346f6eacfe87e9f3c2a1e6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#a68de665c44346f6eacfe87e9f3c2a1e6">strsm_</a> (char *, char *, char *, char *, int *, int *, float *, float *, int *, float *, int *)</td></tr>
+<tr class="separator:a68de665c44346f6eacfe87e9f3c2a1e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae29fbdb32369b70973b05d14fc3420c9"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__sdefs_8h.html#ae29fbdb32369b70973b05d14fc3420c9">sgemv_</a> (char *, int *, int *, float *, float *a, int *, float *, int *, float *, float *, int *)</td></tr>
+<tr class="separator:ae29fbdb32369b70973b05d14fc3420c9"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November, 2010</pre><pre>Global data structures used in LU factorization -</pre><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><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><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><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><pre> The last column structures (for pruning) will be removed
+ after the numercial LU factorization phase.</pre><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><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> </div><h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ab6fd6105e64ed14a0c9281326f05e623"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8086902aa8be3fc7d04c3c82ec3a79dc"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7061332d759d7e4d73c1b2e5cb0bf2bf"></a>
+<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">, </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3e1230bff11a9e47c35555299bcdcf1b"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a42361c3ce2ba81d149ffba01fbd6f138"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aae8eb367a0a2fcdf734738bc9630df85"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aab2366ea3e2cdcbf51b976432fc43616"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ILU_SCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_aab2366ea3e2cdcbf51b976432fc43616_cgraph.png" border="0" usemap="#slu__sdefs_8h_aab2366ea3e2cdcbf51b976432fc43616_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_aab2366ea3e2cdcbf51b976432fc43616_cgraph" id="slu__sdefs_8h_aab2366ea3e2cdcbf51b976432fc43616_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="193,31,260,57"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="171,81,283,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="349,31,432,57"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a35a18be483569110edc1665d13e260e3"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a35a18be483569110edc1665d13e260e3_cgraph.png" border="0" usemap="#slu__sdefs_8h_a35a18be483569110edc1665d13e260e3_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a35a18be483569110edc1665d13e260e3_cgraph" id="slu__sdefs_8h_a35a18be483569110edc1665d13e260e3_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="207,56,268,83"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="181,107,293,133"/><area shape="rect" id="node10" href="ilu__scopy__to__ucol_8c.html#af839d60e0d4028df30ea1106ce429210" title="scopy_" alt="" coords="205,157,269,184"/><area shape [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a5f5e67d3b2d715a388ca99bb28387fb9"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa91b3297a15ace9ac5abd65c5e708f2d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<a class="anchor" id="ab7f61e0a95c151f53f8a400bc9c6192e"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+</div>
+</div>
+<a class="anchor" id="adb260ae3f26e2179b1cf33c3e754d6f1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_adb260ae3f26e2179b1cf33c3e754d6f1_cgraph.png" border="0" usemap="#slu__sdefs_8h_adb260ae3f26e2179b1cf33c3e754d6f1_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_adb260ae3f26e2179b1cf33c3e754d6f1_cgraph" id="slu__sdefs_8h_adb260ae3f26e2179b1cf33c3e754d6f1_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="176,5,243,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="291,5,373,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a714eccb6cd0fb1fc0920e8a52489f1a5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__ssnode__dfs_8c.html#a510a9174e442a65aaa83f9ce97390f85">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a714eccb6cd0fb1fc0920e8a52489f1a5_cgraph.png" border="0" usemap="#slu__sdefs_8h_a714eccb6cd0fb1fc0920e8a52489f1a5_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a714eccb6cd0fb1fc0920e8a52489f1a5_cgraph" id="slu__sdefs_8h_a714eccb6cd0fb1fc0920e8a52489f1a5_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="163,107,275,133"/><area shape="rect" id="node3" href="smemory_8c.html#aa2862f14356be7d9f12bfdfc175137a1" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="347,81,418,108"/><area shape="rect" id="node8" href="smemory_8c.html#a658f955c5532813bd0490502efae563f" title="smemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aad0c06e9adc1e29a0ab2e78c38119bb4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaef6f98786d0bd76103237385ddbeb9f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_aaef6f98786d0bd76103237385ddbeb9f_cgraph.png" border="0" usemap="#slu__sdefs_8h_aaef6f98786d0bd76103237385ddbeb9f_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_aaef6f98786d0bd76103237385ddbeb9f_cgraph" id="slu__sdefs_8h_aaef6f98786d0bd76103237385ddbeb9f_cgraph">
+<area shape="rect" id="node2" href="smemory_8c.html#a4a866452c5dcba66083ef463662955ee" title="floatMalloc" alt="" coords="136,5,221,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="141,56,216,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afaeba209bf02be915b199402a1367ee0"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae21004feb23626f7ea648b46657a257a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose:
+</h1>
+</pre><pre>
+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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_ae21004feb23626f7ea648b46657a257a_cgraph.png" border="0" usemap="#slu__sdefs_8h_ae21004feb23626f7ea648b46657a257a_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_ae21004feb23626f7ea648b46657a257a_cgraph" id="slu__sdefs_8h_ae21004feb23626f7ea648b46657a257a_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#aab583b502d3953688a3fa27a9f4bbf1e" title="strsv_" alt="" coords="192,5,251,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#ae29fbdb32369b70973b05d14fc3420c9" title="sgemv_" alt="" coords="187,56,255,83"/><area shape="rect" id="node4" href="scolumn__bmod_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c" title="Solves a dense UNIT lower triangular system. " alt="" coords="190,107,253,133"/><area shape="rect" id="node5" href="scolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a20dc9300377cb7240572ba34a31af3d1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ SCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a20dc9300377cb7240572ba34a31af3d1_cgraph.png" border="0" usemap="#slu__sdefs_8h_a20dc9300377cb7240572ba34a31af3d1_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a20dc9300377cb7240572ba34a31af3d1_cgraph" id="slu__sdefs_8h_a20dc9300377cb7240572ba34a31af3d1_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="172,31,239,57"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="149,81,261,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="328,31,411,57"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aef4be8ddf6a62ef48ca8dfc3a6992634"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_aef4be8ddf6a62ef48ca8dfc3a6992634_cgraph.png" border="0" usemap="#slu__sdefs_8h_aef4be8ddf6a62ef48ca8dfc3a6992634_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_aef4be8ddf6a62ef48ca8dfc3a6992634_cgraph" id="slu__sdefs_8h_aef4be8ddf6a62ef48ca8dfc3a6992634_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a42361c3ce2ba81d149ffba01fbd6f138" title="floatMalloc" alt="" coords="224,5,309,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="229,56,304,83"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="230,107,303,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7369dba9a8c3e34a27bdc9eba73cbe3e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5ef26ab4351b4ab39c2ef3d0ff5d6cb5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Copies a two-dimensional matrix X to another matrix Y.</p>
+
+</div>
+</div>
+<a class="anchor" id="a249a312149bcf091fcc8adbd0c536cb2"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a249a312149bcf091fcc8adbd0c536cb2_cgraph.png" border="0" usemap="#slu__sdefs_8h_a249a312149bcf091fcc8adbd0c536cb2_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a249a312149bcf091fcc8adbd0c536cb2_cgraph" id="slu__sdefs_8h_a249a312149bcf091fcc8adbd0c536cb2_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="160,107,272,133"/><area shape="rect" id="node3" href="smemory_8c.html#aa2862f14356be7d9f12bfdfc175137a1" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="345,81,415,108"/><area shape="rect" id="node8" href="smemory_8c.html#a658f955c5532813bd0490502efae563f" title="smemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="abb3d30eea43abc536793244e7564e70d"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a77496309d539716f616365a2515aa653"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aca98118f5539f098beff0b70c041c2e6"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af4386b0d87e1c8886b58fcf9d243bc12"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2d734e40276e89a3ef04bf79bc21acb6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac8b784b5551863e8d50047ee280c34cf"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_ac8b784b5551863e8d50047ee280c34cf_cgraph.png" border="0" usemap="#slu__sdefs_8h_ac8b784b5551863e8d50047ee280c34cf_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_ac8b784b5551863e8d50047ee280c34cf_cgraph" id="slu__sdefs_8h_ac8b784b5551863e8d50047ee280c34cf_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a35b4a0e44c32443df609069021d27812" title="sp_sgemm" alt="" coords="129,5,215,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#a9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="264,5,347,32"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab822504d3d60a944da04997b4f91e067"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int sgemm_ </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </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">const int * </td>
+ <td class="paramname">, </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">const float * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float * </td>
+ <td class="paramname">, </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">const float * </td>
+ <td class="paramname">, </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">const 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">const int * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae29fbdb32369b70973b05d14fc3420c9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int sgemv_ </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">float * </td>
+ <td class="paramname">, </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">, </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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab79adc3c2d496feb17f359aa303211fc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1c910cf12639a22a03727ad204575b3b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><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><pre> RCOND (output) float*
+ The reciprocal of the condition number of the matrix A,
+ computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><pre> INFO (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a1c910cf12639a22a03727ad204575b3b_cgraph.png" border="0" usemap="#slu__sdefs_8h_a1c910cf12639a22a03727ad204575b3b_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a1c910cf12639a22a03727ad204575b3b_cgraph" id="slu__sdefs_8h_a1c910cf12639a22a03727ad204575b3b_cgraph">
+<area shape="rect" id="node2" href="slacon2_8c.html#ad34d61602254b2aad398e30cc3c5436d" title="slacon2_" alt="" coords="117,107,192,133"/><area shape="rect" id="node7" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="241,208,324,235"/><area shape="rect" id="node8" href="slu__cdefs_8h.html#a3e1230bff11a9e47c35555299bcdcf1b" title="floatCalloc" alt="" coords="241,259,325,285"/><area shape="rect" id="node9" href="memory_8c.html#a49bbe20102e5b54 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a3dbdb406f2fb8b186f0f8d3a4cd2d60d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (output) float*, size A->nrow
+ If INFO = 0 or INFO > M, R contains the row scale factors
+ for A.</pre><pre> C (output) float*, size A->ncol
+ If INFO = 0, C contains the column scale factors for A.</pre><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><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><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><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
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a3dbdb406f2fb8b186f0f8d3a4cd2d60d_cgraph.png" border="0" usemap="#slu__sdefs_8h_a3dbdb406f2fb8b186f0f8d3a4cd2d60d_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a3dbdb406f2fb8b186f0f8d3a4cd2d60d_cgraph" id="slu__sdefs_8h_a3dbdb406f2fb8b186f0f8d3a4cd2d60d_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="128,5,189,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="117,56,200,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aff6cdbb84f0fbd4cbce7a64ea1f7eb20"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a30fcf6fe814189a632a72220d5a303f8"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a8c16e3d29bb8fbcc614ed6f77372b616">sgsitrf()</a>.
+An estimation of the condition number is provided.
+The routine performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><pre> 1.7. options->IterRefine is not used</pre><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * sum(dropped entries);
+ = SMILU_3:
+ U(i,i) := U(i,i) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * 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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><pre> 2.7. If options->IterRefine is not used.</pre><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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#ad8a808e807e38c32c08cfbeadb088f08" 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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a30fcf6fe814189a632a72220d5a303f8_cgraph.png" border="0" usemap="#slu__sdefs_8h_a30fcf6fe814189a632a72220d5a303f8_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a30fcf6fe814189a632a72220d5a303f8_cgraph" id="slu__sdefs_8h_a30fcf6fe814189a632a72220d5a303f8_cgraph">
+<area shape="rect" id="node2" href="slangs_8c.html#a201bfd9f2017cf5904aada9f21f23ab2" title="slangs" alt="" coords="182,5,242,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="604,157,665,184"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="739,613,821,640"/><area shape="rect" id="node5" href="slu__util_8h.html#a72be96e75e58564c4322ef9e [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acaa9941535fb0b2fdbd7b3287da5f2a0"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the ILU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">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#a380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_acaa9941535fb0b2fdbd7b3287da5f2a0_cgraph.png" border="0" usemap="#slu__sdefs_8h_acaa9941535fb0b2fdbd7b3287da5f2a0_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_acaa9941535fb0b2fdbd7b3287da5f2a0_cgraph" id="slu__sdefs_8h_acaa9941535fb0b2fdbd7b3287da5f2a0_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#af68715ec86cde90aa31fec07164d6ea6" title="Memory-related. " alt="" coords="157,309,251,336"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="363,56,437,83"/><area shape="rect" id="node10" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="531,867,597,893"/><area shape="rect" id="node12" href="memory_8c.html#adbbe5a57b4ed6 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ae824bcb507f76ad3053d845352fb6b3d"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> SGSRFS improves the computed solution to a system of linear
+ equations and provides error bounds and backward error estimates for
+ the solution.</pre><pre> If equilibration was performed, the system becomes:
+ (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use column-wise storage scheme,
+ i.e., U has types: Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><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><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><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><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><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><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><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#a9b6e1e555af9cf109ef3a584054a91e2">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><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><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><pre> stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre> info (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value</pre><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><pre> ITMAX is the maximum number of steps of iterative refinement.</pre><pre></pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_ae824bcb507f76ad3053d845352fb6b3d_cgraph.png" border="0" usemap="#slu__sdefs_8h_ae824bcb507f76ad3053d845352fb6b3d_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_ae824bcb507f76ad3053d845352fb6b3d_cgraph" id="slu__sdefs_8h_ae824bcb507f76ad3053d845352fb6b3d_cgraph">
+<area shape="rect" id="node2" href="slacon2_8c.html#ad34d61602254b2aad398e30cc3c5436d" title="slacon2_" alt="" coords="116,107,191,133"/><area shape="rect" id="node5" href="ilu__scopy__to__ucol_8c.html#af839d60e0d4028df30ea1106ce429210" title="scopy_" alt="" coords="253,157,317,184"/><area shape="rect" id="node7" href="ilu__sdrop__row_8c.html#ade8ba65d9c44f41e97cf2c40a772cff7" title="saxpy_" alt="" coords="121,208,185,235"/><area shape="rect" id="node8" href="input__error_8c.html#a583285 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a44bbae3b1218d951ed229c461a5f14b6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>SGSSV solves the system of linear equations A*X=B, using the
+LU factorization from SGSTRF. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><pre> 1.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ above algorithm to the transpose of A:</pre><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><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><pre> 2.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> If options->RowPerm = MY_PERMR or
+ options->Fact = SamePattern_SameRowPerm, perm_r is an
+ input argument.
+ otherwise it is an output argument.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a44bbae3b1218d951ed229c461a5f14b6_cgraph.png" border="0" usemap="#slu__sdefs_8h_a44bbae3b1218d951ed229c461a5f14b6_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a44bbae3b1218d951ed229c461a5f14b6_cgraph" id="slu__sdefs_8h_a44bbae3b1218d951ed229c461a5f14b6_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="747,1779,829,1805"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#abb3d30eea43abc536793244e7564e70d" title="Supernodal LU factor related. " alt="" coords="360,563,533,589"/><area shape="rect" id="node4" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="389,5,505,32"/><area shape="rect" id="node5" href="get [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a9e5f2ccee873d436a117b99b2bec60da"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Error bounds on the solution and
+a condition estimate are also provided. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><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><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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a9e5f2ccee873d436a117b99b2bec60da_cgraph.png" border="0" usemap="#slu__sdefs_8h_a9e5f2ccee873d436a117b99b2bec60da_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a9e5f2ccee873d436a117b99b2bec60da_cgraph" id="slu__sdefs_8h_a9e5f2ccee873d436a117b99b2bec60da_cgraph">
+<area shape="rect" id="node2" href="slangs_8c.html#a201bfd9f2017cf5904aada9f21f23ab2" title="slangs" alt="" coords="185,5,245,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="416,107,477,133"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="741,284,824,311"/><area shape="rect" id="node5" href="slu__util_8h.html#a72be96e75e58564c4322ef9e [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a77f83568633bc0ce7ec5adcb351c1497"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the LU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a77baf210393e04fa71d4e73b5e60e556">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__sdefs_8h.html" title="Header file for real operations. ">slu_sdefs.h</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a77f83568633bc0ce7ec5adcb351c1497_cgraph.png" border="0" usemap="#slu__sdefs_8h_a77f83568633bc0ce7ec5adcb351c1497_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a77f83568633bc0ce7ec5adcb351c1497_cgraph" id="slu__sdefs_8h_a77f83568633bc0ce7ec5adcb351c1497_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="528,917,595,944"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#af68715ec86cde90aa31fec07164d6ea6" title="Memory-related. " alt="" coords="155,157,248,184"/><area shape="rect" id="node6" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="360,208,435,235"/><area shape="rect" id="node16" href="memory_8c.html#adbbe5a57b4ed [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aea450a9c52512127d6eaaebf0a65f9ce"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_S, Mtype = SLU_TRLU.</pre><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#a7f9874cec10809f11998cc3d9cb88f8b">sgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_S, Mtype = SLU_TRU.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre>info (output) int*
+ = 0: successful exit
+ < 0: if info = -i, the i-th argument had an illegal value
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_aea450a9c52512127d6eaaebf0a65f9ce_cgraph.png" border="0" usemap="#slu__sdefs_8h_aea450a9c52512127d6eaaebf0a65f9ce_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_aea450a9c52512127d6eaaebf0a65f9ce_cgraph" id="slu__sdefs_8h_aea450a9c52512127d6eaaebf0a65f9ce_cgraph">
+<area shape="rect" id="node2" href="sgstrs_8c.html#ad582f185cce067a3f9dd4225248af758" title="sprint_soln" alt="" coords="112,5,197,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="247,56,329,83"/><area shape="rect" id="node4" href="slu__cdefs_8h.html#a3e1230bff11a9e47c35555299bcdcf1b" title="floatCalloc" alt="" coords="246,107,330,133"/><area shape="rect" id="node5" href="slu__cdefs_8h.html#a42361c3ce2ba81 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aba0eeda28d139bf88878880edd3cca5a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afe4b556cd9d484f53606d114f83649d4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> SLAQGS equilibrates a general sparse M by N matrix A using the row and
+ scaling factors in the vectors R and C.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (input) float*, dimension (A->nrow)
+ The row scale factors for A.</pre><pre> C (input) float*, dimension (A->ncol)
+ The column scale factors for A.</pre><pre> ROWCND (input) float
+ Ratio of the smallest R(i) to the largest R(i).</pre><pre> COLCND (input) float
+ Ratio of the smallest C(i) to the largest C(i).</pre><pre> AMAX (input) float
+ Absolute value of largest matrix entry.</pre><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><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_afe4b556cd9d484f53606d114f83649d4_cgraph.png" border="0" usemap="#slu__sdefs_8h_afe4b556cd9d484f53606d114f83649d4_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_afe4b556cd9d484f53606d114f83649d4_cgraph" id="slu__sdefs_8h_afe4b556cd9d484f53606d114f83649d4_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="115,5,176,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a69557d06b4e300aa6aca944561f3bb32"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af68715ec86cde90aa31fec07164d6ea6"></a>
+<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#ac785c8235480e5cfef9848d89c047c0a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_af68715ec86cde90aa31fec07164d6ea6_cgraph.png" border="0" usemap="#slu__sdefs_8h_af68715ec86cde90aa31fec07164d6ea6_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_af68715ec86cde90aa31fec07164d6ea6_cgraph" id="slu__sdefs_8h_af68715ec86cde90aa31fec07164d6ea6_cgraph">
+<area shape="rect" id="node2" href="smemory_8c.html#a146216d4543e94e7ec4783eada50bf4c" title="Setup the memory model to be used for factorization. " alt="" coords="157,5,257,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="169,56,244,83"/><area shape="rect" id="node4" href="smemory_8c.html#ad68adc1b6de3f821f9fb24cdcf24d281" title="suser_malloc" alt="" coords="325,183,424,209"/><area shape="rect" id="node5" href="s [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a9af26d0426eb0bb63755880f2e67e7b7"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+Return value: 0 - successful return
+ > 0 - number of bytes allocated when run out of space
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a9af26d0426eb0bb63755880f2e67e7b7_cgraph.png" border="0" usemap="#slu__sdefs_8h_a9af26d0426eb0bb63755880f2e67e7b7_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a9af26d0426eb0bb63755880f2e67e7b7_cgraph" id="slu__sdefs_8h_a9af26d0426eb0bb63755880f2e67e7b7_cgraph">
+<area shape="rect" id="node2" href="smemory_8c.html#aa2862f14356be7d9f12bfdfc175137a1" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="190,81,261,108"/><area shape="rect" id="node7" href="smemory_8c.html#a658f955c5532813bd0490502efae563f" title="smemory_usage" alt="" coords="166,132,285,159"/><area shape="rect" id="node3" href="smemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="340,5,447,32"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a9035f0d2a50cf5d8e29287572bd1be83"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1b49252f1cab66e35ac47ac1afb2adec"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float smach </td>
+ <td>(</td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab50ebebf3a620086366b6c310d52d681"></a>
+<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">, </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">const int </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a35b4a0e44c32443df609069021d27812"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> sp_s performs one of the matrix-matrix operations</pre><pre> C := alpha*op( A )*op( B ) + beta*C,</pre><pre> where op( X ) is one of</pre><pre> op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ),</pre><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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> ALPHA - (input) float
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><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 max( 1, n ).
+ Unchanged on exit.</pre><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><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><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 max(1,m).
+ Unchanged on exit.</pre><pre> ==== Sparse Level 3 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a35b4a0e44c32443df609069021d27812_cgraph.png" border="0" usemap="#slu__sdefs_8h_a35b4a0e44c32443df609069021d27812_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a35b4a0e44c32443df609069021d27812_cgraph" id="slu__sdefs_8h_a35b4a0e44c32443df609069021d27812_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="141,5,224,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,5,355,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a9e543b2d14781b56ef349114012b4fc9"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="ssp__blas2_8c.html#a3a14fab0d3fc42c621199aed6962ab3e" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y...">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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><pre> ALPHA - (input) float
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><pre> INCX - (input) int
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.</pre><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><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><pre> INCY - (input) int
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.</pre><pre> ==== Sparse Level 2 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a9e543b2d14781b56ef349114012b4fc9_cgraph.png" border="0" usemap="#slu__sdefs_8h_a9e543b2d14781b56ef349114012b4fc9_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a9e543b2d14781b56ef349114012b4fc9_cgraph" id="slu__sdefs_8h_a9e543b2d14781b56ef349114012b4fc9_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="136,5,219,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa6d287b6b9bcaf72a692343e614c429c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="ssp__blas2_8c.html#ab9e8302d09840e67df27ddd4defaa621" 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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><pre> info - (output) int*
+ If *info = -i, the i-th argument had an illegal value.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_aa6d287b6b9bcaf72a692343e614c429c_cgraph.png" border="0" usemap="#slu__sdefs_8h_aa6d287b6b9bcaf72a692343e614c429c_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_aa6d287b6b9bcaf72a692343e614c429c_cgraph" id="slu__sdefs_8h_aa6d287b6b9bcaf72a692343e614c429c_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="127,5,209,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a3e1230bff11a9e47c35555299bcdcf1b" title="floatCalloc" alt="" coords="126,56,210,83"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#aab583b502d3953688a3fa27a9f4bbf1e" title="strsv_" alt="" coords="139,107,197,133"/><area shape="rect" id="node5" href="slu__sdefs_8h.html#ae29fbdb32369b70 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a51486936a9ff5079afed80eb5bf8a3e0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre> Before entering this routine, the original nonzeros in the panel
+ were already copied into the spa[m,w].</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a51486936a9ff5079afed80eb5bf8a3e0_cgraph.png" border="0" usemap="#slu__sdefs_8h_a51486936a9ff5079afed80eb5bf8a3e0_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a51486936a9ff5079afed80eb5bf8a3e0_cgraph" id="slu__sdefs_8h_a51486936a9ff5079afed80eb5bf8a3e0_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#aab583b502d3953688a3fa27a9f4bbf1e" title="strsv_" alt="" coords="159,56,217,83"/><area shape="rect" id="node5" href="spanel__bmod_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c" title="Solves a dense UNIT lower triangular system. " alt="" coords="157,107,219,133"/><area shape="rect" id="node6" href="slu__s [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a77baf210393e04fa71d4e73b5e60e556"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<a class="anchor" id="acb8787465a6296109b9a306d5a315ff8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>Compute the reciprocal pivot growth factor of the leading ncols columns
+of the matrix, using the formula:
+ min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>ncols (input) int
+ The number of columns of matrices A, L and U.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_acb8787465a6296109b9a306d5a315ff8_cgraph.png" border="0" usemap="#slu__sdefs_8h_acb8787465a6296109b9a306d5a315ff8_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_acb8787465a6296109b9a306d5a315ff8_cgraph" id="slu__sdefs_8h_acb8787465a6296109b9a306d5a315ff8_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="155,5,216,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad7ddf03faedae25b4d73e0b6b33bf50c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+</div>
+</div>
+<a class="anchor" id="a5cd6efad9d9fb7aef8a984f5e3cff66b"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a25b29c47333295f4aa744e541e277ea0"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a297455c494a78c098b2bf418edbc6b16"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aeb289a84407c9cbbb33cdf3dbb1dacbe"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acf9da2c45289246ef663fc4a96d1ad78"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Prunes the L-structure of supernodes whose L-structure
+ contains the current pivot row "pivrow"
+</pre>
+</div>
+</div>
+<a class="anchor" id="a98d44fe59660f87330b0172151a76141"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1357f9a3b2ffb9522883ad84affa63e3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a1357f9a3b2ffb9522883ad84affa63e3_cgraph.png" border="0" usemap="#slu__sdefs_8h_a1357f9a3b2ffb9522883ad84affa63e3_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a1357f9a3b2ffb9522883ad84affa63e3_cgraph" id="slu__sdefs_8h_a1357f9a3b2ffb9522883ad84affa63e3_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="269,5,352,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a6ad9d9454734717431356db0e8eb5deb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void sreadhb </td>
+ <td>(</td>
+ <td class="paramtype">FILE * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a6ad9d9454734717431356db0e8eb5deb_cgraph.png" border="0" usemap="#slu__sdefs_8h_a6ad9d9454734717431356db0e8eb5deb_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a6ad9d9454734717431356db0e8eb5deb_cgraph" id="slu__sdefs_8h_a6ad9d9454734717431356db0e8eb5deb_cgraph">
+<area shape="rect" id="node2" href="sreadhb_8c.html#a752858dee322b95e4175c3f5d42ad6cd" title="Eat up the rest of the current line. " alt="" coords="145,5,233,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#aaef6f98786d0bd76103237385ddbeb9f" title="Allocate storage for original matrix A. " alt="" coords="148,56,231,83"/><area shape="rect" id="node6" href="sreadhb_8c.html#ab0bd0cdb6d30a7cb74e401aa6ac3bce1" title="sParseIntFormat" alt="" coords="130,107,249,133"/><area shape="re [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab345670a95db3f9c4b9c451224db8227"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad992a573876b4abfe192ec2bc207f6b0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_ad992a573876b4abfe192ec2bc207f6b0_cgraph.png" border="0" usemap="#slu__sdefs_8h_ad992a573876b4abfe192ec2bc207f6b0_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_ad992a573876b4abfe192ec2bc207f6b0_cgraph" id="slu__sdefs_8h_ad992a573876b4abfe192ec2bc207f6b0_cgraph">
+<area shape="rect" id="node2" href="sreadrb_8c.html#ad40eef9e3223cc000a38a8fb326f1dd1" title="Eat up the rest of the current line. " alt="" coords="143,5,231,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#aaef6f98786d0bd76103237385ddbeb9f" title="Allocate storage for original matrix A. " alt="" coords="145,56,228,83"/><area shape="rect" id="node6" href="sreadrb_8c.html#a3ff3c5edc1cf7301cff66260418cac52" title="sParseIntFormat" alt="" coords="127,107,246,133"/><area shape="re [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ae99cb18465c8992235a7bc003237f692"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_ae99cb18465c8992235a7bc003237f692_cgraph.png" border="0" usemap="#slu__sdefs_8h_ae99cb18465c8992235a7bc003237f692_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_ae99cb18465c8992235a7bc003237f692_cgraph" id="slu__sdefs_8h_ae99cb18465c8992235a7bc003237f692_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#aaef6f98786d0bd76103237385ddbeb9f" title="Allocate storage for original matrix A. " alt="" coords="136,31,219,57"/><area shape="rect" id="node3" href="smemory_8c.html#a4a866452c5dcba66083ef463662955ee" title="floatMalloc" alt="" coords="267,5,352,32"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="272,56,347,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab5b2859bf1ef1900506dfa702574c6ad"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_ab5b2859bf1ef1900506dfa702574c6ad_cgraph.png" border="0" usemap="#slu__sdefs_8h_ab5b2859bf1ef1900506dfa702574c6ad_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_ab5b2859bf1ef1900506dfa702574c6ad_cgraph" id="slu__sdefs_8h_ab5b2859bf1ef1900506dfa702574c6ad_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="144,5,211,32"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#a2d734e40276e89a3ef04bf79bc21acb6" title="Fills a float precision array with a given value. " alt="" coords="156,56,199,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="259,5,341,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a60e60255360fae0b1458da070690a3a2"></a>
+<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">, </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">const 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"><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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_a60e60255360fae0b1458da070690a3a2_cgraph.png" border="0" usemap="#slu__sdefs_8h_a60e60255360fae0b1458da070690a3a2_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_a60e60255360fae0b1458da070690a3a2_cgraph" id="slu__sdefs_8h_a60e60255360fae0b1458da070690a3a2_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#aab583b502d3953688a3fa27a9f4bbf1e" title="strsv_" alt="" coords="164,5,223,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#ae29fbdb32369b70973b05d14fc3420c9" title="sgemv_" alt="" coords="159,56,227,83"/><area shape="rect" id="node4" href="scolumn__bmod_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c" title="Solves a dense UNIT lower triangular system. " alt="" coords="162,107,225,133"/><area shape="rect" id="node5" href="scolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad9d54c8dfc11f1e034b4b7175be60ffb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ssnode__dfs_8c.html#a5b66817c89ddf9f74e4773b49dc72872">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__sdefs_8h_ad9d54c8dfc11f1e034b4b7175be60ffb_cgraph.png" border="0" usemap="#slu__sdefs_8h_ad9d54c8dfc11f1e034b4b7175be60ffb_cgraph" alt=""/></div>
+<map name="slu__sdefs_8h_ad9d54c8dfc11f1e034b4b7175be60ffb_cgraph" id="slu__sdefs_8h_ad9d54c8dfc11f1e034b4b7175be60ffb_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="144,107,256,133"/><area shape="rect" id="node3" href="smemory_8c.html#aa2862f14356be7d9f12bfdfc175137a1" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="329,81,399,108"/><area shape="rect" id="node8" href="smemory_8c.html#a658f955c5532813bd0490502efae563f" title="smemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a68de665c44346f6eacfe87e9f3c2a1e6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int strsm_ </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">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>
+ </tr>
+ <tr>
+ <td class="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">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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aab583b502d3953688a3fa27a9f4bbf1e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int strsv_ </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">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">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slu__util_8h.html b/SuperLU_5.2.0/DOC/html/slu__util_8h.html
new file mode 100644
index 0000000..c8c2662
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slu__util_8h.html
@@ -0,0 +1,2254 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slu_util.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slu_util.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Utility header file.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slu_util.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h__incl.png" border="0" usemap="#SRC_2slu__util_8h" alt=""/></div>
+<map name="SRC_2slu__util_8h" id="SRC_2slu__util_8h">
+<area shape="rect" id="node6" href="superlu__enum__consts_8h.html" title="enum constants header file " alt="" coords="363,80,521,107"/></map>
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h__dep__incl.png" border="0" usemap="#SRC_2slu__util_8hdep" alt=""/></div>
+<map name="SRC_2slu__util_8hdep" id="SRC_2slu__util_8hdep">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="3109,80,3232,107"/><area shape="rect" id="node48" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="3256,80,3379,107"/><area shape="rect" id="node49" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="3403,80,3525,107"/><area shape="rect" id="node50" href="slu__zdefs_8h.html" title="Header file for real operation [...]
+</div>
+</div>
+<p><a href="slu__util_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" 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 class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structe__node.html">e_node</a></td></tr>
+<tr class="memdesc:"><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 class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" 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 class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" 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 class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html">GlobalLU_t</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a745e85e3ef4b1267858c9df86608518c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a745e85e3ef4b1267858c9df86608518c">FIRSTCOL_OF_SNODE</a>(i) (xsup[i])</td></tr>
+<tr class="separator:a745e85e3ef4b1267858c9df86608518c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9b7b2a5116ee487722b0967317ab6360"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a> 3</td></tr>
+<tr class="separator:a9b7b2a5116ee487722b0967317ab6360"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06193b28f40a4779ae7737711642eb45"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a06193b28f40a4779ae7737711642eb45">NUM_TEMPV</a>(m, w, t, b) ( <a class="el" href="slu__util_8h.html#adca8259e9d345c7cbaaa0608a1acdfd4">SUPERLU_MAX</a>(m, (t + b)*w) )</td></tr>
+<tr class="separator:a06193b28f40a4779ae7737711642eb45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaba7be0a786a716c200675ac43827e2a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aaba7be0a786a716c200675ac43827e2a">USER_ABORT</a>(msg) <a class="el" href="util_8c.html#a060bded38730c2e58fa7f7e19c43ba08">superlu_abort_and_exit</a>(msg)</td></tr>
+<tr class="separator:aaba7be0a786a716c200675ac43827e2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4b133a54309e2c6e4ba69f3ff1141c2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aa4b133a54309e2c6e4ba69f3ff1141c2">ABORT</a>(err_msg)</td></tr>
+<tr class="separator:aa4b133a54309e2c6e4ba69f3ff1141c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a232b101af98715228590ae6e089f4c65"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a232b101af98715228590ae6e089f4c65">USER_MALLOC</a>(size) <a class="el" href="slu__util_8h.html#a7ec97fcbe08a55ad56048a43919d6843">superlu_malloc</a>(size)</td></tr>
+<tr class="separator:a232b101af98715228590ae6e089f4c65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a55a5ed83733c30850c14cc7b3f922a54"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a55a5ed83733c30850c14cc7b3f922a54">SUPERLU_MALLOC</a>(size) <a class="el" href="slu__util_8h.html#a232b101af98715228590ae6e089f4c65">USER_MALLOC</a>(size)</td></tr>
+<tr class="separator:a55a5ed83733c30850c14cc7b3f922a54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad7924033040c27afdb4a51ac9f8295b1"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ad7924033040c27afdb4a51ac9f8295b1">USER_FREE</a>(addr) <a class="el" href="slu__util_8h.html#a1745be2114a7b66ea7632292b03cb3ce">superlu_free</a>(addr)</td></tr>
+<tr class="separator:ad7924033040c27afdb4a51ac9f8295b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9672c5511c3efd9467e4d375a347c192"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a9672c5511c3efd9467e4d375a347c192">SUPERLU_FREE</a>(addr) <a class="el" href="slu__util_8h.html#ad7924033040c27afdb4a51ac9f8295b1">USER_FREE</a>(addr)</td></tr>
+<tr class="separator:a9672c5511c3efd9467e4d375a347c192"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a35401f732a50d2a0af33db1ea224b1f6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a35401f732a50d2a0af33db1ea224b1f6">CHECK_MALLOC</a>(where)</td></tr>
+<tr class="separator:a35401f732a50d2a0af33db1ea224b1f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adca8259e9d345c7cbaaa0608a1acdfd4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#adca8259e9d345c7cbaaa0608a1acdfd4">SUPERLU_MAX</a>(x, y) ( (x) > (y) ? (x) : (y) )</td></tr>
+<tr class="separator:adca8259e9d345c7cbaaa0608a1acdfd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7147dd5df1048562cd4ab83e9fd808d9"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a7147dd5df1048562cd4ab83e9fd808d9">SUPERLU_MIN</a>(x, y) ( (x) < (y) ? (x) : (y) )</td></tr>
+<tr class="separator:a7147dd5df1048562cd4ab83e9fd808d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a445a44f88349753bc17f28fbac4df382"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a445a44f88349753bc17f28fbac4df382">L_SUB_START</a>(col) ( Lstore->rowind_colptr[col] )</td></tr>
+<tr class="separator:a445a44f88349753bc17f28fbac4df382"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8de2450f2d4cf12794954b63a319c423"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a8de2450f2d4cf12794954b63a319c423">L_SUB</a>(ptr) ( Lstore->rowind[ptr] )</td></tr>
+<tr class="separator:a8de2450f2d4cf12794954b63a319c423"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a79b13489e4cd00b09633e0c5e0be1b7c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a79b13489e4cd00b09633e0c5e0be1b7c">L_NZ_START</a>(col) ( Lstore->nzval_colptr[col] )</td></tr>
+<tr class="separator:a79b13489e4cd00b09633e0c5e0be1b7c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ea367a3afecd30b570d0a46cc819cdf"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a0ea367a3afecd30b570d0a46cc819cdf">L_FST_SUPC</a>(superno) ( Lstore->sup_to_col[superno] )</td></tr>
+<tr class="separator:a0ea367a3afecd30b570d0a46cc819cdf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac641190b1a047ebcf224372cb3dfec68"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ac641190b1a047ebcf224372cb3dfec68">U_NZ_START</a>(col) ( Ustore->colptr[col] )</td></tr>
+<tr class="separator:ac641190b1a047ebcf224372cb3dfec68"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbd74ce05240823854ebfcd301f200e8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#acbd74ce05240823854ebfcd301f200e8">U_SUB</a>(ptr) ( Ustore->rowind[ptr] )</td></tr>
+<tr class="separator:acbd74ce05240823854ebfcd301f200e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2b7cf2a3641be7b89138615764d60ba3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a2b7cf2a3641be7b89138615764d60ba3">EMPTY</a> (-1)</td></tr>
+<tr class="separator:a2b7cf2a3641be7b89138615764d60ba3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa93f0eb578d23995850d61f7d61c55c1"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aa93f0eb578d23995850d61f7d61c55c1">FALSE</a> 0</td></tr>
+<tr class="separator:aa93f0eb578d23995850d61f7d61c55c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a> 1</td></tr>
+<tr class="separator:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab9ccb8b9963ca083d7f36f5d3acc5744"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ab9ccb8b9963ca083d7f36f5d3acc5744">NO_MEMTYPE</a></td></tr>
+<tr class="separator:ab9ccb8b9963ca083d7f36f5d3acc5744"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad3754689b2ab3abc8b3afe4facdd76f3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ad3754689b2ab3abc8b3afe4facdd76f3">GluIntArray</a>(n) (5 * (n) + 5)</td></tr>
+<tr class="separator:ad3754689b2ab3abc8b3afe4facdd76f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa1b4d4ec24548decf1f389060a7d878"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aaa1b4d4ec24548decf1f389060a7d878">NODROP</a> ( 0x0000 )</td></tr>
+<tr class="separator:aaa1b4d4ec24548decf1f389060a7d878"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb51a22d4d20fb9e39acd95129344997"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#afb51a22d4d20fb9e39acd95129344997">DROP_BASIC</a> ( 0x0001 ) /* ILU(tau) */</td></tr>
+<tr class="separator:afb51a22d4d20fb9e39acd95129344997"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a34a649fce94fb9a61524f3b18161aef8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a34a649fce94fb9a61524f3b18161aef8">DROP_PROWS</a> ( 0x0002 ) /* ILUTP: keep p maximum rows */</td></tr>
+<tr class="separator:a34a649fce94fb9a61524f3b18161aef8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a741f1ee3e9529b1384492787d09a0c70"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a741f1ee3e9529b1384492787d09a0c70">DROP_COLUMN</a></td></tr>
+<tr class="separator:a741f1ee3e9529b1384492787d09a0c70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae56780c0f0b5afa706231cbe2b1ee82f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ae56780c0f0b5afa706231cbe2b1ee82f">DROP_AREA</a></td></tr>
+<tr class="separator:ae56780c0f0b5afa706231cbe2b1ee82f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72349305248ecb540ca43f404884bef5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a72349305248ecb540ca43f404884bef5">DROP_SECONDARY</a> ( 0x000E ) /* PROWS | COLUMN | AREA */</td></tr>
+<tr class="separator:a72349305248ecb540ca43f404884bef5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac6089af2caea8fef6aa343cb16fd1646"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ac6089af2caea8fef6aa343cb16fd1646">DROP_DYNAMIC</a> ( 0x0010 ) /* adaptive tau */</td></tr>
+<tr class="separator:ac6089af2caea8fef6aa343cb16fd1646"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aea78484190db0dd61d91743797bf6bfe"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aea78484190db0dd61d91743797bf6bfe">DROP_INTERP</a> ( 0x0100 ) /* use interpolation */</td></tr>
+<tr class="separator:aea78484190db0dd61d91743797bf6bfe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a90dea7f830398b8c30be7488e24089bb"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a90dea7f830398b8c30be7488e24089bb">MILU_ALPHA</a> (1.0e-2) /* multiple of drop_sum to be added to diagonal */</td></tr>
+<tr class="separator:a90dea7f830398b8c30be7488e24089bb"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:aaae6020bb33e780ff6edbd4e45ce08ac"><td class="memItemLeft" align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aaae6020bb33e780ff6edbd4e45ce08ac">flops_t</a></td></tr>
+<tr class="separator:aaae6020bb33e780ff6edbd4e45ce08ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a30f473cd214dc43270f7a4d54b2887d2"><td class="memItemLeft" align="right" valign="top">typedef unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a30f473cd214dc43270f7a4d54b2887d2">Logical</a></td></tr>
+<tr class="separator:a30f473cd214dc43270f7a4d54b2887d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac071de4d8a39e15f13c92a5f60bc16f0"><td class="memItemLeft" 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#ac071de4d8a39e15f13c92a5f60bc16f0">ExpHeader</a></td></tr>
+<tr class="memdesc:ac071de4d8a39e15f13c92a5f60bc16f0"><td class="mdescLeft"> </td><td class="mdescRight">Headers for 4 types of dynamatically managed memory. <a href="#ac071de4d8a39e15f13c92a5f60bc16f0">More...</a><br/></td></tr>
+<tr class="separator:ac071de4d8a39e15f13c92a5f60bc16f0"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a89d63af74d9accdbcd7e859b687130cc"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a89d63af74d9accdbcd7e859b687130cc">input_error</a> (char *, int *)</td></tr>
+<tr class="separator:a89d63af74d9accdbcd7e859b687130cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2c43be55861c6e4ee5b806ac16cc382c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a2c43be55861c6e4ee5b806ac16cc382c">Destroy_SuperMatrix_Store</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a2c43be55861c6e4ee5b806ac16cc382c"><td class="mdescLeft"> </td><td class="mdescRight">Deallocate the structure pointing to the actual storage of the matrix. <a href="#a2c43be55861c6e4ee5b806ac16cc382c">More...</a><br/></td></tr>
+<tr class="separator:a2c43be55861c6e4ee5b806ac16cc382c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4257e4d9cca1db286b73154d81ec3880"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a4257e4d9cca1db286b73154d81ec3880">Destroy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:a4257e4d9cca1db286b73154d81ec3880"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98cbb427c29a6be1760288b63857bc12"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a98cbb427c29a6be1760288b63857bc12">Destroy_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:a98cbb427c29a6be1760288b63857bc12"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade01201644d38ff78cd1824ff2e5022b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ade01201644d38ff78cd1824ff2e5022b">Destroy_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:ade01201644d38ff78cd1824ff2e5022b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4de38e1c0ef18dd0791cb206c7f5348f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a4de38e1c0ef18dd0791cb206c7f5348f">Destroy_CompCol_Permuted</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a4de38e1c0ef18dd0791cb206c7f5348f"><td class="mdescLeft"> </td><td class="mdescRight">A is of type Stype==NCP. <a href="#a4de38e1c0ef18dd0791cb206c7f5348f">More...</a><br/></td></tr>
+<tr class="separator:a4de38e1c0ef18dd0791cb206c7f5348f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9f7e658f2e17e08b2d88fadc11f2b437"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a9f7e658f2e17e08b2d88fadc11f2b437">Destroy_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a9f7e658f2e17e08b2d88fadc11f2b437"><td class="mdescLeft"> </td><td class="mdescRight">A is of type Stype==DN. <a href="#a9f7e658f2e17e08b2d88fadc11f2b437">More...</a><br/></td></tr>
+<tr class="separator:a9f7e658f2e17e08b2d88fadc11f2b437"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a263122009c4421188a14285798b7bff7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a263122009c4421188a14285798b7bff7">get_perm_c</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *)</td></tr>
+<tr class="separator:a263122009c4421188a14285798b7bff7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4792687285a879f7955029421ba99795"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a4792687285a879f7955029421ba99795">set_default_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+<tr class="memdesc:a4792687285a879f7955029421ba99795"><td class="mdescLeft"> </td><td class="mdescRight">Set the default values for the options argument. <a href="#a4792687285a879f7955029421ba99795">More...</a><br/></td></tr>
+<tr class="separator:a4792687285a879f7955029421ba99795"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afce6cba2b855a4b046f6521d5dd1beb4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#afce6cba2b855a4b046f6521d5dd1beb4">ilu_set_default_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+<tr class="memdesc:afce6cba2b855a4b046f6521d5dd1beb4"><td class="mdescLeft"> </td><td class="mdescRight">Set the default values for the options argument for ILU. <a href="#afce6cba2b855a4b046f6521d5dd1beb4">More...</a><br/></td></tr>
+<tr class="separator:afce6cba2b855a4b046f6521d5dd1beb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adf9c573cbfb4520a5ea820702d27cfa5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#adf9c573cbfb4520a5ea820702d27cfa5">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 class="separator:adf9c573cbfb4520a5ea820702d27cfa5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abd38b081866ed2c3e4959c4c0560913c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#abd38b081866ed2c3e4959c4c0560913c">superlu_abort_and_exit</a> (char *)</td></tr>
+<tr class="memdesc:abd38b081866ed2c3e4959c4c0560913c"><td class="mdescLeft"> </td><td class="mdescRight">Global statistics variale. <a href="#abd38b081866ed2c3e4959c4c0560913c">More...</a><br/></td></tr>
+<tr class="separator:abd38b081866ed2c3e4959c4c0560913c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ec97fcbe08a55ad56048a43919d6843"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a7ec97fcbe08a55ad56048a43919d6843">superlu_malloc</a> (size_t)</td></tr>
+<tr class="separator:a7ec97fcbe08a55ad56048a43919d6843"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5e3eb5cdc6962ab8238dd3e663bea67"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ac5e3eb5cdc6962ab8238dd3e663bea67">intMalloc</a> (int)</td></tr>
+<tr class="separator:ac5e3eb5cdc6962ab8238dd3e663bea67"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af7f89277b471647ea6b3581ca11becd3"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#af7f89277b471647ea6b3581ca11becd3">intCalloc</a> (int)</td></tr>
+<tr class="separator:af7f89277b471647ea6b3581ca11becd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1745be2114a7b66ea7632292b03cb3ce"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a1745be2114a7b66ea7632292b03cb3ce">superlu_free</a> (void *)</td></tr>
+<tr class="separator:a1745be2114a7b66ea7632292b03cb3ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeaaa4cb43f415698df4f891e1a1afaa4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aeaaa4cb43f415698df4f891e1a1afaa4">SetIWork</a> (int, int, int, int *, int **, int **, int **, int **, int **, int **, int **)</td></tr>
+<tr class="memdesc:aeaaa4cb43f415698df4f891e1a1afaa4"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for integer working arrays. <a href="#aeaaa4cb43f415698df4f891e1a1afaa4">More...</a><br/></td></tr>
+<tr class="separator:aeaaa4cb43f415698df4f891e1a1afaa4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8198f26bef3c82fbb8601fc5a8e0d9e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#af8198f26bef3c82fbb8601fc5a8e0d9e">sp_coletree</a> (int *, int *, int *, int, int, int *)</td></tr>
+<tr class="separator:af8198f26bef3c82fbb8601fc5a8e0d9e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa9dcebe0d2709ff7ab053c3acb8f35af"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aa9dcebe0d2709ff7ab053c3acb8f35af">relax_snode</a> (const int, int *, const int, int *, int *)</td></tr>
+<tr class="separator:aa9dcebe0d2709ff7ab053c3acb8f35af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade3f23f612ced035318a59623b6925e5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ade3f23f612ced035318a59623b6925e5">heap_relax_snode</a> (const int, int *, const int, int *, int *)</td></tr>
+<tr class="separator:ade3f23f612ced035318a59623b6925e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a23057ebe27329fd8fc65970c7c3e2b3f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a23057ebe27329fd8fc65970c7c3e2b3f">mark_relax</a> (int, int *, int *, int *, int *, int *, int *)</td></tr>
+<tr class="separator:a23057ebe27329fd8fc65970c7c3e2b3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2212f489d8bb77b74c61e0a7442796a8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a2212f489d8bb77b74c61e0a7442796a8">ilu_relax_snode</a> (const int, int *, const int, int *, int *, int *)</td></tr>
+<tr class="separator:a2212f489d8bb77b74c61e0a7442796a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acd37f89f3fd101b2860c26b45bd4c2a1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#acd37f89f3fd101b2860c26b45bd4c2a1">ilu_heap_relax_snode</a> (const int, int *, const int, int *, int *, int *)</td></tr>
+<tr class="separator:acd37f89f3fd101b2860c26b45bd4c2a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab71db926d60d7b8fd739df197b766366"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ab71db926d60d7b8fd739df197b766366">resetrep_col</a> (const int, const int *, int *)</td></tr>
+<tr class="memdesc:ab71db926d60d7b8fd739df197b766366"><td class="mdescLeft"> </td><td class="mdescRight">Reset repfnz[] for the current column. <a href="#ab71db926d60d7b8fd739df197b766366">More...</a><br/></td></tr>
+<tr class="separator:ab71db926d60d7b8fd739df197b766366"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0bccee6dda29384503240026c062bfc6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a0bccee6dda29384503240026c062bfc6">spcoletree</a> (int *, int *, int *, int, int, int *)</td></tr>
+<tr class="separator:a0bccee6dda29384503240026c062bfc6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44084fde835d2ccaa25e9fd942a72b7a"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a44084fde835d2ccaa25e9fd942a72b7a">TreePostorder</a> (int, int *)</td></tr>
+<tr class="separator:a44084fde835d2ccaa25e9fd942a72b7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0c6777573bbfe81917cd381e0090d355"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355">SuperLU_timer_</a> ()</td></tr>
+<tr class="memdesc:a0c6777573bbfe81917cd381e0090d355"><td class="mdescLeft"> </td><td class="mdescRight">Timer function. <a href="#a0c6777573bbfe81917cd381e0090d355">More...</a><br/></td></tr>
+<tr class="separator:a0c6777573bbfe81917cd381e0090d355"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a72be96e75e58564c4322ef9ef73ca65f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f">sp_ienv</a> (int)</td></tr>
+<tr class="separator:a72be96e75e58564c4322ef9ef73ca65f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8ddc46fddd8c0c53fc9e77fefdf9a456"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a8ddc46fddd8c0c53fc9e77fefdf9a456">xerbla_</a> (char *, int *)</td></tr>
+<tr class="separator:a8ddc46fddd8c0c53fc9e77fefdf9a456"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab0dfb6551008bcad5e758defdbd13006"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006">ifill</a> (int *, int, int)</td></tr>
+<tr class="memdesc:ab0dfb6551008bcad5e758defdbd13006"><td class="mdescLeft"> </td><td class="mdescRight">Fills an integer array with a given value. <a href="#ab0dfb6551008bcad5e758defdbd13006">More...</a><br/></td></tr>
+<tr class="separator:ab0dfb6551008bcad5e758defdbd13006"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a01ded59744addeefd265dbb22d9f37d0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a01ded59744addeefd265dbb22d9f37d0">snode_profile</a> (int, int *)</td></tr>
+<tr class="separator:a01ded59744addeefd265dbb22d9f37d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac33e407326ae1dc222aee7ff08f322cf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ac33e407326ae1dc222aee7ff08f322cf">super_stats</a> (int, int *)</td></tr>
+<tr class="separator:ac33e407326ae1dc222aee7ff08f322cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9e29ce75ab694aa7fdb32b7644f9da69"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a9e29ce75ab694aa7fdb32b7644f9da69">check_repfnz</a> (int, int, int, int *)</td></tr>
+<tr class="memdesc:a9e29ce75ab694aa7fdb32b7644f9da69"><td class="mdescLeft"> </td><td class="mdescRight">Check whether repfnz[] == EMPTY after reset. <a href="#a9e29ce75ab694aa7fdb32b7644f9da69">More...</a><br/></td></tr>
+<tr class="separator:a9e29ce75ab694aa7fdb32b7644f9da69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47292875a12f5601efa82a4350656db8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a47292875a12f5601efa82a4350656db8">PrintSumm</a> (char *, int, int, int)</td></tr>
+<tr class="memdesc:a47292875a12f5601efa82a4350656db8"><td class="mdescLeft"> </td><td class="mdescRight">Print a summary of the testing results. <a href="#a47292875a12f5601efa82a4350656db8">More...</a><br/></td></tr>
+<tr class="separator:a47292875a12f5601efa82a4350656db8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b979ab4f4e75bdc1b89106dde6c8d72"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a3b979ab4f4e75bdc1b89106dde6c8d72">StatInit</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+<tr class="separator:a3b979ab4f4e75bdc1b89106dde6c8d72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa157fecae472b8ef5ce79bd59876099d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#aa157fecae472b8ef5ce79bd59876099d">StatPrint</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+<tr class="separator:aa157fecae472b8ef5ce79bd59876099d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab0fb3345d479a7ac24f75f0e64bdff4b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ab0fb3345d479a7ac24f75f0e64bdff4b">StatFree</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *)</td></tr>
+<tr class="separator:ab0fb3345d479a7ac24f75f0e64bdff4b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a48208ca68e95c765c0c55c12b196d79e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a48208ca68e95c765c0c55c12b196d79e">print_panel_seg</a> (int, int, int, int, int *, int *)</td></tr>
+<tr class="memdesc:a48208ca68e95c765c0c55c12b196d79e"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of segment info after panel_dfs(). <a href="#a48208ca68e95c765c0c55c12b196d79e">More...</a><br/></td></tr>
+<tr class="separator:a48208ca68e95c765c0c55c12b196d79e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8a3ba6cbe163f9c12f6f10ee8ba98fc7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#a8a3ba6cbe163f9c12f6f10ee8ba98fc7">print_int_vec</a> (char *, int, int *)</td></tr>
+<tr class="separator:a8a3ba6cbe163f9c12f6f10ee8ba98fc7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ade363dcb4babb66fa0e5f51bd2e6e42c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__util_8h.html#ade363dcb4babb66fa0e5f51bd2e6e42c">slu_PrintInt10</a> (char *, int, int *)</td></tr>
+<tr class="separator:ade363dcb4babb66fa0e5f51bd2e6e42c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<p>– SuperLU routine (version 4.1) – Univ. of California Berkeley, Xerox Palo Alto Research Center, and Lawrence Berkeley National Lab. November, 2010 </p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="aa4b133a54309e2c6e4ba69f3ff1141c2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ABORT</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">err_msg</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ <span class="keywordtype">char</span> msg[256];\</div>
+<div class="line"> 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#aaba7be0a786a716c200675ac43827e2a">\</a></div>
+<div class="line"><a class="code" href="slu__util_8h.html#aaba7be0a786a716c200675ac43827e2a"> USER_ABORT</a>(msg); }</div>
+<div class="ttc" id="slu__util_8h_html_aaba7be0a786a716c200675ac43827e2a"><div class="ttname"><a href="slu__util_8h.html#aaba7be0a786a716c200675ac43827e2a">USER_ABORT</a></div><div class="ttdeci">#define USER_ABORT(msg)</div><div class="ttdef"><b>Definition:</b> slu_util.h:45</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a35401f732a50d2a0af33db1ea224b1f6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CHECK_MALLOC</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">where</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{ \</div>
+<div class="line"> extern <span class="keywordtype">int</span> superlu_malloc_total; \</div>
+<div class="line"> printf(<span class="stringliteral">"%s: malloc_total %d Bytes\n"</span>, \</div>
+<div class="line"> where, superlu_malloc_total); \</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="ae56780c0f0b5afa706231cbe2b1ee82f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DROP_AREA</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">( 0x0008 ) <span class="comment">/* ILUTP: for j-th column, use</span></div>
+<div class="line"><span class="comment"> nnz(F(:,1:j)) / nnz(A(:,1:j))</span></div>
+<div class="line"><span class="comment"> to limit memory growth */</span></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="afb51a22d4d20fb9e39acd95129344997"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DROP_BASIC ( 0x0001 ) /* ILU(tau) */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a741f1ee3e9529b1384492787d09a0c70"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DROP_COLUMN</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">( 0x0004 ) <span class="comment">/* ILUTP: for j-th column, </span></div>
+<div class="line"><span class="comment"> p = gamma * nnz(A(:,j)) */</span></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="ac6089af2caea8fef6aa343cb16fd1646"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DROP_DYNAMIC ( 0x0010 ) /* adaptive tau */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aea78484190db0dd61d91743797bf6bfe"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DROP_INTERP ( 0x0100 ) /* use interpolation */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a34a649fce94fb9a61524f3b18161aef8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DROP_PROWS ( 0x0002 ) /* ILUTP: keep p maximum rows */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a72349305248ecb540ca43f404884bef5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DROP_SECONDARY ( 0x000E ) /* PROWS | COLUMN | AREA */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2b7cf2a3641be7b89138615764d60ba3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define EMPTY (-1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa93f0eb578d23995850d61f7d61c55c1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FALSE 0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a745e85e3ef4b1267858c9df86608518c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FIRSTCOL_OF_SNODE</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">i</td><td>)</td>
+ <td> (xsup[i])</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad3754689b2ab3abc8b3afe4facdd76f3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GluIntArray</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">n</td><td>)</td>
+ <td> (5 * (n) + 5)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0ea367a3afecd30b570d0a46cc819cdf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define L_FST_SUPC</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">superno</td><td>)</td>
+ <td> ( Lstore->sup_to_col[superno] )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a79b13489e4cd00b09633e0c5e0be1b7c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define L_NZ_START</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">col</td><td>)</td>
+ <td> ( Lstore->nzval_colptr[col] )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8de2450f2d4cf12794954b63a319c423"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define L_SUB</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">ptr</td><td>)</td>
+ <td> ( Lstore->rowind[ptr] )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a445a44f88349753bc17f28fbac4df382"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define L_SUB_START</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">col</td><td>)</td>
+ <td> ( Lstore->rowind_colptr[col] )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a90dea7f830398b8c30be7488e24089bb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MILU_ALPHA (1.0e-2) /* multiple of drop_sum to be added to diagonal */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9b7b2a5116ee487722b0967317ab6360"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NO_MARKER 3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab9ccb8b9963ca083d7f36f5d3acc5744"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NO_MEMTYPE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">4 <span class="comment">/* 0: lusup;</span></div>
+<div class="line"><span class="comment"> 1: ucol;</span></div>
+<div class="line"><span class="comment"> 2: lsub;</span></div>
+<div class="line"><span class="comment"> 3: usub */</span></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="aaa1b4d4ec24548decf1f389060a7d878"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NODROP ( 0x0000 )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a06193b28f40a4779ae7737711642eb45"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NUM_TEMPV</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">m, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">w, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">t, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">b </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> ( <a class="el" href="slu__util_8h.html#adca8259e9d345c7cbaaa0608a1acdfd4">SUPERLU_MAX</a>(m, (t + b)*w) )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9672c5511c3efd9467e4d375a347c192"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SUPERLU_FREE</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> <a class="el" href="slu__util_8h.html#ad7924033040c27afdb4a51ac9f8295b1">USER_FREE</a>(addr)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a55a5ed83733c30850c14cc7b3f922a54"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SUPERLU_MALLOC</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">size</td><td>)</td>
+ <td> <a class="el" href="slu__util_8h.html#a232b101af98715228590ae6e089f4c65">USER_MALLOC</a>(size)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adca8259e9d345c7cbaaa0608a1acdfd4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SUPERLU_MAX</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">y </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> ( (x) > (y) ? (x) : (y) )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7147dd5df1048562cd4ab83e9fd808d9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SUPERLU_MIN</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">y </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> ( (x) < (y) ? (x) : (y) )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa8cecfc5c5c054d2875c03e77b7be15d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define TRUE 1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac641190b1a047ebcf224372cb3dfec68"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define U_NZ_START</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">col</td><td>)</td>
+ <td> ( Ustore->colptr[col] )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acbd74ce05240823854ebfcd301f200e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define U_SUB</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">ptr</td><td>)</td>
+ <td> ( Ustore->rowind[ptr] )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaba7be0a786a716c200675ac43827e2a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define USER_ABORT</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">msg</td><td>)</td>
+ <td> <a class="el" href="util_8c.html#a060bded38730c2e58fa7f7e19c43ba08">superlu_abort_and_exit</a>(msg)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad7924033040c27afdb4a51ac9f8295b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define USER_FREE</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> <a class="el" href="slu__util_8h.html#a1745be2114a7b66ea7632292b03cb3ce">superlu_free</a>(addr)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a232b101af98715228590ae6e089f4c65"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define USER_MALLOC</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">size</td><td>)</td>
+ <td> <a class="el" href="slu__util_8h.html#a7ec97fcbe08a55ad56048a43919d6843">superlu_malloc</a>(size)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ac071de4d8a39e15f13c92a5f60bc16f0"></a>
+<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="slu__util_8h.html#ac071de4d8a39e15f13c92a5f60bc16f0">ExpHeader</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaae6020bb33e780ff6edbd4e45ce08ac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef float <a class="el" href="slu__util_8h.html#aaae6020bb33e780ff6edbd4e45ce08ac">flops_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a30f473cd214dc43270f7a4d54b2887d2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef unsigned char <a class="el" href="slu__util_8h.html#a30f473cd214dc43270f7a4d54b2887d2">Logical</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a9e29ce75ab694aa7fdb32b7644f9da69"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4257e4d9cca1db286b73154d81ec3880"></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"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4de38e1c0ef18dd0791cb206c7f5348f"></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"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a98cbb427c29a6be1760288b63857bc12"></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"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9f7e658f2e17e08b2d88fadc11f2b437"></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"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2c43be55861c6e4ee5b806ac16cc382c"></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"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ade01201644d38ff78cd1824ff2e5022b"></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"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a263122009c4421188a14285798b7bff7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_a263122009c4421188a14285798b7bff7_cgraph.png" border="0" usemap="#slu__util_8h_a263122009c4421188a14285798b7bff7_cgraph" alt=""/></div>
+<map name="slu__util_8h_a263122009c4421188a14285798b7bff7_cgraph" id="slu__util_8h_a263122009c4421188a14285798b7bff7_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="145,5,261,32"/><area shape="rect" id="node3" href="get__perm__c_8c.html#a90f30e2b284864f6a800a98ceaff8fbc" title="getata" alt="" coords="173,56,232,83"/><area shape="rect" id="node4" href="get__perm__c_8c.html#a486ee50799ff66abe91efa46a5950a57" title="at_plus_a" alt="" coords="163,107,242,133"/><area shape="rect" id="node5" href="get__perm__c_8c.html#ae92c26cd4 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ade3f23f612ced035318a59623b6925e5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="relax__snode_8c.html#ad70bc12cb9031ab8aba4a37a18be46e3">relax_snode()</a> - Identify the initial relaxed supernodes, assuming that
+ the matrix has been reordered according to the postorder of the etree.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_ade3f23f612ced035318a59623b6925e5_cgraph.png" border="0" usemap="#slu__util_8h_ade3f23f612ced035318a59623b6925e5_cgraph" alt=""/></div>
+<map name="slu__util_8h_ade3f23f612ced035318a59623b6925e5_cgraph" id="slu__util_8h_ade3f23f612ced035318a59623b6925e5_cgraph">
+<area shape="rect" id="node2" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="196,5,271,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a44084fde835d2ccaa25e9fd942a72b7a" title="TreePostorder" alt="" coords="181,56,285,83"/><area shape="rect" id="node7" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="214,107,253,133"/><area shape="rect" id="node4" href="sp__co [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab0dfb6551008bcad5e758defdbd13006"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acd37f89f3fd101b2860c26b45bd4c2a1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__heap__relax__snode_8c.html#aac1a978dda622cdb58c3c2eaee4b4030">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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_acd37f89f3fd101b2860c26b45bd4c2a1_cgraph.png" border="0" usemap="#slu__util_8h_acd37f89f3fd101b2860c26b45bd4c2a1_cgraph" alt=""/></div>
+<map name="slu__util_8h_acd37f89f3fd101b2860c26b45bd4c2a1_cgraph" id="slu__util_8h_acd37f89f3fd101b2860c26b45bd4c2a1_cgraph">
+<area shape="rect" id="node2" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="215,5,289,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a44084fde835d2ccaa25e9fd942a72b7a" title="TreePostorder" alt="" coords="200,56,304,83"/><area shape="rect" id="node7" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="233,107,271,133"/><area shape="rect" id="node4" href="sp__co [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a2212f489d8bb77b74c61e0a7442796a8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__relax__snode_8c.html#ae0e2bbb8507d800766030635a3bd5a7e">ilu_relax_snode()</a> - Identify the initial relaxed supernodes, assuming
+ that the matrix has been reordered according to the postorder of the
+ etree.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_a2212f489d8bb77b74c61e0a7442796a8_cgraph.png" border="0" usemap="#slu__util_8h_a2212f489d8bb77b74c61e0a7442796a8_cgraph" alt=""/></div>
+<map name="slu__util_8h_a2212f489d8bb77b74c61e0a7442796a8_cgraph" id="slu__util_8h_a2212f489d8bb77b74c61e0a7442796a8_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="166,5,205,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afce6cba2b855a4b046f6521d5dd1beb4"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_afce6cba2b855a4b046f6521d5dd1beb4_cgraph.png" border="0" usemap="#slu__util_8h_afce6cba2b855a4b046f6521d5dd1beb4_cgraph" alt=""/></div>
+<map name="slu__util_8h_afce6cba2b855a4b046f6521d5dd1beb4_cgraph" id="slu__util_8h_afce6cba2b855a4b046f6521d5dd1beb4_cgraph">
+<area shape="rect" id="node2" href="util_8c.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="209,5,343,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a89d63af74d9accdbcd7e859b687130cc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int input_error </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>INPUT_ERROR is called if an input parameter has an
+invalid value. A message is printed and execution stops.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>srname (input) character*6
+ The name of the routine which called INPUT_ERROR.</pre><pre>info (input) int
+ The position of the invalid parameter in the parameter list
+ of the calling routine.</pre><pre></pre>
+</div>
+</div>
+<a class="anchor" id="af7f89277b471647ea6b3581ca11becd3"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac5e3eb5cdc6962ab8238dd3e663bea67"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a23057ebe27329fd8fc65970c7c3e2b3f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="mark__relax_8c.html#a5e85b0273eec011f0027d8506a20350e">mark_relax()</a> - record the rows used by the relaxed supernodes.
+</pre>
+</div>
+</div>
+<a class="anchor" id="a8a3ba6cbe163f9c12f6f10ee8ba98fc7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a48208ca68e95c765c0c55c12b196d79e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a47292875a12f5601efa82a4350656db8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa9dcebe0d2709ff7ab053c3acb8f35af"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="relax__snode_8c.html#ad70bc12cb9031ab8aba4a37a18be46e3">relax_snode()</a> - Identify the initial relaxed supernodes, assuming that
+ the matrix has been reordered according to the postorder of the etree.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_aa9dcebe0d2709ff7ab053c3acb8f35af_cgraph.png" border="0" usemap="#slu__util_8h_aa9dcebe0d2709ff7ab053c3acb8f35af_cgraph" alt=""/></div>
+<map name="slu__util_8h_aa9dcebe0d2709ff7ab053c3acb8f35af_cgraph" id="slu__util_8h_aa9dcebe0d2709ff7ab053c3acb8f35af_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="147,5,186,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab71db926d60d7b8fd739df197b766366"></a>
+<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">, </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4792687285a879f7955029421ba99795"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aeaaa4cb43f415698df4f891e1a1afaa4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_aeaaa4cb43f415698df4f891e1a1afaa4_cgraph.png" border="0" usemap="#slu__util_8h_aeaaa4cb43f415698df4f891e1a1afaa4_cgraph" alt=""/></div>
+<map name="slu__util_8h_aeaaa4cb43f415698df4f891e1a1afaa4_cgraph" id="slu__util_8h_aeaaa4cb43f415698df4f891e1a1afaa4_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#ab0dfb6551008bcad5e758defdbd13006" title="Fills an integer array with a given value. " alt="" coords="131,5,170,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ade363dcb4babb66fa0e5f51bd2e6e42c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a01ded59744addeefd265dbb22d9f37d0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af8198f26bef3c82fbb8601fc5a8e0d9e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_af8198f26bef3c82fbb8601fc5a8e0d9e_cgraph.png" border="0" usemap="#slu__util_8h_af8198f26bef3c82fbb8601fc5a8e0d9e_cgraph" alt=""/></div>
+<map name="slu__util_8h_af8198f26bef3c82fbb8601fc5a8e0d9e_cgraph" id="slu__util_8h_af8198f26bef3c82fbb8601fc5a8e0d9e_cgraph">
+<area shape="rect" id="node2" href="sp__coletree_8c.html#a45fdfbf54106113728e1a036977ccf5b" title="mxCallocInt" alt="" coords="342,12,434,38"/><area shape="rect" id="node3" href="sp__coletree_8c.html#a679285dead1583f96db3c978735de380" title="initialize_disjoint_sets" alt="" coords="144,37,293,64"/><area shape="rect" id="node4" href="sp__coletree_8c.html#a6ecd760efd6eec938f69c6d692d6ddae" title="make_set" alt="" coords="179,88,258,114"/><area shape="rect" id="node5" href="sp__coletree_8c. [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a72be96e75e58564c4322ef9ef73ca65f"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="SRC_2sp__ienv_8c.html#a21109476f1261abd6b256a393f5fd9e7">sp_ienv()</a> is inquired to choose machine-dependent parameters for the
+ local environment. See ISPEC for a description of the parameters.</pre><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><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_a72be96e75e58564c4322ef9ef73ca65f_cgraph.png" border="0" usemap="#slu__util_8h_a72be96e75e58564c4322ef9ef73ca65f_cgraph" alt=""/></div>
+<map name="slu__util_8h_a72be96e75e58564c4322ef9ef73ca65f_cgraph" id="slu__util_8h_a72be96e75e58564c4322ef9ef73ca65f_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="120,5,203,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="adf9c573cbfb4520a5ea820702d27cfa5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre><a class="el" href="sp__preorder_8c.html#ad3a9a45f02456022c7eba79e17e215bc">sp_preorder()</a> permutes the columns of the original matrix. It performs
+the following steps:</pre><pre> 1. Apply column permutation perm_c[] to A's column pointers to form AC;</pre><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><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_adf9c573cbfb4520a5ea820702d27cfa5_cgraph.png" border="0" usemap="#slu__util_8h_adf9c573cbfb4520a5ea820702d27cfa5_cgraph" alt=""/></div>
+<map name="slu__util_8h_adf9c573cbfb4520a5ea820702d27cfa5_cgraph" id="slu__util_8h_adf9c573cbfb4520a5ea820702d27cfa5_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a8a3ba6cbe163f9c12f6f10ee8ba98fc7" title="print_int_vec" alt="" coords="148,5,244,32"/><area shape="rect" id="node3" href="sp__preorder_8c.html#ac79059104ae6abf212c41986820d358c" title="check_perm" alt="" coords="149,56,243,83"/><area shape="rect" id="node4" href="get__perm__c_8c.html#a486ee50799ff66abe91efa46a5950a57" title="at_plus_a" alt="" coords="157,107,235,133"/><area shape="rect" id="node5" href="sp__coletree_8c.html#a657d6b29 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0bccee6dda29384503240026c062bfc6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab0fb3345d479a7ac24f75f0e64bdff4b"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3b979ab4f4e75bdc1b89106dde6c8d72"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_a3b979ab4f4e75bdc1b89106dde6c8d72_cgraph.png" border="0" usemap="#slu__util_8h_a3b979ab4f4e75bdc1b89106dde6c8d72_cgraph" alt=""/></div>
+<map name="slu__util_8h_a3b979ab4f4e75bdc1b89106dde6c8d72_cgraph" id="slu__util_8h_a3b979ab4f4e75bdc1b89106dde6c8d72_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="121,5,188,32"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="118,56,191,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="240,5,323,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa157fecae472b8ef5ce79bd59876099d"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac33e407326ae1dc222aee7ff08f322cf"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_ac33e407326ae1dc222aee7ff08f322cf_cgraph.png" border="0" usemap="#slu__util_8h_ac33e407326ae1dc222aee7ff08f322cf_cgraph" alt=""/></div>
+<map name="slu__util_8h_ac33e407326ae1dc222aee7ff08f322cf_cgraph" id="slu__util_8h_ac33e407326ae1dc222aee7ff08f322cf_cgraph">
+<area shape="rect" id="node2" href="util_8c.html#ae289773c377a566a2f77c88b21d7f4ae" title="Fills an integer array with a given value. " alt="" coords="145,5,183,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="abd38b081866ed2c3e4959c4c0560913c"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1745be2114a7b66ea7632292b03cb3ce"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7ec97fcbe08a55ad56048a43919d6843"></a>
+<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></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>) </p>
+
+</div>
+</div>
+<a class="anchor" id="a0c6777573bbfe81917cd381e0090d355"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a44084fde835d2ccaa25e9fd942a72b7a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__util_8h_a44084fde835d2ccaa25e9fd942a72b7a_cgraph.png" border="0" usemap="#slu__util_8h_a44084fde835d2ccaa25e9fd942a72b7a_cgraph" alt=""/></div>
+<map name="slu__util_8h_a44084fde835d2ccaa25e9fd942a72b7a_cgraph" id="slu__util_8h_a44084fde835d2ccaa25e9fd942a72b7a_cgraph">
+<area shape="rect" id="node2" href="sp__coletree_8c.html#a45fdfbf54106113728e1a036977ccf5b" title="mxCallocInt" alt="" coords="158,5,250,32"/><area shape="rect" id="node3" href="sp__coletree_8c.html#a9da0c72a7b8eaf7a2a69fb6c3340131a" title="etdfs" alt="" coords="179,56,229,83"/><area shape="rect" id="node4" href="sp__coletree_8c.html#a7fec305add1f9f4c611eacdb2b744bfd" title="nr_etdfs" alt="" coords="169,107,239,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a8ddc46fddd8c0c53fc9e77fefdf9a456"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:07 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/slu__zdefs_8h.html b/SuperLU_5.2.0/DOC/html/slu__zdefs_8h.html
new file mode 100644
index 0000000..9e3deb8
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/slu__zdefs_8h.html
@@ -0,0 +1,6304 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/slu_zdefs.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">slu_zdefs.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for real operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include <limits.h></code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <stdint.h></code><br/>
+<code>#include <string.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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for slu_zdefs.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h__incl.png" border="0" usemap="#SRC_2slu__zdefs_8h" alt=""/></div>
+<map name="SRC_2slu__zdefs_8h" id="SRC_2slu__zdefs_8h">
+<area shape="rect" id="node8" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,80,628,107"/><area shape="rect" id="node9" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,80,753,107"/><area shape="rect" id="node10" href="slu__util_8h.html" title="Utility header file. " alt="" coords="281,80,355,107"/><area shape="rect" id="node13" href="slu__dcomplex_8h.html" title="Header file for complex operations. " alt= [...]
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h__dep__incl.png" border="0" usemap="#SRC_2slu__zdefs_8hdep" alt=""/></div>
+<map name="SRC_2slu__zdefs_8hdep" id="SRC_2slu__zdefs_8hdep">
+<area shape="rect" id="node2" href="ilu__zcolumn__dfs_8c.html" title="Performs a symbolic factorization. " alt="" coords="5,80,164,107"/><area shape="rect" id="node3" href="ilu__zcopy__to__ucol_8c.html" title="Copy a computed column of U to the compressed data structure and drop some small entries. " alt="" coords="189,80,360,107"/><area shape="rect" id="node4" href="ilu__zdrop__row_8c.html" title="Drop small rows from L. " alt="" coords="384,80,531,107"/><area shape="rect" id="node5" hr [...]
+</div>
+</div>
+<p><a href="slu__zdefs_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ab6fd6105e64ed14a0c9281326f05e623"><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a></td></tr>
+<tr class="separator:ab6fd6105e64ed14a0c9281326f05e623"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af381e217f2aa7e57bcdebfc9e1e7b973"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#af381e217f2aa7e57bcdebfc9e1e7b973">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="structSup [...]
+<tr class="memdesc:af381e217f2aa7e57bcdebfc9e1e7b973"><td class="mdescLeft"> </td><td class="mdescRight">Driver routines. <a href="#af381e217f2aa7e57bcdebfc9e1e7b973">More...</a><br/></td></tr>
+<tr class="separator:af381e217f2aa7e57bcdebfc9e1e7b973"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adaf9af23d5b4665da4f93f89c3012bf1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#adaf9af23d5b4665da4f93f89c3012bf1">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< [...]
+<tr class="separator:adaf9af23d5b4665da4f93f89c3012bf1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06d5de0123fd4c7a00bcbf0a3944883d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a06d5de0123fd4c7a00bcbf0a3944883d">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="structSu [...]
+<tr class="separator:a06d5de0123fd4c7a00bcbf0a3944883d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a20ea53b36265e019d754ffb9bd2b4bd0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a20ea53b36265e019d754ffb9bd2b4bd0">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< [...]
+<tr class="separator:a20ea53b36265e019d754ffb9bd2b4bd0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7281942aff23b914e0cb23478bf8cf39"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a7281942aff23b914e0cb23478bf8cf39">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#a9d2ddedeb2a3d92e950811c61d0b8 [...]
+<tr class="memdesc:a7281942aff23b914e0cb23478bf8cf39"><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related. <a href="#a7281942aff23b914e0cb23478bf8cf39">More...</a><br/></td></tr>
+<tr class="separator:a7281942aff23b914e0cb23478bf8cf39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad88d522f3d109c52379fa9c7274f100f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ad88d522f3d109c52379fa9c7274f100f">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#a9d2ddedeb2a3d92e950811c61d0b8 [...]
+<tr class="separator:ad88d522f3d109c52379fa9c7274f100f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5d43eba6fc1bbf869b2d696b71a6566c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a5d43eba6fc1bbf869b2d696b71a6566c">zCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a5d43eba6fc1bbf869b2d696b71a6566c"><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B. <a href="#a5d43eba6fc1bbf869b2d696b71a6566c">More...</a><br/></td></tr>
+<tr class="separator:a5d43eba6fc1bbf869b2d696b71a6566c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab9280cf311111348a607e78aa2311e73"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ab9280cf311111348a607e78aa2311e73">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> [...]
+<tr class="separator:ab9280cf311111348a607e78aa2311e73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac64ee6fda439e62b0e0a855cd5a19441"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ac64ee6fda439e62b0e0a855cd5a19441">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#a9d2dde [...]
+<tr class="separator:ac64ee6fda439e62b0e0a855cd5a19441"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4a51f1cca404f383d725cf6ca2ab1f5b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a4a51f1cca404f383d725cf6ca2ab1f5b">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 class="separator:a4a51f1cca404f383d725cf6ca2ab1f5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8086902aa8be3fc7d04c3c82ec3a79dc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a8086902aa8be3fc7d04c3c82ec3a79dc">countnz</a> (const int, int *, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a8086902aa8be3fc7d04c3c82ec3a79dc"><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="#a8086902aa8be3fc7d04c3c82ec3a79dc">More...</a><br/></td></tr>
+<tr class="separator:a8086902aa8be3fc7d04c3c82ec3a79dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae8eb367a0a2fcdf734738bc9630df85"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#aae8eb367a0a2fcdf734738bc9630df85">ilu_countnz</a> (const int, int *, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:aae8eb367a0a2fcdf734738bc9630df85"><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U. <a href="#aae8eb367a0a2fcdf734738bc9630df85">More...</a><br/></td></tr>
+<tr class="separator:aae8eb367a0a2fcdf734738bc9630df85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7061332d759d7e4d73c1b2e5cb0bf2bf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a7061332d759d7e4d73c1b2e5cb0bf2bf">fixupL</a> (const int, const int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a7061332d759d7e4d73c1b2e5cb0bf2bf"><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="#a7061332d759d7e4d73c1b2e5cb0bf2bf">More...</a><br/></td></tr>
+<tr class="separator:a7061332d759d7e4d73c1b2e5cb0bf2bf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2643ac77912d9f351f7294677bbe05f2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a2643ac77912d9f351f7294677bbe05f2">zallocateA</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+<tr class="memdesc:a2643ac77912d9f351f7294677bbe05f2"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A. <a href="#a2643ac77912d9f351f7294677bbe05f2">More...</a><br/></td></tr>
+<tr class="separator:a2643ac77912d9f351f7294677bbe05f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2590dbb66d39c3055f88292f5f093be7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a2590dbb66d39c3055f88292f5f093be7">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> * [...]
+<tr class="separator:a2590dbb66d39c3055f88292f5f093be7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af0e16dd7be5f8beaf0e445562995de49"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#af0e16dd7be5f8beaf0e445562995de49">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 class="separator:af0e16dd7be5f8beaf0e445562995de49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af416483e20a4ec79bf0d04d6e55c585b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#af416483e20a4ec79bf0d04d6e55c585b">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 [...]
+<tr class="memdesc:af416483e20a4ec79bf0d04d6e55c585b"><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode. <a href="#af416483e20a4ec79bf0d04d6e55c585b">More...</a><br/></td></tr>
+<tr class="separator:af416483e20a4ec79bf0d04d6e55c585b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:addc01b7cd28e5566177c284480a680f3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#addc01b7cd28e5566177c284480a680f3">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" h [...]
+<tr class="separator:addc01b7cd28e5566177c284480a680f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a58b397fc5660a6a0638f2aba584abf64"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a58b397fc5660a6a0638f2aba584abf64">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">Glob [...]
+<tr class="separator:a58b397fc5660a6a0638f2aba584abf64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7a8371a03a4cd272a5cb05d1fd7d8ae"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ab7a8371a03a4cd272a5cb05d1fd7d8ae">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 class="separator:ab7a8371a03a4cd272a5cb05d1fd7d8ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a49aac39da44afbad110705d4a7f9f862"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a49aac39da44afbad110705d4a7f9f862">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 [...]
+<tr class="separator:a49aac39da44afbad110705d4a7f9f862"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a01e6dfda172d9c30fe038497a10d25fa"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a01e6dfda172d9c30fe038497a10d25fa">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 class="separator:a01e6dfda172d9c30fe038497a10d25fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adce57d338c03a6432064f295023ba976"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#adce57d338c03a6432064f295023ba976">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 class="separator:adce57d338c03a6432064f295023ba976"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8a368adca5d498e86910b5371de3131d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a8a368adca5d498e86910b5371de3131d">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 class="separator:a8a368adca5d498e86910b5371de3131d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acd4ff4683d71e444e948fbcacb23e803"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#acd4ff4683d71e444e948fbcacb23e803">zreadmt</a> (int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+<tr class="separator:acd4ff4683d71e444e948fbcacb23e803"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abf8c836a49482c27abdc046ec7c726cb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#abf8c836a49482c27abdc046ec7c726cb">zGenXtrue</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int)</td></tr>
+<tr class="separator:abf8c836a49482c27abdc046ec7c726cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a856d8820ae8cf7ccf6ca662bc680de26"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a856d8820ae8cf7ccf6ca662bc680de26">zFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a cl [...]
+<tr class="memdesc:a856d8820ae8cf7ccf6ca662bc680de26"><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="#a856d8820ae8cf7ccf6ca662bc680de26">More...</a><br/></td></tr>
+<tr class="separator:a856d8820ae8cf7ccf6ca662bc680de26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b74304cd437572bbec487bc29422a90"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a1b74304cd437572bbec487bc29422a90">zgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, int *, int *, <a clas [...]
+<tr class="separator:a1b74304cd437572bbec487bc29422a90"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a97e2ca2095398db1ebfdeb2aa623b8b5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a97e2ca2095398db1ebfdeb2aa623b8b5">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> [...]
+<tr class="separator:a97e2ca2095398db1ebfdeb2aa623b8b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a231c25a6f73e928d43ee8f3f4f291844"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a231c25a6f73e928d43ee8f3f4f291844">zldperm</a> (int, int, int, int[], int[], <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int[], double[], double[])</td></tr>
+<tr class="separator:a231c25a6f73e928d43ee8f3f4f291844"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a973a22230ce47cdca6dc0d509b246f5b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a973a22230ce47cdca6dc0d509b246f5b">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 class="separator:a973a22230ce47cdca6dc0d509b246f5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac3883f7039a1c9b1349452d22a972396"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ac3883f7039a1c9b1349452d22a972396">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 [...]
+<tr class="separator:ac3883f7039a1c9b1349452d22a972396"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afc18a3d9096f5d951d28cb6933077233"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#afc18a3d9096f5d951d28cb6933077233">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 class="separator:afc18a3d9096f5d951d28cb6933077233"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a09d54c3f2ea8ecc5e74170c38771ab46"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a09d54c3f2ea8ecc5e74170c38771ab46">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#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, double, int, <a class="el" href="st [...]
+<tr class="separator:a09d54c3f2ea8ecc5e74170c38771ab46"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab9679d0b020666979ae1686461e26ae2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ab9679d0b020666979ae1686461e26ae2">ilu_zpivotL</a> (const int, const double, int *, int *, int, int *, int *, int *, int *, double, <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a>, <a class="el" href="structdoublecomplex.html">doublecomplex</a>, [...]
+<tr class="separator:ab9679d0b020666979ae1686461e26ae2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a94d5ac6f75873f62e1bef9c521534d43"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a94d5ac6f75873f62e1bef9c521534d43">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 class="separator:a94d5ac6f75873f62e1bef9c521534d43"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae112ddfff2798b7e4c090d96d2a8d80a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ae112ddfff2798b7e4c090d96d2a8d80a">zgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, double *, double *, double *, double *, int *)</td></tr>
+<tr class="memdesc:ae112ddfff2798b7e4c090d96d2a8d80a"><td class="mdescLeft"> </td><td class="mdescRight">Driver related. <a href="#ae112ddfff2798b7e4c090d96d2a8d80a">More...</a><br/></td></tr>
+<tr class="separator:ae112ddfff2798b7e4c090d96d2a8d80a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa7f8e784fe805303d413a3dc684aa8a5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#aa7f8e784fe805303d413a3dc684aa8a5">zlaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, double *, double *, double, double, double, char *)</td></tr>
+<tr class="separator:aa7f8e784fe805303d413a3dc684aa8a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42c7a1b7c813c330cd5a60852a592395"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a42c7a1b7c813c330cd5a60852a592395">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 class="separator:a42c7a1b7c813c330cd5a60852a592395"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a87aab883e88a4ee7f6e19b7d9d5f690c"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a87aab883e88a4ee7f6e19b7d9d5f690c">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 class="separator:a87aab883e88a4ee7f6e19b7d9d5f690c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7675aa04369725f7f65c74249388f5a5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a7675aa04369725f7f65c74249388f5a5">zgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="s [...]
+<tr class="separator:a7675aa04369725f7f65c74249388f5a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f8e25c2e20af0219ad6719db052f3d7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a4f8e25c2e20af0219ad6719db052f3d7">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="structS [...]
+<tr class="memdesc:a4f8e25c2e20af0219ad6719db052f3d7"><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b. <a href="#a4f8e25c2e20af0219ad6719db052f3d7">More...</a><br/></td></tr>
+<tr class="separator:a4f8e25c2e20af0219ad6719db052f3d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a295a004dbce1f1b0aa48e7cb319da461"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a295a004dbce1f1b0aa48e7cb319da461">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="structdoublecomp [...]
+<tr class="memdesc:a295a004dbce1f1b0aa48e7cb319da461"><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="#a295a004dbce1f1b0aa48e7cb319da461">More...</a><br/></td></tr>
+<tr class="separator:a295a004dbce1f1b0aa48e7cb319da461"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a723eb34b4ba347bbaa753c5d66cca4ab"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a723eb34b4ba347bbaa753c5d66cca4ab">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" [...]
+<tr class="separator:a723eb34b4ba347bbaa753c5d66cca4ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a532ff1aed405ef9b1c54654bcab207b7"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a532ff1aed405ef9b1c54654bcab207b7">dmach</a> (char *)</td></tr>
+<tr class="separator:a532ff1aed405ef9b1c54654bcab207b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0c3bf2c88bdda13cede034c6e9a407e5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a0c3bf2c88bdda13cede034c6e9a407e5">zLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">fact_t</a>, void *, int, int, int, int, int, double, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structSuperMatrix.htm [...]
+<tr class="memdesc:a0c3bf2c88bdda13cede034c6e9a407e5"><td class="mdescLeft"> </td><td class="mdescRight">Memory-related. <a href="#a0c3bf2c88bdda13cede034c6e9a407e5">More...</a><br/></td></tr>
+<tr class="separator:a0c3bf2c88bdda13cede034c6e9a407e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa4e2012fe2ee4c2d1cd2a261bdb0455b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#aa4e2012fe2ee4c2d1cd2a261bdb0455b">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 class="memdesc:aa4e2012fe2ee4c2d1cd2a261bdb0455b"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays. <a href="#aa4e2012fe2ee4c2d1cd2a261bdb0455b">More...</a><br/></td></tr>
+<tr class="separator:aa4e2012fe2ee4c2d1cd2a261bdb0455b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a572914748b4f1aa544a61477095e7fe5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a572914748b4f1aa544a61477095e7fe5">zLUWorkFree</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a572914748b4f1aa544a61477095e7fe5"><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines. <a href="#a572914748b4f1aa544a61477095e7fe5">More...</a><br/></td></tr>
+<tr class="separator:a572914748b4f1aa544a61477095e7fe5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a399a28849bd52ce90c1cbc8e4cd85046"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046">zLUMemXpand</a> (int, int, <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a>, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a399a28849bd52ce90c1cbc8e4cd85046"><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization. <a href="#a399a28849bd52ce90c1cbc8e4cd85046">More...</a><br/></td></tr>
+<tr class="separator:a399a28849bd52ce90c1cbc8e4cd85046"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae33b5268048e570c0cdf96498198e821"><td class="memItemLeft" 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#ae33b5268048e570c0cdf96498198e821">doublecomplexMalloc</a> (int)</td></tr>
+<tr class="separator:ae33b5268048e570c0cdf96498198e821"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7683ac1617339478753ab308a7b0fc5"><td class="memItemLeft" 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#ab7683ac1617339478753ab308a7b0fc5">doublecomplexCalloc</a> (int)</td></tr>
+<tr class="separator:ab7683ac1617339478753ab308a7b0fc5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a47c4cf79f8c6305147a70de6da2696ac"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a47c4cf79f8c6305147a70de6da2696ac">doubleMalloc</a> (int)</td></tr>
+<tr class="separator:a47c4cf79f8c6305147a70de6da2696ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2b7be732f4d725dd35799d772473625e"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a2b7be732f4d725dd35799d772473625e">doubleCalloc</a> (int)</td></tr>
+<tr class="separator:a2b7be732f4d725dd35799d772473625e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5987692fb793ccc6122ff861261f1ca2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a5987692fb793ccc6122ff861261f1ca2">zmemory_usage</a> (const int, const int, const int, const int)</td></tr>
+<tr class="separator:a5987692fb793ccc6122ff861261f1ca2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a711303a4bc043eb0b1bff72b32d52397"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a711303a4bc043eb0b1bff72b32d52397">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 class="separator:a711303a4bc043eb0b1bff72b32d52397"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5bc1efbf682521f7f23c16b8a36b81e9"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a5bc1efbf682521f7f23c16b8a36b81e9">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 class="separator:a5bc1efbf682521f7f23c16b8a36b81e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a354313e251a9d16f6109cd5d266826fb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a354313e251a9d16f6109cd5d266826fb">zreadhb</a> (FILE *, int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+<tr class="memdesc:a354313e251a9d16f6109cd5d266826fb"><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines. <a href="#a354313e251a9d16f6109cd5d266826fb">More...</a><br/></td></tr>
+<tr class="separator:a354313e251a9d16f6109cd5d266826fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3c9645c921a407e41fdd5f98c4b1a80"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ae3c9645c921a407e41fdd5f98c4b1a80">zreadrb</a> (int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+<tr class="separator:ae3c9645c921a407e41fdd5f98c4b1a80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a952c154abdfc9bda69b118d25c7e599f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a952c154abdfc9bda69b118d25c7e599f">zreadtriple</a> (int *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **, int **, int **)</td></tr>
+<tr class="separator:a952c154abdfc9bda69b118d25c7e599f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab2b58eff4de76ae8ea11d3fd1d285f97"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ab2b58eff4de76ae8ea11d3fd1d285f97">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 class="memdesc:ab2b58eff4de76ae8ea11d3fd1d285f97"><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage. <a href="#ab2b58eff4de76ae8ea11d3fd1d285f97">More...</a><br/></td></tr>
+<tr class="separator:ab2b58eff4de76ae8ea11d3fd1d285f97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff0de872dc60f87b89ae93a8f93a7a70"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#aff0de872dc60f87b89ae93a8f93a7a70">zfill</a> (<a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a>)</td></tr>
+<tr class="memdesc:aff0de872dc60f87b89ae93a8f93a7a70"><td class="mdescLeft"> </td><td class="mdescRight">Fills a doublecomplex precision array with a given value. <a href="#aff0de872dc60f87b89ae93a8f93a7a70">More...</a><br/></td></tr>
+<tr class="separator:aff0de872dc60f87b89ae93a8f93a7a70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b335e97d77b1adf81e383e5bcb58f3e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a7b335e97d77b1adf81e383e5bcb58f3e">zinf_norm_error</a> (int, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:a7b335e97d77b1adf81e383e5bcb58f3e"><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector. <a href="#a7b335e97d77b1adf81e383e5bcb58f3e">More...</a><br/></td></tr>
+<tr class="separator:a7b335e97d77b1adf81e383e5bcb58f3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a293d5d2ac72e4e528ee06d634cb6b59a"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a293d5d2ac72e4e528ee06d634cb6b59a">dqselect</a> (int, double *, int)</td></tr>
+<tr class="separator:a293d5d2ac72e4e528ee06d634cb6b59a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a03a002c56d260744e0c73d90a28ca92e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a03a002c56d260744e0c73d90a28ca92e">zPrint_CompCol_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="memdesc:a03a002c56d260744e0c73d90a28ca92e"><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging. <a href="#a03a002c56d260744e0c73d90a28ca92e">More...</a><br/></td></tr>
+<tr class="separator:a03a002c56d260744e0c73d90a28ca92e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa07de3629132fd900f759166eef6f45"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#afa07de3629132fd900f759166eef6f45">zPrint_SuperNode_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:afa07de3629132fd900f759166eef6f45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cf22ecc8aa6e20245d071b53f1a71c4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a4cf22ecc8aa6e20245d071b53f1a71c4">zPrint_Dense_Matrix</a> (char *, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *)</td></tr>
+<tr class="separator:a4cf22ecc8aa6e20245d071b53f1a71c4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3bdc4fd0a2bb9efd731dee5828ad64a9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a3bdc4fd0a2bb9efd731dee5828ad64a9">zprint_lu_col</a> (char *, int, int, int *, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="memdesc:a3bdc4fd0a2bb9efd731dee5828ad64a9"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor. <a href="#a3bdc4fd0a2bb9efd731dee5828ad64a9">More...</a><br/></td></tr>
+<tr class="separator:a3bdc4fd0a2bb9efd731dee5828ad64a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad0c06e9adc1e29a0ab2e78c38119bb4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#aad0c06e9adc1e29a0ab2e78c38119bb4">print_double_vec</a> (char *, int, double *)</td></tr>
+<tr class="separator:aad0c06e9adc1e29a0ab2e78c38119bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab2444db06352e4e700e077f08fd1974a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ab2444db06352e4e700e077f08fd1974a">zcheck_tempv</a> (int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:ab2444db06352e4e700e077f08fd1974a"><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="#ab2444db06352e4e700e077f08fd1974a">More...</a><br/></td></tr>
+<tr class="separator:ab2444db06352e4e700e077f08fd1974a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7566d50f83608ee97bd5615d38ca010f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#a7566d50f83608ee97bd5615d38ca010f">zgemm_</a> (const char *, const char *, const int *, const int *, const int *, const <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, const <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, const int *, const <a class="el" [...]
+<tr class="memdesc:a7566d50f83608ee97bd5615d38ca010f"><td class="mdescLeft"> </td><td class="mdescRight">BLAS. <a href="#a7566d50f83608ee97bd5615d38ca010f">More...</a><br/></td></tr>
+<tr class="separator:a7566d50f83608ee97bd5615d38ca010f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae97174a10346e0629387c0f8ce9a9a08"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#ae97174a10346e0629387c0f8ce9a9a08">ztrsv_</a> (char *, char *, char *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *)</td></tr>
+<tr class="separator:ae97174a10346e0629387c0f8ce9a9a08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeab3fd6b0df9000815d75ecdf2903d22"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#aeab3fd6b0df9000815d75ecdf2903d22">ztrsm_</a> (char *, char *, char *, char *, int *, 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 [...]
+<tr class="separator:aeab3fd6b0df9000815d75ecdf2903d22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa25bbd36f5c52cf8df1db92545fe80b9"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="slu__zdefs_8h.html#aa25bbd36f5c52cf8df1db92545fe80b9">zgemv_</a> (char *, int *, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *a, int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, int *, <a class [...]
+<tr class="separator:aa25bbd36f5c52cf8df1db92545fe80b9"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November, 2010</pre><pre>Global data structures used in LU factorization -</pre><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><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><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><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><pre> The last column structures (for pruning) will be removed
+ after the numercial LU factorization phase.</pre><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><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> </div><h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ab6fd6105e64ed14a0c9281326f05e623"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8086902aa8be3fc7d04c3c82ec3a79dc"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a532ff1aed405ef9b1c54654bcab207b7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double dmach </td>
+ <td>(</td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2b7be732f4d725dd35799d772473625e"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab7683ac1617339478753ab308a7b0fc5"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae33b5268048e570c0cdf96498198e821"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a47c4cf79f8c6305147a70de6da2696ac"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a293d5d2ac72e4e528ee06d634cb6b59a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7061332d759d7e4d73c1b2e5cb0bf2bf"></a>
+<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">, </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aae8eb367a0a2fcdf734738bc9630df85"></a>
+<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">, </td>
+ </tr>
+ <tr>
+ <td class="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afc18a3d9096f5d951d28cb6933077233"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ILU_ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_afc18a3d9096f5d951d28cb6933077233_cgraph.png" border="0" usemap="#slu__zdefs_8h_afc18a3d9096f5d951d28cb6933077233_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_afc18a3d9096f5d951d28cb6933077233_cgraph" id="slu__zdefs_8h_afc18a3d9096f5d951d28cb6933077233_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="193,31,260,57"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="171,81,283,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="349,31,432,57"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a09d54c3f2ea8ecc5e74170c38771ab46"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a09d54c3f2ea8ecc5e74170c38771ab46_cgraph.png" border="0" usemap="#slu__zdefs_8h_a09d54c3f2ea8ecc5e74170c38771ab46_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a09d54c3f2ea8ecc5e74170c38771ab46_cgraph" id="slu__zdefs_8h_a09d54c3f2ea8ecc5e74170c38771ab46_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="207,56,268,83"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="181,107,293,133"/><area shape="rect" id="node10" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="20 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a94d5ac6f75873f62e1bef9c521534d43"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac3883f7039a1c9b1349452d22a972396"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_ac3883f7039a1c9b1349452d22a972396_cgraph.png" border="0" usemap="#slu__zdefs_8h_ac3883f7039a1c9b1349452d22a972396_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_ac3883f7039a1c9b1349452d22a972396_cgraph" id="slu__zdefs_8h_ac3883f7039a1c9b1349452d22a972396_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="160,5,224,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab9679d0b020666979ae1686461e26ae2"></a>
+<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#a0cb73c13a7c2390c3a9a0a8913477ff0">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_ab9679d0b020666979ae1686461e26ae2_cgraph.png" border="0" usemap="#slu__zdefs_8h_ab9679d0b020666979ae1686461e26ae2_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_ab9679d0b020666979ae1686461e26ae2_cgraph" id="slu__zdefs_8h_ab9679d0b020666979ae1686461e26ae2_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="139,5,203,32"/><area shape="rect" id="node3" href="dcomplex_8c.html#a36451f8af6b7bd3a4d5f655ead8d5ee4" title="SIGN functions for complex number. Returns z/abs(z) " alt="" coords="142,56,199,83"/><area shape="rect" id="node5" href="dcomplex_8c.html#a4cfde2671a83833a15c5b48517781db0" title="Complex Division c = a/b. " alt="" coord [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a5bc1efbf682521f7f23c16b8a36b81e9"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a5bc1efbf682521f7f23c16b8a36b81e9_cgraph.png" border="0" usemap="#slu__zdefs_8h_a5bc1efbf682521f7f23c16b8a36b81e9_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a5bc1efbf682521f7f23c16b8a36b81e9_cgraph" id="slu__zdefs_8h_a5bc1efbf682521f7f23c16b8a36b81e9_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="176,5,243,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="291,5,373,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a973a22230ce47cdca6dc0d509b246f5b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ilu__zsnode__dfs_8c.html#a6fa78a3059d75e11a66434992dddafab">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a973a22230ce47cdca6dc0d509b246f5b_cgraph.png" border="0" usemap="#slu__zdefs_8h_a973a22230ce47cdca6dc0d509b246f5b_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a973a22230ce47cdca6dc0d509b246f5b_cgraph" id="slu__zdefs_8h_a973a22230ce47cdca6dc0d509b246f5b_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="163,107,275,133"/><area shape="rect" id="node3" href="zmemory_8c.html#a67833ee9526cec0b31d0f26e527b97df" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="347,81,418,108"/><area shape="rect" id="node8" href="zmemory_8c.html#a17416eb78c42063624b6859d9f88820b" title="zmemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aad0c06e9adc1e29a0ab2e78c38119bb4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a723eb34b4ba347bbaa753c5d66cca4ab"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> sp_z performs one of the matrix-matrix operations</pre><pre> C := alpha*op( A )*op( B ) + beta*C,</pre><pre> where op( X ) is one of</pre><pre> op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ),</pre><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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> ALPHA - (input) doublecomplex
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><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 max( 1, n ).
+ Unchanged on exit.</pre><pre> BETA - (input) doublecomplex
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then C need not be set on input.</pre><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><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 max(1,m).
+ Unchanged on exit.</pre><pre> ==== Sparse Level 3 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a723eb34b4ba347bbaa753c5d66cca4ab_cgraph.png" border="0" usemap="#slu__zdefs_8h_a723eb34b4ba347bbaa753c5d66cca4ab_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a723eb34b4ba347bbaa753c5d66cca4ab_cgraph" id="slu__zdefs_8h_a723eb34b4ba347bbaa753c5d66cca4ab_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="141,5,224,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,5,355,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a295a004dbce1f1b0aa48e7cb319da461"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="zsp__blas2_8c.html#a9ea39731f07b4c2ab20e44c97ffd773c" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y...">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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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^H*x + beta*y.</pre><pre> ALPHA - (input) doublecomplex
+ On entry, ALPHA specifies the scalar alpha.</pre><pre> A - (input) SuperMatrix*
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients.</pre><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><pre> INCX - (input) int
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.</pre><pre> BETA - (input) doublecomplex
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.</pre><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><pre> INCY - (input) int
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.</pre><pre> ==== Sparse Level 2 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a295a004dbce1f1b0aa48e7cb319da461_cgraph.png" border="0" usemap="#slu__zdefs_8h_a295a004dbce1f1b0aa48e7cb319da461_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a295a004dbce1f1b0aa48e7cb319da461_cgraph" id="slu__zdefs_8h_a295a004dbce1f1b0aa48e7cb319da461_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="136,5,219,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4f8e25c2e20af0219ad6719db052f3d7"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="zsp__blas2_8c.html#a070a51d222072a18d8d6ac91381b4859" 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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><pre> info - (output) int*
+ If *info = -i, the i-th argument had an illegal value.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a4f8e25c2e20af0219ad6719db052f3d7_cgraph.png" border="0" usemap="#slu__zdefs_8h_a4f8e25c2e20af0219ad6719db052f3d7_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a4f8e25c2e20af0219ad6719db052f3d7_cgraph" id="slu__zdefs_8h_a4f8e25c2e20af0219ad6719db052f3d7_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#ab7683ac1617339478753ab308a7b0fc5" title="doublecomplexCalloc" alt="" coords="125,56,272,83"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#ae97174a10346e0629387c0f8ce9a9a08" title="ztrsv_" alt="" coords="169,107,228,133"/><area shape="rect" id="node5" href="slu__zdefs_8h.html#aa25bbd3 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a2643ac77912d9f351f7294677bbe05f2"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a2643ac77912d9f351f7294677bbe05f2_cgraph.png" border="0" usemap="#slu__zdefs_8h_a2643ac77912d9f351f7294677bbe05f2_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a2643ac77912d9f351f7294677bbe05f2_cgraph" id="slu__zdefs_8h_a2643ac77912d9f351f7294677bbe05f2_cgraph">
+<area shape="rect" id="node2" href="zmemory_8c.html#ad681359ed37ac809cc0e456e05655823" title="doublecomplexMalloc" alt="" coords="136,5,283,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="172,56,247,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab2444db06352e4e700e077f08fd1974a"></a>
+<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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a49aac39da44afbad110705d4a7f9f862"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose:
+</h1>
+</pre><pre>
+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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a49aac39da44afbad110705d4a7f9f862_cgraph.png" border="0" usemap="#slu__zdefs_8h_a49aac39da44afbad110705d4a7f9f862_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a49aac39da44afbad110705d4a7f9f862_cgraph" id="slu__zdefs_8h_a49aac39da44afbad110705d4a7f9f862_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#ae97174a10346e0629387c0f8ce9a9a08" title="ztrsv_" alt="" coords="192,5,251,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#aa25bbd36f5c52cf8df1db92545fe80b9" title="zgemv_" alt="" coords="187,56,255,83"/><area shape="rect" id="node4" href="zcolumn__bmod_8c.html#afb6f65890b5348dc1692d01b087be35d" title="Solves a dense UNIT lower triangular system. " alt="" coords="190,107,253,133"/><area shape="rect" id="node5" href="zcolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab7a8371a03a4cd272a5cb05d1fd7d8ae"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_ab7a8371a03a4cd272a5cb05d1fd7d8ae_cgraph.png" border="0" usemap="#slu__zdefs_8h_ab7a8371a03a4cd272a5cb05d1fd7d8ae_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_ab7a8371a03a4cd272a5cb05d1fd7d8ae_cgraph" id="slu__zdefs_8h_ab7a8371a03a4cd272a5cb05d1fd7d8ae_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="172,31,239,57"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="149,81,261,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="328,31,411,57"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab2b58eff4de76ae8ea11d3fd1d285f97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_ab2b58eff4de76ae8ea11d3fd1d285f97_cgraph.png" border="0" usemap="#slu__zdefs_8h_ab2b58eff4de76ae8ea11d3fd1d285f97_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_ab2b58eff4de76ae8ea11d3fd1d285f97_cgraph" id="slu__zdefs_8h_ab2b58eff4de76ae8ea11d3fd1d285f97_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#ae33b5268048e570c0cdf96498198e821" title="doublecomplexMalloc" alt="" coords="224,5,371,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="260,56,335,83"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="261,107,334,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a5d43eba6fc1bbf869b2d696b71a6566c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4a51f1cca404f383d725cf6ca2ab1f5b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Copies a two-dimensional matrix X to another matrix Y.</p>
+
+</div>
+</div>
+<a class="anchor" id="a01e6dfda172d9c30fe038497a10d25fa"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a01e6dfda172d9c30fe038497a10d25fa_cgraph.png" border="0" usemap="#slu__zdefs_8h_a01e6dfda172d9c30fe038497a10d25fa_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a01e6dfda172d9c30fe038497a10d25fa_cgraph" id="slu__zdefs_8h_a01e6dfda172d9c30fe038497a10d25fa_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="160,107,272,133"/><area shape="rect" id="node3" href="zmemory_8c.html#a67833ee9526cec0b31d0f26e527b97df" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="345,81,415,108"/><area shape="rect" id="node8" href="zmemory_8c.html#a17416eb78c42063624b6859d9f88820b" title="zmemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7281942aff23b914e0cb23478bf8cf39"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad88d522f3d109c52379fa9c7274f100f"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab9280cf311111348a607e78aa2311e73"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac64ee6fda439e62b0e0a855cd5a19441"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aff0de872dc60f87b89ae93a8f93a7a70"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a856d8820ae8cf7ccf6ca662bc680de26"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a856d8820ae8cf7ccf6ca662bc680de26_cgraph.png" border="0" usemap="#slu__zdefs_8h_a856d8820ae8cf7ccf6ca662bc680de26_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a856d8820ae8cf7ccf6ca662bc680de26_cgraph" id="slu__zdefs_8h_a856d8820ae8cf7ccf6ca662bc680de26_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a723eb34b4ba347bbaa753c5d66cca4ab" title="sp_zgemm" alt="" coords="129,5,215,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="264,5,347,32"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7566d50f83608ee97bd5615d38ca010f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int zgemm_ </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </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">const int * </td>
+ <td class="paramname">, </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">const <a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+ <td class="paramname">, </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">const <a class="el" href="structdoublecomplex.html">doublecomplex</a> * </td>
+ <td class="paramname">, </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">const <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">const int * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa25bbd36f5c52cf8df1db92545fe80b9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int zgemv_ </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"><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"><em>a</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"><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"><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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abf8c836a49482c27abdc046ec7c726cb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a42c7a1b7c813c330cd5a60852a592395"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><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><pre> RCOND (output) double*
+ The reciprocal of the condition number of the matrix A,
+ computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><pre> INFO (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a42c7a1b7c813c330cd5a60852a592395_cgraph.png" border="0" usemap="#slu__zdefs_8h_a42c7a1b7c813c330cd5a60852a592395_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a42c7a1b7c813c330cd5a60852a592395_cgraph" id="slu__zdefs_8h_a42c7a1b7c813c330cd5a60852a592395_cgraph">
+<area shape="rect" id="node2" href="zlacon2_8c.html#a386accb9d3bf1919491ed242ff28657e" title="zlacon2_" alt="" coords="117,132,192,159"/><area shape="rect" id="node8" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,259,355,285"/><area shape="rect" id="node9" href="slu__zdefs_8h.html#ab7683ac1617339478753ab308a7b0fc5" title="doublecomplexCalloc" alt="" coords="240,309,387,336"/><area shape="rect" id="node10" href="slu__zdefs_8h.html#a4f [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ae112ddfff2798b7e4c090d96d2a8d80a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (output) double*, size A->nrow
+ If INFO = 0 or INFO > M, R contains the row scale factors
+ for A.</pre><pre> C (output) double*, size A->ncol
+ If INFO = 0, C contains the column scale factors for A.</pre><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><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><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><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
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_ae112ddfff2798b7e4c090d96d2a8d80a_cgraph.png" border="0" usemap="#slu__zdefs_8h_ae112ddfff2798b7e4c090d96d2a8d80a_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_ae112ddfff2798b7e4c090d96d2a8d80a_cgraph" id="slu__zdefs_8h_ae112ddfff2798b7e4c090d96d2a8d80a_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="128,5,189,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="117,56,200,83"/><area shape="rect" id="node4" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="127,107,191,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a06d5de0123fd4c7a00bcbf0a3944883d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a20ea53b36265e019d754ffb9bd2b4bd0"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a97e2ca2095398db1ebfdeb2aa623b8b5">zgsitrf()</a>.
+An estimation of the condition number is provided.
+The routine performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><pre> 1.7. options->IterRefine is not used</pre><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * sum(dropped entries);
+ = SMILU_3:
+ U(i,i) := U(i,i) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * 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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><pre> 2.7. If options->IterRefine is not used.</pre><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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#ae112ddfff2798b7e4c090d96d2a8d80a" 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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a20ea53b36265e019d754ffb9bd2b4bd0_cgraph.png" border="0" usemap="#slu__zdefs_8h_a20ea53b36265e019d754ffb9bd2b4bd0_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a20ea53b36265e019d754ffb9bd2b4bd0_cgraph" id="slu__zdefs_8h_a20ea53b36265e019d754ffb9bd2b4bd0_cgraph">
+<area shape="rect" id="node2" href="zlangs_8c.html#a37d1ec3ddab88e8c46872c5795ea5ada" title="zlangs" alt="" coords="182,5,242,32"/><area shape="rect" id="node4" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="604,791,665,817"/><area shape="rect" id="node5" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="739,740,821,767"/><area shape="rect" id="node6" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a97e2ca2095398db1ebfdeb2aa623b8b5"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the ILU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">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#a380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a97e2ca2095398db1ebfdeb2aa623b8b5_cgraph.png" border="0" usemap="#slu__zdefs_8h_a97e2ca2095398db1ebfdeb2aa623b8b5_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a97e2ca2095398db1ebfdeb2aa623b8b5_cgraph" id="slu__zdefs_8h_a97e2ca2095398db1ebfdeb2aa623b8b5_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a0c3bf2c88bdda13cede034c6e9a407e5" title="Memory-related. " alt="" coords="157,309,251,336"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="363,56,437,83"/><area shape="rect" id="node12" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="531,563,597,589"/><area shape="rect" id="node14" href="memory_8c.html#adbbe5a57b4ed6 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7675aa04369725f7f65c74249388f5a5"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> ZGSRFS improves the computed solution to a system of linear
+ equations and provides error bounds and backward error estimates for
+ the solution.</pre><pre> If equilibration was performed, the system becomes:
+ (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use column-wise storage scheme,
+ i.e., U has types: Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><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><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><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><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><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><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><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#a1b74304cd437572bbec487bc29422a90">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><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><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><pre> stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre> info (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value</pre><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><pre> ITMAX is the maximum number of steps of iterative refinement.</pre><pre></pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a7675aa04369725f7f65c74249388f5a5_cgraph.png" border="0" usemap="#slu__zdefs_8h_a7675aa04369725f7f65c74249388f5a5_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a7675aa04369725f7f65c74249388f5a5_cgraph" id="slu__zdefs_8h_a7675aa04369725f7f65c74249388f5a5_cgraph">
+<area shape="rect" id="node2" href="zlacon2_8c.html#a386accb9d3bf1919491ed242ff28657e" title="zlacon2_" alt="" coords="116,131,191,158"/><area shape="rect" id="node3" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="285,30,347,56"/><area shape="rect" id="node6" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="482,80,539,107"/><area shape="rect" id="node7" href="ilu__zcopy__to__ucol_8c.html#aad [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="af381e217f2aa7e57bcdebfc9e1e7b973"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>ZGSSV solves the system of linear equations A*X=B, using the
+LU factorization from ZGSTRF. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><pre> 1.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ above algorithm to the transpose of A:</pre><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><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><pre> 2.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> If options->RowPerm = MY_PERMR or
+ options->Fact = SamePattern_SameRowPerm, perm_r is an
+ input argument.
+ otherwise it is an output argument.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_af381e217f2aa7e57bcdebfc9e1e7b973_cgraph.png" border="0" usemap="#slu__zdefs_8h_af381e217f2aa7e57bcdebfc9e1e7b973_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_af381e217f2aa7e57bcdebfc9e1e7b973_cgraph" id="slu__zdefs_8h_af381e217f2aa7e57bcdebfc9e1e7b973_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="747,1779,829,1805"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a7281942aff23b914e0cb23478bf8cf39" title="Supernodal LU factor related. " alt="" coords="360,563,533,589"/><area shape="rect" id="node4" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="389,5,505,32"/><area shape="rect" id="node5" href="get [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="adaf9af23d5b4665da4f93f89c3012bf1"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Error bounds on the solution and
+a condition estimate are also provided. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><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><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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_adaf9af23d5b4665da4f93f89c3012bf1_cgraph.png" border="0" usemap="#slu__zdefs_8h_adaf9af23d5b4665da4f93f89c3012bf1_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_adaf9af23d5b4665da4f93f89c3012bf1_cgraph" id="slu__zdefs_8h_adaf9af23d5b4665da4f93f89c3012bf1_cgraph">
+<area shape="rect" id="node2" href="zlangs_8c.html#a37d1ec3ddab88e8c46872c5795ea5ada" title="zlangs" alt="" coords="185,226,245,253"/><area shape="rect" id="node4" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="416,74,477,101"/><area shape="rect" id="node5" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="741,353,824,380"/><area shape="rect" id="node6" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a2590dbb66d39c3055f88292f5f093be7"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the LU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#addc01b7cd28e5566177c284480a680f3">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__zdefs_8h.html" title="Header file for real operations. ">slu_zdefs.h</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a2590dbb66d39c3055f88292f5f093be7_cgraph.png" border="0" usemap="#slu__zdefs_8h_a2590dbb66d39c3055f88292f5f093be7_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a2590dbb66d39c3055f88292f5f093be7_cgraph" id="slu__zdefs_8h_a2590dbb66d39c3055f88292f5f093be7_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="528,631,595,658"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#a0c3bf2c88bdda13cede034c6e9a407e5" title="Memory-related. " alt="" coords="155,175,248,202"/><area shape="rect" id="node6" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="360,302,435,328"/><area shape="rect" id="node16" href="memory_8c.html#adbbe5a57b4ed [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a1b74304cd437572bbec487bc29422a90"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre>info (output) int*
+ = 0: successful exit
+ < 0: if info = -i, the i-th argument had an illegal value
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a1b74304cd437572bbec487bc29422a90_cgraph.png" border="0" usemap="#slu__zdefs_8h_a1b74304cd437572bbec487bc29422a90_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a1b74304cd437572bbec487bc29422a90_cgraph" id="slu__zdefs_8h_a1b74304cd437572bbec487bc29422a90_cgraph">
+<area shape="rect" id="node2" href="zgstrs_8c.html#aafcbead526e1e4f1b7895d3c5abfe4ab" title="zprint_soln" alt="" coords="143,5,228,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="339,107,421,133"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#ab7683ac1617339478753ab308a7b0fc5" title="doublecomplexCalloc" alt="" coords="307,157,453,184"/><area shape="rect" id="node5" href="slu__zdefs_8h.html#ae33b [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7b335e97d77b1adf81e383e5bcb58f3e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a7b335e97d77b1adf81e383e5bcb58f3e_cgraph.png" border="0" usemap="#slu__zdefs_8h_a7b335e97d77b1adf81e383e5bcb58f3e_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a7b335e97d77b1adf81e383e5bcb58f3e_cgraph" id="slu__zdefs_8h_a7b335e97d77b1adf81e383e5bcb58f3e_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="166,5,223,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa7f8e784fe805303d413a3dc684aa8a5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> ZLAQGS equilibrates a general sparse M by N matrix A using the row and
+ scaling factors in the vectors R and C.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (input) double*, dimension (A->nrow)
+ The row scale factors for A.</pre><pre> C (input) double*, dimension (A->ncol)
+ The column scale factors for A.</pre><pre> ROWCND (input) double
+ Ratio of the smallest R(i) to the largest R(i).</pre><pre> COLCND (input) double
+ Ratio of the smallest C(i) to the largest C(i).</pre><pre> AMAX (input) double
+ Absolute value of largest matrix entry.</pre><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><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_aa7f8e784fe805303d413a3dc684aa8a5_cgraph.png" border="0" usemap="#slu__zdefs_8h_aa7f8e784fe805303d413a3dc684aa8a5_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_aa7f8e784fe805303d413a3dc684aa8a5_cgraph" id="slu__zdefs_8h_aa7f8e784fe805303d413a3dc684aa8a5_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="115,5,176,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a231c25a6f73e928d43ee8f3f4f291844"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0c3bf2c88bdda13cede034c6e9a407e5"></a>
+<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#ac785c8235480e5cfef9848d89c047c0a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a0c3bf2c88bdda13cede034c6e9a407e5_cgraph.png" border="0" usemap="#slu__zdefs_8h_a0c3bf2c88bdda13cede034c6e9a407e5_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a0c3bf2c88bdda13cede034c6e9a407e5_cgraph" id="slu__zdefs_8h_a0c3bf2c88bdda13cede034c6e9a407e5_cgraph">
+<area shape="rect" id="node2" href="zmemory_8c.html#a0edfb761a3a551bce967037b3e1aa9e2" title="Setup the memory model to be used for factorization. " alt="" coords="157,5,257,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="169,56,244,83"/><area shape="rect" id="node4" href="zmemory_8c.html#a0546ac846872bb77841c8502590dc3e2" title="zuser_malloc" alt="" coords="356,183,455,209"/><area shape="rect" id="node5" href="z [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a399a28849bd52ce90c1cbc8e4cd85046"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+Return value: 0 - successful return
+ > 0 - number of bytes allocated when run out of space
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a399a28849bd52ce90c1cbc8e4cd85046_cgraph.png" border="0" usemap="#slu__zdefs_8h_a399a28849bd52ce90c1cbc8e4cd85046_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a399a28849bd52ce90c1cbc8e4cd85046_cgraph" id="slu__zdefs_8h_a399a28849bd52ce90c1cbc8e4cd85046_cgraph">
+<area shape="rect" id="node2" href="zmemory_8c.html#a67833ee9526cec0b31d0f26e527b97df" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="190,81,261,108"/><area shape="rect" id="node7" href="zmemory_8c.html#a17416eb78c42063624b6859d9f88820b" title="zmemory_usage" alt="" coords="166,132,285,159"/><area shape="rect" id="node3" href="zmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="371,5,477,32"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a572914748b4f1aa544a61477095e7fe5"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5987692fb793ccc6122ff861261f1ca2"></a>
+<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">, </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">const int </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58b397fc5660a6a0638f2aba584abf64"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre> Before entering this routine, the original nonzeros in the panel
+ were already copied into the spa[m,w].</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a58b397fc5660a6a0638f2aba584abf64_cgraph.png" border="0" usemap="#slu__zdefs_8h_a58b397fc5660a6a0638f2aba584abf64_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a58b397fc5660a6a0638f2aba584abf64_cgraph" id="slu__zdefs_8h_a58b397fc5660a6a0638f2aba584abf64_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#ae97174a10346e0629387c0f8ce9a9a08" title="ztrsv_" alt="" coords="159,56,217,83"/><area shape="rect" id="node5" href="zpanel__bmod_8c.html#afb6f65890b5348dc1692d01b087be35d" title="Solves a dense UNIT lower triangular system. " alt="" coords="157,107,219,133"/><area shape="rect" id="node6" href="slu__z [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="addc01b7cd28e5566177c284480a680f3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+<a class="anchor" id="a87aab883e88a4ee7f6e19b7d9d5f690c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>Compute the reciprocal pivot growth factor of the leading ncols columns
+of the matrix, using the formula:
+ min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>ncols (input) int
+ The number of columns of matrices A, L and U.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a87aab883e88a4ee7f6e19b7d9d5f690c_cgraph.png" border="0" usemap="#slu__zdefs_8h_a87aab883e88a4ee7f6e19b7d9d5f690c_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a87aab883e88a4ee7f6e19b7d9d5f690c_cgraph" id="slu__zdefs_8h_a87aab883e88a4ee7f6e19b7d9d5f690c_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="156,5,217,32"/><area shape="rect" id="node3" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="155,56,219,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="adce57d338c03a6432064f295023ba976"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_adce57d338c03a6432064f295023ba976_cgraph.png" border="0" usemap="#slu__zdefs_8h_adce57d338c03a6432064f295023ba976_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_adce57d338c03a6432064f295023ba976_cgraph" id="slu__zdefs_8h_adce57d338c03a6432064f295023ba976_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="117,5,181,32"/><area shape="rect" id="node3" href="dcomplex_8c.html#a4cfde2671a83833a15c5b48517781db0" title="Complex Division c = a/b. " alt="" coords="123,56,176,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a03a002c56d260744e0c73d90a28ca92e"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4cf22ecc8aa6e20245d071b53f1a71c4"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3bdc4fd0a2bb9efd731dee5828ad64a9"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afa07de3629132fd900f759166eef6f45"></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">, </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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8a368adca5d498e86910b5371de3131d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Prunes the L-structure of supernodes whose L-structure
+ contains the current pivot row "pivrow"
+</pre>
+</div>
+</div>
+<a class="anchor" id="a711303a4bc043eb0b1bff72b32d52397"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a711303a4bc043eb0b1bff72b32d52397_cgraph.png" border="0" usemap="#slu__zdefs_8h_a711303a4bc043eb0b1bff72b32d52397_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a711303a4bc043eb0b1bff72b32d52397_cgraph" id="slu__zdefs_8h_a711303a4bc043eb0b1bff72b32d52397_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="269,5,352,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a354313e251a9d16f6109cd5d266826fb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void zreadhb </td>
+ <td>(</td>
+ <td class="paramtype">FILE * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a354313e251a9d16f6109cd5d266826fb_cgraph.png" border="0" usemap="#slu__zdefs_8h_a354313e251a9d16f6109cd5d266826fb_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a354313e251a9d16f6109cd5d266826fb_cgraph" id="slu__zdefs_8h_a354313e251a9d16f6109cd5d266826fb_cgraph">
+<area shape="rect" id="node2" href="zreadhb_8c.html#a4c9a9a1484351dcc1ae1a756a18081e7" title="Eat up the rest of the current line. " alt="" coords="145,5,233,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a2643ac77912d9f351f7294677bbe05f2" title="Allocate storage for original matrix A. " alt="" coords="148,56,231,83"/><area shape="rect" id="node6" href="zreadhb_8c.html#ab753ef9c907b1298d163150b6e658247" title="zParseIntFormat" alt="" coords="130,107,249,133"/><area shape="re [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="acd4ff4683d71e444e948fbcacb23e803"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae3c9645c921a407e41fdd5f98c4b1a80"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_ae3c9645c921a407e41fdd5f98c4b1a80_cgraph.png" border="0" usemap="#slu__zdefs_8h_ae3c9645c921a407e41fdd5f98c4b1a80_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_ae3c9645c921a407e41fdd5f98c4b1a80_cgraph" id="slu__zdefs_8h_ae3c9645c921a407e41fdd5f98c4b1a80_cgraph">
+<area shape="rect" id="node2" href="zreadrb_8c.html#aefd047e091d4564a958a3d6bd0119eec" title="Eat up the rest of the current line. " alt="" coords="143,5,231,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a2643ac77912d9f351f7294677bbe05f2" title="Allocate storage for original matrix A. " alt="" coords="145,56,228,83"/><area shape="rect" id="node6" href="zreadrb_8c.html#aa097366cbacd16b824248c34e8b1efa9" title="zParseIntFormat" alt="" coords="127,107,246,133"/><area shape="re [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a952c154abdfc9bda69b118d25c7e599f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_a952c154abdfc9bda69b118d25c7e599f_cgraph.png" border="0" usemap="#slu__zdefs_8h_a952c154abdfc9bda69b118d25c7e599f_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_a952c154abdfc9bda69b118d25c7e599f_cgraph" id="slu__zdefs_8h_a952c154abdfc9bda69b118d25c7e599f_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a2643ac77912d9f351f7294677bbe05f2" title="Allocate storage for original matrix A. " alt="" coords="136,31,219,57"/><area shape="rect" id="node3" href="zmemory_8c.html#ad681359ed37ac809cc0e456e05655823" title="doublecomplexMalloc" alt="" coords="267,5,413,32"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="303,56,377,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa4e2012fe2ee4c2d1cd2a261bdb0455b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_aa4e2012fe2ee4c2d1cd2a261bdb0455b_cgraph.png" border="0" usemap="#slu__zdefs_8h_aa4e2012fe2ee4c2d1cd2a261bdb0455b_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_aa4e2012fe2ee4c2d1cd2a261bdb0455b_cgraph" id="slu__zdefs_8h_aa4e2012fe2ee4c2d1cd2a261bdb0455b_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="144,5,211,32"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#aff0de872dc60f87b89ae93a8f93a7a70" title="Fills a doublecomplex precision array with a given value. " alt="" coords="156,56,199,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="259,5,341,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="af416483e20a4ec79bf0d04d6e55c585b"></a>
+<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">, </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">const 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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_af416483e20a4ec79bf0d04d6e55c585b_cgraph.png" border="0" usemap="#slu__zdefs_8h_af416483e20a4ec79bf0d04d6e55c585b_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_af416483e20a4ec79bf0d04d6e55c585b_cgraph" id="slu__zdefs_8h_af416483e20a4ec79bf0d04d6e55c585b_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#ae97174a10346e0629387c0f8ce9a9a08" title="ztrsv_" alt="" coords="164,5,223,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#aa25bbd36f5c52cf8df1db92545fe80b9" title="zgemv_" alt="" coords="159,56,227,83"/><area shape="rect" id="node4" href="zcolumn__bmod_8c.html#afb6f65890b5348dc1692d01b087be35d" title="Solves a dense UNIT lower triangular system. " alt="" coords="162,107,225,133"/><area shape="rect" id="node5" href="zcolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="af0e16dd7be5f8beaf0e445562995de49"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="zsnode__dfs_8c.html#a30b52c07431f048048b8bf3e8c03087a">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="slu__zdefs_8h_af0e16dd7be5f8beaf0e445562995de49_cgraph.png" border="0" usemap="#slu__zdefs_8h_af0e16dd7be5f8beaf0e445562995de49_cgraph" alt=""/></div>
+<map name="slu__zdefs_8h_af0e16dd7be5f8beaf0e445562995de49_cgraph" id="slu__zdefs_8h_af0e16dd7be5f8beaf0e445562995de49_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="144,107,256,133"/><area shape="rect" id="node3" href="zmemory_8c.html#a67833ee9526cec0b31d0f26e527b97df" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="329,81,399,108"/><area shape="rect" id="node8" href="zmemory_8c.html#a17416eb78c42063624b6859d9f88820b" title="zmemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aeab3fd6b0df9000815d75ecdf2903d22"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int ztrsm_ </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">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>
+ </tr>
+ <tr>
+ <td class="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">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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae97174a10346e0629387c0f8ce9a9a08"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int ztrsv_ </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">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"><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></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/smemory_8c.html b/SuperLU_5.2.0/DOC/html/smemory_8c.html
new file mode 100644
index 0000000..28e9e24
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/smemory_8c.html
@@ -0,0 +1,1046 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/smemory.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">smemory.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Memory details.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for smemory.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c__incl.png" border="0" usemap="#SRC_2smemory_8c" alt=""/></div>
+<map name="SRC_2smemory_8c" id="SRC_2smemory_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a1ef4d4db4d5e1fe0719416163e0e51ae"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a1ef4d4db4d5e1fe0719416163e0e51ae">StackFull</a>(x) ( x + Glu->stack.used >= Glu->stack.size )</td></tr>
+<tr class="separator:a1ef4d4db4d5e1fe0719416163e0e51ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac11b1c3847a3d397e9675de40782134d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#ac11b1c3847a3d397e9675de40782134d">NotDoubleAlign</a>(addr) ( (intptr_t)addr & 7 )</td></tr>
+<tr class="separator:ac11b1c3847a3d397e9675de40782134d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8204d321846eb4b23d563eac7e5bfa7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#ac8204d321846eb4b23d563eac7e5bfa7">DoubleAlign</a>(addr) ( ((intptr_t)addr + 7) & ~7L )</td></tr>
+<tr class="separator:ac8204d321846eb4b23d563eac7e5bfa7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a70ca807c578a0c495f7ce5edb0215e2b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a70ca807c578a0c495f7ce5edb0215e2b">TempSpace</a>(m, w)</td></tr>
+<tr class="separator:a70ca807c578a0c495f7ce5edb0215e2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b2a35bfd2e6c9d03e2a6ccdba9fa847"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a7b2a35bfd2e6c9d03e2a6ccdba9fa847">Reduce</a>(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */</td></tr>
+<tr class="separator:a7b2a35bfd2e6c9d03e2a6ccdba9fa847"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aa2862f14356be7d9f12bfdfc175137a1"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#aa2862f14356be7d9f12bfdfc175137a1">sexpand</a> (int *prev_len,<a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a> type,int len_to_copy,int keep_prev,<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:aa2862f14356be7d9f12bfdfc175137a1"><td class="mdescLeft"> </td><td class="mdescRight">Expand the existing storage to accommodate more fill-ins. <a href="#aa2862f14356be7d9f12bfdfc175137a1">More...</a><br/></td></tr>
+<tr class="separator:aa2862f14356be7d9f12bfdfc175137a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abc603ef3859778fb5631cf3d3b951de6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#abc603ef3859778fb5631cf3d3b951de6">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 class="memdesc:abc603ef3859778fb5631cf3d3b951de6"><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="#abc603ef3859778fb5631cf3d3b951de6">More...</a><br/></td></tr>
+<tr class="separator:abc603ef3859778fb5631cf3d3b951de6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00d00daa40d07c16e3ae6bfd87c70e3d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a00d00daa40d07c16e3ae6bfd87c70e3d">copy_mem_float</a> (int, void *, void *)</td></tr>
+<tr class="separator:a00d00daa40d07c16e3ae6bfd87c70e3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aabb6ccd3c62fa5284cd5de4fb4c7f533"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#aabb6ccd3c62fa5284cd5de4fb4c7f533">sStackCompress</a> (<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:aabb6ccd3c62fa5284cd5de4fb4c7f533"><td class="mdescLeft"> </td><td class="mdescRight">Compress the work[] array to remove fragmentation. <a href="#aabb6ccd3c62fa5284cd5de4fb4c7f533">More...</a><br/></td></tr>
+<tr class="separator:aabb6ccd3c62fa5284cd5de4fb4c7f533"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a146216d4543e94e7ec4783eada50bf4c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a146216d4543e94e7ec4783eada50bf4c">sSetupSpace</a> (void *work, int lwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a146216d4543e94e7ec4783eada50bf4c"><td class="mdescLeft"> </td><td class="mdescRight">Setup the memory model to be used for factorization. <a href="#a146216d4543e94e7ec4783eada50bf4c">More...</a><br/></td></tr>
+<tr class="separator:a146216d4543e94e7ec4783eada50bf4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad68adc1b6de3f821f9fb24cdcf24d281"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#ad68adc1b6de3f821f9fb24cdcf24d281">suser_malloc</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:ad68adc1b6de3f821f9fb24cdcf24d281"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29f7485dd32f85e996e16f2a199b002d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a29f7485dd32f85e996e16f2a199b002d">suser_free</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:a29f7485dd32f85e996e16f2a199b002d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab59eea34474da95fb3dc125400a1287e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#ab59eea34474da95fb3dc125400a1287e">copy_mem_int</a> (int, void *, void *)</td></tr>
+<tr class="separator:ab59eea34474da95fb3dc125400a1287e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c226087c09a94ff40b92b14fa46fc53"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a4c226087c09a94ff40b92b14fa46fc53">user_bcopy</a> (char *, char *, int)</td></tr>
+<tr class="separator:a4c226087c09a94ff40b92b14fa46fc53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ace83037d40e06fba28a0b787df4fbece"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#ace83037d40e06fba28a0b787df4fbece">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 class="separator:ace83037d40e06fba28a0b787df4fbece"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae057d714a4952330de0572fa2785b068"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#ae057d714a4952330de0572fa2785b068">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 class="separator:ae057d714a4952330de0572fa2785b068"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aadb7d9338f2fd9700f84951708cd8064"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#aadb7d9338f2fd9700f84951708cd8064">sLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">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 [...]
+<tr class="memdesc:aadb7d9338f2fd9700f84951708cd8064"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for the data structures common to all factor routines. <a href="#aadb7d9338f2fd9700f84951708cd8064">More...</a><br/></td></tr>
+<tr class="separator:aadb7d9338f2fd9700f84951708cd8064"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ada7e5387084d37939efddbcbf6a6eca1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#ada7e5387084d37939efddbcbf6a6eca1">sSetRWork</a> (int m, int panel_size, float *dworkptr, float **dense, float **tempv)</td></tr>
+<tr class="memdesc:ada7e5387084d37939efddbcbf6a6eca1"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays. <a href="#ada7e5387084d37939efddbcbf6a6eca1">More...</a><br/></td></tr>
+<tr class="separator:ada7e5387084d37939efddbcbf6a6eca1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0e837042fa6f4b27eb2cbfc2f80387fa"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a0e837042fa6f4b27eb2cbfc2f80387fa">sLUWorkFree</a> (int *iwork, float *dwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a0e837042fa6f4b27eb2cbfc2f80387fa"><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines. <a href="#a0e837042fa6f4b27eb2cbfc2f80387fa">More...</a><br/></td></tr>
+<tr class="separator:a0e837042fa6f4b27eb2cbfc2f80387fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a80077f82e6d512e415519daed9dc3345"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a80077f82e6d512e415519daed9dc3345">sLUMemXpand</a> (int jcol, int next, <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a> mem_type, int *maxlen, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a80077f82e6d512e415519daed9dc3345"><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization. <a href="#a80077f82e6d512e415519daed9dc3345">More...</a><br/></td></tr>
+<tr class="separator:a80077f82e6d512e415519daed9dc3345"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9754e5504550ae4ab763721ebcb7055b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a9754e5504550ae4ab763721ebcb7055b">sallocateA</a> (int n, int nnz, float **a, int **asub, int **xa)</td></tr>
+<tr class="memdesc:a9754e5504550ae4ab763721ebcb7055b"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A. <a href="#a9754e5504550ae4ab763721ebcb7055b">More...</a><br/></td></tr>
+<tr class="separator:a9754e5504550ae4ab763721ebcb7055b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4a866452c5dcba66083ef463662955ee"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a4a866452c5dcba66083ef463662955ee">floatMalloc</a> (int n)</td></tr>
+<tr class="separator:a4a866452c5dcba66083ef463662955ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab6dc7fd90a3d13e0c9a8ca8d62def27f"><td class="memItemLeft" align="right" valign="top">float * </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#ab6dc7fd90a3d13e0c9a8ca8d62def27f">floatCalloc</a> (int n)</td></tr>
+<tr class="separator:ab6dc7fd90a3d13e0c9a8ca8d62def27f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a658f955c5532813bd0490502efae563f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="smemory_8c.html#a658f955c5532813bd0490502efae563f">smemory_usage</a> (const int nzlmax, const int nzumax, const int nzlumax, const int n)</td></tr>
+<tr class="separator:a658f955c5532813bd0490502efae563f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ac8204d321846eb4b23d563eac7e5bfa7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DoubleAlign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> ( ((intptr_t)addr + 7) & ~7L )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac11b1c3847a3d397e9675de40782134d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NotDoubleAlign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> ( (intptr_t)addr & 7 )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7b2a35bfd2e6c9d03e2a6ccdba9fa847"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define Reduce</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">alpha</td><td>)</td>
+ <td> ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1ef4d4db4d5e1fe0719416163e0e51ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define StackFull</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x</td><td>)</td>
+ <td> ( x + Glu->stack.used >= Glu->stack.size )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a70ca807c578a0c495f7ce5edb0215e2b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define TempSpace</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">m, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">w </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">( (2*w + 4 + <a class="code" href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a>) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) + \</div>
+<div class="line"> (w + 1) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) )</div>
+<div class="ttc" id="slu__util_8h_html_a9b7b2a5116ee487722b0967317ab6360"><div class="ttname"><a href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a></div><div class="ttdeci">#define NO_MARKER</div><div class="ttdef"><b>Definition:</b> slu_util.h:41</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a00d00daa40d07c16e3ae6bfd87c70e3d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab59eea34474da95fb3dc125400a1287e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab6dc7fd90a3d13e0c9a8ca8d62def27f"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4a866452c5dcba66083ef463662955ee"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae057d714a4952330de0572fa2785b068"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c_ae057d714a4952330de0572fa2785b068_cgraph.png" border="0" usemap="#smemory_8c_ae057d714a4952330de0572fa2785b068_cgraph" alt=""/></div>
+<map name="smemory_8c_ae057d714a4952330de0572fa2785b068_cgraph" id="smemory_8c_ae057d714a4952330de0572fa2785b068_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="176,5,243,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="291,5,373,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a9754e5504550ae4ab763721ebcb7055b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c_a9754e5504550ae4ab763721ebcb7055b_cgraph.png" border="0" usemap="#smemory_8c_a9754e5504550ae4ab763721ebcb7055b_cgraph" alt=""/></div>
+<map name="smemory_8c_a9754e5504550ae4ab763721ebcb7055b_cgraph" id="smemory_8c_a9754e5504550ae4ab763721ebcb7055b_cgraph">
+<area shape="rect" id="node2" href="smemory_8c.html#a4a866452c5dcba66083ef463662955ee" title="floatMalloc" alt="" coords="136,5,221,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="141,56,216,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa2862f14356be7d9f12bfdfc175137a1"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c_aa2862f14356be7d9f12bfdfc175137a1_cgraph.png" border="0" usemap="#smemory_8c_aa2862f14356be7d9f12bfdfc175137a1_cgraph" alt=""/></div>
+<map name="smemory_8c_aa2862f14356be7d9f12bfdfc175137a1_cgraph" id="smemory_8c_aa2862f14356be7d9f12bfdfc175137a1_cgraph">
+<area shape="rect" id="node2" href="smemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="132,5,239,32"/><area shape="rect" id="node3" href="smemory_8c.html#a00d00daa40d07c16e3ae6bfd87c70e3d" title="copy_mem_float" alt="" coords="126,56,245,83"/><area shape="rect" id="node4" href="smemory_8c.html#ad68adc1b6de3f821f9fb24cdcf24d281" title="suser_malloc" alt="" coords="136,107,235,133"/><area shape="rect" id="node5" href="smemory_8c.html#a4c226087c09a94ff40b [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aadb7d9338f2fd9700f84951708cd8064"></a>
+<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#ac785c8235480e5cfef9848d89c047c0a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c_aadb7d9338f2fd9700f84951708cd8064_cgraph.png" border="0" usemap="#smemory_8c_aadb7d9338f2fd9700f84951708cd8064_cgraph" alt=""/></div>
+<map name="smemory_8c_aadb7d9338f2fd9700f84951708cd8064_cgraph" id="smemory_8c_aadb7d9338f2fd9700f84951708cd8064_cgraph">
+<area shape="rect" id="node2" href="smemory_8c.html#a146216d4543e94e7ec4783eada50bf4c" title="Setup the memory model to be used for factorization. " alt="" coords="157,5,257,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="169,56,244,83"/><area shape="rect" id="node4" href="smemory_8c.html#ad68adc1b6de3f821f9fb24cdcf24d281" title="suser_malloc" alt="" coords="325,183,424,209"/><area shape="rect" id="node5" href="s [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a80077f82e6d512e415519daed9dc3345"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+Return value: 0 - successful return
+ > 0 - number of bytes allocated when run out of space
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c_a80077f82e6d512e415519daed9dc3345_cgraph.png" border="0" usemap="#smemory_8c_a80077f82e6d512e415519daed9dc3345_cgraph" alt=""/></div>
+<map name="smemory_8c_a80077f82e6d512e415519daed9dc3345_cgraph" id="smemory_8c_a80077f82e6d512e415519daed9dc3345_cgraph">
+<area shape="rect" id="node2" href="smemory_8c.html#aa2862f14356be7d9f12bfdfc175137a1" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="190,81,261,108"/><area shape="rect" id="node7" href="smemory_8c.html#a658f955c5532813bd0490502efae563f" title="smemory_usage" alt="" coords="166,132,285,159"/><area shape="rect" id="node3" href="smemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="340,5,447,32"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0e837042fa6f4b27eb2cbfc2f80387fa"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abc603ef3859778fb5631cf3d3b951de6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c_abc603ef3859778fb5631cf3d3b951de6_cgraph.png" border="0" usemap="#smemory_8c_abc603ef3859778fb5631cf3d3b951de6_cgraph" alt=""/></div>
+<map name="smemory_8c_abc603ef3859778fb5631cf3d3b951de6_cgraph" id="smemory_8c_abc603ef3859778fb5631cf3d3b951de6_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="165,5,232,32"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="162,56,235,83"/><area shape="rect" id="node5" href="smemory_8c.html#ad68adc1b6de3f821f9fb24cdcf24d281" title="suser_malloc" alt="" coords="149,107,248,133"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55d [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a658f955c5532813bd0490502efae563f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ace83037d40e06fba28a0b787df4fbece"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c_ace83037d40e06fba28a0b787df4fbece_cgraph.png" border="0" usemap="#smemory_8c_ace83037d40e06fba28a0b787df4fbece_cgraph" alt=""/></div>
+<map name="smemory_8c_ace83037d40e06fba28a0b787df4fbece_cgraph" id="smemory_8c_ace83037d40e06fba28a0b787df4fbece_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="269,5,352,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ada7e5387084d37939efddbcbf6a6eca1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c_ada7e5387084d37939efddbcbf6a6eca1_cgraph.png" border="0" usemap="#smemory_8c_ada7e5387084d37939efddbcbf6a6eca1_cgraph" alt=""/></div>
+<map name="smemory_8c_ada7e5387084d37939efddbcbf6a6eca1_cgraph" id="smemory_8c_ada7e5387084d37939efddbcbf6a6eca1_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="144,5,211,32"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#a2d734e40276e89a3ef04bf79bc21acb6" title="Fills a float precision array with a given value. " alt="" coords="156,56,199,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="259,5,341,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a146216d4543e94e7ec4783eada50bf4c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>lwork = 0: use system malloc; lwork > 0: use user-supplied work[] space. </p>
+
+</div>
+</div>
+<a class="anchor" id="aabb6ccd3c62fa5284cd5de4fb4c7f533"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="smemory_8c_aabb6ccd3c62fa5284cd5de4fb4c7f533_cgraph.png" border="0" usemap="#smemory_8c_aabb6ccd3c62fa5284cd5de4fb4c7f533_cgraph" alt=""/></div>
+<map name="smemory_8c_aabb6ccd3c62fa5284cd5de4fb4c7f533_cgraph" id="smemory_8c_aabb6ccd3c62fa5284cd5de4fb4c7f533_cgraph">
+<area shape="rect" id="node2" href="smemory_8c.html#a00d00daa40d07c16e3ae6bfd87c70e3d" title="copy_mem_float" alt="" coords="177,5,295,32"/><area shape="rect" id="node3" href="smemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="183,56,289,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a29f7485dd32f85e996e16f2a199b002d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad68adc1b6de3f821f9fb24cdcf24d281"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4c226087c09a94ff40b92b14fa46fc53"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/smyblas2_8c.html b/SuperLU_5.2.0/DOC/html/smyblas2_8c.html
new file mode 100644
index 0000000..bf43810
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/smyblas2_8c.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/smyblas2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">smyblas2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Level 2 Blas operations.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2c2e291d9f0825630425f05925633916"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smyblas2_8c.html#a2c2e291d9f0825630425f05925633916">slsolve</a> (int ldm, int ncol, float *M, float *rhs)</td></tr>
+<tr class="memdesc:a2c2e291d9f0825630425f05925633916"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a2c2e291d9f0825630425f05925633916">More...</a><br/></td></tr>
+<tr class="separator:a2c2e291d9f0825630425f05925633916"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a32cc084708387e72f8f7d269226237a0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smyblas2_8c.html#a32cc084708387e72f8f7d269226237a0">susolve</a> (int ldm, int ncol, float *M, float *rhs)</td></tr>
+<tr class="memdesc:a32cc084708387e72f8f7d269226237a0"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a32cc084708387e72f8f7d269226237a0">More...</a><br/></td></tr>
+<tr class="separator:a32cc084708387e72f8f7d269226237a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3ba02ba32ea4e0eae40802c9c5d082e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="smyblas2_8c.html#a3ba02ba32ea4e0eae40802c9c5d082e1">smatvec</a> (int ldm, int nrow, int ncol, float *M, float *vec, float *Mxvec)</td></tr>
+<tr class="memdesc:a3ba02ba32ea4e0eae40802c9c5d082e1"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a3ba02ba32ea4e0eae40802c9c5d082e1">More...</a><br/></td></tr>
+<tr class="separator:a3ba02ba32ea4e0eae40802c9c5d082e1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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> Purpose: Level 2 BLAS operations: solves and matvec, written in C. Note: This is only used when the system lacks an efficient BLAS library. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2c2e291d9f0825630425f05925633916"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3ba02ba32ea4e0eae40802c9c5d082e1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a32cc084708387e72f8f7d269226237a0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sp__coletree_8c.html b/SuperLU_5.2.0/DOC/html/sp__coletree_8c.html
new file mode 100644
index 0000000..aa8f06b
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sp__coletree_8c.html
@@ -0,0 +1,573 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sp_coletree.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sp_coletree.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Tree layout and computation routines.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sp_coletree.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sp__coletree_8c__incl.png" border="0" usemap="#SRC_2sp__coletree_8c" alt=""/></div>
+<map name="SRC_2sp__coletree_8c" id="SRC_2sp__coletree_8c">
+<area shape="rect" id="node4" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="310,80,399,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="392,155,499,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="523,155,624,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a45fdfbf54106113728e1a036977ccf5b"><td class="memItemLeft" align="right" valign="top">static int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a45fdfbf54106113728e1a036977ccf5b">mxCallocInt</a> (int n)</td></tr>
+<tr class="separator:a45fdfbf54106113728e1a036977ccf5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a679285dead1583f96db3c978735de380"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a679285dead1583f96db3c978735de380">initialize_disjoint_sets</a> (int n, int **pp)</td></tr>
+<tr class="separator:a679285dead1583f96db3c978735de380"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6ecd760efd6eec938f69c6d692d6ddae"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a6ecd760efd6eec938f69c6d692d6ddae">make_set</a> (int i, int *pp)</td></tr>
+<tr class="separator:a6ecd760efd6eec938f69c6d692d6ddae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7bc8447f8976dbb19c60dc2e1a12905"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#ab7bc8447f8976dbb19c60dc2e1a12905">link</a> (int s, int t, int *pp)</td></tr>
+<tr class="separator:ab7bc8447f8976dbb19c60dc2e1a12905"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7cdfbecc1ca23ee1cc298897bd64a45c"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a7cdfbecc1ca23ee1cc298897bd64a45c">find</a> (int i, int *pp)</td></tr>
+<tr class="separator:a7cdfbecc1ca23ee1cc298897bd64a45c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa34f31c4fe6ec2e5ee33f3d04ad9c209"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#aa34f31c4fe6ec2e5ee33f3d04ad9c209">finalize_disjoint_sets</a> (int *pp)</td></tr>
+<tr class="separator:aa34f31c4fe6ec2e5ee33f3d04ad9c209"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0494ba5c3e08e41a10ce8a2d96f8c49"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#aa0494ba5c3e08e41a10ce8a2d96f8c49">sp_coletree</a> (int *acolst, int *acolend, int *arow, int nr, int nc, int *parent)</td></tr>
+<tr class="separator:aa0494ba5c3e08e41a10ce8a2d96f8c49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9da0c72a7b8eaf7a2a69fb6c3340131a"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a9da0c72a7b8eaf7a2a69fb6c3340131a">etdfs</a> (int v, int first_kid[], int next_kid[], int post[], int *postnum)</td></tr>
+<tr class="separator:a9da0c72a7b8eaf7a2a69fb6c3340131a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7fec305add1f9f4c611eacdb2b744bfd"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a7fec305add1f9f4c611eacdb2b744bfd">nr_etdfs</a> (int n, int *parent, int *first_kid, int *next_kid, int *post, int postnum)</td></tr>
+<tr class="separator:a7fec305add1f9f4c611eacdb2b744bfd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8bf99818533bf5c192e1e4791b4700cc"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a8bf99818533bf5c192e1e4791b4700cc">TreePostorder</a> (int n, int *parent)</td></tr>
+<tr class="separator:a8bf99818533bf5c192e1e4791b4700cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a657d6b291654432e815392c2a00d2b84"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__coletree_8c.html#a657d6b291654432e815392c2a00d2b84">sp_symetree</a> (int *acolst, int *acolend, int *arow, int n, int *parent)</td></tr>
+<tr class="separator:a657d6b291654432e815392c2a00d2b84"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+ – SuperLU routine (version 3.1) –
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ August 1, 2008</pre><pre> Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a9da0c72a7b8eaf7a2a69fb6c3340131a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa34f31c4fe6ec2e5ee33f3d04ad9c209"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7cdfbecc1ca23ee1cc298897bd64a45c"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a679285dead1583f96db3c978735de380"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sp__coletree_8c_a679285dead1583f96db3c978735de380_cgraph.png" border="0" usemap="#sp__coletree_8c_a679285dead1583f96db3c978735de380_cgraph" alt=""/></div>
+<map name="sp__coletree_8c_a679285dead1583f96db3c978735de380_cgraph" id="sp__coletree_8c_a679285dead1583f96db3c978735de380_cgraph">
+<area shape="rect" id="node2" href="sp__coletree_8c.html#a45fdfbf54106113728e1a036977ccf5b" title="mxCallocInt" alt="" coords="203,5,295,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab7bc8447f8976dbb19c60dc2e1a12905"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6ecd760efd6eec938f69c6d692d6ddae"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a45fdfbf54106113728e1a036977ccf5b"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7fec305add1f9f4c611eacdb2b744bfd"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa0494ba5c3e08e41a10ce8a2d96f8c49"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sp__coletree_8c_aa0494ba5c3e08e41a10ce8a2d96f8c49_cgraph.png" border="0" usemap="#sp__coletree_8c_aa0494ba5c3e08e41a10ce8a2d96f8c49_cgraph" alt=""/></div>
+<map name="sp__coletree_8c_aa0494ba5c3e08e41a10ce8a2d96f8c49_cgraph" id="sp__coletree_8c_aa0494ba5c3e08e41a10ce8a2d96f8c49_cgraph">
+<area shape="rect" id="node2" href="sp__coletree_8c.html#a45fdfbf54106113728e1a036977ccf5b" title="mxCallocInt" alt="" coords="342,12,434,38"/><area shape="rect" id="node3" href="sp__coletree_8c.html#a679285dead1583f96db3c978735de380" title="initialize_disjoint_sets" alt="" coords="144,37,293,64"/><area shape="rect" id="node4" href="sp__coletree_8c.html#a6ecd760efd6eec938f69c6d692d6ddae" title="make_set" alt="" coords="179,88,258,114"/><area shape="rect" id="node5" href="sp__coletree_8c. [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a657d6b291654432e815392c2a00d2b84"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sp__coletree_8c_a657d6b291654432e815392c2a00d2b84_cgraph.png" border="0" usemap="#sp__coletree_8c_a657d6b291654432e815392c2a00d2b84_cgraph" alt=""/></div>
+<map name="sp__coletree_8c_a657d6b291654432e815392c2a00d2b84_cgraph" id="sp__coletree_8c_a657d6b291654432e815392c2a00d2b84_cgraph">
+<area shape="rect" id="node2" href="sp__coletree_8c.html#a45fdfbf54106113728e1a036977ccf5b" title="mxCallocInt" alt="" coords="350,11,442,38"/><area shape="rect" id="node3" href="sp__coletree_8c.html#a679285dead1583f96db3c978735de380" title="initialize_disjoint_sets" alt="" coords="152,37,301,63"/><area shape="rect" id="node4" href="sp__coletree_8c.html#a6ecd760efd6eec938f69c6d692d6ddae" title="make_set" alt="" coords="187,87,266,114"/><area shape="rect" id="node5" href="sp__coletree_8c. [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a8bf99818533bf5c192e1e4791b4700cc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sp__coletree_8c_a8bf99818533bf5c192e1e4791b4700cc_cgraph.png" border="0" usemap="#sp__coletree_8c_a8bf99818533bf5c192e1e4791b4700cc_cgraph" alt=""/></div>
+<map name="sp__coletree_8c_a8bf99818533bf5c192e1e4791b4700cc_cgraph" id="sp__coletree_8c_a8bf99818533bf5c192e1e4791b4700cc_cgraph">
+<area shape="rect" id="node2" href="sp__coletree_8c.html#a45fdfbf54106113728e1a036977ccf5b" title="mxCallocInt" alt="" coords="158,5,250,32"/><area shape="rect" id="node3" href="sp__coletree_8c.html#a9da0c72a7b8eaf7a2a69fb6c3340131a" title="etdfs" alt="" coords="179,56,229,83"/><area shape="rect" id="node4" href="sp__coletree_8c.html#a7fec305add1f9f4c611eacdb2b744bfd" title="nr_etdfs" alt="" coords="169,107,239,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sp__preorder_8c.html b/SuperLU_5.2.0/DOC/html/sp__preorder_8c.html
new file mode 100644
index 0000000..e90a452
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sp__preorder_8c.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sp_preorder.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sp_preorder.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Permute and performs functions on columns of orginal matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sp_preorder.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sp__preorder_8c__incl.png" border="0" usemap="#SRC_2sp__preorder_8c" alt=""/></div>
+<map name="SRC_2sp__preorder_8c" id="SRC_2sp__preorder_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad3a9a45f02456022c7eba79e17e215bc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__preorder_8c.html#ad3a9a45f02456022c7eba79e17e215bc">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *pe [...]
+<tr class="separator:ad3a9a45f02456022c7eba79e17e215bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac79059104ae6abf212c41986820d358c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sp__preorder_8c.html#ac79059104ae6abf212c41986820d358c">check_perm</a> (char *what, int n, int *perm)</td></tr>
+<tr class="separator:ac79059104ae6abf212c41986820d358c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac79059104ae6abf212c41986820d358c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad3a9a45f02456022c7eba79e17e215bc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre><a class="el" href="sp__preorder_8c.html#ad3a9a45f02456022c7eba79e17e215bc">sp_preorder()</a> permutes the columns of the original matrix. It performs
+the following steps:</pre><pre> 1. Apply column permutation perm_c[] to A's column pointers to form AC;</pre><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><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sp__preorder_8c_ad3a9a45f02456022c7eba79e17e215bc_cgraph.png" border="0" usemap="#sp__preorder_8c_ad3a9a45f02456022c7eba79e17e215bc_cgraph" alt=""/></div>
+<map name="sp__preorder_8c_ad3a9a45f02456022c7eba79e17e215bc_cgraph" id="sp__preorder_8c_ad3a9a45f02456022c7eba79e17e215bc_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a8a3ba6cbe163f9c12f6f10ee8ba98fc7" title="print_int_vec" alt="" coords="148,5,244,32"/><area shape="rect" id="node3" href="sp__preorder_8c.html#ac79059104ae6abf212c41986820d358c" title="check_perm" alt="" coords="149,56,243,83"/><area shape="rect" id="node4" href="get__perm__c_8c.html#a486ee50799ff66abe91efa46a5950a57" title="at_plus_a" alt="" coords="157,107,235,133"/><area shape="rect" id="node5" href="sp__coletree_8c.html#a657d6b29 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/spanel__bmod_8c.html b/SuperLU_5.2.0/DOC/html/spanel__bmod_8c.html
new file mode 100644
index 0000000..4b62598
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/spanel__bmod_8c.html
@@ -0,0 +1,302 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/spanel_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">spanel_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numeric block updates.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for spanel_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="spanel__bmod_8c__incl.png" border="0" usemap="#SRC_2spanel__bmod_8c" alt=""/></div>
+<map name="SRC_2spanel__bmod_8c" id="SRC_2spanel__bmod_8c">
+<area shape="rect" id="node4" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="310,80,399,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="392,155,499,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="523,155,624,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__bmod_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c">slsolve</a> (int, int, float *, float *)</td></tr>
+<tr class="memdesc:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#aa8bbeb2abbd5a10ac13fa9b48504691c">More...</a><br/></td></tr>
+<tr class="separator:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__bmod_8c.html#ab452e957171a4d0d9cfe6abb3d8a950c">smatvec</a> (int, int, int, float *, float *, float *)</td></tr>
+<tr class="memdesc:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#ab452e957171a4d0d9cfe6abb3d8a950c">More...</a><br/></td></tr>
+<tr class="separator:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae6f7d2939a3b49f7b1022645be6dde4e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__bmod_8c.html#ae6f7d2939a3b49f7b1022645be6dde4e">scheck_tempv</a> ()</td></tr>
+<tr class="separator:ae6f7d2939a3b49f7b1022645be6dde4e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1d0a6dc46d27416a6d5864dda1dba577"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__bmod_8c.html#a1d0a6dc46d27416a6d5864dda1dba577">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< [...]
+<tr class="separator:a1d0a6dc46d27416a6d5864dda1dba577"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae6f7d2939a3b49f7b1022645be6dde4e"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa8bbeb2abbd5a10ac13fa9b48504691c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab452e957171a4d0d9cfe6abb3d8a950c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1d0a6dc46d27416a6d5864dda1dba577"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre> Before entering this routine, the original nonzeros in the panel
+ were already copied into the spa[m,w].</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="spanel__bmod_8c_a1d0a6dc46d27416a6d5864dda1dba577_cgraph.png" border="0" usemap="#spanel__bmod_8c_a1d0a6dc46d27416a6d5864dda1dba577_cgraph" alt=""/></div>
+<map name="spanel__bmod_8c_a1d0a6dc46d27416a6d5864dda1dba577_cgraph" id="spanel__bmod_8c_a1d0a6dc46d27416a6d5864dda1dba577_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#aab583b502d3953688a3fa27a9f4bbf1e" title="strsv_" alt="" coords="159,56,217,83"/><area shape="rect" id="node5" href="spanel__bmod_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c" title="Solves a dense UNIT lower triangular system. " alt="" coords="157,107,219,133"/><area shape="rect" id="node6" href="slu__s [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/spanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/spanel__dfs_8c.html
new file mode 100644
index 0000000..8146efa
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/spanel__dfs_8c.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/spanel_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">spanel_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Peforms a symbolic factorization on a panel of symbols.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for spanel_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="spanel__dfs_8c__incl.png" border="0" usemap="#SRC_2spanel__dfs_8c" alt=""/></div>
+<map name="SRC_2spanel__dfs_8c" id="SRC_2spanel__dfs_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4d512383dafe1497b987e35d74eab9d8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spanel__dfs_8c.html#a4d512383dafe1497b987e35d74eab9d8">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, float *dense, int *panel_ls [...]
+<tr class="separator:a4d512383dafe1497b987e35d74eab9d8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a4d512383dafe1497b987e35d74eab9d8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/spivotL_8c.html b/SuperLU_5.2.0/DOC/html/spivotL_8c.html
new file mode 100644
index 0000000..e50536d
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/spivotL_8c.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/spivotL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">spivotL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numerical pivoting.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for spivotL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="spivotL_8c__incl.png" border="0" usemap="#SRC_2spivotL_8c" alt=""/></div>
+<map name="SRC_2spivotL_8c" id="SRC_2spivotL_8c">
+<area shape="rect" id="node4" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="369,80,458,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="119,155,226,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="250,155,351,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6adadb830ad13360ce6656212f49fb29"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="spivotL_8c.html#a6adadb830ad13360ce6656212f49fb29">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>
+<tr class="separator:a6adadb830ad13360ce6656212f49fb29"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a6adadb830ad13360ce6656212f49fb29"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/spivotgrowth_8c.html b/SuperLU_5.2.0/DOC/html/spivotgrowth_8c.html
new file mode 100644
index 0000000..1303513
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/spivotgrowth_8c.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/spivotgrowth.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">spivotgrowth.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes the reciprocal pivot growth factor.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for spivotgrowth.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="spivotgrowth_8c__incl.png" border="0" usemap="#SRC_2spivotgrowth_8c" alt=""/></div>
+<map name="SRC_2spivotgrowth_8c" id="SRC_2spivotgrowth_8c">
+<area shape="rect" id="node3" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9079b4ce43557af65fee107bc8f8d66f"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="spivotgrowth_8c.html#a9079b4ce43557af65fee107bc8f8d66f">sPivotGrowth</a> (int ncols, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, < [...]
+<tr class="separator:a9079b4ce43557af65fee107bc8f8d66f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a9079b4ce43557af65fee107bc8f8d66f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>Compute the reciprocal pivot growth factor of the leading ncols columns
+of the matrix, using the formula:
+ min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>ncols (input) int
+ The number of columns of matrices A, L and U.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="spivotgrowth_8c_a9079b4ce43557af65fee107bc8f8d66f_cgraph.png" border="0" usemap="#spivotgrowth_8c_a9079b4ce43557af65fee107bc8f8d66f_cgraph" alt=""/></div>
+<map name="spivotgrowth_8c_a9079b4ce43557af65fee107bc8f8d66f_cgraph" id="spivotgrowth_8c_a9079b4ce43557af65fee107bc8f8d66f_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a1b49252f1cab66e35ac47ac1afb2adec" title="smach" alt="" coords="155,5,216,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/spruneL_8c.html b/SuperLU_5.2.0/DOC/html/spruneL_8c.html
new file mode 100644
index 0000000..1168497
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/spruneL_8c.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/spruneL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">spruneL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Prunes the L-structure.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for spruneL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="spruneL_8c__incl.png" border="0" usemap="#SRC_2spruneL_8c" alt=""/></div>
+<map name="SRC_2spruneL_8c" id="SRC_2spruneL_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a81686daf606ed26d55e3b441ed939f08"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="spruneL_8c.html#a81686daf606ed26d55e3b441ed939f08">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>
+<tr class="separator:a81686daf606ed26d55e3b441ed939f08"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+ – SuperLU routine (version 2.0) –
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><pre> Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a81686daf606ed26d55e3b441ed939f08"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Prunes the L-structure of supernodes whose L-structure
+ contains the current pivot row "pivrow"
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sreadhb_8c.html b/SuperLU_5.2.0/DOC/html/sreadhb_8c.html
new file mode 100644
index 0000000..d3c51cf
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sreadhb_8c.html
@@ -0,0 +1,446 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sreadhb.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sreadhb.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in Harwell-Boeing format.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sreadhb.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sreadhb_8c__incl.png" border="0" usemap="#SRC_2sreadhb_8c" alt=""/></div>
+<map name="SRC_2sreadhb_8c" id="SRC_2sreadhb_8c">
+<area shape="rect" id="node4" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="310,80,399,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="392,155,499,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="523,155,624,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a752858dee322b95e4175c3f5d42ad6cd"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#a752858dee322b95e4175c3f5d42ad6cd">sDumpLine</a> (FILE *fp)</td></tr>
+<tr class="memdesc:a752858dee322b95e4175c3f5d42ad6cd"><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line. <a href="#a752858dee322b95e4175c3f5d42ad6cd">More...</a><br/></td></tr>
+<tr class="separator:a752858dee322b95e4175c3f5d42ad6cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab0bd0cdb6d30a7cb74e401aa6ac3bce1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#ab0bd0cdb6d30a7cb74e401aa6ac3bce1">sParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:ab0bd0cdb6d30a7cb74e401aa6ac3bce1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a97275461fb2f2435189f35f5dd7c3fce"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#a97275461fb2f2435189f35f5dd7c3fce">sParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a97275461fb2f2435189f35f5dd7c3fce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbec2a501b92e7e7bb13af2e21520522"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#afbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+<tr class="separator:afbec2a501b92e7e7bb13af2e21520522"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad90abece4b82f3f44fdefa92c28bda09"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#ad90abece4b82f3f44fdefa92c28bda09">sReadValues</a> (FILE *fp, int n, float *destination, int perline, int persize)</td></tr>
+<tr class="separator:ad90abece4b82f3f44fdefa92c28bda09"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3bae90f1a092dc5ebe39a5649809a9b7"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#a3bae90f1a092dc5ebe39a5649809a9b7">FormFullA</a> (int n, int *nonz, float **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:a3bae90f1a092dc5ebe39a5649809a9b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7971cc15170dbefbb0102bd0c7b9270c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadhb_8c.html#a7971cc15170dbefbb0102bd0c7b9270c">sreadhb</a> (FILE *fp, int *nrow, int *ncol, int *nonz, float **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="memdesc:a7971cc15170dbefbb0102bd0c7b9270c"><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines. <a href="#a7971cc15170dbefbb0102bd0c7b9270c">More...</a><br/></td></tr>
+<tr class="separator:a7971cc15170dbefbb0102bd0c7b9270c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre><h1>Purpose
+</h1>
+</pre><pre></pre><pre>Read a FLOAT PRECISION matrix stored in Harwell-Boeing format
+as described below.</pre><pre>Line 1 (A72,A8)
+ Col. 1 - 72 Title (TITLE)
+ Col. 73 - 80 Key (KEY)</pre><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><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><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><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><pre>First Character:
+ R Real matrix
+ C Complex matrix
+ P Pattern only (no numerical values supplied)</pre><pre>Second Character:
+ S Symmetric
+ U Unsymmetric
+ H Hermitian
+ Z Skew symmetric
+ R Rectangular</pre><pre>Third Character:
+ A Assembled
+ E Elemental matrices (unassembled)</pre><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a3bae90f1a092dc5ebe39a5649809a9b7"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void FormFullA </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<pre>
+On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+matrix. On exit, it represents the full matrix with lower and upper parts.
+</pre>
+</div>
+</div>
+<a class="anchor" id="afbec2a501b92e7e7bb13af2e21520522"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a752858dee322b95e4175c3f5d42ad6cd"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a97275461fb2f2435189f35f5dd7c3fce"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab0bd0cdb6d30a7cb74e401aa6ac3bce1"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7971cc15170dbefbb0102bd0c7b9270c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void sreadhb </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>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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sreadhb_8c_a7971cc15170dbefbb0102bd0c7b9270c_cgraph.png" border="0" usemap="#sreadhb_8c_a7971cc15170dbefbb0102bd0c7b9270c_cgraph" alt=""/></div>
+<map name="sreadhb_8c_a7971cc15170dbefbb0102bd0c7b9270c_cgraph" id="sreadhb_8c_a7971cc15170dbefbb0102bd0c7b9270c_cgraph">
+<area shape="rect" id="node2" href="sreadhb_8c.html#a752858dee322b95e4175c3f5d42ad6cd" title="Eat up the rest of the current line. " alt="" coords="145,5,233,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#aaef6f98786d0bd76103237385ddbeb9f" title="Allocate storage for original matrix A. " alt="" coords="148,56,231,83"/><area shape="rect" id="node6" href="sreadhb_8c.html#ab0bd0cdb6d30a7cb74e401aa6ac3bce1" title="sParseIntFormat" alt="" coords="130,107,249,133"/><area shape="re [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ad90abece4b82f3f44fdefa92c28bda09"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sreadrb_8c.html b/SuperLU_5.2.0/DOC/html/sreadrb_8c.html
new file mode 100644
index 0000000..6f0012a
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sreadrb_8c.html
@@ -0,0 +1,436 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sreadrb.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sreadrb.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in Rutherford-Boeing format.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sreadrb.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sreadrb_8c__incl.png" border="0" usemap="#SRC_2sreadrb_8c" alt=""/></div>
+<map name="SRC_2sreadrb_8c" id="SRC_2sreadrb_8c">
+<area shape="rect" id="node4" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="310,80,399,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="392,155,499,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="523,155,624,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad40eef9e3223cc000a38a8fb326f1dd1"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#ad40eef9e3223cc000a38a8fb326f1dd1">sDumpLine</a> (FILE *fp)</td></tr>
+<tr class="memdesc:ad40eef9e3223cc000a38a8fb326f1dd1"><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line. <a href="#ad40eef9e3223cc000a38a8fb326f1dd1">More...</a><br/></td></tr>
+<tr class="separator:ad40eef9e3223cc000a38a8fb326f1dd1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3ff3c5edc1cf7301cff66260418cac52"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#a3ff3c5edc1cf7301cff66260418cac52">sParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a3ff3c5edc1cf7301cff66260418cac52"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a40bcf62d1e9ac32095b5868b35cef780"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#a40bcf62d1e9ac32095b5868b35cef780">sParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a40bcf62d1e9ac32095b5868b35cef780"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbec2a501b92e7e7bb13af2e21520522"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#afbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+<tr class="separator:afbec2a501b92e7e7bb13af2e21520522"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a43a5fc149958a15cd7e3a30b2a1411cf"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#a43a5fc149958a15cd7e3a30b2a1411cf">sReadValues</a> (FILE *fp, int n, float *destination, int perline, int persize)</td></tr>
+<tr class="separator:a43a5fc149958a15cd7e3a30b2a1411cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3bae90f1a092dc5ebe39a5649809a9b7"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#a3bae90f1a092dc5ebe39a5649809a9b7">FormFullA</a> (int n, int *nonz, float **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:a3bae90f1a092dc5ebe39a5649809a9b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9db4e3af3f6d1037a275ebb516efe51c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadrb_8c.html#a9db4e3af3f6d1037a275ebb516efe51c">sreadrb</a> (int *nrow, int *ncol, int *nonz, float **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:a9db4e3af3f6d1037a275ebb516efe51c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 4.0) --
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre><h1>Purpose </h1>
+<p>Read a FLOAT PRECISION matrix stored in Rutherford-Boeing format as described below.</p>
+<p>Line 1 (A72, A8) Col. 1 - 72 Title (TITLE) Col. 73 - 80 Matrix name / identifier (MTRXID)</p>
+<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>
+<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 ent [...]
+<p>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>
+<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>
+<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>
+<p>Second Character: S Symmetric U Unsymmetric H Hermitian Z Skew symmetric R Rectangular</p>
+<p>Third Character: A Compressed column form E Elemental form</p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a3bae90f1a092dc5ebe39a5649809a9b7"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void FormFullA </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<pre>
+On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+matrix. On exit, it represents the full matrix with lower and upper parts.
+</pre>
+</div>
+</div>
+<a class="anchor" id="afbec2a501b92e7e7bb13af2e21520522"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad40eef9e3223cc000a38a8fb326f1dd1"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a40bcf62d1e9ac32095b5868b35cef780"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3ff3c5edc1cf7301cff66260418cac52"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9db4e3af3f6d1037a275ebb516efe51c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sreadrb_8c_a9db4e3af3f6d1037a275ebb516efe51c_cgraph.png" border="0" usemap="#sreadrb_8c_a9db4e3af3f6d1037a275ebb516efe51c_cgraph" alt=""/></div>
+<map name="sreadrb_8c_a9db4e3af3f6d1037a275ebb516efe51c_cgraph" id="sreadrb_8c_a9db4e3af3f6d1037a275ebb516efe51c_cgraph">
+<area shape="rect" id="node2" href="sreadrb_8c.html#ad40eef9e3223cc000a38a8fb326f1dd1" title="Eat up the rest of the current line. " alt="" coords="143,5,231,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#aaef6f98786d0bd76103237385ddbeb9f" title="Allocate storage for original matrix A. " alt="" coords="145,56,228,83"/><area shape="rect" id="node6" href="sreadrb_8c.html#a3ff3c5edc1cf7301cff66260418cac52" title="sParseIntFormat" alt="" coords="127,107,246,133"/><area shape="re [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a43a5fc149958a15cd7e3a30b2a1411cf"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sreadtriple_8c.html b/SuperLU_5.2.0/DOC/html/sreadtriple_8c.html
new file mode 100644
index 0000000..b94e423
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sreadtriple_8c.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sreadtriple.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sreadtriple.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in triplet (coordinate) format.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sreadtriple.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sreadtriple_8c__incl.png" border="0" usemap="#SRC_2sreadtriple_8c" alt=""/></div>
+<map name="SRC_2sreadtriple_8c" id="SRC_2sreadtriple_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a408246d01d1879fa188dd4e28602795d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadtriple_8c.html#a408246d01d1879fa188dd4e28602795d">sreadtriple</a> (int *m, int *n, int *nonz, float **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:a408246d01d1879fa188dd4e28602795d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8d3e9341e80abc5aa02486a549621534"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sreadtriple_8c.html#a8d3e9341e80abc5aa02486a549621534">sreadrhs</a> (int m, float *b)</td></tr>
+<tr class="separator:a8d3e9341e80abc5aa02486a549621534"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8d3e9341e80abc5aa02486a549621534"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a408246d01d1879fa188dd4e28602795d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sreadtriple_8c_a408246d01d1879fa188dd4e28602795d_cgraph.png" border="0" usemap="#sreadtriple_8c_a408246d01d1879fa188dd4e28602795d_cgraph" alt=""/></div>
+<map name="sreadtriple_8c_a408246d01d1879fa188dd4e28602795d_cgraph" id="sreadtriple_8c_a408246d01d1879fa188dd4e28602795d_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#aaef6f98786d0bd76103237385ddbeb9f" title="Allocate storage for original matrix A. " alt="" coords="136,31,219,57"/><area shape="rect" id="node3" href="smemory_8c.html#a4a866452c5dcba66083ef463662955ee" title="floatMalloc" alt="" coords="267,5,352,32"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="272,56,347,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ssnode__bmod_8c.html b/SuperLU_5.2.0/DOC/html/ssnode__bmod_8c.html
new file mode 100644
index 0000000..52cf328
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ssnode__bmod_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ssnode_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ssnode_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numeric block updates within the relaxed snode.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ssnode_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ssnode__bmod_8c__incl.png" border="0" usemap="#SRC_2ssnode__bmod_8c" alt=""/></div>
+<map name="SRC_2ssnode__bmod_8c" id="SRC_2ssnode__bmod_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a60492cc66830945bd7b3521c18312d4a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssnode__bmod_8c.html#a60492cc66830945bd7b3521c18312d4a">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 class="memdesc:a60492cc66830945bd7b3521c18312d4a"><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode. <a href="#a60492cc66830945bd7b3521c18312d4a">More...</a><br/></td></tr>
+<tr class="separator:a60492cc66830945bd7b3521c18312d4a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a60492cc66830945bd7b3521c18312d4a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ssnode__bmod_8c_a60492cc66830945bd7b3521c18312d4a_cgraph.png" border="0" usemap="#ssnode__bmod_8c_a60492cc66830945bd7b3521c18312d4a_cgraph" alt=""/></div>
+<map name="ssnode__bmod_8c_a60492cc66830945bd7b3521c18312d4a_cgraph" id="ssnode__bmod_8c_a60492cc66830945bd7b3521c18312d4a_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#aab583b502d3953688a3fa27a9f4bbf1e" title="strsv_" alt="" coords="164,5,223,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#ae29fbdb32369b70973b05d14fc3420c9" title="sgemv_" alt="" coords="159,56,227,83"/><area shape="rect" id="node4" href="scolumn__bmod_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c" title="Solves a dense UNIT lower triangular system. " alt="" coords="162,107,225,133"/><area shape="rect" id="node5" href="scolu [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ssnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/ssnode__dfs_8c.html
new file mode 100644
index 0000000..7b838d6
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ssnode__dfs_8c.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ssnode_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ssnode_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Determines the union of row structures of columns within the relaxed node.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ssnode_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ssnode__dfs_8c__incl.png" border="0" usemap="#SRC_2ssnode__dfs_8c" alt=""/></div>
+<map name="SRC_2ssnode__dfs_8c" id="SRC_2ssnode__dfs_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5b66817c89ddf9f74e4773b49dc72872"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssnode__dfs_8c.html#a5b66817c89ddf9f74e4773b49dc72872">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>
+<tr class="separator:a5b66817c89ddf9f74e4773b49dc72872"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5b66817c89ddf9f74e4773b49dc72872"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="ssnode__dfs_8c.html#a5b66817c89ddf9f74e4773b49dc72872">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ssnode__dfs_8c_a5b66817c89ddf9f74e4773b49dc72872_cgraph.png" border="0" usemap="#ssnode__dfs_8c_a5b66817c89ddf9f74e4773b49dc72872_cgraph" alt=""/></div>
+<map name="ssnode__dfs_8c_a5b66817c89ddf9f74e4773b49dc72872_cgraph" id="ssnode__dfs_8c_a5b66817c89ddf9f74e4773b49dc72872_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9af26d0426eb0bb63755880f2e67e7b7" title="Expand the data structures for L and U during the factorization. " alt="" coords="144,107,256,133"/><area shape="rect" id="node3" href="smemory_8c.html#aa2862f14356be7d9f12bfdfc175137a1" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="329,81,399,108"/><area shape="rect" id="node8" href="smemory_8c.html#a658f955c5532813bd0490502efae563f" title="smemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ssp__blas2_8c.html b/SuperLU_5.2.0/DOC/html/ssp__blas2_8c.html
new file mode 100644
index 0000000..aa28eb9
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ssp__blas2_8c.html
@@ -0,0 +1,444 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ssp_blas2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ssp_blas2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Sparse BLAS 2, using some dense BLAS 2 operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ssp_blas2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ssp__blas2_8c__incl.png" border="0" usemap="#SRC_2ssp__blas2_8c" alt=""/></div>
+<map name="SRC_2ssp__blas2_8c" id="SRC_2ssp__blas2_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a25ea48f4f948c68a423f5bd3929e3c1f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#a25ea48f4f948c68a423f5bd3929e3c1f">susolve</a> (int, int, float *, float *)</td></tr>
+<tr class="memdesc:a25ea48f4f948c68a423f5bd3929e3c1f"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a25ea48f4f948c68a423f5bd3929e3c1f">More...</a><br/></td></tr>
+<tr class="separator:a25ea48f4f948c68a423f5bd3929e3c1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#aa8bbeb2abbd5a10ac13fa9b48504691c">slsolve</a> (int, int, float *, float *)</td></tr>
+<tr class="memdesc:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#aa8bbeb2abbd5a10ac13fa9b48504691c">More...</a><br/></td></tr>
+<tr class="separator:aa8bbeb2abbd5a10ac13fa9b48504691c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#ab452e957171a4d0d9cfe6abb3d8a950c">smatvec</a> (int, int, int, float *, float *, float *)</td></tr>
+<tr class="memdesc:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#ab452e957171a4d0d9cfe6abb3d8a950c">More...</a><br/></td></tr>
+<tr class="separator:ab452e957171a4d0d9cfe6abb3d8a950c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab9e8302d09840e67df27ddd4defaa621"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#ab9e8302d09840e67df27ddd4defaa621">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> *sta [...]
+<tr class="memdesc:ab9e8302d09840e67df27ddd4defaa621"><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b. <a href="#ab9e8302d09840e67df27ddd4defaa621">More...</a><br/></td></tr>
+<tr class="separator:ab9e8302d09840e67df27ddd4defaa621"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3a14fab0d3fc42c621199aed6962ab3e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas2_8c.html#a3a14fab0d3fc42c621199aed6962ab3e">sp_sgemv</a> (char *trans, float alpha, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, float *x, int incx, float beta, float *y, int incy)</td></tr>
+<tr class="memdesc:a3a14fab0d3fc42c621199aed6962ab3e"><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="#a3a14fab0d3fc42c621199aed6962ab3e">More...</a><br/></td></tr>
+<tr class="separator:a3a14fab0d3fc42c621199aed6962ab3e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Last update: December 3, 2015
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aa8bbeb2abbd5a10ac13fa9b48504691c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab452e957171a4d0d9cfe6abb3d8a950c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3a14fab0d3fc42c621199aed6962ab3e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="ssp__blas2_8c.html#a3a14fab0d3fc42c621199aed6962ab3e" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y...">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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><pre> ALPHA - (input) float
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><pre> INCX - (input) int
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.</pre><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><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><pre> INCY - (input) int
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.</pre><pre> ==== Sparse Level 2 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ssp__blas2_8c_a3a14fab0d3fc42c621199aed6962ab3e_cgraph.png" border="0" usemap="#ssp__blas2_8c_a3a14fab0d3fc42c621199aed6962ab3e_cgraph" alt=""/></div>
+<map name="ssp__blas2_8c_a3a14fab0d3fc42c621199aed6962ab3e_cgraph" id="ssp__blas2_8c_a3a14fab0d3fc42c621199aed6962ab3e_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="136,5,219,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ab9e8302d09840e67df27ddd4defaa621"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="ssp__blas2_8c.html#ab9e8302d09840e67df27ddd4defaa621" 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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><pre> info - (output) int*
+ If *info = -i, the i-th argument had an illegal value.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ssp__blas2_8c_ab9e8302d09840e67df27ddd4defaa621_cgraph.png" border="0" usemap="#ssp__blas2_8c_ab9e8302d09840e67df27ddd4defaa621_cgraph" alt=""/></div>
+<map name="ssp__blas2_8c_ab9e8302d09840e67df27ddd4defaa621_cgraph" id="ssp__blas2_8c_ab9e8302d09840e67df27ddd4defaa621_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="127,5,209,32"/><area shape="rect" id="node3" href="slu__cdefs_8h.html#a3e1230bff11a9e47c35555299bcdcf1b" title="floatCalloc" alt="" coords="126,56,210,83"/><area shape="rect" id="node4" href="slu__sdefs_8h.html#aab583b502d3953688a3fa27a9f4bbf1e" title="strsv_" alt="" coords="139,107,197,133"/><area shape="rect" id="node5" href="slu__sdefs_8h.html#ae29fbdb32369b70 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a25ea48f4f948c68a423f5bd3929e3c1f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/ssp__blas3_8c.html b/SuperLU_5.2.0/DOC/html/ssp__blas3_8c.html
new file mode 100644
index 0000000..5f31306
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/ssp__blas3_8c.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/ssp_blas3.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ssp_blas3.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Sparse BLAS3, using some dense BLAS3 operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ssp_blas3.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="ssp__blas3_8c__incl.png" border="0" usemap="#SRC_2ssp__blas3_8c" alt=""/></div>
+<map name="SRC_2ssp__blas3_8c" id="SRC_2ssp__blas3_8c">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4922193147765a6b36d753e5db65a268"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ssp__blas3_8c.html#a4922193147765a6b36d753e5db65a268">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, float *b, int ldb, float beta, floa [...]
+<tr class="separator:a4922193147765a6b36d753e5db65a268"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a4922193147765a6b36d753e5db65a268"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> sp_s performs one of the matrix-matrix operations</pre><pre> C := alpha*op( A )*op( B ) + beta*C,</pre><pre> where op( X ) is one of</pre><pre> op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ),</pre><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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> ALPHA - (input) float
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><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 max( 1, n ).
+ Unchanged on exit.</pre><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><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><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 max(1,m).
+ Unchanged on exit.</pre><pre> ==== Sparse Level 3 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="ssp__blas3_8c_a4922193147765a6b36d753e5db65a268_cgraph.png" border="0" usemap="#ssp__blas3_8c_a4922193147765a6b36d753e5db65a268_cgraph" alt=""/></div>
+<map name="ssp__blas3_8c_a4922193147765a6b36d753e5db65a268_cgraph" id="ssp__blas3_8c_a4922193147765a6b36d753e5db65a268_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="141,5,224,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,5,355,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structColamd__Col__struct.html b/SuperLU_5.2.0/DOC/html/structColamd__Col__struct.html
new file mode 100644
index 0000000..2e76dee
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structColamd__Col__struct.html
@@ -0,0 +1,283 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Colamd_Col_struct Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">Colamd_Col_struct Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="colamd_8h_source.html">colamd.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a55c862b22c87023300b5ccb3044e0409"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#a55c862b22c87023300b5ccb3044e0409">start</a></td></tr>
+<tr class="separator:a55c862b22c87023300b5ccb3044e0409"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac61e32f7e56a6673058c0d57cb170f22"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#ac61e32f7e56a6673058c0d57cb170f22">length</a></td></tr>
+<tr class="separator:ac61e32f7e56a6673058c0d57cb170f22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a54fd02e0751a496e05ed7f21a2b2a1f0"><td class="memItemLeft" >union {</td></tr>
+<tr class="memitem:a55ade0a80c2e8874a35e170ba608c843"><td class="memItemLeft" > int <a class="el" href="structColamd__Col__struct.html#aa52760c0c184f617d10b9946618ebc9b">thickness</a></td></tr>
+<tr class="separator:a55ade0a80c2e8874a35e170ba608c843"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a612481cb273ee56015f5d3ff6dc4f529"><td class="memItemLeft" > int <a class="el" href="structColamd__Col__struct.html#aabae0343baec2ef7f9681bf60a23bacf">parent</a></td></tr>
+<tr class="separator:a612481cb273ee56015f5d3ff6dc4f529"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a54fd02e0751a496e05ed7f21a2b2a1f0"><td class="memItemLeft" valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#a54fd02e0751a496e05ed7f21a2b2a1f0">shared1</a></td></tr>
+<tr class="separator:a54fd02e0751a496e05ed7f21a2b2a1f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af228addd53ebe168293e7e5c3edd372e"><td class="memItemLeft" >union {</td></tr>
+<tr class="memitem:ada465e94ae33c786e640fae63237fff4"><td class="memItemLeft" > int <a class="el" href="structColamd__Col__struct.html#aa3cc8f4e719f65ba6fead93f272d7237">score</a></td></tr>
+<tr class="separator:ada465e94ae33c786e640fae63237fff4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af0742dabf94329fb266e66acb92ce783"><td class="memItemLeft" > int <a class="el" href="structColamd__Col__struct.html#a22ecb292b2471f0a09316656713bfe6e">order</a></td></tr>
+<tr class="separator:af0742dabf94329fb266e66acb92ce783"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af228addd53ebe168293e7e5c3edd372e"><td class="memItemLeft" valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#af228addd53ebe168293e7e5c3edd372e">shared2</a></td></tr>
+<tr class="separator:af228addd53ebe168293e7e5c3edd372e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5fc60d7e3cd5df5789a2999c08b47732"><td class="memItemLeft" >union {</td></tr>
+<tr class="memitem:a496d1881c31484ef04f6346f14736523"><td class="memItemLeft" > int <a class="el" href="structColamd__Col__struct.html#a16435510e5d93025bb7b9f5715a5ba1c">headhash</a></td></tr>
+<tr class="separator:a496d1881c31484ef04f6346f14736523"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b991f333da984598f7bb5e1a98d71b0"><td class="memItemLeft" > int <a class="el" href="structColamd__Col__struct.html#ababfe23e6edb41b345085470e52d7264">hash</a></td></tr>
+<tr class="separator:a0b991f333da984598f7bb5e1a98d71b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a566472504c6c1267f78d037741ddfe11"><td class="memItemLeft" > int <a class="el" href="structColamd__Col__struct.html#a23aaabe8f73f1ae9016ea4bb24d494a7">prev</a></td></tr>
+<tr class="separator:a566472504c6c1267f78d037741ddfe11"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5fc60d7e3cd5df5789a2999c08b47732"><td class="memItemLeft" valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#a5fc60d7e3cd5df5789a2999c08b47732">shared3</a></td></tr>
+<tr class="separator:a5fc60d7e3cd5df5789a2999c08b47732"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ff41bc973d32218127f4922e4c7019a"><td class="memItemLeft" >union {</td></tr>
+<tr class="memitem:a50afa8603801ddf3bdd79cca37f375e9"><td class="memItemLeft" > int <a class="el" href="structColamd__Col__struct.html#a39ab48d1ea2a8f6d365b60886c9ac5a1">degree_next</a></td></tr>
+<tr class="separator:a50afa8603801ddf3bdd79cca37f375e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1022645b3b0c2e191ce9de6a9cd5b102"><td class="memItemLeft" > int <a class="el" href="structColamd__Col__struct.html#a640f93b7885fb94b7dc0330041b53795">hash_next</a></td></tr>
+<tr class="separator:a1022645b3b0c2e191ce9de6a9cd5b102"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4ff41bc973d32218127f4922e4c7019a"><td class="memItemLeft" valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Col__struct.html#a4ff41bc973d32218127f4922e4c7019a">shared4</a></td></tr>
+<tr class="separator:a4ff41bc973d32218127f4922e4c7019a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a39ab48d1ea2a8f6d365b60886c9ac5a1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::degree_next</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ababfe23e6edb41b345085470e52d7264"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::hash</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a640f93b7885fb94b7dc0330041b53795"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::hash_next</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a16435510e5d93025bb7b9f5715a5ba1c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::headhash</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac61e32f7e56a6673058c0d57cb170f22"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::length</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a22ecb292b2471f0a09316656713bfe6e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::order</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aabae0343baec2ef7f9681bf60a23bacf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::parent</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a23aaabe8f73f1ae9016ea4bb24d494a7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::prev</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa3cc8f4e719f65ba6fead93f272d7237"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::score</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a54fd02e0751a496e05ed7f21a2b2a1f0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">union { ... } Colamd_Col_struct::shared1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af228addd53ebe168293e7e5c3edd372e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">union { ... } Colamd_Col_struct::shared2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5fc60d7e3cd5df5789a2999c08b47732"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">union { ... } Colamd_Col_struct::shared3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4ff41bc973d32218127f4922e4c7019a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">union { ... } Colamd_Col_struct::shared4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a55c862b22c87023300b5ccb3044e0409"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::start</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa52760c0c184f617d10b9946618ebc9b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Col_struct::thickness</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structColamd__Row__struct.html b/SuperLU_5.2.0/DOC/html/structColamd__Row__struct.html
new file mode 100644
index 0000000..72a6675
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structColamd__Row__struct.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: Colamd_Row_struct Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">Colamd_Row_struct Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="colamd_8h_source.html">colamd.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a24285056395b1cf2e28ea3810d67d09d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Row__struct.html#a24285056395b1cf2e28ea3810d67d09d">start</a></td></tr>
+<tr class="separator:a24285056395b1cf2e28ea3810d67d09d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cf6076c6aeab980aa2add1c24913c35"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Row__struct.html#a4cf6076c6aeab980aa2add1c24913c35">length</a></td></tr>
+<tr class="separator:a4cf6076c6aeab980aa2add1c24913c35"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2562d9df5820b202cd5e83696fc053f5"><td class="memItemLeft" >union {</td></tr>
+<tr class="memitem:ae800d722403b00691ea17b58d87714a0"><td class="memItemLeft" > int <a class="el" href="structColamd__Row__struct.html#a01e336d70f1cbe2ac615d4b23c480ecd">degree</a></td></tr>
+<tr class="separator:ae800d722403b00691ea17b58d87714a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aefe85121f3d4f83f3e4ea2b0949c1e45"><td class="memItemLeft" > int <a class="el" href="structColamd__Row__struct.html#acb0d165350cbbdad8dc4260bd48b1f80">p</a></td></tr>
+<tr class="separator:aefe85121f3d4f83f3e4ea2b0949c1e45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2562d9df5820b202cd5e83696fc053f5"><td class="memItemLeft" valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Row__struct.html#a2562d9df5820b202cd5e83696fc053f5">shared1</a></td></tr>
+<tr class="separator:a2562d9df5820b202cd5e83696fc053f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeb2ca96dcadf6490c614ed559acef59a"><td class="memItemLeft" >union {</td></tr>
+<tr class="memitem:aad1f0b640a107552e6c15fdfebc49aeb"><td class="memItemLeft" > int <a class="el" href="structColamd__Row__struct.html#a00b8bd69ce2b84d9b75c5503d80c5080">mark</a></td></tr>
+<tr class="separator:aad1f0b640a107552e6c15fdfebc49aeb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2050b61ce6ecdda0caf7cccff3a91086"><td class="memItemLeft" > int <a class="el" href="structColamd__Row__struct.html#af7bf4c87b04e63e6b1abc2c86e8d1376">first_column</a></td></tr>
+<tr class="separator:a2050b61ce6ecdda0caf7cccff3a91086"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeb2ca96dcadf6490c614ed559acef59a"><td class="memItemLeft" valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structColamd__Row__struct.html#aeb2ca96dcadf6490c614ed559acef59a">shared2</a></td></tr>
+<tr class="separator:aeb2ca96dcadf6490c614ed559acef59a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a01e336d70f1cbe2ac615d4b23c480ecd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Row_struct::degree</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af7bf4c87b04e63e6b1abc2c86e8d1376"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Row_struct::first_column</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4cf6076c6aeab980aa2add1c24913c35"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Row_struct::length</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a00b8bd69ce2b84d9b75c5503d80c5080"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Row_struct::mark</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acb0d165350cbbdad8dc4260bd48b1f80"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Row_struct::p</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2562d9df5820b202cd5e83696fc053f5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">union { ... } Colamd_Row_struct::shared1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aeb2ca96dcadf6490c614ed559acef59a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">union { ... } Colamd_Row_struct::shared2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a24285056395b1cf2e28ea3810d67d09d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Colamd_Row_struct::start</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structDNformat.html b/SuperLU_5.2.0/DOC/html/structDNformat.html
new file mode 100644
index 0000000..ade8500
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structDNformat.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: DNformat Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">DNformat Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="supermatrix_8h_source.html">supermatrix.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a6b584837b30f33849c6c3b070aade816"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structDNformat.html#a6b584837b30f33849c6c3b070aade816">lda</a></td></tr>
+<tr class="separator:a6b584837b30f33849c6c3b070aade816"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a54a061275c52aa9e38f4cb65da46d48c"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structDNformat.html#a54a061275c52aa9e38f4cb65da46d48c">nzval</a></td></tr>
+<tr class="separator:a54a061275c52aa9e38f4cb65da46d48c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a6b584837b30f33849c6c3b070aade816"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> DNformat::lda</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a54a061275c52aa9e38f4cb65da46d48c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* DNformat::nzval</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structGlobalLU__t.html b/SuperLU_5.2.0/DOC/html/structGlobalLU__t.html
new file mode 100644
index 0000000..92c659d
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structGlobalLU__t.html
@@ -0,0 +1,314 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: GlobalLU_t Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">GlobalLU_t Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="slu__util_8h_source.html">slu_util.h</a>></code></p>
+<div class="dynheader">
+Collaboration diagram for GlobalLU_t:</div>
+<div class="dyncontent">
+<div class="center"><img src="structGlobalLU__t__coll__graph.png" border="0" usemap="#GlobalLU__t_coll__map" alt="Collaboration graph"/></div>
+<map name="GlobalLU__t_coll__map" id="GlobalLU__t_coll__map">
+<area shape="rect" id="node2" href="structLU__stack__t.html" title="LU_stack_t" alt="" coords="5,5,93,32"/><area shape="rect" id="node3" href="structe__node.html" title="Headers for 4 types of dynamatically managed memory. " alt="" coords="119,5,183,32"/></map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a94902a11c68912c2d456a58edd29f31d"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a94902a11c68912c2d456a58edd29f31d">xsup</a></td></tr>
+<tr class="separator:a94902a11c68912c2d456a58edd29f31d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afe003e9f68a924d5ba66c6f655bea55c"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#afe003e9f68a924d5ba66c6f655bea55c">supno</a></td></tr>
+<tr class="separator:afe003e9f68a924d5ba66c6f655bea55c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e7e8cd3ba09e252a04eaf0b8af5fccd"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a4e7e8cd3ba09e252a04eaf0b8af5fccd">lsub</a></td></tr>
+<tr class="separator:a4e7e8cd3ba09e252a04eaf0b8af5fccd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac6f1655e303e2947524c29182d0f6a1e"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#ac6f1655e303e2947524c29182d0f6a1e">xlsub</a></td></tr>
+<tr class="separator:ac6f1655e303e2947524c29182d0f6a1e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7ea00f7770c21f78c3576565899dc33"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#ac7ea00f7770c21f78c3576565899dc33">lusup</a></td></tr>
+<tr class="separator:ac7ea00f7770c21f78c3576565899dc33"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaa63b1382a358278bd2775c921a84246"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#aaa63b1382a358278bd2775c921a84246">xlusup</a></td></tr>
+<tr class="separator:aaa63b1382a358278bd2775c921a84246"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a80274bbd108f6f02a23611f76efb73c4"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a80274bbd108f6f02a23611f76efb73c4">ucol</a></td></tr>
+<tr class="separator:a80274bbd108f6f02a23611f76efb73c4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96b0443ea47703100b9ecad92137dda9"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a96b0443ea47703100b9ecad92137dda9">usub</a></td></tr>
+<tr class="separator:a96b0443ea47703100b9ecad92137dda9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4cbf4786dd6fc6541d5e097b27ab6835"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a4cbf4786dd6fc6541d5e097b27ab6835">xusub</a></td></tr>
+<tr class="separator:a4cbf4786dd6fc6541d5e097b27ab6835"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f77873222d31cd15eb781fdbf18df18"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a1f77873222d31cd15eb781fdbf18df18">nzlmax</a></td></tr>
+<tr class="separator:a1f77873222d31cd15eb781fdbf18df18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5238cd65bea5ca45046238d908073982"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a5238cd65bea5ca45046238d908073982">nzumax</a></td></tr>
+<tr class="separator:a5238cd65bea5ca45046238d908073982"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae67b1da1b096e92b7ddadf6e4a159481"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#ae67b1da1b096e92b7ddadf6e4a159481">nzlumax</a></td></tr>
+<tr class="separator:ae67b1da1b096e92b7ddadf6e4a159481"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a48fcf5a7ff751514d92feeb40370fe5e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a48fcf5a7ff751514d92feeb40370fe5e">n</a></td></tr>
+<tr class="separator:a48fcf5a7ff751514d92feeb40370fe5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9089591bf01db5135a9d52cb732b0f3c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#a494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a9089591bf01db5135a9d52cb732b0f3c">MemModel</a></td></tr>
+<tr class="separator:a9089591bf01db5135a9d52cb732b0f3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1923c63f76eab75f5022f025c25a82a7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#a1923c63f76eab75f5022f025c25a82a7">num_expansions</a></td></tr>
+<tr class="separator:a1923c63f76eab75f5022f025c25a82a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aedd2ee950bd57f92d4aa9028738b9bdc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__util_8h.html#ac071de4d8a39e15f13c92a5f60bc16f0">ExpHeader</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structGlobalLU__t.html#aedd2ee950bd57f92d4aa9028738b9bdc">expanders</a></td></tr>
+<tr class="separator:aedd2ee950bd57f92d4aa9028738b9bdc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c8f24b1d7ed85996df0ab869b472b0e"><td class="memItemLeft" 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#a9c8f24b1d7ed85996df0ab869b472b0e">stack</a></td></tr>
+<tr class="separator:a9c8f24b1d7ed85996df0ab869b472b0e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="aedd2ee950bd57f92d4aa9028738b9bdc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__util_8h.html#ac071de4d8a39e15f13c92a5f60bc16f0">ExpHeader</a>* GlobalLU_t::expanders</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4e7e8cd3ba09e252a04eaf0b8af5fccd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GlobalLU_t::lsub</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac7ea00f7770c21f78c3576565899dc33"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* GlobalLU_t::lusup</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9089591bf01db5135a9d52cb732b0f3c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#a494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> GlobalLU_t::MemModel</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a48fcf5a7ff751514d92feeb40370fe5e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int GlobalLU_t::n</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1923c63f76eab75f5022f025c25a82a7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int GlobalLU_t::num_expansions</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1f77873222d31cd15eb781fdbf18df18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int GlobalLU_t::nzlmax</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae67b1da1b096e92b7ddadf6e4a159481"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int GlobalLU_t::nzlumax</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5238cd65bea5ca45046238d908073982"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int GlobalLU_t::nzumax</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9c8f24b1d7ed85996df0ab869b472b0e"></a>
+<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> GlobalLU_t::stack</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afe003e9f68a924d5ba66c6f655bea55c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GlobalLU_t::supno</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a80274bbd108f6f02a23611f76efb73c4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* GlobalLU_t::ucol</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a96b0443ea47703100b9ecad92137dda9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GlobalLU_t::usub</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac6f1655e303e2947524c29182d0f6a1e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GlobalLU_t::xlsub</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaa63b1382a358278bd2775c921a84246"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GlobalLU_t::xlusup</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a94902a11c68912c2d456a58edd29f31d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GlobalLU_t::xsup</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4cbf4786dd6fc6541d5e097b27ab6835"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GlobalLU_t::xusub</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structLU__stack__t.html b/SuperLU_5.2.0/DOC/html/structLU__stack__t.html
new file mode 100644
index 0000000..e578150
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structLU__stack__t.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: LU_stack_t Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">LU_stack_t Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="slu__util_8h_source.html">slu_util.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:af05e6775b79809e7bcc0c92da24c12f5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#af05e6775b79809e7bcc0c92da24c12f5">size</a></td></tr>
+<tr class="separator:af05e6775b79809e7bcc0c92da24c12f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a78ad1773677b220bd843c9d84bbda869"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#a78ad1773677b220bd843c9d84bbda869">used</a></td></tr>
+<tr class="separator:a78ad1773677b220bd843c9d84bbda869"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3ba965e6621326c518c95d791afe6fef"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#a3ba965e6621326c518c95d791afe6fef">top1</a></td></tr>
+<tr class="separator:a3ba965e6621326c518c95d791afe6fef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1ae2a485bc81409ceb05bce271363901"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#a1ae2a485bc81409ceb05bce271363901">top2</a></td></tr>
+<tr class="separator:a1ae2a485bc81409ceb05bce271363901"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac76a2713e4f4c516d7189303b6f82c8d"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structLU__stack__t.html#ac76a2713e4f4c516d7189303b6f82c8d">array</a></td></tr>
+<tr class="separator:ac76a2713e4f4c516d7189303b6f82c8d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="ac76a2713e4f4c516d7189303b6f82c8d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* LU_stack_t::array</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af05e6775b79809e7bcc0c92da24c12f5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LU_stack_t::size</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3ba965e6621326c518c95d791afe6fef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LU_stack_t::top1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1ae2a485bc81409ceb05bce271363901"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LU_stack_t::top2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a78ad1773677b220bd843c9d84bbda869"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LU_stack_t::used</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structNCPformat.html b/SuperLU_5.2.0/DOC/html/structNCPformat.html
new file mode 100644
index 0000000..fe895db
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structNCPformat.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: NCPformat Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">NCPformat Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="supermatrix_8h_source.html">supermatrix.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ac8c12ffc9edd0906608612727ad406ed"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#ac8c12ffc9edd0906608612727ad406ed">nnz</a></td></tr>
+<tr class="separator:ac8c12ffc9edd0906608612727ad406ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a519ed66fdf9da30c76c079474503c764"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#a519ed66fdf9da30c76c079474503c764">nzval</a></td></tr>
+<tr class="separator:a519ed66fdf9da30c76c079474503c764"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8a27cd5a756bc313cc3c487a84e8ba30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#a8a27cd5a756bc313cc3c487a84e8ba30">rowind</a></td></tr>
+<tr class="separator:a8a27cd5a756bc313cc3c487a84e8ba30"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2192334a0f76d4c18784caa1f8783f01"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#a2192334a0f76d4c18784caa1f8783f01">colbeg</a></td></tr>
+<tr class="separator:a2192334a0f76d4c18784caa1f8783f01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a86dcc41e83595a12ecd88d57748430c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html#a86dcc41e83595a12ecd88d57748430c0">colend</a></td></tr>
+<tr class="separator:a86dcc41e83595a12ecd88d57748430c0"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a2192334a0f76d4c18784caa1f8783f01"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* NCPformat::colbeg</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a86dcc41e83595a12ecd88d57748430c0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* NCPformat::colend</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac8c12ffc9edd0906608612727ad406ed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> NCPformat::nnz</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a519ed66fdf9da30c76c079474503c764"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* NCPformat::nzval</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8a27cd5a756bc313cc3c487a84e8ba30"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* NCPformat::rowind</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structNCformat.html b/SuperLU_5.2.0/DOC/html/structNCformat.html
new file mode 100644
index 0000000..4bb2c52
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structNCformat.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: NCformat Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">NCformat Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="supermatrix_8h_source.html">supermatrix.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:affa2566dd89ea8ce6422f788887b5b27"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html#affa2566dd89ea8ce6422f788887b5b27">nnz</a></td></tr>
+<tr class="separator:affa2566dd89ea8ce6422f788887b5b27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3e85810bb190b7359d8aaa956a64e64"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html#aa3e85810bb190b7359d8aaa956a64e64">nzval</a></td></tr>
+<tr class="separator:aa3e85810bb190b7359d8aaa956a64e64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a16eb8492bb5694035ef3e620ea8c77b1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html#a16eb8492bb5694035ef3e620ea8c77b1">rowind</a></td></tr>
+<tr class="separator:a16eb8492bb5694035ef3e620ea8c77b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a881f460e39f34bbbf70909b6b0629adc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html#a881f460e39f34bbbf70909b6b0629adc">colptr</a></td></tr>
+<tr class="separator:a881f460e39f34bbbf70909b6b0629adc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a881f460e39f34bbbf70909b6b0629adc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* NCformat::colptr</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="affa2566dd89ea8ce6422f788887b5b27"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> NCformat::nnz</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa3e85810bb190b7359d8aaa956a64e64"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* NCformat::nzval</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a16eb8492bb5694035ef3e620ea8c77b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* NCformat::rowind</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structNRformat.html b/SuperLU_5.2.0/DOC/html/structNRformat.html
new file mode 100644
index 0000000..c04ae6e
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structNRformat.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: NRformat Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">NRformat Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="supermatrix_8h_source.html">supermatrix.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ae3652d6a08cf47208db6abbd162bdee2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html#ae3652d6a08cf47208db6abbd162bdee2">nnz</a></td></tr>
+<tr class="separator:ae3652d6a08cf47208db6abbd162bdee2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3933d6611dc87efede947b08ea8d83f2"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html#a3933d6611dc87efede947b08ea8d83f2">nzval</a></td></tr>
+<tr class="separator:a3933d6611dc87efede947b08ea8d83f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25b76fc1f79b314a99c1e8f8522d77af"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html#a25b76fc1f79b314a99c1e8f8522d77af">colind</a></td></tr>
+<tr class="separator:a25b76fc1f79b314a99c1e8f8522d77af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a552302eb293088d4b7040f487b430ba7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html#a552302eb293088d4b7040f487b430ba7">rowptr</a></td></tr>
+<tr class="separator:a552302eb293088d4b7040f487b430ba7"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a25b76fc1f79b314a99c1e8f8522d77af"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* NRformat::colind</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae3652d6a08cf47208db6abbd162bdee2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> NRformat::nnz</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3933d6611dc87efede947b08ea8d83f2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* NRformat::nzval</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a552302eb293088d4b7040f487b430ba7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* NRformat::rowptr</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structNRformat__loc.html b/SuperLU_5.2.0/DOC/html/structNRformat__loc.html
new file mode 100644
index 0000000..2dbc1fb
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structNRformat__loc.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: NRformat_loc Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">NRformat_loc Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="supermatrix_8h_source.html">supermatrix.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a41c309cb83dedeaa82c0e4e137ea4785"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#a41c309cb83dedeaa82c0e4e137ea4785">nnz_loc</a></td></tr>
+<tr class="separator:a41c309cb83dedeaa82c0e4e137ea4785"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a90413dc3eb197a83b70cc0d97e4c54af"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#a90413dc3eb197a83b70cc0d97e4c54af">m_loc</a></td></tr>
+<tr class="separator:a90413dc3eb197a83b70cc0d97e4c54af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acab0ad4c74c4b4f0c68647f98b430cd9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#acab0ad4c74c4b4f0c68647f98b430cd9">fst_row</a></td></tr>
+<tr class="separator:acab0ad4c74c4b4f0c68647f98b430cd9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a08b19d74f15e6475f43565035ae898ca"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#a08b19d74f15e6475f43565035ae898ca">nzval</a></td></tr>
+<tr class="separator:a08b19d74f15e6475f43565035ae898ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aadd0788ee704ffb7000b0485ee128061"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#aadd0788ee704ffb7000b0485ee128061">rowptr</a></td></tr>
+<tr class="separator:aadd0788ee704ffb7000b0485ee128061"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5d192fc35ba0915afa42f36eca0e2d78"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html#a5d192fc35ba0915afa42f36eca0e2d78">colind</a></td></tr>
+<tr class="separator:a5d192fc35ba0915afa42f36eca0e2d78"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a5d192fc35ba0915afa42f36eca0e2d78"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* NRformat_loc::colind</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acab0ad4c74c4b4f0c68647f98b430cd9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> NRformat_loc::fst_row</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a90413dc3eb197a83b70cc0d97e4c54af"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> NRformat_loc::m_loc</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a41c309cb83dedeaa82c0e4e137ea4785"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> NRformat_loc::nnz_loc</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a08b19d74f15e6475f43565035ae898ca"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* NRformat_loc::nzval</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aadd0788ee704ffb7000b0485ee128061"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* NRformat_loc::rowptr</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structSCPformat.html b/SuperLU_5.2.0/DOC/html/structSCPformat.html
new file mode 100644
index 0000000..97b3720
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structSCPformat.html
@@ -0,0 +1,223 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SCPformat Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">SCPformat Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="supermatrix_8h_source.html">supermatrix.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad4b6e7424269c3cbe9a368604433870e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#ad4b6e7424269c3cbe9a368604433870e">nnz</a></td></tr>
+<tr class="separator:ad4b6e7424269c3cbe9a368604433870e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a20ee99d8cfb0cecad94373e2eb5abef8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#a20ee99d8cfb0cecad94373e2eb5abef8">nsuper</a></td></tr>
+<tr class="separator:a20ee99d8cfb0cecad94373e2eb5abef8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a028e5f9ef15054302c1403969c37a0fb"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#a028e5f9ef15054302c1403969c37a0fb">nzval</a></td></tr>
+<tr class="separator:a028e5f9ef15054302c1403969c37a0fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa9bae5f483aa1a22aec18f5c2393f05e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#aa9bae5f483aa1a22aec18f5c2393f05e">nzval_colbeg</a></td></tr>
+<tr class="separator:aa9bae5f483aa1a22aec18f5c2393f05e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a098e9a5c87e2c0b35c82852b1910334d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#a098e9a5c87e2c0b35c82852b1910334d">nzval_colend</a></td></tr>
+<tr class="separator:a098e9a5c87e2c0b35c82852b1910334d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b4ccbb31fa3a7c2372b5a297453e200"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#a5b4ccbb31fa3a7c2372b5a297453e200">rowind</a></td></tr>
+<tr class="separator:a5b4ccbb31fa3a7c2372b5a297453e200"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bd16ec6ab44636e56da09d65fbe8402"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#a1bd16ec6ab44636e56da09d65fbe8402">rowind_colbeg</a></td></tr>
+<tr class="separator:a1bd16ec6ab44636e56da09d65fbe8402"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a09c1770c0baad3c1152d48587ad084b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#a09c1770c0baad3c1152d48587ad084b4">rowind_colend</a></td></tr>
+<tr class="separator:a09c1770c0baad3c1152d48587ad084b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba16553c2896f7c88450621f18b54bae"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#aba16553c2896f7c88450621f18b54bae">col_to_sup</a></td></tr>
+<tr class="separator:aba16553c2896f7c88450621f18b54bae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a345ad774183c979674dd0960a930508e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#a345ad774183c979674dd0960a930508e">sup_to_colbeg</a></td></tr>
+<tr class="separator:a345ad774183c979674dd0960a930508e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8e470d085ca7b39645336943a1f2eae6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html#a8e470d085ca7b39645336943a1f2eae6">sup_to_colend</a></td></tr>
+<tr class="separator:a8e470d085ca7b39645336943a1f2eae6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="aba16553c2896f7c88450621f18b54bae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCPformat::col_to_sup</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad4b6e7424269c3cbe9a368604433870e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> SCPformat::nnz</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a20ee99d8cfb0cecad94373e2eb5abef8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> SCPformat::nsuper</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a028e5f9ef15054302c1403969c37a0fb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* SCPformat::nzval</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa9bae5f483aa1a22aec18f5c2393f05e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCPformat::nzval_colbeg</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a098e9a5c87e2c0b35c82852b1910334d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCPformat::nzval_colend</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5b4ccbb31fa3a7c2372b5a297453e200"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCPformat::rowind</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1bd16ec6ab44636e56da09d65fbe8402"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCPformat::rowind_colbeg</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a09c1770c0baad3c1152d48587ad084b4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCPformat::rowind_colend</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a345ad774183c979674dd0960a930508e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCPformat::sup_to_colbeg</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8e470d085ca7b39645336943a1f2eae6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCPformat::sup_to_colend</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structSCformat.html b/SuperLU_5.2.0/DOC/html/structSCformat.html
new file mode 100644
index 0000000..96f6fce
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structSCformat.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SCformat Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">SCformat Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="supermatrix_8h_source.html">supermatrix.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a3808f35bd097fbc0a39e3e65ee2a8d4a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#a3808f35bd097fbc0a39e3e65ee2a8d4a">nnz</a></td></tr>
+<tr class="separator:a3808f35bd097fbc0a39e3e65ee2a8d4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aafffc008b0b8e57b9cdf5689a527bd8c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#aafffc008b0b8e57b9cdf5689a527bd8c">nsuper</a></td></tr>
+<tr class="separator:aafffc008b0b8e57b9cdf5689a527bd8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25011a4746e4cf0a6fbc38ba45a70e91"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#a25011a4746e4cf0a6fbc38ba45a70e91">nzval</a></td></tr>
+<tr class="separator:a25011a4746e4cf0a6fbc38ba45a70e91"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41e93b73c8bce9326f035e3647ee94ca"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#a41e93b73c8bce9326f035e3647ee94ca">nzval_colptr</a></td></tr>
+<tr class="separator:a41e93b73c8bce9326f035e3647ee94ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aec8a46751f64a94238495838aaed7cd2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#aec8a46751f64a94238495838aaed7cd2">rowind</a></td></tr>
+<tr class="separator:aec8a46751f64a94238495838aaed7cd2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7683b1730b067ae2058004f0f18ad88d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#a7683b1730b067ae2058004f0f18ad88d">rowind_colptr</a></td></tr>
+<tr class="separator:a7683b1730b067ae2058004f0f18ad88d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a75a51eef4af5a906cde9a32eddcb2fc1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#a75a51eef4af5a906cde9a32eddcb2fc1">col_to_sup</a></td></tr>
+<tr class="separator:a75a51eef4af5a906cde9a32eddcb2fc1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad5cb1b2ae17c5fe554c3b70721718b08"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html#ad5cb1b2ae17c5fe554c3b70721718b08">sup_to_col</a></td></tr>
+<tr class="separator:ad5cb1b2ae17c5fe554c3b70721718b08"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a75a51eef4af5a906cde9a32eddcb2fc1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCformat::col_to_sup</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3808f35bd097fbc0a39e3e65ee2a8d4a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> SCformat::nnz</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aafffc008b0b8e57b9cdf5689a527bd8c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> SCformat::nsuper</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a25011a4746e4cf0a6fbc38ba45a70e91"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* SCformat::nzval</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a41e93b73c8bce9326f035e3647ee94ca"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCformat::nzval_colptr</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aec8a46751f64a94238495838aaed7cd2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCformat::rowind</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7683b1730b067ae2058004f0f18ad88d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCformat::rowind_colptr</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad5cb1b2ae17c5fe554c3b70721718b08"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a>* SCformat::sup_to_col</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structSuperLUStat__t.html b/SuperLU_5.2.0/DOC/html/structSuperLUStat__t.html
new file mode 100644
index 0000000..10ac9fb
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structSuperLUStat__t.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SuperLUStat_t Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">SuperLUStat_t Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="slu__util_8h_source.html">slu_util.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a9a15399d38ecaf731ec300977f268b75"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#a9a15399d38ecaf731ec300977f268b75">panel_histo</a></td></tr>
+<tr class="separator:a9a15399d38ecaf731ec300977f268b75"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5eccc9eba32b749c87f7a97991cfdc18"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#a5eccc9eba32b749c87f7a97991cfdc18">utime</a></td></tr>
+<tr class="separator:a5eccc9eba32b749c87f7a97991cfdc18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aec6afa389e49ac9d04dc44e24805c99d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__util_8h.html#aaae6020bb33e780ff6edbd4e45ce08ac">flops_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#aec6afa389e49ac9d04dc44e24805c99d">ops</a></td></tr>
+<tr class="separator:aec6afa389e49ac9d04dc44e24805c99d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad752e80fc9fa85195ec9c0e9a17b481c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#ad752e80fc9fa85195ec9c0e9a17b481c">TinyPivots</a></td></tr>
+<tr class="separator:ad752e80fc9fa85195ec9c0e9a17b481c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a472eadaf612c983b8829ae40b09f411b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#a472eadaf612c983b8829ae40b09f411b">RefineSteps</a></td></tr>
+<tr class="separator:a472eadaf612c983b8829ae40b09f411b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab0281af9350a75b2d4a3108b8bc0bf23"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperLUStat__t.html#ab0281af9350a75b2d4a3108b8bc0bf23">expansions</a></td></tr>
+<tr class="separator:ab0281af9350a75b2d4a3108b8bc0bf23"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="ab0281af9350a75b2d4a3108b8bc0bf23"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int SuperLUStat_t::expansions</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aec6afa389e49ac9d04dc44e24805c99d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__util_8h.html#aaae6020bb33e780ff6edbd4e45ce08ac">flops_t</a>* SuperLUStat_t::ops</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9a15399d38ecaf731ec300977f268b75"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* SuperLUStat_t::panel_histo</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a472eadaf612c983b8829ae40b09f411b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int SuperLUStat_t::RefineSteps</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad752e80fc9fa85195ec9c0e9a17b481c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int SuperLUStat_t::TinyPivots</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5eccc9eba32b749c87f7a97991cfdc18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* SuperLUStat_t::utime</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structSuperMatrix.html b/SuperLU_5.2.0/DOC/html/structSuperMatrix.html
new file mode 100644
index 0000000..527eb5d
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structSuperMatrix.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SuperMatrix Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">SuperMatrix Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="supermatrix_8h_source.html">supermatrix.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ab37e181824f50a405272451afc399952"><td class="memItemLeft" align="right" valign="top"><a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#ab37e181824f50a405272451afc399952">Stype</a></td></tr>
+<tr class="separator:ab37e181824f50a405272451afc399952"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aedd4bd451819549620b49076a62dfdcc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#aedd4bd451819549620b49076a62dfdcc">Dtype</a></td></tr>
+<tr class="separator:aedd4bd451819549620b49076a62dfdcc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42877db0cfad1033374474f48e4b3fc4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#a42877db0cfad1033374474f48e4b3fc4">Mtype</a></td></tr>
+<tr class="separator:a42877db0cfad1033374474f48e4b3fc4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1d854b814f0757e7ff7e0da01c6ef43"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#ab1d854b814f0757e7ff7e0da01c6ef43">nrow</a></td></tr>
+<tr class="separator:ab1d854b814f0757e7ff7e0da01c6ef43"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab8b85bf206c36ebc2223cc2ec6acbe8c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#ab8b85bf206c36ebc2223cc2ec6acbe8c">ncol</a></td></tr>
+<tr class="separator:ab8b85bf206c36ebc2223cc2ec6acbe8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a73ebca1b46bb24536226b9378e01c5b5"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html#a73ebca1b46bb24536226b9378e01c5b5">Store</a></td></tr>
+<tr class="separator:a73ebca1b46bb24536226b9378e01c5b5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="aedd4bd451819549620b49076a62dfdcc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> SuperMatrix::Dtype</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a42877db0cfad1033374474f48e4b3fc4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60">Mtype_t</a> SuperMatrix::Mtype</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab8b85bf206c36ebc2223cc2ec6acbe8c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> SuperMatrix::ncol</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab1d854b814f0757e7ff7e0da01c6ef43"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> SuperMatrix::nrow</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a73ebca1b46bb24536226b9378e01c5b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* SuperMatrix::Store</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab37e181824f50a405272451afc399952"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> SuperMatrix::Stype</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structcomplex.html b/SuperLU_5.2.0/DOC/html/structcomplex.html
new file mode 100644
index 0000000..4704cc3
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structcomplex.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: complex Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">complex Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="slu__scomplex_8h_source.html">slu_scomplex.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a6b24d5cc84eef41dbe90b79e93de030f"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structcomplex.html#a6b24d5cc84eef41dbe90b79e93de030f">r</a></td></tr>
+<tr class="separator:a6b24d5cc84eef41dbe90b79e93de030f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5eefa12b02189d694af536bc7d8726be"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structcomplex.html#a5eefa12b02189d694af536bc7d8726be">i</a></td></tr>
+<tr class="separator:a5eefa12b02189d694af536bc7d8726be"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a5eefa12b02189d694af536bc7d8726be"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float complex::i</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6b24d5cc84eef41dbe90b79e93de030f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float complex::r</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structdoublecomplex.html b/SuperLU_5.2.0/DOC/html/structdoublecomplex.html
new file mode 100644
index 0000000..a4a9e93
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structdoublecomplex.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: doublecomplex Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">doublecomplex Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="slu__dcomplex_8h_source.html">slu_dcomplex.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a7b1a3f489cadc006bfe2fda973267af6"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structdoublecomplex.html#a7b1a3f489cadc006bfe2fda973267af6">r</a></td></tr>
+<tr class="separator:a7b1a3f489cadc006bfe2fda973267af6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a336ddbef83d1878426558d417a6ecfbb"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structdoublecomplex.html#a336ddbef83d1878426558d417a6ecfbb">i</a></td></tr>
+<tr class="separator:a336ddbef83d1878426558d417a6ecfbb"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a336ddbef83d1878426558d417a6ecfbb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double doublecomplex::i</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7b1a3f489cadc006bfe2fda973267af6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double doublecomplex::r</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structe__node.html b/SuperLU_5.2.0/DOC/html/structe__node.html
new file mode 100644
index 0000000..01cf797
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structe__node.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: e_node Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">e_node Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Headers for 4 types of dynamatically managed memory.
+</p>
+
+<p><code>#include <<a class="el" href="slu__util_8h_source.html">slu_util.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a2b5a49fe848fe66d1643a37ae2a842eb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structe__node.html#a2b5a49fe848fe66d1643a37ae2a842eb">size</a></td></tr>
+<tr class="separator:a2b5a49fe848fe66d1643a37ae2a842eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6a040bdcee064559b0b480a96ccfac65"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structe__node.html#a6a040bdcee064559b0b480a96ccfac65">mem</a></td></tr>
+<tr class="separator:a6a040bdcee064559b0b480a96ccfac65"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a6a040bdcee064559b0b480a96ccfac65"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* e_node::mem</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2b5a49fe848fe66d1643a37ae2a842eb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int e_node::size</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structmem__usage__t.html b/SuperLU_5.2.0/DOC/html/structmem__usage__t.html
new file mode 100644
index 0000000..3ef9465
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structmem__usage__t.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: mem_usage_t Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">mem_usage_t Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="slu__util_8h_source.html">slu_util.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aea63300065ca81e5387c1706d7b3e705"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structmem__usage__t.html#aea63300065ca81e5387c1706d7b3e705">for_lu</a></td></tr>
+<tr class="separator:aea63300065ca81e5387c1706d7b3e705"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7225324e3925e071e95a58d49367a88a"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structmem__usage__t.html#a7225324e3925e071e95a58d49367a88a">total_needed</a></td></tr>
+<tr class="separator:a7225324e3925e071e95a58d49367a88a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="aea63300065ca81e5387c1706d7b3e705"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float mem_usage_t::for_lu</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7225324e3925e071e95a58d49367a88a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float mem_usage_t::total_needed</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/structsuperlu__options__t.html b/SuperLU_5.2.0/DOC/html/structsuperlu__options__t.html
new file mode 100644
index 0000000..8075870
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/structsuperlu__options__t.html
@@ -0,0 +1,447 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: superlu_options_t Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <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 id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <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><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">superlu_options_t Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="slu__util_8h_source.html">slu_util.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:acbd3cc1d27bbaf5bc168ebbbd6bf60fe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">fact_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#acbd3cc1d27bbaf5bc168ebbbd6bf60fe">Fact</a></td></tr>
+<tr class="separator:acbd3cc1d27bbaf5bc168ebbbd6bf60fe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3fe998e3518ad90532072fa8929a1e2f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a3fe998e3518ad90532072fa8929a1e2f">Equil</a></td></tr>
+<tr class="separator:a3fe998e3518ad90532072fa8929a1e2f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af6e41a7d8ca989c5396f6edc67be0409"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89c">colperm_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#af6e41a7d8ca989c5396f6edc67be0409">ColPerm</a></td></tr>
+<tr class="separator:af6e41a7d8ca989c5396f6edc67be0409"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a23fa8259c7091d82f10f0dfc7718dc36"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a23fa8259c7091d82f10f0dfc7718dc36">Trans</a></td></tr>
+<tr class="separator:a23fa8259c7091d82f10f0dfc7718dc36"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3e40fb39641e0caf27feb6998d21d98a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37">IterRefine_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a3e40fb39641e0caf27feb6998d21d98a">IterRefine</a></td></tr>
+<tr class="separator:a3e40fb39641e0caf27feb6998d21d98a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae574f08a3f4094dae8f635690b71d944"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#ae574f08a3f4094dae8f635690b71d944">DiagPivotThresh</a></td></tr>
+<tr class="separator:ae574f08a3f4094dae8f635690b71d944"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad1b52d0366ae8601e97fab5c470c45d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#aad1b52d0366ae8601e97fab5c470c45d">SymmetricMode</a></td></tr>
+<tr class="separator:aad1b52d0366ae8601e97fab5c470c45d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa75cfd534f156c78b7dc69e7e68596da"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#aa75cfd534f156c78b7dc69e7e68596da">PivotGrowth</a></td></tr>
+<tr class="separator:aa75cfd534f156c78b7dc69e7e68596da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3394d6658ec588071a9fee24a728eb07"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a3394d6658ec588071a9fee24a728eb07">ConditionNumber</a></td></tr>
+<tr class="separator:a3394d6658ec588071a9fee24a728eb07"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad38e45769deca7564ea75caec2ad58e6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adf">rowperm_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#ad38e45769deca7564ea75caec2ad58e6">RowPerm</a></td></tr>
+<tr class="separator:ad38e45769deca7564ea75caec2ad58e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac0ca2f81f68ad7596f2ada5739acc4d5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#ac0ca2f81f68ad7596f2ada5739acc4d5">ILU_DropRule</a></td></tr>
+<tr class="separator:ac0ca2f81f68ad7596f2ada5739acc4d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f629bb593cb42f213887d521c8f2288"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a4f629bb593cb42f213887d521c8f2288">ILU_DropTol</a></td></tr>
+<tr class="separator:a4f629bb593cb42f213887d521c8f2288"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf43941c86c9f3d1b46a6655f97bac70"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#acf43941c86c9f3d1b46a6655f97bac70">ILU_FillFactor</a></td></tr>
+<tr class="separator:acf43941c86c9f3d1b46a6655f97bac70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad8ed1b7a0243a10193ff792053b281c9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2f">norm_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#ad8ed1b7a0243a10193ff792053b281c9">ILU_Norm</a></td></tr>
+<tr class="separator:ad8ed1b7a0243a10193ff792053b281c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8021fa436ad10dfdee734364bcd428c5"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a8021fa436ad10dfdee734364bcd428c5">ILU_FillTol</a></td></tr>
+<tr class="separator:a8021fa436ad10dfdee734364bcd428c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a74708fd3231a761394bed90da1eba63b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a74708fd3231a761394bed90da1eba63b">ILU_MILU</a></td></tr>
+<tr class="separator:a74708fd3231a761394bed90da1eba63b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aba6edb00ac03655feb075bf9d6904d18"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#aba6edb00ac03655feb075bf9d6904d18">ILU_MILU_Dim</a></td></tr>
+<tr class="separator:aba6edb00ac03655feb075bf9d6904d18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2f1847e26bce58631ca5d58ad3d46ed"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#ae2f1847e26bce58631ca5d58ad3d46ed">ParSymbFact</a></td></tr>
+<tr class="separator:ae2f1847e26bce58631ca5d58ad3d46ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a791051ffa3861ba7203b0a1da2e6bf4b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a791051ffa3861ba7203b0a1da2e6bf4b">ReplaceTinyPivot</a></td></tr>
+<tr class="separator:a791051ffa3861ba7203b0a1da2e6bf4b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a246344bda7ff7d5547101c2f01737ee7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a246344bda7ff7d5547101c2f01737ee7">SolveInitialized</a></td></tr>
+<tr class="separator:a246344bda7ff7d5547101c2f01737ee7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6cfb6d3c0e8d5d2c8b4b813883e395b7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a6cfb6d3c0e8d5d2c8b4b813883e395b7">RefineInitialized</a></td></tr>
+<tr class="separator:a6cfb6d3c0e8d5d2c8b4b813883e395b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aafe514c5a01fe24b70cc636621a86576"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#aafe514c5a01fe24b70cc636621a86576">PrintStat</a></td></tr>
+<tr class="separator:aafe514c5a01fe24b70cc636621a86576"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2895f3e0cc73b730ae1b2dc14e306bfb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a2895f3e0cc73b730ae1b2dc14e306bfb">nnzL</a></td></tr>
+<tr class="separator:a2895f3e0cc73b730ae1b2dc14e306bfb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f1e7c0f5c61713355438db096175d33"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#a4f1e7c0f5c61713355438db096175d33">nnzU</a></td></tr>
+<tr class="separator:a4f1e7c0f5c61713355438db096175d33"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aff4e1b4ecbbbd1e699fdd129df05534b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#aff4e1b4ecbbbd1e699fdd129df05534b">num_lookaheads</a></td></tr>
+<tr class="separator:aff4e1b4ecbbbd1e699fdd129df05534b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afc61bd084a107fbb1de50ca617c3f59c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#afc61bd084a107fbb1de50ca617c3f59c">lookahead_etree</a></td></tr>
+<tr class="separator:afc61bd084a107fbb1de50ca617c3f59c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc6cd684f5db9572895041e8ccf343b0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsuperlu__options__t.html#adc6cd684f5db9572895041e8ccf343b0">SymPattern</a></td></tr>
+<tr class="separator:adc6cd684f5db9572895041e8ccf343b0"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="af6e41a7d8ca989c5396f6edc67be0409"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89c">colperm_t</a> superlu_options_t::ColPerm</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3394d6658ec588071a9fee24a728eb07"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::ConditionNumber</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae574f08a3f4094dae8f635690b71d944"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double superlu_options_t::DiagPivotThresh</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3fe998e3518ad90532072fa8929a1e2f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::Equil</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acbd3cc1d27bbaf5bc168ebbbd6bf60fe"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">fact_t</a> superlu_options_t::Fact</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac0ca2f81f68ad7596f2ada5739acc4d5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int superlu_options_t::ILU_DropRule</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4f629bb593cb42f213887d521c8f2288"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double superlu_options_t::ILU_DropTol</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acf43941c86c9f3d1b46a6655f97bac70"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double superlu_options_t::ILU_FillFactor</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8021fa436ad10dfdee734364bcd428c5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double superlu_options_t::ILU_FillTol</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a74708fd3231a761394bed90da1eba63b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> superlu_options_t::ILU_MILU</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aba6edb00ac03655feb075bf9d6904d18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double superlu_options_t::ILU_MILU_Dim</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad8ed1b7a0243a10193ff792053b281c9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2f">norm_t</a> superlu_options_t::ILU_Norm</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3e40fb39641e0caf27feb6998d21d98a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37">IterRefine_t</a> superlu_options_t::IterRefine</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afc61bd084a107fbb1de50ca617c3f59c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::lookahead_etree</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2895f3e0cc73b730ae1b2dc14e306bfb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int superlu_options_t::nnzL</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4f1e7c0f5c61713355438db096175d33"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int superlu_options_t::nnzU</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aff4e1b4ecbbbd1e699fdd129df05534b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int superlu_options_t::num_lookaheads</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae2f1847e26bce58631ca5d58ad3d46ed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::ParSymbFact</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa75cfd534f156c78b7dc69e7e68596da"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::PivotGrowth</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aafe514c5a01fe24b70cc636621a86576"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::PrintStat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6cfb6d3c0e8d5d2c8b4b813883e395b7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::RefineInitialized</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a791051ffa3861ba7203b0a1da2e6bf4b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::ReplaceTinyPivot</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad38e45769deca7564ea75caec2ad58e6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adf">rowperm_t</a> superlu_options_t::RowPerm</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a246344bda7ff7d5547101c2f01737ee7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::SolveInitialized</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aad1b52d0366ae8601e97fab5c470c45d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::SymmetricMode</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adc6cd684f5db9572895041e8ccf343b0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> superlu_options_t::SymPattern</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a23fa8259c7091d82f10f0dfc7718dc36"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> superlu_options_t::Trans</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<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></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/superlu_8c.html b/SuperLU_5.2.0/DOC/html/superlu_8c.html
new file mode 100644
index 0000000..825f383
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/superlu_8c.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/superlu.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">superlu.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>a small 5x5 example
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for superlu.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="superlu_8c__incl.png" border="0" usemap="#EXAMPLE_2superlu_8c" alt=""/></div>
+<map name="EXAMPLE_2superlu_8c" id="EXAMPLE_2superlu_8c">
+<area shape="rect" id="node2" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="274,80,363,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae0665038b72011f5c680c660fcb59459"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu_8c.html#ae0665038b72011f5c680c660fcb59459">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:ae0665038b72011f5c680c660fcb59459"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+* – SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae0665038b72011f5c680c660fcb59459"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="superlu_8c_ae0665038b72011f5c680c660fcb59459_cgraph.png" border="0" usemap="#superlu_8c_ae0665038b72011f5c680c660fcb59459_cgraph" alt=""/></div>
+<map name="superlu_8c_ae0665038b72011f5c680c660fcb59459_cgraph" id="superlu_8c_ae0665038b72011f5c680c660fcb59459_cgraph">
+<area shape="rect" id="node2" href="dmemory_8c.html#a8f2b9305cb611c37e7f627da902451a8" title="doubleMalloc" alt="" coords="616,17,715,44"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="819,1537,893,1564"/><area shape="rect" id="node4" href="dutil_8c.html#a4a177c54dafbe3640c26caa49eeee1de" title="Supernodal LU factor related. " alt="" coords="579,676,752,702"/><area shape="rect" id="node5" href="dutil_8c.html#a12ac52 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/superlu__enum__consts_8h.html b/SuperLU_5.2.0/DOC/html/superlu__enum__consts_8h.html
new file mode 100644
index 0000000..8aff7d6
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/superlu__enum__consts_8h.html
@@ -0,0 +1,491 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/superlu_enum_consts.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#enum-members">Enumerations</a> </div>
+ <div class="headertitle">
+<div class="title">superlu_enum_consts.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>enum constants header file
+<a href="#details">More...</a></p>
+<div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="superlu__enum__consts_8h__dep__incl.png" border="0" usemap="#SRC_2superlu__enum__consts_8hdep" alt=""/></div>
+<map name="SRC_2superlu__enum__consts_8hdep" id="SRC_2superlu__enum__consts_8hdep">
+<area shape="rect" id="node2" href="slu__util_8h.html" title="Utility header file. " alt="" coords="3269,80,3376,107"/><area shape="rect" id="node3" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="3041,155,3164,181"/><area shape="rect" id="node48" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="3188,155,3311,181"/><area shape="rect" id="node49" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" [...]
+</div>
+</div>
+<p><a href="superlu__enum__consts_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ae6553118ce91b9c08f9376941ae1536f"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> { <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536fa0d077f5b932ce05e5b9f30c6087a2f31">NO</a>,
+<a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536fa99f136a862ba5c7d16967231c29f09d6">YES</a>
+ }</td></tr>
+<tr class="separator:ae6553118ce91b9c08f9376941ae1536f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac785c8235480e5cfef9848d89c047c0a"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">fact_t</a> { <a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0aae0bd0c48044d1267a827ce526249e168">DOFACT</a>,
+<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0aad57746dff8e73ad308739bc6cbee4c27">SamePattern</a>,
+<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0aa8814b686fe49f5ccc165c04845e112e6">SamePattern_SameRowPerm</a>,
+<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0aa86901392b6879fba18090792fe8db804">FACTORED</a>
+ }</td></tr>
+<tr class="separator:ac785c8235480e5cfef9848d89c047c0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa38fa2e7f17b86333ca49e4b8a151adf"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adf">rowperm_t</a> { <a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adfa25895a1ae8a45131936a32274bd7cdde">NOROWPERM</a>,
+<a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adfae03251277f56e77cfc3989ed67adf932">LargeDiag</a>,
+<a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adfa19f710e8ebccae9025757e877b6c87aa">MY_PERMR</a>
+ }</td></tr>
+<tr class="separator:aa38fa2e7f17b86333ca49e4b8a151adf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abd17bbb14f57694750d96639e738e89c"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89c">colperm_t</a> { <br/>
+ <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89ca0425aaf673bebee34014367ea7c3deb1">NATURAL</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89ca02f70b975e4d4fa6052812c09bdb7349">MMD_ATA</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89caef4136af63900170017e1edb479e2f14">MMD_AT_PLUS_A</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89cafc08a15679354a375b679f7d907867c3">COLAMD</a>,
+<br/>
+ <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89ca5a9874ccc7a94b949bdf71fd65b80061">METIS_AT_PLUS_A</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89caa7108227cd043fe50972a89b34b6d20c">PARMETIS</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89cabddc2b83ab41d07e8d180f52bcfb00ac">ZOLTAN</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89ca7475651fbfee514ff59d61da9e101682">MY_PERMC</a>
+<br/>
+ }</td></tr>
+<tr class="separator:abd17bbb14f57694750d96639e738e89c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0c4e17b2d5cea33f9991ccc6a6678d62"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> { <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62a8ccffb9caebb7b4520a0653005b22f43">NOTRANS</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62a1f61e3015bfe0f0c2c3fda4c5a0cdf58">TRANS</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62a26a53d2d0576982e73a770a90087a619">CONJ</a>
+ }</td></tr>
+<tr class="separator:a0c4e17b2d5cea33f9991ccc6a6678d62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4d92d07523ba751afadecd63d3479e30"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30">DiagScale_t</a> { <a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30af1e3ee583cb194a25353b4ba7b4798cf">NOEQUIL</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30abf470e461303b909bf0dc58084ebafa0">ROW</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30a3e66f07732b51f2cb52e13d598f8abda">COL</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30a627abe5a430420baf29ebe1940a7f2fb">BOTH</a>
+ }</td></tr>
+<tr class="separator:a4d92d07523ba751afadecd63d3479e30"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7e73e9d3a9caeec3586c03e01c494e37"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37">IterRefine_t</a> { <a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37a5f3a3710645b9041f06dfe164fb336a3">NOREFINE</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37aefd4227fccb513409c5f8a2f15ab61f7">SLU_SINGLE</a> =1,
+<a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37a54bfcf28afa608b6d1ee284ec90e272c">SLU_DOUBLE</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37a89c9ba1725b2d54d3a1e90cdcc58db92">SLU_EXTRA</a>
+ }</td></tr>
+<tr class="separator:a7e73e9d3a9caeec3586c03e01c494e37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abd31f838aefffa46191d0d7dc36a96b2"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a> { <br/>
+ <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a9f159a8a95b7045670b14e7a521ac71e">LUSUP</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a68eee86a440f07e5aeb1333af7c49968">UCOL</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a383f412552e65152b50013e6c5397baa">LSUB</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2aec445297f8e62e119a337ea2b5dd2b66">USUB</a>,
+<br/>
+ <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a8456acdeff4ebe8827f33f18599d3137">LLVL</a>,
+<a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2a307244b6de1926249c921821989702db">ULVL</a>
+<br/>
+ }</td></tr>
+<tr class="separator:abd31f838aefffa46191d0d7dc36a96b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c99a6c403d30f227aa91cf3b10f6aa4"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#a9c99a6c403d30f227aa91cf3b10f6aa4">stack_end_t</a> { <a class="el" href="superlu__enum__consts_8h.html#a9c99a6c403d30f227aa91cf3b10f6aa4a0b0955668575b21eb0ab2272aef49f76">HEAD</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a9c99a6c403d30f227aa91cf3b10f6aa4a4c28487b052a2b05f3db4dc5a722b1d7">TAIL</a>
+ }</td></tr>
+<tr class="separator:a9c99a6c403d30f227aa91cf3b10f6aa4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a494fe72ce954689dd95399ea9f1d87f6"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#a494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a> { <a class="el" href="superlu__enum__consts_8h.html#a494fe72ce954689dd95399ea9f1d87f6a57cc238145ec1361c72c327674c0d754">SYSTEM</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a494fe72ce954689dd95399ea9f1d87f6ae2d30a195cee6b2961cc2c23ea4b520b">USER</a>
+ }</td></tr>
+<tr class="separator:a494fe72ce954689dd95399ea9f1d87f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae1770bc6f4ac445d81ad521683a57a2f"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2f">norm_t</a> { <a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2fade388e7d1af6bbb3be22c8e758d43d65">ONE_NORM</a>,
+<a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2fa0916434ec408d94e09a3db2f278fec83">TWO_NORM</a>,
+<a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2faf60f12ba71e3a0c889595249955d6cf8">INF_NORM</a>
+ }</td></tr>
+<tr class="separator:ae1770bc6f4ac445d81ad521683a57a2f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cb73c13a7c2390c3a9a0a8913477ff0"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a> { <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0ab9ad3d6f1e495ef4761e20b58cc77453">SILU</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0a183527dc1ee50ab34678f314925fdda0">SMILU_1</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0a32a052178fd394b8110900fcb5702c13">SMILU_2</a>,
+<a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0a1e723dc87c76c9a21094300fc29e7274">SMILU_3</a>
+ }</td></tr>
+<tr class="separator:a0cb73c13a7c2390c3a9a0a8913477ff0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af00a42ecad444bbda75cde1b64bd7e72"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72">PhaseType</a> { <br/>
+ <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72aed701176980ed77fa7e65315bdae5dc5">COLPERM</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72ae860478cf9b6cf3eb0785958149b676e">ROWPERM</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a8abca54580953356d3e1548ddd04a97b">RELAX</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a837b4404052bca5280c1c918540bc003">ETREE</a>,
+<br/>
+ <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72aa48ad2d4b3120ba615e725d16ec7bf29">EQUIL</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a2b4b71567fe3767853886bdfbc9df681">SYMBFAC</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72ac04fbbdf0d80a4ad25e565541deeebd7">DIST</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a1b6692b56d378abb85bd49063721d034">FACT</a>,
+<br/>
+ <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a6f451ba8ea6ae9cd569eb91e2126376b">COMM</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a31560b869ae176dae4e9160656d5b9eb">SOL_COMM</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a9b5c151728d8512307565994c89919d5">RCOND</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72ab9fc7975179c642bbac2b6ffd8fa3579">SOLVE</a>,
+<br/>
+ <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72abb218bd1ec12fd54eaada97721a82be7">REFINE</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72abe6640d5e5560662c8a729e54e770ecf">TRSV</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72aad1464db9e9e33f25ab0a3b82c6bd0c4">GEMV</a>,
+<a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a78fd14d7abebae04095cfbe02928f153">FERR</a>,
+<br/>
+ <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72a2b9cc65b188ff2b2b764a5f8160c4bfc">NPHASES</a>
+<br/>
+ }</td></tr>
+<tr class="separator:af00a42ecad444bbda75cde1b64bd7e72"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<p>– SuperLU routine (version 4.1) – Lawrence Berkeley National Lab, Univ. of California Berkeley, October 1, 2010 </p>
+</div><h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="abd17bbb14f57694750d96639e738e89c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#abd17bbb14f57694750d96639e738e89c">colperm_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="abd17bbb14f57694750d96639e738e89ca0425aaf673bebee34014367ea7c3deb1"></a>NATURAL</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd17bbb14f57694750d96639e738e89ca02f70b975e4d4fa6052812c09bdb7349"></a>MMD_ATA</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd17bbb14f57694750d96639e738e89caef4136af63900170017e1edb479e2f14"></a>MMD_AT_PLUS_A</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd17bbb14f57694750d96639e738e89cafc08a15679354a375b679f7d907867c3"></a>COLAMD</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd17bbb14f57694750d96639e738e89ca5a9874ccc7a94b949bdf71fd65b80061"></a>METIS_AT_PLUS_A</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd17bbb14f57694750d96639e738e89caa7108227cd043fe50972a89b34b6d20c"></a>PARMETIS</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd17bbb14f57694750d96639e738e89cabddc2b83ab41d07e8d180f52bcfb00ac"></a>ZOLTAN</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd17bbb14f57694750d96639e738e89ca7475651fbfee514ff59d61da9e101682"></a>MY_PERMC</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a4d92d07523ba751afadecd63d3479e30"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#a4d92d07523ba751afadecd63d3479e30">DiagScale_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a4d92d07523ba751afadecd63d3479e30af1e3ee583cb194a25353b4ba7b4798cf"></a>NOEQUIL</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a4d92d07523ba751afadecd63d3479e30abf470e461303b909bf0dc58084ebafa0"></a>ROW</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a4d92d07523ba751afadecd63d3479e30a3e66f07732b51f2cb52e13d598f8abda"></a>COL</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a4d92d07523ba751afadecd63d3479e30a627abe5a430420baf29ebe1940a7f2fb"></a>BOTH</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="ac785c8235480e5cfef9848d89c047c0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">fact_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ac785c8235480e5cfef9848d89c047c0aae0bd0c48044d1267a827ce526249e168"></a>DOFACT</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="ac785c8235480e5cfef9848d89c047c0aad57746dff8e73ad308739bc6cbee4c27"></a>SamePattern</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="ac785c8235480e5cfef9848d89c047c0aa8814b686fe49f5ccc165c04845e112e6"></a>SamePattern_SameRowPerm</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="ac785c8235480e5cfef9848d89c047c0aa86901392b6879fba18090792fe8db804"></a>FACTORED</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a7e73e9d3a9caeec3586c03e01c494e37"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#a7e73e9d3a9caeec3586c03e01c494e37">IterRefine_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a7e73e9d3a9caeec3586c03e01c494e37a5f3a3710645b9041f06dfe164fb336a3"></a>NOREFINE</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a7e73e9d3a9caeec3586c03e01c494e37aefd4227fccb513409c5f8a2f15ab61f7"></a>SLU_SINGLE</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a7e73e9d3a9caeec3586c03e01c494e37a54bfcf28afa608b6d1ee284ec90e272c"></a>SLU_DOUBLE</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a7e73e9d3a9caeec3586c03e01c494e37a89c9ba1725b2d54d3a1e90cdcc58db92"></a>SLU_EXTRA</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a494fe72ce954689dd95399ea9f1d87f6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#a494fe72ce954689dd95399ea9f1d87f6">LU_space_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a494fe72ce954689dd95399ea9f1d87f6a57cc238145ec1361c72c327674c0d754"></a>SYSTEM</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a494fe72ce954689dd95399ea9f1d87f6ae2d30a195cee6b2961cc2c23ea4b520b"></a>USER</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="abd31f838aefffa46191d0d7dc36a96b2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="abd31f838aefffa46191d0d7dc36a96b2a9f159a8a95b7045670b14e7a521ac71e"></a>LUSUP</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd31f838aefffa46191d0d7dc36a96b2a68eee86a440f07e5aeb1333af7c49968"></a>UCOL</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd31f838aefffa46191d0d7dc36a96b2a383f412552e65152b50013e6c5397baa"></a>LSUB</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd31f838aefffa46191d0d7dc36a96b2aec445297f8e62e119a337ea2b5dd2b66"></a>USUB</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd31f838aefffa46191d0d7dc36a96b2a8456acdeff4ebe8827f33f18599d3137"></a>LLVL</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="abd31f838aefffa46191d0d7dc36a96b2a307244b6de1926249c921821989702db"></a>ULVL</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a0cb73c13a7c2390c3a9a0a8913477ff0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#a0cb73c13a7c2390c3a9a0a8913477ff0">milu_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a0cb73c13a7c2390c3a9a0a8913477ff0ab9ad3d6f1e495ef4761e20b58cc77453"></a>SILU</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a0cb73c13a7c2390c3a9a0a8913477ff0a183527dc1ee50ab34678f314925fdda0"></a>SMILU_1</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a0cb73c13a7c2390c3a9a0a8913477ff0a32a052178fd394b8110900fcb5702c13"></a>SMILU_2</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a0cb73c13a7c2390c3a9a0a8913477ff0a1e723dc87c76c9a21094300fc29e7274"></a>SMILU_3</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="ae1770bc6f4ac445d81ad521683a57a2f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#ae1770bc6f4ac445d81ad521683a57a2f">norm_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ae1770bc6f4ac445d81ad521683a57a2fade388e7d1af6bbb3be22c8e758d43d65"></a>ONE_NORM</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="ae1770bc6f4ac445d81ad521683a57a2fa0916434ec408d94e09a3db2f278fec83"></a>TWO_NORM</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="ae1770bc6f4ac445d81ad521683a57a2faf60f12ba71e3a0c889595249955d6cf8"></a>INF_NORM</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#af00a42ecad444bbda75cde1b64bd7e72">PhaseType</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72aed701176980ed77fa7e65315bdae5dc5"></a>COLPERM</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72ae860478cf9b6cf3eb0785958149b676e"></a>ROWPERM</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72a8abca54580953356d3e1548ddd04a97b"></a>RELAX</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72a837b4404052bca5280c1c918540bc003"></a>ETREE</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72aa48ad2d4b3120ba615e725d16ec7bf29"></a>EQUIL</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72a2b4b71567fe3767853886bdfbc9df681"></a>SYMBFAC</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72ac04fbbdf0d80a4ad25e565541deeebd7"></a>DIST</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72a1b6692b56d378abb85bd49063721d034"></a>FACT</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72a6f451ba8ea6ae9cd569eb91e2126376b"></a>COMM</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72a31560b869ae176dae4e9160656d5b9eb"></a>SOL_COMM</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72a9b5c151728d8512307565994c89919d5"></a>RCOND</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72ab9fc7975179c642bbac2b6ffd8fa3579"></a>SOLVE</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72abb218bd1ec12fd54eaada97721a82be7"></a>REFINE</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72abe6640d5e5560662c8a729e54e770ecf"></a>TRSV</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72aad1464db9e9e33f25ab0a3b82c6bd0c4"></a>GEMV</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72a78fd14d7abebae04095cfbe02928f153"></a>FERR</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="af00a42ecad444bbda75cde1b64bd7e72a2b9cc65b188ff2b2b764a5f8160c4bfc"></a>NPHASES</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="aa38fa2e7f17b86333ca49e4b8a151adf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#aa38fa2e7f17b86333ca49e4b8a151adf">rowperm_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="aa38fa2e7f17b86333ca49e4b8a151adfa25895a1ae8a45131936a32274bd7cdde"></a>NOROWPERM</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="aa38fa2e7f17b86333ca49e4b8a151adfae03251277f56e77cfc3989ed67adf932"></a>LargeDiag</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="aa38fa2e7f17b86333ca49e4b8a151adfa19f710e8ebccae9025757e877b6c87aa"></a>MY_PERMR</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a9c99a6c403d30f227aa91cf3b10f6aa4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#a9c99a6c403d30f227aa91cf3b10f6aa4">stack_end_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a9c99a6c403d30f227aa91cf3b10f6aa4a0b0955668575b21eb0ab2272aef49f76"></a>HEAD</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a9c99a6c403d30f227aa91cf3b10f6aa4a4c28487b052a2b05f3db4dc5a722b1d7"></a>TAIL</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a0c4e17b2d5cea33f9991ccc6a6678d62"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a0c4e17b2d5cea33f9991ccc6a6678d62a8ccffb9caebb7b4520a0653005b22f43"></a>NOTRANS</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a0c4e17b2d5cea33f9991ccc6a6678d62a1f61e3015bfe0f0c2c3fda4c5a0cdf58"></a>TRANS</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a0c4e17b2d5cea33f9991ccc6a6678d62a26a53d2d0576982e73a770a90087a619"></a>CONJ</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="ae6553118ce91b9c08f9376941ae1536f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ae6553118ce91b9c08f9376941ae1536fa0d077f5b932ce05e5b9f30c6087a2f31"></a>NO</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="ae6553118ce91b9c08f9376941ae1536fa99f136a862ba5c7d16967231c29f09d6"></a>YES</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/superlu__timer_8c.html b/SuperLU_5.2.0/DOC/html/superlu__timer_8c.html
new file mode 100644
index 0000000..dab93c8
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/superlu__timer_8c.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/superlu_timer.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">superlu_timer.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Returns the time used.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for superlu_timer.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="superlu__timer_8c__incl.png" border="0" usemap="#SRC_2superlu__timer_8c" alt=""/></div>
+<map name="SRC_2superlu__timer_8c" id="SRC_2superlu__timer_8c">
+</map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0c6777573bbfe81917cd381e0090d355"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="superlu__timer_8c.html#a0c6777573bbfe81917cd381e0090d355">SuperLU_timer_</a> ()</td></tr>
+<tr class="memdesc:a0c6777573bbfe81917cd381e0090d355"><td class="mdescLeft"> </td><td class="mdescRight">Timer function. <a href="#a0c6777573bbfe81917cd381e0090d355">More...</a><br/></td></tr>
+<tr class="separator:a0c6777573bbfe81917cd381e0090d355"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>Returns the time in seconds used by the process.</pre><pre>Note: the timer function call is machine dependent. Use conditional
+ compilation to choose the appropriate function.
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0c6777573bbfe81917cd381e0090d355"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/supermatrix_8h.html b/SuperLU_5.2.0/DOC/html/supermatrix_8h.html
new file mode 100644
index 0000000..f3d43ce
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/supermatrix_8h.html
@@ -0,0 +1,222 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/supermatrix.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#enum-members">Enumerations</a> </div>
+ <div class="headertitle">
+<div class="title">supermatrix.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Defines matrix types.
+<a href="#details">More...</a></p>
+<div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="supermatrix_8h__dep__incl.png" border="0" usemap="#SRC_2supermatrix_8hdep" alt=""/></div>
+<map name="SRC_2supermatrix_8hdep" id="SRC_2supermatrix_8hdep">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html" title="Header file for real operations. " alt="" coords="3109,80,3232,107"/><area shape="rect" id="node48" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="3256,80,3379,107"/><area shape="rect" id="node49" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="3403,80,3525,107"/><area shape="rect" id="node50" href="slu__zdefs_8h.html" title="Header file for real operation [...]
+</div>
+</div>
+<p><a href="supermatrix_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structSuperMatrix.html">SuperMatrix</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCformat.html">NCformat</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat.html">NRformat</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCformat.html">SCformat</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structSCPformat.html">SCPformat</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structNCPformat.html">NCPformat</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structDNformat.html">DNformat</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structNRformat__loc.html">NRformat_loc</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a9d2ddedeb2a3d92e950811c61d0b8796"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> { <br/>
+ <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a0993c31a9ba98c523bfab0d759c1a628">SLU_NC</a>,
+<a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a25e4eb65ac258dadb9abccd65337cfe4">SLU_NCP</a>,
+<a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796aac74fbf90a105db9be6795b5be9221ca">SLU_NR</a>,
+<a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a79d0f76e80f9b57ebdab6a0c76720462">SLU_SC</a>,
+<br/>
+ <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a35ab293720f39593ceff43e8989f4de6">SLU_SCP</a>,
+<a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796a9677060bfc0641fb53defdb70caa8cf5">SLU_SR</a>,
+<a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796aa59ca236b51fe0c7bd7c80c70e345768">SLU_DN</a>,
+<a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796ab96ddd65efd6342d0ac532bb47eb39a0">SLU_NR_loc</a>
+<br/>
+ }</td></tr>
+<tr class="separator:a9d2ddedeb2a3d92e950811c61d0b8796"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7987cb2a28ec879b39a90e9e48e29190"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a> { <a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190a0da7fdd394e36c76e7aa215d6a79162d">SLU_S</a>,
+<a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190ab5c3b3a455e3b3a64d805d76f19ac6dc">SLU_D</a>,
+<a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190a1b589b5f96dbc8619450aacc22d0bf39">SLU_C</a>,
+<a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190a1ace1e51c238b13622aaa733ef3b2a47">SLU_Z</a>
+ }</td></tr>
+<tr class="separator:a7987cb2a28ec879b39a90e9e48e29190"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5962adac634f3feebe487ad443802d60"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60">Mtype_t</a> { <br/>
+ <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60aea9ef3cae331a60a4bcc353bb57ad5db">SLU_GE</a>,
+<a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60afee10f9836531b012b1b80cf36355b67">SLU_TRLU</a>,
+<a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60a0c7113548d3d5a292cb2265477436ad7">SLU_TRUU</a>,
+<a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60a4defa99d9ff8ed4af7a92547b3faf9fb">SLU_TRL</a>,
+<br/>
+ <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60aa9aea83e745716e0da54d738feb19cba">SLU_TRU</a>,
+<a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60a91b9ee4e608cb7c7cf7572703fbd3506">SLU_SYL</a>,
+<a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60a0d509f1e8285653c36f81b10626fb747">SLU_SYU</a>,
+<a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60abba0b28718f648302d6f710d7d66d1fb">SLU_HEL</a>,
+<br/>
+ <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60abada9d0add93fd4fbe17b9d6758d38f8">SLU_HEU</a>
+<br/>
+ }</td></tr>
+<tr class="separator:a5962adac634f3feebe487ad443802d60"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+</div><h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="a7987cb2a28ec879b39a90e9e48e29190"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="supermatrix_8h.html#a7987cb2a28ec879b39a90e9e48e29190">Dtype_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a7987cb2a28ec879b39a90e9e48e29190a0da7fdd394e36c76e7aa215d6a79162d"></a>SLU_S</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a7987cb2a28ec879b39a90e9e48e29190ab5c3b3a455e3b3a64d805d76f19ac6dc"></a>SLU_D</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a7987cb2a28ec879b39a90e9e48e29190a1b589b5f96dbc8619450aacc22d0bf39"></a>SLU_C</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a7987cb2a28ec879b39a90e9e48e29190a1ace1e51c238b13622aaa733ef3b2a47"></a>SLU_Z</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a5962adac634f3feebe487ad443802d60"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="supermatrix_8h.html#a5962adac634f3feebe487ad443802d60">Mtype_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a5962adac634f3feebe487ad443802d60aea9ef3cae331a60a4bcc353bb57ad5db"></a>SLU_GE</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a5962adac634f3feebe487ad443802d60afee10f9836531b012b1b80cf36355b67"></a>SLU_TRLU</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a5962adac634f3feebe487ad443802d60a0c7113548d3d5a292cb2265477436ad7"></a>SLU_TRUU</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a5962adac634f3feebe487ad443802d60a4defa99d9ff8ed4af7a92547b3faf9fb"></a>SLU_TRL</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a5962adac634f3feebe487ad443802d60aa9aea83e745716e0da54d738feb19cba"></a>SLU_TRU</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a5962adac634f3feebe487ad443802d60a91b9ee4e608cb7c7cf7572703fbd3506"></a>SLU_SYL</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a5962adac634f3feebe487ad443802d60a0d509f1e8285653c36f81b10626fb747"></a>SLU_SYU</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a5962adac634f3feebe487ad443802d60abba0b28718f648302d6f710d7d66d1fb"></a>SLU_HEL</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a5962adac634f3feebe487ad443802d60abada9d0add93fd4fbe17b9d6758d38f8"></a>SLU_HEU</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a9d2ddedeb2a3d92e950811c61d0b8796"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="supermatrix_8h.html#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a9d2ddedeb2a3d92e950811c61d0b8796a0993c31a9ba98c523bfab0d759c1a628"></a>SLU_NC</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a9d2ddedeb2a3d92e950811c61d0b8796a25e4eb65ac258dadb9abccd65337cfe4"></a>SLU_NCP</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a9d2ddedeb2a3d92e950811c61d0b8796aac74fbf90a105db9be6795b5be9221ca"></a>SLU_NR</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a9d2ddedeb2a3d92e950811c61d0b8796a79d0f76e80f9b57ebdab6a0c76720462"></a>SLU_SC</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a9d2ddedeb2a3d92e950811c61d0b8796a35ab293720f39593ceff43e8989f4de6"></a>SLU_SCP</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a9d2ddedeb2a3d92e950811c61d0b8796a9677060bfc0641fb53defdb70caa8cf5"></a>SLU_SR</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a9d2ddedeb2a3d92e950811c61d0b8796aa59ca236b51fe0c7bd7c80c70e345768"></a>SLU_DN</em> </td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><em><a class="anchor" id="a9d2ddedeb2a3d92e950811c61d0b8796ab96ddd65efd6342d0ac532bb47eb39a0"></a>SLU_NR_loc</em> </td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/sutil_8c.html b/SuperLU_5.2.0/DOC/html/sutil_8c.html
new file mode 100644
index 0000000..1e82822
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/sutil_8c.html
@@ -0,0 +1,1005 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/sutil.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">sutil.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Matrix utility functions.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__sdefs_8h_source.html">slu_sdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for sutil.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="sutil_8c__incl.png" border="0" usemap="#SRC_2sutil_8c" alt=""/></div>
+<map name="SRC_2sutil_8c" id="SRC_2sutil_8c">
+<area shape="rect" id="node3" href="slu__sdefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a579e4609791c29f1b5f118e8fad589a1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#a579e4609791c29f1b5f118e8fad589a1">sCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, float *nzval, int *rowind, int *colptr, <a class="el" href="supe [...]
+<tr class="memdesc:a579e4609791c29f1b5f118e8fad589a1"><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related. <a href="#a579e4609791c29f1b5f118e8fad589a1">More...</a><br/></td></tr>
+<tr class="separator:a579e4609791c29f1b5f118e8fad589a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a24a4f9ba12c52c73a132b0b3b374603e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#a24a4f9ba12c52c73a132b0b3b374603e">sCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, float *nzval, int *colind, int *rowptr, <a class="el" href="supe [...]
+<tr class="separator:a24a4f9ba12c52c73a132b0b3b374603e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa5ed0ac7636b53f6004de03ac6ee5fa2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#aa5ed0ac7636b53f6004de03ac6ee5fa2">sCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *B)</td></tr>
+<tr class="memdesc:aa5ed0ac7636b53f6004de03ac6ee5fa2"><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B. <a href="#aa5ed0ac7636b53f6004de03ac6ee5fa2">More...</a><br/></td></tr>
+<tr class="separator:aa5ed0ac7636b53f6004de03ac6ee5fa2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af67168ae9d7920841831576f6298158b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#af67168ae9d7920841831576f6298158b">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_t</a> stype, <a class="el" href="supermatrix_8h.html#a7987 [...]
+<tr class="separator:af67168ae9d7920841831576f6298158b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acab5fbd47a16ac4dcdfb20a557e77861"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#acab5fbd47a16ac4dcdfb20a557e77861">sCopy_Dense_Matrix</a> (int M, int N, float *X, int ldx, float *Y, int ldy)</td></tr>
+<tr class="separator:acab5fbd47a16ac4dcdfb20a557e77861"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acd3569a74da2e6a7d634675014fea82f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#acd3569a74da2e6a7d634675014fea82f">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#a9d2d [...]
+<tr class="separator:acd3569a74da2e6a7d634675014fea82f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abeab98ddf4ff7a83f39132f00df707a3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#abeab98ddf4ff7a83f39132f00df707a3">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 class="memdesc:abeab98ddf4ff7a83f39132f00df707a3"><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage. <a href="#abeab98ddf4ff7a83f39132f00df707a3">More...</a><br/></td></tr>
+<tr class="separator:abeab98ddf4ff7a83f39132f00df707a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc7fea2acb7f41b9818b189720b297a5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#adc7fea2acb7f41b9818b189720b297a5">sPrint_CompCol_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="memdesc:adc7fea2acb7f41b9818b189720b297a5"><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging. <a href="#adc7fea2acb7f41b9818b189720b297a5">More...</a><br/></td></tr>
+<tr class="separator:adc7fea2acb7f41b9818b189720b297a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2dfd96c3fba192a18a95e89735f8dedf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#a2dfd96c3fba192a18a95e89735f8dedf">sPrint_SuperNode_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a2dfd96c3fba192a18a95e89735f8dedf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adac44427ccc5c67f7f00744d1fc8501e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#adac44427ccc5c67f7f00744d1fc8501e">sPrint_Dense_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:adac44427ccc5c67f7f00744d1fc8501e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b1baccb0a743b085244b5c9c58616d8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#a3b1baccb0a743b085244b5c9c58616d8">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 class="memdesc:a3b1baccb0a743b085244b5c9c58616d8"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor. <a href="#a3b1baccb0a743b085244b5c9c58616d8">More...</a><br/></td></tr>
+<tr class="separator:a3b1baccb0a743b085244b5c9c58616d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a12365f7c1a88d3c18e0ce06383f0e78d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#a12365f7c1a88d3c18e0ce06383f0e78d">scheck_tempv</a> (int n, float *tempv)</td></tr>
+<tr class="memdesc:a12365f7c1a88d3c18e0ce06383f0e78d"><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="#a12365f7c1a88d3c18e0ce06383f0e78d">More...</a><br/></td></tr>
+<tr class="separator:a12365f7c1a88d3c18e0ce06383f0e78d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aae1faea15add2d01572b7ce6d037ac47"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#aae1faea15add2d01572b7ce6d037ac47">sGenXtrue</a> (int n, int nrhs, float *x, int ldx)</td></tr>
+<tr class="separator:aae1faea15add2d01572b7ce6d037ac47"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51d71bcf7e5497c9e64a6dcecc9fe30b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#a51d71bcf7e5497c9e64a6dcecc9fe30b">sFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">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#ac900805a4 [...]
+<tr class="memdesc:a51d71bcf7e5497c9e64a6dcecc9fe30b"><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="#a51d71bcf7e5497c9e64a6dcecc9fe30b">More...</a><br/></td></tr>
+<tr class="separator:a51d71bcf7e5497c9e64a6dcecc9fe30b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbd3b859941f0ed660ddb178b9f898f9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#acbd3b859941f0ed660ddb178b9f898f9">sfill</a> (float *a, int alen, float dval)</td></tr>
+<tr class="memdesc:acbd3b859941f0ed660ddb178b9f898f9"><td class="mdescLeft"> </td><td class="mdescRight">Fills a float precision array with a given value. <a href="#acbd3b859941f0ed660ddb178b9f898f9">More...</a><br/></td></tr>
+<tr class="separator:acbd3b859941f0ed660ddb178b9f898f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae25fa2d7b1de8cb8bb2297c42b72727a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#ae25fa2d7b1de8cb8bb2297c42b72727a">sinf_norm_error</a> (int nrhs, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *X, float *xtrue)</td></tr>
+<tr class="memdesc:ae25fa2d7b1de8cb8bb2297c42b72727a"><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector. <a href="#ae25fa2d7b1de8cb8bb2297c42b72727a">More...</a><br/></td></tr>
+<tr class="separator:ae25fa2d7b1de8cb8bb2297c42b72727a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae654ed8c97398a81ad9cf2bac09bbdce"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#ae654ed8c97398a81ad9cf2bac09bbdce">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 * [...]
+<tr class="memdesc:ae654ed8c97398a81ad9cf2bac09bbdce"><td class="mdescLeft"> </td><td class="mdescRight">Print performance of the code. <a href="#ae654ed8c97398a81ad9cf2bac09bbdce">More...</a><br/></td></tr>
+<tr class="separator:ae654ed8c97398a81ad9cf2bac09bbdce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a75e7f70be5afd936daa4ad0e2ae91300"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="sutil_8c.html#a75e7f70be5afd936daa4ad0e2ae91300">print_float_vec</a> (char *what, int n, float *vec)</td></tr>
+<tr class="separator:a75e7f70be5afd936daa4ad0e2ae91300"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+August 1, 2008</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a75e7f70be5afd936daa4ad0e2ae91300"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a12365f7c1a88d3c18e0ce06383f0e78d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abeab98ddf4ff7a83f39132f00df707a3"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sutil_8c_abeab98ddf4ff7a83f39132f00df707a3_cgraph.png" border="0" usemap="#sutil_8c_abeab98ddf4ff7a83f39132f00df707a3_cgraph" alt=""/></div>
+<map name="sutil_8c_abeab98ddf4ff7a83f39132f00df707a3_cgraph" id="sutil_8c_abeab98ddf4ff7a83f39132f00df707a3_cgraph">
+<area shape="rect" id="node2" href="slu__cdefs_8h.html#a42361c3ce2ba81d149ffba01fbd6f138" title="floatMalloc" alt="" coords="224,5,309,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="229,56,304,83"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="230,107,303,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa5ed0ac7636b53f6004de03ac6ee5fa2"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acab5fbd47a16ac4dcdfb20a557e77861"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Copies a two-dimensional matrix X to another matrix Y.</p>
+
+</div>
+</div>
+<a class="anchor" id="a579e4609791c29f1b5f118e8fad589a1"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a24a4f9ba12c52c73a132b0b3b374603e"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af67168ae9d7920841831576f6298158b"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acd3569a74da2e6a7d634675014fea82f"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acbd3b859941f0ed660ddb178b9f898f9"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a51d71bcf7e5497c9e64a6dcecc9fe30b"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="sutil_8c_a51d71bcf7e5497c9e64a6dcecc9fe30b_cgraph.png" border="0" usemap="#sutil_8c_a51d71bcf7e5497c9e64a6dcecc9fe30b_cgraph" alt=""/></div>
+<map name="sutil_8c_a51d71bcf7e5497c9e64a6dcecc9fe30b_cgraph" id="sutil_8c_a51d71bcf7e5497c9e64a6dcecc9fe30b_cgraph">
+<area shape="rect" id="node2" href="slu__sdefs_8h.html#a35b4a0e44c32443df609069021d27812" title="sp_sgemm" alt="" coords="129,5,215,32"/><area shape="rect" id="node3" href="slu__sdefs_8h.html#a9e543b2d14781b56ef349114012b4fc9" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="264,5,347,32"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aae1faea15add2d01572b7ce6d037ac47"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae25fa2d7b1de8cb8bb2297c42b72727a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adc7fea2acb7f41b9818b189720b297a5"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adac44427ccc5c67f7f00744d1fc8501e"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3b1baccb0a743b085244b5c9c58616d8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2dfd96c3fba192a18a95e89735f8dedf"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae654ed8c97398a81ad9cf2bac09bbdce"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/tabs.css b/SuperLU_5.2.0/DOC/html/tabs.css
new file mode 100644
index 0000000..9cf578f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: url('tab_b.png');
+ width: 100%;
+ z-index: 101;
+ font-size: 13px;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: url('tab_b.png');
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color: #283A5D;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ background-image: url('tab_h.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/SuperLU_5.2.0/DOC/html/util_8c.html b/SuperLU_5.2.0/DOC/html/util_8c.html
new file mode 100644
index 0000000..bbcb0e2
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/util_8c.html
@@ -0,0 +1,923 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/util.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">util.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Utility functions.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__ddefs_8h_source.html">slu_ddefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for util.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="util_8c__incl.png" border="0" usemap="#SRC_2util_8c" alt=""/></div>
+<map name="SRC_2util_8c" id="SRC_2util_8c">
+<area shape="rect" id="node3" href="slu__ddefs_8h.html" title="Header file for real operations. " alt="" coords="285,80,373,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a70f31d2c4d8d0802751120e07028bd3a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a70f31d2c4d8d0802751120e07028bd3a">NBUCKS</a> 10</td></tr>
+<tr class="memdesc:a70f31d2c4d8d0802751120e07028bd3a"><td class="mdescLeft"> </td><td class="mdescRight">Get the statistics of the supernodes. <a href="#a70f31d2c4d8d0802751120e07028bd3a">More...</a><br/></td></tr>
+<tr class="separator:a70f31d2c4d8d0802751120e07028bd3a"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a060bded38730c2e58fa7f7e19c43ba08"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a060bded38730c2e58fa7f7e19c43ba08">superlu_abort_and_exit</a> (char *msg)</td></tr>
+<tr class="memdesc:a060bded38730c2e58fa7f7e19c43ba08"><td class="mdescLeft"> </td><td class="mdescRight">Global statistics variale. <a href="#a060bded38730c2e58fa7f7e19c43ba08">More...</a><br/></td></tr>
+<tr class="separator:a060bded38730c2e58fa7f7e19c43ba08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4792687285a879f7955029421ba99795"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a4792687285a879f7955029421ba99795">set_default_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+<tr class="memdesc:a4792687285a879f7955029421ba99795"><td class="mdescLeft"> </td><td class="mdescRight">Set the default values for the options argument. <a href="#a4792687285a879f7955029421ba99795">More...</a><br/></td></tr>
+<tr class="separator:a4792687285a879f7955029421ba99795"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afce6cba2b855a4b046f6521d5dd1beb4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#afce6cba2b855a4b046f6521d5dd1beb4">ilu_set_default_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+<tr class="memdesc:afce6cba2b855a4b046f6521d5dd1beb4"><td class="mdescLeft"> </td><td class="mdescRight">Set the default values for the options argument for ILU. <a href="#afce6cba2b855a4b046f6521d5dd1beb4">More...</a><br/></td></tr>
+<tr class="separator:afce6cba2b855a4b046f6521d5dd1beb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3a041511849362ed44688698c86a9039"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a3a041511849362ed44688698c86a9039">print_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+<tr class="memdesc:a3a041511849362ed44688698c86a9039"><td class="mdescLeft"> </td><td class="mdescRight">Print the options setting. <a href="#a3a041511849362ed44688698c86a9039">More...</a><br/></td></tr>
+<tr class="separator:a3a041511849362ed44688698c86a9039"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af68d6594a77880eedb6c7b35aef237ac"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#af68d6594a77880eedb6c7b35aef237ac">print_ilu_options</a> (<a class="el" href="structsuperlu__options__t.html">superlu_options_t</a> *options)</td></tr>
+<tr class="memdesc:af68d6594a77880eedb6c7b35aef237ac"><td class="mdescLeft"> </td><td class="mdescRight">Print the options setting. <a href="#af68d6594a77880eedb6c7b35aef237ac">More...</a><br/></td></tr>
+<tr class="separator:af68d6594a77880eedb6c7b35aef237ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac16a0aea75cf99b4d38ec4ede6f13eb4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#ac16a0aea75cf99b4d38ec4ede6f13eb4">Destroy_SuperMatrix_Store</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="memdesc:ac16a0aea75cf99b4d38ec4ede6f13eb4"><td class="mdescLeft"> </td><td class="mdescRight">Deallocate the structure pointing to the actual storage of the matrix. <a href="#ac16a0aea75cf99b4d38ec4ede6f13eb4">More...</a><br/></td></tr>
+<tr class="separator:ac16a0aea75cf99b4d38ec4ede6f13eb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a27491a8171a480d6c98e6d1e535e1973"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a27491a8171a480d6c98e6d1e535e1973">Destroy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a27491a8171a480d6c98e6d1e535e1973"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6292e6a8f2b75101294f2e99927b5d2a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a6292e6a8f2b75101294f2e99927b5d2a">Destroy_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a6292e6a8f2b75101294f2e99927b5d2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aea724a390aed4ef00a4b8ed783c60014"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#aea724a390aed4ef00a4b8ed783c60014">Destroy_SuperNode_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:aea724a390aed4ef00a4b8ed783c60014"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7285ca16a0b84b4333d71efeb65c0126"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a7285ca16a0b84b4333d71efeb65c0126">Destroy_CompCol_Permuted</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="memdesc:a7285ca16a0b84b4333d71efeb65c0126"><td class="mdescLeft"> </td><td class="mdescRight">A is of type Stype==NCP. <a href="#a7285ca16a0b84b4333d71efeb65c0126">More...</a><br/></td></tr>
+<tr class="separator:a7285ca16a0b84b4333d71efeb65c0126"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a301f89dc9483e5bcdc47fc96e8645cf7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a301f89dc9483e5bcdc47fc96e8645cf7">Destroy_Dense_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="memdesc:a301f89dc9483e5bcdc47fc96e8645cf7"><td class="mdescLeft"> </td><td class="mdescRight">A is of type Stype==DN. <a href="#a301f89dc9483e5bcdc47fc96e8645cf7">More...</a><br/></td></tr>
+<tr class="separator:a301f89dc9483e5bcdc47fc96e8645cf7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a67bce8b2142b3be41583de4fbea02cb0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a67bce8b2142b3be41583de4fbea02cb0">resetrep_col</a> (const int nseg, const int *segrep, int *repfnz)</td></tr>
+<tr class="memdesc:a67bce8b2142b3be41583de4fbea02cb0"><td class="mdescLeft"> </td><td class="mdescRight">Reset repfnz[] for the current column. <a href="#a67bce8b2142b3be41583de4fbea02cb0">More...</a><br/></td></tr>
+<tr class="separator:a67bce8b2142b3be41583de4fbea02cb0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acac794ae60517b94cb755975b51b9538"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#acac794ae60517b94cb755975b51b9538">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 class="memdesc:acac794ae60517b94cb755975b51b9538"><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="#acac794ae60517b94cb755975b51b9538">More...</a><br/></td></tr>
+<tr class="separator:acac794ae60517b94cb755975b51b9538"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a45274d2d42e1a1305101bbe11e47ed65"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a45274d2d42e1a1305101bbe11e47ed65">ilu_countnz</a> (const int n, int *nnzL, int *nnzU, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a45274d2d42e1a1305101bbe11e47ed65"><td class="mdescLeft"> </td><td class="mdescRight">Count the total number of nonzeros in factors L and U. <a href="#a45274d2d42e1a1305101bbe11e47ed65">More...</a><br/></td></tr>
+<tr class="separator:a45274d2d42e1a1305101bbe11e47ed65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b97838714471334eba3f4de948d6e7a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a4b97838714471334eba3f4de948d6e7a">fixupL</a> (const int n, const int *perm_r, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a4b97838714471334eba3f4de948d6e7a"><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="#a4b97838714471334eba3f4de948d6e7a">More...</a><br/></td></tr>
+<tr class="separator:a4b97838714471334eba3f4de948d6e7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9e2ebe03503cdfc4ab20306d028ca312"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a9e2ebe03503cdfc4ab20306d028ca312">print_panel_seg</a> (int n, int w, int jcol, int nseg, int *segrep, int *repfnz)</td></tr>
+<tr class="memdesc:a9e2ebe03503cdfc4ab20306d028ca312"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of segment info after panel_dfs(). <a href="#a9e2ebe03503cdfc4ab20306d028ca312">More...</a><br/></td></tr>
+<tr class="separator:a9e2ebe03503cdfc4ab20306d028ca312"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9b8745daf1fd22070364570977fe1ccc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a9b8745daf1fd22070364570977fe1ccc">StatInit</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+<tr class="separator:a9b8745daf1fd22070364570977fe1ccc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef88fef229bf26ba82b50d99c20ad915"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#aef88fef229bf26ba82b50d99c20ad915">StatPrint</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+<tr class="separator:aef88fef229bf26ba82b50d99c20ad915"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7d50e009f6f1f4ba8a63cdd912a0d31d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a7d50e009f6f1f4ba8a63cdd912a0d31d">StatFree</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+<tr class="separator:a7d50e009f6f1f4ba8a63cdd912a0d31d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a60256c1cabadcd15f555ed6e9d7eedef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__util_8h.html#aaae6020bb33e780ff6edbd4e45ce08ac">flops_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a60256c1cabadcd15f555ed6e9d7eedef">LUFactFlops</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+<tr class="separator:a60256c1cabadcd15f555ed6e9d7eedef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afdfc4cfea288d5639fb7321929550b8a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__util_8h.html#aaae6020bb33e780ff6edbd4e45ce08ac">flops_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#afdfc4cfea288d5639fb7321929550b8a">LUSolveFlops</a> (<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a> *stat)</td></tr>
+<tr class="separator:afdfc4cfea288d5639fb7321929550b8a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae289773c377a566a2f77c88b21d7f4ae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#ae289773c377a566a2f77c88b21d7f4ae">ifill</a> (int *a, int alen, int ival)</td></tr>
+<tr class="memdesc:ae289773c377a566a2f77c88b21d7f4ae"><td class="mdescLeft"> </td><td class="mdescRight">Fills an integer array with a given value. <a href="#ae289773c377a566a2f77c88b21d7f4ae">More...</a><br/></td></tr>
+<tr class="separator:ae289773c377a566a2f77c88b21d7f4ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1040b7d1545dbf58b7af05d48621ed0a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a1040b7d1545dbf58b7af05d48621ed0a">super_stats</a> (int nsuper, int *xsup)</td></tr>
+<tr class="separator:a1040b7d1545dbf58b7af05d48621ed0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5789a3d7549a127e955680283ecfe44e"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a5789a3d7549a127e955680283ecfe44e">SpaSize</a> (int n, int np, float sum_npw)</td></tr>
+<tr class="separator:a5789a3d7549a127e955680283ecfe44e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9daf07581bce8c0f5c879c5899ce419c"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a9daf07581bce8c0f5c879c5899ce419c">DenseSize</a> (int n, float sum_nw)</td></tr>
+<tr class="separator:a9daf07581bce8c0f5c879c5899ce419c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af27aecac055064fa7581c854848f7e7b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#af27aecac055064fa7581c854848f7e7b">check_repfnz</a> (int n, int w, int jcol, int *repfnz)</td></tr>
+<tr class="memdesc:af27aecac055064fa7581c854848f7e7b"><td class="mdescLeft"> </td><td class="mdescRight">Check whether repfnz[] == EMPTY after reset. <a href="#af27aecac055064fa7581c854848f7e7b">More...</a><br/></td></tr>
+<tr class="separator:af27aecac055064fa7581c854848f7e7b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa88c72f09a077ee18043edff386f4a2c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#aa88c72f09a077ee18043edff386f4a2c">PrintSumm</a> (char *type, int nfail, int nrun, int nerrs)</td></tr>
+<tr class="memdesc:aa88c72f09a077ee18043edff386f4a2c"><td class="mdescLeft"> </td><td class="mdescRight">Print a summary of the testing results. <a href="#aa88c72f09a077ee18043edff386f4a2c">More...</a><br/></td></tr>
+<tr class="separator:aa88c72f09a077ee18043edff386f4a2c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aac67c35b47f2aa92a3202769d3eebdeb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#aac67c35b47f2aa92a3202769d3eebdeb">print_int_vec</a> (char *what, int n, int *vec)</td></tr>
+<tr class="separator:aac67c35b47f2aa92a3202769d3eebdeb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52adbcf3d0b17d26fa9fc133c911993d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8c.html#a52adbcf3d0b17d26fa9fc133c911993d">slu_PrintInt10</a> (char *name, int len, int *x)</td></tr>
+<tr class="separator:a52adbcf3d0b17d26fa9fc133c911993d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November, 2010</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a70f31d2c4d8d0802751120e07028bd3a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NBUCKS 10</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af27aecac055064fa7581c854848f7e7b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acac794ae60517b94cb755975b51b9538"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9daf07581bce8c0f5c879c5899ce419c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a27491a8171a480d6c98e6d1e535e1973"></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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7285ca16a0b84b4333d71efeb65c0126"></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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6292e6a8f2b75101294f2e99927b5d2a"></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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a301f89dc9483e5bcdc47fc96e8645cf7"></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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac16a0aea75cf99b4d38ec4ede6f13eb4"></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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aea724a390aed4ef00a4b8ed783c60014"></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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4b97838714471334eba3f4de948d6e7a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae289773c377a566a2f77c88b21d7f4ae"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a45274d2d42e1a1305101bbe11e47ed65"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afce6cba2b855a4b046f6521d5dd1beb4"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="util_8c_afce6cba2b855a4b046f6521d5dd1beb4_cgraph.png" border="0" usemap="#util_8c_afce6cba2b855a4b046f6521d5dd1beb4_cgraph" alt=""/></div>
+<map name="util_8c_afce6cba2b855a4b046f6521d5dd1beb4_cgraph" id="util_8c_afce6cba2b855a4b046f6521d5dd1beb4_cgraph">
+<area shape="rect" id="node2" href="util_8c.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="209,5,343,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a60256c1cabadcd15f555ed6e9d7eedef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__util_8h.html#aaae6020bb33e780ff6edbd4e45ce08ac">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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afdfc4cfea288d5639fb7321929550b8a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__util_8h.html#aaae6020bb33e780ff6edbd4e45ce08ac">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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af68d6594a77880eedb6c7b35aef237ac"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aac67c35b47f2aa92a3202769d3eebdeb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3a041511849362ed44688698c86a9039"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9e2ebe03503cdfc4ab20306d028ca312"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa88c72f09a077ee18043edff386f4a2c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a67bce8b2142b3be41583de4fbea02cb0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4792687285a879f7955029421ba99795"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a52adbcf3d0b17d26fa9fc133c911993d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5789a3d7549a127e955680283ecfe44e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7d50e009f6f1f4ba8a63cdd912a0d31d"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9b8745daf1fd22070364570977fe1ccc"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="util_8c_a9b8745daf1fd22070364570977fe1ccc_cgraph.png" border="0" usemap="#util_8c_a9b8745daf1fd22070364570977fe1ccc_cgraph" alt=""/></div>
+<map name="util_8c_a9b8745daf1fd22070364570977fe1ccc_cgraph" id="util_8c_a9b8745daf1fd22070364570977fe1ccc_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="121,5,188,32"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="118,56,191,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="240,5,323,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aef88fef229bf26ba82b50d99c20ad915"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1040b7d1545dbf58b7af05d48621ed0a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="util_8c_a1040b7d1545dbf58b7af05d48621ed0a_cgraph.png" border="0" usemap="#util_8c_a1040b7d1545dbf58b7af05d48621ed0a_cgraph" alt=""/></div>
+<map name="util_8c_a1040b7d1545dbf58b7af05d48621ed0a_cgraph" id="util_8c_a1040b7d1545dbf58b7af05d48621ed0a_cgraph">
+<area shape="rect" id="node2" href="util_8c.html#ae289773c377a566a2f77c88b21d7f4ae" title="Fills an integer array with a given value. " alt="" coords="145,5,183,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a060bded38730c2e58fa7f7e19c43ba08"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zcolumn__bmod_8c.html b/SuperLU_5.2.0/DOC/html/zcolumn__bmod_8c.html
new file mode 100644
index 0000000..557e5b5
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zcolumn__bmod_8c.html
@@ -0,0 +1,321 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zcolumn_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zcolumn_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>performs numeric block updates
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zcolumn_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zcolumn__bmod_8c__incl.png" border="0" usemap="#SRC_2zcolumn__bmod_8c" alt=""/></div>
+<map name="SRC_2zcolumn__bmod_8c" id="SRC_2zcolumn__bmod_8c">
+<area shape="rect" id="node4" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="414,80,503,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="341,155,448,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="472,155,573,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac9798dda11fa387039351d70fa59ce3b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__bmod_8c.html#ac9798dda11fa387039351d70fa59ce3b">zusolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:ac9798dda11fa387039351d70fa59ce3b"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#ac9798dda11fa387039351d70fa59ce3b">More...</a><br/></td></tr>
+<tr class="separator:ac9798dda11fa387039351d70fa59ce3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb6f65890b5348dc1692d01b087be35d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__bmod_8c.html#afb6f65890b5348dc1692d01b087be35d">zlsolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:afb6f65890b5348dc1692d01b087be35d"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#afb6f65890b5348dc1692d01b087be35d">More...</a><br/></td></tr>
+<tr class="separator:afb6f65890b5348dc1692d01b087be35d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1165292a4e2a6c282638868bd503fb7a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__bmod_8c.html#a1165292a4e2a6c282638868bd503fb7a">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 class="memdesc:a1165292a4e2a6c282638868bd503fb7a"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a1165292a4e2a6c282638868bd503fb7a">More...</a><br/></td></tr>
+<tr class="separator:a1165292a4e2a6c282638868bd503fb7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa84a3714b3d55eb721a7a47eb0bcc110"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__bmod_8c.html#aa84a3714b3d55eb721a7a47eb0bcc110">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="st [...]
+<tr class="separator:aa84a3714b3d55eb721a7a47eb0bcc110"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aa84a3714b3d55eb721a7a47eb0bcc110"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose:
+</h1>
+</pre><pre>
+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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zcolumn__bmod_8c_aa84a3714b3d55eb721a7a47eb0bcc110_cgraph.png" border="0" usemap="#zcolumn__bmod_8c_aa84a3714b3d55eb721a7a47eb0bcc110_cgraph" alt=""/></div>
+<map name="zcolumn__bmod_8c_aa84a3714b3d55eb721a7a47eb0bcc110_cgraph" id="zcolumn__bmod_8c_aa84a3714b3d55eb721a7a47eb0bcc110_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#ae97174a10346e0629387c0f8ce9a9a08" title="ztrsv_" alt="" coords="192,5,251,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#aa25bbd36f5c52cf8df1db92545fe80b9" title="zgemv_" alt="" coords="187,56,255,83"/><area shape="rect" id="node4" href="zcolumn__bmod_8c.html#afb6f65890b5348dc1692d01b087be35d" title="Solves a dense UNIT lower triangular system. " alt="" coords="190,107,253,133"/><area shape="rect" id="node5" href="zcolu [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afb6f65890b5348dc1692d01b087be35d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1165292a4e2a6c282638868bd503fb7a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac9798dda11fa387039351d70fa59ce3b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zcolumn__dfs_8c.html b/SuperLU_5.2.0/DOC/html/zcolumn__dfs_8c.html
new file mode 100644
index 0000000..8c12fa5
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zcolumn__dfs_8c.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zcolumn_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zcolumn_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs a symbolic factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zcolumn_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zcolumn__dfs_8c__incl.png" border="0" usemap="#SRC_2zcolumn__dfs_8c" alt=""/></div>
+<map name="SRC_2zcolumn__dfs_8c" id="SRC_2zcolumn__dfs_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a5fd0635776cafb1d697263a0db693b9e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__dfs_8c.html#a5fd0635776cafb1d697263a0db693b9e">T2_SUPER</a></td></tr>
+<tr class="memdesc:a5fd0635776cafb1d697263a0db693b9e"><td class="mdescLeft"> </td><td class="mdescRight">What type of supernodes we want. <a href="#a5fd0635776cafb1d697263a0db693b9e">More...</a><br/></td></tr>
+<tr class="separator:a5fd0635776cafb1d697263a0db693b9e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac677cb46a7e96e45e93c9af1e8297314"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zcolumn__dfs_8c.html#ac677cb46a7e96e45e93c9af1e8297314">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>
+<tr class="separator:ac677cb46a7e96e45e93c9af1e8297314"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a5fd0635776cafb1d697263a0db693b9e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define T2_SUPER</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac677cb46a7e96e45e93c9af1e8297314"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ ZCOLUMN_DFS performs a symbolic factorization on column jcol, and
+ decide the supernode boundary.</pre><pre> This routine does not use numeric values, but only use the RHS
+ row indices to start the dfs.</pre><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><pre><h1>Local parameters
+</h1>
+</pre><pre>
+ 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><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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+</p>
+<blockquote class="doxtable">
+<p>0 number of bytes allocated when run out of space.</p>
+<p></p>
+</blockquote>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zcolumn__dfs_8c_ac677cb46a7e96e45e93c9af1e8297314_cgraph.png" border="0" usemap="#zcolumn__dfs_8c_ac677cb46a7e96e45e93c9af1e8297314_cgraph" alt=""/></div>
+<map name="zcolumn__dfs_8c_ac677cb46a7e96e45e93c9af1e8297314_cgraph" id="zcolumn__dfs_8c_ac677cb46a7e96e45e93c9af1e8297314_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="172,31,239,57"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="149,81,261,108"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="328,31,411,57"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zcopy__to__ucol_8c.html b/SuperLU_5.2.0/DOC/html/zcopy__to__ucol_8c.html
new file mode 100644
index 0000000..9477a75
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zcopy__to__ucol_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zcopy_to_ucol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zcopy_to_ucol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Copy a computed column of U to the compressed data structure.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zcopy_to_ucol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zcopy__to__ucol_8c__incl.png" border="0" usemap="#SRC_2zcopy__to__ucol_8c" alt=""/></div>
+<map name="SRC_2zcopy__to__ucol_8c" id="SRC_2zcopy__to__ucol_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a587a2ae921e7de3276cd0c4fc8a3aadb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zcopy__to__ucol_8c.html#a587a2ae921e7de3276cd0c4fc8a3aadb">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>
+<tr class="separator:a587a2ae921e7de3276cd0c4fc8a3aadb"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a587a2ae921e7de3276cd0c4fc8a3aadb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zcopy__to__ucol_8c_a587a2ae921e7de3276cd0c4fc8a3aadb_cgraph.png" border="0" usemap="#zcopy__to__ucol_8c_a587a2ae921e7de3276cd0c4fc8a3aadb_cgraph" alt=""/></div>
+<map name="zcopy__to__ucol_8c_a587a2ae921e7de3276cd0c4fc8a3aadb_cgraph" id="zcopy__to__ucol_8c_a587a2ae921e7de3276cd0c4fc8a3aadb_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="160,107,272,133"/><area shape="rect" id="node3" href="zmemory_8c.html#a67833ee9526cec0b31d0f26e527b97df" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="345,81,415,108"/><area shape="rect" id="node8" href="zmemory_8c.html#a17416eb78c42063624b6859d9f88820b" title="zmemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zdiagonal_8c.html b/SuperLU_5.2.0/DOC/html/zdiagonal_8c.html
new file mode 100644
index 0000000..ca3476a
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zdiagonal_8c.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zdiagonal.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zdiagonal.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Auxiliary routines to work with diagonal elements.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zdiagonal.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zdiagonal_8c__incl.png" border="0" usemap="#SRC_2zdiagonal_8c" alt=""/></div>
+<map name="SRC_2zdiagonal_8c" id="SRC_2zdiagonal_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0509095ae31fa257de9d3463926d7d37"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zdiagonal_8c.html#a0509095ae31fa257de9d3463926d7d37">zfill_diag</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+<tr class="separator:a0509095ae31fa257de9d3463926d7d37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a430ade01a0921d8a35ec42c2bfef03bd"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zdiagonal_8c.html#a430ade01a0921d8a35ec42c2bfef03bd">zdominate</a> (int n, <a class="el" href="structNCformat.html">NCformat</a> *Astore)</td></tr>
+<tr class="separator:a430ade01a0921d8a35ec42c2bfef03bd"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a430ade01a0921d8a35ec42c2bfef03bd"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zdiagonal_8c_a430ade01a0921d8a35ec42c2bfef03bd_cgraph.png" border="0" usemap="#zdiagonal_8c_a430ade01a0921d8a35ec42c2bfef03bd_cgraph" alt=""/></div>
+<map name="zdiagonal_8c_a430ade01a0921d8a35ec42c2bfef03bd_cgraph" id="zdiagonal_8c_a430ade01a0921d8a35ec42c2bfef03bd_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#ae33b5268048e570c0cdf96498198e821" title="doublecomplexMalloc" alt="" coords="136,5,283,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="172,56,247,83"/><area shape="rect" id="node4" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="177,107,241,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0509095ae31fa257de9d3463926d7d37"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zfgmr_8c.html b/SuperLU_5.2.0/DOC/html/zfgmr_8c.html
new file mode 100644
index 0000000..33502df
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zfgmr_8c.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/zfgmr.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zfgmr.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>flexible GMRES from ITSOL developed by Yousef Saad.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zfgmr.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zfgmr_8c__incl.png" border="0" usemap="#EXAMPLE_2zfgmr_8c" alt=""/></div>
+<map name="EXAMPLE_2zfgmr_8c" id="EXAMPLE_2zfgmr_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a70fac857a29f956523d4c8c05e13f177"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zfgmr_8c.html#a70fac857a29f956523d4c8c05e13f177">epsmac</a> 1.0e-16</td></tr>
+<tr class="separator:a70fac857a29f956523d4c8c05e13f177"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac30d3185c0f6f847e371366e55e28fb6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zfgmr_8c.html#ac30d3185c0f6f847e371366e55e28fb6">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 class="separator:ac30d3185c0f6f847e371366e55e28fb6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b8d5195d541b1c827f61e05b5da13a9"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="zfgmr_8c.html#a4b8d5195d541b1c827f61e05b5da13a9">dznrm2_</a> (int *, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], int *)</td></tr>
+<tr class="separator:a4b8d5195d541b1c827f61e05b5da13a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abffb8ceaa53b9b883ea0851a99033759"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zfgmr_8c.html#abffb8ceaa53b9b883ea0851a99033759">zfgmr</a> (int n, void(*<a class="el" href="zsp__blas2_8c.html#a1165292a4e2a6c282638868bd503fb7a">zmatvec</a>)(<a class="el" href="structdoublecomplex.html">doublecomplex</a>, <a class="el" href="structdoublecomplex.html">doublecomplex</a>[], <a class="el" href=" [...]
+<tr class="separator:abffb8ceaa53b9b883ea0851a99033759"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a70fac857a29f956523d4c8c05e13f177"></a>
+<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">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a4b8d5195d541b1c827f61e05b5da13a9"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac30d3185c0f6f847e371366e55e28fb6"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abffb8ceaa53b9b883ea0851a99033759"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zfgmr_8c_abffb8ceaa53b9b883ea0851a99033759_cgraph.png" border="0" usemap="#zfgmr_8c_abffb8ceaa53b9b883ea0851a99033759_cgraph" alt=""/></div>
+<map name="zfgmr_8c_abffb8ceaa53b9b883ea0851a99033759_cgraph" id="zfgmr_8c_abffb8ceaa53b9b883ea0851a99033759_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#ae33b5268048e570c0cdf96498198e821" title="doublecomplexMalloc" alt="" coords="597,49,744,76"/><area shape="rect" id="node3" href="zcolumn__bmod_8c.html#a1165292a4e2a6c282638868bd503fb7a" title="Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. " alt="" coords="109,100,181,127"/><area shape="rect" id="node4" href="zfgmr_8c.html#a4b8d5195d541b1c827f61e05b5da13a9" title="dznrm2_" alt="" coords="109,151,181,177"/><are [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zgscon_8c.html b/SuperLU_5.2.0/DOC/html/zgscon_8c.html
new file mode 100644
index 0000000..d824a53
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zgscon_8c.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zgscon.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zgscon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Estimates reciprocal of the condition number of a general matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zgscon.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgscon_8c__incl.png" border="0" usemap="#SRC_2zgscon_8c" alt=""/></div>
+<map name="SRC_2zgscon_8c" id="SRC_2zgscon_8c">
+<area shape="rect" id="node3" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6be8d109849b5406d8256de2419caf2e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgscon_8c.html#a6be8d109849b5406d8256de2419caf2e">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 *inf [...]
+<tr class="separator:a6be8d109849b5406d8256de2419caf2e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 5.0) --
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+July 25, 2015</pre><pre>Modified from lapack routines ZGECON.
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a6be8d109849b5406d8256de2419caf2e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><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><pre> RCOND (output) double*
+ The reciprocal of the condition number of the matrix A,
+ computed as RCOND = 1/(norm(A) * norm(inv(A))).</pre><pre> INFO (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgscon_8c_a6be8d109849b5406d8256de2419caf2e_cgraph.png" border="0" usemap="#zgscon_8c_a6be8d109849b5406d8256de2419caf2e_cgraph" alt=""/></div>
+<map name="zgscon_8c_a6be8d109849b5406d8256de2419caf2e_cgraph" id="zgscon_8c_a6be8d109849b5406d8256de2419caf2e_cgraph">
+<area shape="rect" id="node2" href="zlacon2_8c.html#a386accb9d3bf1919491ed242ff28657e" title="zlacon2_" alt="" coords="117,132,192,159"/><area shape="rect" id="node8" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,259,355,285"/><area shape="rect" id="node9" href="slu__zdefs_8h.html#ab7683ac1617339478753ab308a7b0fc5" title="doublecomplexCalloc" alt="" coords="240,309,387,336"/><area shape="rect" id="node10" href="slu__zdefs_8h.html#a4f [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zgsequ_8c.html b/SuperLU_5.2.0/DOC/html/zgsequ_8c.html
new file mode 100644
index 0000000..a8408ef
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zgsequ_8c.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zgsequ.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zgsequ.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes row and column scalings.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zgsequ.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgsequ_8c__incl.png" border="0" usemap="#SRC_2zgsequ_8c" alt=""/></div>
+<map name="SRC_2zgsequ_8c" id="SRC_2zgsequ_8c">
+<area shape="rect" id="node3" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a55aa9c7e1576dc4bd1e5d3155f35598c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsequ_8c.html#a55aa9c7e1576dc4bd1e5d3155f35598c">zgsequ</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, double *r, double *c, double *rowcnd, double *colcnd, double *amax, int *info)</td></tr>
+<tr class="memdesc:a55aa9c7e1576dc4bd1e5d3155f35598c"><td class="mdescLeft"> </td><td class="mdescRight">Driver related. <a href="#a55aa9c7e1576dc4bd1e5d3155f35598c">More...</a><br/></td></tr>
+<tr class="separator:a55aa9c7e1576dc4bd1e5d3155f35598c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from LAPACK routine ZGEEQU
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a55aa9c7e1576dc4bd1e5d3155f35598c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (output) double*, size A->nrow
+ If INFO = 0 or INFO > M, R contains the row scale factors
+ for A.</pre><pre> C (output) double*, size A->ncol
+ If INFO = 0, C contains the column scale factors for A.</pre><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><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><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><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
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgsequ_8c_a55aa9c7e1576dc4bd1e5d3155f35598c_cgraph.png" border="0" usemap="#zgsequ_8c_a55aa9c7e1576dc4bd1e5d3155f35598c_cgraph" alt=""/></div>
+<map name="zgsequ_8c_a55aa9c7e1576dc4bd1e5d3155f35598c_cgraph" id="zgsequ_8c_a55aa9c7e1576dc4bd1e5d3155f35598c_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="128,5,189,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="117,56,200,83"/><area shape="rect" id="node4" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="127,107,191,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zgsisx_8c.html b/SuperLU_5.2.0/DOC/html/zgsisx_8c.html
new file mode 100644
index 0000000..7130990
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zgsisx_8c.html
@@ -0,0 +1,516 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zgsisx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zgsisx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an approximate solutions of linear equations A*X=B or A'*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zgsisx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgsisx_8c__incl.png" border="0" usemap="#SRC_2zgsisx_8c" alt=""/></div>
+<map name="SRC_2zgsisx_8c" id="SRC_2zgsisx_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5e187c45fedd9fb04fafcf1d609979e5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsisx_8c.html#a5e187c45fedd9fb04fafcf1d609979e5">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int * [...]
+<tr class="separator:a5e187c45fedd9fb04fafcf1d609979e5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.2) –
+Lawrence Berkeley National Laboratory.
+November, 2010
+August, 2011
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5e187c45fedd9fb04fafcf1d609979e5"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a97e2ca2095398db1ebfdeb2aa623b8b5">zgsitrf()</a>.
+An estimation of the condition number is provided.
+The routine performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><pre> 1.7. options->IterRefine is not used</pre><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><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#aaf22b247cc134fb0ba90285e84ccebb4" 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) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * sum(dropped entries);
+ = SMILU_3:
+ U(i,i) := U(i,i) + <a class="el" href="ilu__zpivotL_8c.html#a95ed41486ca0ed53262e4b8934d4afac">SGN(U(i,i))</a> * 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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><pre> 2.7. If options->IterRefine is not used.</pre><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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#ae112ddfff2798b7e4c090d96d2a8d80a" 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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgsisx_8c_a5e187c45fedd9fb04fafcf1d609979e5_cgraph.png" border="0" usemap="#zgsisx_8c_a5e187c45fedd9fb04fafcf1d609979e5_cgraph" alt=""/></div>
+<map name="zgsisx_8c_a5e187c45fedd9fb04fafcf1d609979e5_cgraph" id="zgsisx_8c_a5e187c45fedd9fb04fafcf1d609979e5_cgraph">
+<area shape="rect" id="node2" href="zlangs_8c.html#a37d1ec3ddab88e8c46872c5795ea5ada" title="zlangs" alt="" coords="182,5,242,32"/><area shape="rect" id="node4" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="604,791,665,817"/><area shape="rect" id="node5" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="739,740,821,767"/><area shape="rect" id="node6" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zgsitrf_8c.html b/SuperLU_5.2.0/DOC/html/zgsitrf_8c.html
new file mode 100644
index 0000000..ac6f934
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zgsitrf_8c.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zgsitrf.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zgsitrf.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an ILU factorization of a general sparse matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zgsitrf.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgsitrf_8c__incl.png" border="0" usemap="#SRC_2zgsitrf_8c" alt=""/></div>
+<map name="SRC_2zgsitrf_8c" id="SRC_2zgsitrf_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a54c9f1d3cfd95fe522f5397ff607b89e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsitrf_8c.html#a54c9f1d3cfd95fe522f5397ff607b89e">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int p [...]
+<tr class="separator:a54c9f1d3cfd95fe522f5397ff607b89e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.1) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009</pre><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a54c9f1d3cfd95fe522f5397ff607b89e"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the ILU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#a2a809488b87d2c1a9b2a574b726e8517">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">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#a380317801e05b11930fd1e094db34179">ilu_ddrop_row()</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgsitrf_8c_a54c9f1d3cfd95fe522f5397ff607b89e_cgraph.png" border="0" usemap="#zgsitrf_8c_a54c9f1d3cfd95fe522f5397ff607b89e_cgraph" alt=""/></div>
+<map name="zgsitrf_8c_a54c9f1d3cfd95fe522f5397ff607b89e_cgraph" id="zgsitrf_8c_a54c9f1d3cfd95fe522f5397ff607b89e_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a0c3bf2c88bdda13cede034c6e9a407e5" title="Memory-related. " alt="" coords="157,309,251,336"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="363,56,437,83"/><area shape="rect" id="node12" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="531,563,597,589"/><area shape="rect" id="node14" href="memory_8c.html#adbbe5a57b4ed6 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zgsrfs_8c.html b/SuperLU_5.2.0/DOC/html/zgsrfs_8c.html
new file mode 100644
index 0000000..77933ba
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zgsrfs_8c.html
@@ -0,0 +1,287 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zgsrfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zgsrfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Improves computed solution to a system of inear equations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zgsrfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgsrfs_8c__incl.png" border="0" usemap="#SRC_2zgsrfs_8c" alt=""/></div>
+<map name="SRC_2zgsrfs_8c" id="SRC_2zgsrfs_8c">
+<area shape="rect" id="node3" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a3641b6d4c21b7a852dbb32c2b693302e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsrfs_8c.html#a3641b6d4c21b7a852dbb32c2b693302e">ITMAX</a> 5</td></tr>
+<tr class="separator:a3641b6d4c21b7a852dbb32c2b693302e"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac21acad54459e74738cbca9f7f20a73b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgsrfs_8c.html#ac21acad54459e74738cbca9f7f20a73b">zgsrfs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a> [...]
+<tr class="separator:ac21acad54459e74738cbca9f7f20a73b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Modified from lapack routine ZGERFS
+Last modified: December 3, 2015
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a3641b6d4c21b7a852dbb32c2b693302e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ITMAX 5</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac21acad54459e74738cbca9f7f20a73b"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> ZGSRFS improves the computed solution to a system of linear
+ equations and provides error bounds and backward error estimates for
+ the solution.</pre><pre> If equilibration was performed, the system becomes:
+ (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use column-wise storage scheme,
+ i.e., U has types: Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><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><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><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><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><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><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><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#a1b74304cd437572bbec487bc29422a90">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><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><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><pre> stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre> info (output) int*
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value</pre><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><pre> ITMAX is the maximum number of steps of iterative refinement.</pre><pre></pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgsrfs_8c_ac21acad54459e74738cbca9f7f20a73b_cgraph.png" border="0" usemap="#zgsrfs_8c_ac21acad54459e74738cbca9f7f20a73b_cgraph" alt=""/></div>
+<map name="zgsrfs_8c_ac21acad54459e74738cbca9f7f20a73b_cgraph" id="zgsrfs_8c_ac21acad54459e74738cbca9f7f20a73b_cgraph">
+<area shape="rect" id="node2" href="zlacon2_8c.html#a386accb9d3bf1919491ed242ff28657e" title="zlacon2_" alt="" coords="116,131,191,158"/><area shape="rect" id="node3" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="285,30,347,56"/><area shape="rect" id="node6" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="482,80,539,107"/><area shape="rect" id="node7" href="ilu__zcopy__to__ucol_8c.html#aad [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zgssv_8c.html b/SuperLU_5.2.0/DOC/html/zgssv_8c.html
new file mode 100644
index 0000000..5d9add7
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zgssv_8c.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zgssv.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zgssv.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves the system of linear equations A*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zgssv.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgssv_8c__incl.png" border="0" usemap="#SRC_2zgssv_8c" alt=""/></div>
+<map name="SRC_2zgssv_8c" id="SRC_2zgssv_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab87f9fe7f59ed6d2e53f4d49fa78ad1f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgssv_8c.html#ab87f9fe7f59ed6d2e53f4d49fa78ad1f">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int *pe [...]
+<tr class="memdesc:ab87f9fe7f59ed6d2e53f4d49fa78ad1f"><td class="mdescLeft"> </td><td class="mdescRight">Driver routines. <a href="#ab87f9fe7f59ed6d2e53f4d49fa78ad1f">More...</a><br/></td></tr>
+<tr class="separator:ab87f9fe7f59ed6d2e53f4d49fa78ad1f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 3.0) --
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab87f9fe7f59ed6d2e53f4d49fa78ad1f"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>ZGSSV solves the system of linear equations A*X=B, using the
+LU factorization from ZGSTRF. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><pre> 1.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ above algorithm to the transpose of A:</pre><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><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><pre> 2.3. Solve the system of equations A*X=B using the factored
+ form of A.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> If options->RowPerm = MY_PERMR or
+ options->Fact = SamePattern_SameRowPerm, perm_r is an
+ input argument.
+ otherwise it is an output argument.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgssv_8c_ab87f9fe7f59ed6d2e53f4d49fa78ad1f_cgraph.png" border="0" usemap="#zgssv_8c_ab87f9fe7f59ed6d2e53f4d49fa78ad1f_cgraph" alt=""/></div>
+<map name="zgssv_8c_ab87f9fe7f59ed6d2e53f4d49fa78ad1f_cgraph" id="zgssv_8c_ab87f9fe7f59ed6d2e53f4d49fa78ad1f_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="747,1779,829,1805"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a7281942aff23b914e0cb23478bf8cf39" title="Supernodal LU factor related. " alt="" coords="360,563,533,589"/><area shape="rect" id="node4" href="slu__util_8h.html#a0c6777573bbfe81917cd381e0090d355" title="Timer function. " alt="" coords="389,5,505,32"/><area shape="rect" id="node5" href="get [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zgssvx_8c.html b/SuperLU_5.2.0/DOC/html/zgssvx_8c.html
new file mode 100644
index 0000000..336c8ec
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zgssvx_8c.html
@@ -0,0 +1,481 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zgssvx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zgssvx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves the system of linear equations A*X=B or A'*X=B.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zgssvx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgssvx_8c__incl.png" border="0" usemap="#SRC_2zgssvx_8c" alt=""/></div>
+<map name="SRC_2zgssvx_8c" id="SRC_2zgssvx_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a680ed4018227938b4d6f9c4c98743dcf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgssvx_8c.html#a680ed4018227938b4d6f9c4c98743dcf">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, int * [...]
+<tr class="separator:a680ed4018227938b4d6f9c4c98743dcf"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a680ed4018227938b4d6f9c4c98743dcf"></a>
+<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="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="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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Error bounds on the solution and
+a condition estimate are also provided. It performs the following steps:</pre><pre> 1. If A is stored column-wise (A->Stype = SLU_NC):</pre><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><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><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><pre> 1.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 1.6. The system of equations is solved for X using the factored form
+ of A.</pre><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><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><pre> 2. If A is stored row-wise (A->Stype = SLU_NR), apply the above algorithm
+ to the transpose of A:</pre><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><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><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><pre> 2.4. Compute the reciprocal pivot growth factor.</pre><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><pre> 2.6. The system of equations is solved for X using the factored form
+ of transpose(A).</pre><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><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><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><pre> See argument 'mem_usage' for memory usage statistics.</pre><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><pre>mem_usage (output) mem_usage_t*
+ Record the memory usage statistics, consisting of following fields:</p>
+<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><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgssvx_8c_a680ed4018227938b4d6f9c4c98743dcf_cgraph.png" border="0" usemap="#zgssvx_8c_a680ed4018227938b4d6f9c4c98743dcf_cgraph" alt=""/></div>
+<map name="zgssvx_8c_a680ed4018227938b4d6f9c4c98743dcf_cgraph" id="zgssvx_8c_a680ed4018227938b4d6f9c4c98743dcf_cgraph">
+<area shape="rect" id="node2" href="zlangs_8c.html#a37d1ec3ddab88e8c46872c5795ea5ada" title="zlangs" alt="" coords="185,226,245,253"/><area shape="rect" id="node4" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="416,74,477,101"/><area shape="rect" id="node5" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="741,353,824,380"/><area shape="rect" id="node6" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73 [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zgstrf_8c.html b/SuperLU_5.2.0/DOC/html/zgstrf_8c.html
new file mode 100644
index 0000000..367b935
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zgstrf_8c.html
@@ -0,0 +1,309 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zgstrf.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zgstrf.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes an LU factorization of a general sparse matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zgstrf.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgstrf_8c__incl.png" border="0" usemap="#SRC_2zgstrf_8c" alt=""/></div>
+<map name="SRC_2zgstrf_8c" id="SRC_2zgstrf_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af964ecc958ff022e34d6d63cf94102f6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrf_8c.html#af964ecc958ff022e34d6d63cf94102f6">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int relax, int pan [...]
+<tr class="separator:af964ecc958ff022e34d6d63cf94102f6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="af964ecc958ff022e34d6d63cf94102f6"></a>
+<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="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>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>info</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>options (input) superlu_options_t*
+ The structure defines the input parameters to control
+ how the LU decomposition will be performed.</pre><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><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><pre>panel_size (input) int
+ A panel consists of at most panel_size consecutive columns.</pre><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><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><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><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><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><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><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><pre>Glu (input/output) <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *
+ If options->Fact == SamePattern_SameRowPerm, it is an input;
+ The matrix A will be factorized assuming that a
+ factorization of a matrix with the same sparsity pattern
+ and similar numerical values was performed prior to this one.
+ Therefore, this factorization will reuse both row and column
+ scaling factors R and C, both row and column permutation
+ vectors perm_r and perm_c, and the L & U data structures
+ set up from the previous factorization.
+ Otherwise, it is an output.</pre><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 '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><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.
+</p>
+<hr/>
+</pre><pre><h1>Local Working Arrays:
+</h1>
+</pre><pre>
+ m = number of rows in the matrix
+ n = number of columns in the matrix</pre><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><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><pre> parent[0:m-1]: parent vector used during dfs
+ Storage: relative to new row subscripts</pre><pre> xplore[0:m-1]: xplore[i] gives the location of the next (dfs)
+ unexplored neighbor of i in lsub[*]</pre><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><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><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#addc01b7cd28e5566177c284480a680f3">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><pre> dense[0:W*m-1]: sparse accumulating (SPA) vector for intermediate values;
+ NOTE: there are W of them.</pre><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#a06193b28f40a4779ae7737711642eb45">NUM_TEMPV()</a> in <a class="el" href="slu__zdefs_8h.html" title="Header file for real operations. ">slu_zdefs.h</a>.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgstrf_8c_af964ecc958ff022e34d6d63cf94102f6_cgraph.png" border="0" usemap="#zgstrf_8c_af964ecc958ff022e34d6d63cf94102f6_cgraph" alt=""/></div>
+<map name="zgstrf_8c_af964ecc958ff022e34d6d63cf94102f6_cgraph" id="zgstrf_8c_af964ecc958ff022e34d6d63cf94102f6_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="528,631,595,658"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#a0c3bf2c88bdda13cede034c6e9a407e5" title="Memory-related. " alt="" coords="155,175,248,202"/><area shape="rect" id="node6" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="360,302,435,328"/><area shape="rect" id="node16" href="memory_8c.html#adbbe5a57b4ed [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zgstrs_8c.html b/SuperLU_5.2.0/DOC/html/zgstrs_8c.html
new file mode 100644
index 0000000..fb25616
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zgstrs_8c.html
@@ -0,0 +1,368 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zgstrs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zgstrs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Solves a system using LU factorization.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zgstrs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgstrs_8c__incl.png" border="0" usemap="#SRC_2zgstrs_8c" alt=""/></div>
+<map name="SRC_2zgstrs_8c" id="SRC_2zgstrs_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac9798dda11fa387039351d70fa59ce3b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#ac9798dda11fa387039351d70fa59ce3b">zusolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:ac9798dda11fa387039351d70fa59ce3b"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#ac9798dda11fa387039351d70fa59ce3b">More...</a><br/></td></tr>
+<tr class="separator:ac9798dda11fa387039351d70fa59ce3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb6f65890b5348dc1692d01b087be35d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#afb6f65890b5348dc1692d01b087be35d">zlsolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:afb6f65890b5348dc1692d01b087be35d"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#afb6f65890b5348dc1692d01b087be35d">More...</a><br/></td></tr>
+<tr class="separator:afb6f65890b5348dc1692d01b087be35d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1165292a4e2a6c282638868bd503fb7a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#a1165292a4e2a6c282638868bd503fb7a">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 class="memdesc:a1165292a4e2a6c282638868bd503fb7a"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a1165292a4e2a6c282638868bd503fb7a">More...</a><br/></td></tr>
+<tr class="separator:a1165292a4e2a6c282638868bd503fb7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ddda3f91ee65762d0589d5d613f2795"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#a7ddda3f91ee65762d0589d5d613f2795">zgstrs</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">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 [...]
+<tr class="separator:a7ddda3f91ee65762d0589d5d613f2795"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aafcbead526e1e4f1b7895d3c5abfe4ab"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zgstrs_8c.html#aafcbead526e1e4f1b7895d3c5abfe4ab">zprint_soln</a> (int n, int nrhs, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *soln)</td></tr>
+<tr class="separator:aafcbead526e1e4f1b7895d3c5abfe4ab"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a7ddda3f91ee65762d0589d5d613f2795"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre>See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use compressed row subscripts storage for supernodes,
+ i.e., L has types: Stype = SLU_SC, Dtype = SLU_Z, Mtype = SLU_TRLU.</pre><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#a2590dbb66d39c3055f88292f5f093be7">zgstrf()</a>. Use column-wise storage scheme, i.e., U has types:
+ Stype = SLU_NC, Dtype = SLU_Z, Mtype = SLU_TRU.</pre><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><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><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><pre>stat (output) SuperLUStat_t*
+ Record the statistics on runtime and floating-point operation count.
+ See util.h for the definition of '<a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>'.</pre><pre>info (output) int*
+ = 0: successful exit
+ < 0: if info = -i, the i-th argument had an illegal value
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zgstrs_8c_a7ddda3f91ee65762d0589d5d613f2795_cgraph.png" border="0" usemap="#zgstrs_8c_a7ddda3f91ee65762d0589d5d613f2795_cgraph" alt=""/></div>
+<map name="zgstrs_8c_a7ddda3f91ee65762d0589d5d613f2795_cgraph" id="zgstrs_8c_a7ddda3f91ee65762d0589d5d613f2795_cgraph">
+<area shape="rect" id="node2" href="zgstrs_8c.html#aafcbead526e1e4f1b7895d3c5abfe4ab" title="zprint_soln" alt="" coords="143,5,228,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="339,107,421,133"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#ab7683ac1617339478753ab308a7b0fc5" title="doublecomplexCalloc" alt="" coords="307,157,453,184"/><area shape="rect" id="node5" href="slu__zdefs_8h.html#ae33b [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afb6f65890b5348dc1692d01b087be35d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1165292a4e2a6c282638868bd503fb7a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="aafcbead526e1e4f1b7895d3c5abfe4ab"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac9798dda11fa387039351d70fa59ce3b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zitersol1_8c.html b/SuperLU_5.2.0/DOC/html/zitersol1_8c.html
new file mode 100644
index 0000000..cdf2b57
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zitersol1_8c.html
@@ -0,0 +1,399 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/zitersol1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">zitersol1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Example #2 showing how to use ILU to precondition GMRES.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zitersol1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zitersol1_8c__incl.png" border="0" usemap="#EXAMPLE_2zitersol1_8c" alt=""/></div>
+<map name="EXAMPLE_2zitersol1_8c" id="EXAMPLE_2zitersol1_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae970280d13c1a6f41e71834f00776082"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#ae970280d13c1a6f41e71834f00776082">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 class="separator:ae970280d13c1a6f41e71834f00776082"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e1543e740b505ad649e15bddd2c60ca"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#a4e1543e740b505ad649e15bddd2c60ca">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="structdoub [...]
+<tr class="separator:a4e1543e740b505ad649e15bddd2c60ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a869338b25a186a486edd0cf1850a7fbb"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#a869338b25a186a486edd0cf1850a7fbb">GLOBAL_EQUED</a></td></tr>
+<tr class="separator:a869338b25a186a486edd0cf1850a7fbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a64b516645b16ef03c6fd0d692e6eb277"><td class="memItemLeft" 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#a64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+<tr class="separator:a64b516645b16ef03c6fd0d692e6eb277"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8cb83de814c7fbf89011ba08bb602ce0"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#a8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a></td></tr>
+<tr class="separator:a8cb83de814c7fbf89011ba08bb602ce0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5dce1561e620f6a6f6b6f17d82df4e8"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#ac5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a></td></tr>
+<tr class="separator:ac5dce1561e620f6a6f6b6f17d82df4e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+<tr class="separator:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a42ee721355f1c852f770661834be93"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol1_8c.html#a5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+<tr class="separator:a5a42ee721355f1c852f770661834be93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad42e5c3013507184841cdfee652a0c18"><td class="memItemLeft" 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#ad42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+<tr class="separator:ad42e5c3013507184841cdfee652a0c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1beb2a8fb47df4eb505addfef02814c"><td class="memItemLeft" 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#af1beb2a8fb47df4eb505addfef02814c">GLOBAL_A_ORIG</a></td></tr>
+<tr class="separator:af1beb2a8fb47df4eb505addfef02814c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memItemLeft" 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#a0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+<tr class="separator:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a000ad5c2198e4309802b4478ed08a98c"><td class="memItemLeft" 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#a000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+<tr class="separator:a000ad5c2198e4309802b4478ed08a98c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96a062252c26544370e8feae987c6d16"><td class="memItemLeft" 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#a96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+<tr class="separator:a96a062252c26544370e8feae987c6d16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19718c440adb41fbebcb4bafedbf932c"><td class="memItemLeft" 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#a19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+<tr class="separator:a19718c440adb41fbebcb4bafedbf932c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.0) –
+Lawrence Berkeley National Laboratory
+November, 2010
+August, 2011</pre><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><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
+dynamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><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><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zitersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#zitersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="zitersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="zitersol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="zitersol1_8c.html#a4e1543e740b505ad649e15bddd2c60ca" title="zmatvec_mult" alt="" coords="144,107,248,133"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="520,56,603,83"/><area shape="rect" id="node4" href="zitersol1_8c.html#ae970280d13c1a6f41e71834f00776082" title="zpsolve" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4e1543e740b505ad649e15bddd2c60ca"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zitersol1_8c_a4e1543e740b505ad649e15bddd2c60ca_cgraph.png" border="0" usemap="#zitersol1_8c_a4e1543e740b505ad649e15bddd2c60ca_cgraph" alt=""/></div>
+<map name="zitersol1_8c_a4e1543e740b505ad649e15bddd2c60ca_cgraph" id="zitersol1_8c_a4e1543e740b505ad649e15bddd2c60ca_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="288,5,371,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ae970280d13c1a6f41e71834f00776082"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zitersol1_8c_ae970280d13c1a6f41e71834f00776082_cgraph.png" border="0" usemap="#zitersol1_8c_ae970280d13c1a6f41e71834f00776082_cgraph" alt=""/></div>
+<map name="zitersol1_8c_ae970280d13c1a6f41e71834f00776082_cgraph" id="zitersol1_8c_ae970280d13c1a6f41e71834f00776082_cgraph">
+<area shape="rect" id="node2" href="ilu__zcopy__to__ucol_8c.html#aad105755c4a253c2d6dbce95720abb48" title="zcopy_" alt="" coords="120,521,184,547"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a1b74304cd437572bbec487bc29422a90" title="zgstrs" alt="" coords="300,1559,359,1586"/><area shape="rect" id="node20" href="slu__zdefs_8h.html#a20ea53b36265e019d754ffb9bd2b4bd0" title="zgsisx" alt="" coords="122,571,182,598"/><area shape="rect" id="node4" href="zgstrs_8c.html#aafcbead526e1e [...]
+</div>
+</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ad42e5c3013507184841cdfee652a0c18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* GLOBAL_A</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af1beb2a8fb47df4eb505addfef02814c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_A_ORIG</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac5dce1561e620f6a6f6b6f17d82df4e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double * GLOBAL_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a869338b25a186a486edd0cf1850a7fbb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* GLOBAL_EQUED</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f5cf27b325ef2874c953290f74c9d0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_L</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19718c440adb41fbebcb4bafedbf932c"></a>
+<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>* GLOBAL_MEM_USAGE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a64b516645b16ef03c6fd0d692e6eb277"></a>
+<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>* GLOBAL_OPTIONS</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afbcb1904a71d92b04c1aef1cede6c4b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GLOBAL_PERM_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a42ee721355f1c852f770661834be93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int * GLOBAL_PERM_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8cb83de814c7fbf89011ba08bb602ce0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* GLOBAL_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a96a062252c26544370e8feae987c6d16"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* GLOBAL_STAT</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a000ad5c2198e4309802b4478ed08a98c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zitersol_8c.html b/SuperLU_5.2.0/DOC/html/zitersol_8c.html
new file mode 100644
index 0000000..510635a
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zitersol_8c.html
@@ -0,0 +1,371 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/zitersol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">zitersol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Example #1 showing how to use ILU to precondition GMRES.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zitersol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zitersol_8c__incl.png" border="0" usemap="#EXAMPLE_2zitersol_8c" alt=""/></div>
+<map name="EXAMPLE_2zitersol_8c" id="EXAMPLE_2zitersol_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae970280d13c1a6f41e71834f00776082"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#ae970280d13c1a6f41e71834f00776082">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 class="separator:ae970280d13c1a6f41e71834f00776082"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4e1543e740b505ad649e15bddd2c60ca"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#a4e1543e740b505ad649e15bddd2c60ca">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="structdoubl [...]
+<tr class="separator:a4e1543e740b505ad649e15bddd2c60ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a64b516645b16ef03c6fd0d692e6eb277"><td class="memItemLeft" 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#a64b516645b16ef03c6fd0d692e6eb277">GLOBAL_OPTIONS</a></td></tr>
+<tr class="separator:a64b516645b16ef03c6fd0d692e6eb277"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8cb83de814c7fbf89011ba08bb602ce0"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#a8cb83de814c7fbf89011ba08bb602ce0">GLOBAL_R</a></td></tr>
+<tr class="separator:a8cb83de814c7fbf89011ba08bb602ce0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5dce1561e620f6a6f6b6f17d82df4e8"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#ac5dce1561e620f6a6f6b6f17d82df4e8">GLOBAL_C</a></td></tr>
+<tr class="separator:ac5dce1561e620f6a6f6b6f17d82df4e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#afbcb1904a71d92b04c1aef1cede6c4b1">GLOBAL_PERM_C</a></td></tr>
+<tr class="separator:afbcb1904a71d92b04c1aef1cede6c4b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a42ee721355f1c852f770661834be93"><td class="memItemLeft" align="right" valign="top">int * </td><td class="memItemRight" valign="bottom"><a class="el" href="zitersol_8c.html#a5a42ee721355f1c852f770661834be93">GLOBAL_PERM_R</a></td></tr>
+<tr class="separator:a5a42ee721355f1c852f770661834be93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad42e5c3013507184841cdfee652a0c18"><td class="memItemLeft" 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#ad42e5c3013507184841cdfee652a0c18">GLOBAL_A</a></td></tr>
+<tr class="separator:ad42e5c3013507184841cdfee652a0c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memItemLeft" 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#a0f5cf27b325ef2874c953290f74c9d0a">GLOBAL_L</a></td></tr>
+<tr class="separator:a0f5cf27b325ef2874c953290f74c9d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a000ad5c2198e4309802b4478ed08a98c"><td class="memItemLeft" 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#a000ad5c2198e4309802b4478ed08a98c">GLOBAL_U</a></td></tr>
+<tr class="separator:a000ad5c2198e4309802b4478ed08a98c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a96a062252c26544370e8feae987c6d16"><td class="memItemLeft" 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#a96a062252c26544370e8feae987c6d16">GLOBAL_STAT</a></td></tr>
+<tr class="separator:a96a062252c26544370e8feae987c6d16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a19718c440adb41fbebcb4bafedbf932c"><td class="memItemLeft" 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#a19718c440adb41fbebcb4bafedbf932c">GLOBAL_MEM_USAGE</a></td></tr>
+<tr class="separator:a19718c440adb41fbebcb4bafedbf932c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.0) –
+Lawrence Berkeley National Laboratory
+November, 2010
+August, 2011</pre><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><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
+dynamically. On return, A is overwritten as A1 = Dr*A*Dc.</pre><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><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zitersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#zitersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="zitersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="zitersol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="zitersol_8c.html#a4e1543e740b505ad649e15bddd2c60ca" title="zmatvec_mult" alt="" coords="144,73,248,99"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="520,73,603,99"/><area shape="rect" id="node4" href="zitersol_8c.html#ae970280d13c1a6f41e71834f00776082" title="zpsolve" alt="" coo [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4e1543e740b505ad649e15bddd2c60ca"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zitersol_8c_a4e1543e740b505ad649e15bddd2c60ca_cgraph.png" border="0" usemap="#zitersol_8c_a4e1543e740b505ad649e15bddd2c60ca_cgraph" alt=""/></div>
+<map name="zitersol_8c_a4e1543e740b505ad649e15bddd2c60ca_cgraph" id="zitersol_8c_a4e1543e740b505ad649e15bddd2c60ca_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="288,5,371,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="ae970280d13c1a6f41e71834f00776082"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zitersol_8c_ae970280d13c1a6f41e71834f00776082_cgraph.png" border="0" usemap="#zitersol_8c_ae970280d13c1a6f41e71834f00776082_cgraph" alt=""/></div>
+<map name="zitersol_8c_ae970280d13c1a6f41e71834f00776082_cgraph" id="zitersol_8c_ae970280d13c1a6f41e71834f00776082_cgraph">
+<area shape="rect" id="node2" href="ilu__dcopy__to__ucol_8c.html#a24a0d368c78074384922e9d10b43f820" title="dcopy_" alt="" coords="120,521,184,547"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a1b74304cd437572bbec487bc29422a90" title="zgstrs" alt="" coords="300,1559,359,1586"/><area shape="rect" id="node20" href="slu__zdefs_8h.html#a20ea53b36265e019d754ffb9bd2b4bd0" title="zgsisx" alt="" coords="122,571,182,598"/><area shape="rect" id="node4" href="zgstrs_8c.html#aafcbead526e1e [...]
+</div>
+</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ad42e5c3013507184841cdfee652a0c18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a>* GLOBAL_A</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac5dce1561e620f6a6f6b6f17d82df4e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double * GLOBAL_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0f5cf27b325ef2874c953290f74c9d0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_L</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19718c440adb41fbebcb4bafedbf932c"></a>
+<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>* GLOBAL_MEM_USAGE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a64b516645b16ef03c6fd0d692e6eb277"></a>
+<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>* GLOBAL_OPTIONS</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afbcb1904a71d92b04c1aef1cede6c4b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* GLOBAL_PERM_C</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5a42ee721355f1c852f770661834be93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int * GLOBAL_PERM_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8cb83de814c7fbf89011ba08bb602ce0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* GLOBAL_R</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a96a062252c26544370e8feae987c6d16"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperLUStat__t.html">SuperLUStat_t</a>* GLOBAL_STAT</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a000ad5c2198e4309802b4478ed08a98c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structSuperMatrix.html">SuperMatrix</a> * GLOBAL_U</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zlacon_8c.html b/SuperLU_5.2.0/DOC/html/zlacon_8c.html
new file mode 100644
index 0000000..a8812b0
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zlacon_8c.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zlacon.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zlacon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Estimates the 1-norm.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zlacon.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlacon_8c__incl.png" border="0" usemap="#SRC_2zlacon_8c" alt=""/></div>
+<map name="SRC_2zlacon_8c" id="SRC_2zlacon_8c">
+<area shape="rect" id="node3" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="92,80,199,107"/><area shape="rect" id="node4" href="slu__dcomplex_8h.html" title="Header file for complex operations. " alt="" coords="223,80,336,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a529146a8706bcc149050e70f7e56da07"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlacon_8c.html#a529146a8706bcc149050e70f7e56da07">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>
+<tr class="separator:a529146a8706bcc149050e70f7e56da07"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a529146a8706bcc149050e70f7e56da07"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> ZLACON estimates the 1-norm of a square matrix A.
+ Reverse communication is used for evaluating matrix-vector products.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre> N (input) INT
+ The order of the matrix. N >= 1.</pre><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><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><pre> EST (output) DOUBLE PRECISION
+ An estimate (a lower bound) for norm(A).</pre><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><pre> Further Details
+ ======= =======</pre><pre> Contributed by Nick Higham, University of Manchester.
+ Originally named CONEST, dated March 16, 1988.</pre><pre> Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of
+ a real or complex matrix, with applications to condition estimation",
+</p>
+<h1>ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.
+</h1>
+</pre><pre>
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlacon_8c_a529146a8706bcc149050e70f7e56da07_cgraph.png" border="0" usemap="#zlacon_8c_a529146a8706bcc149050e70f7e56da07_cgraph" alt=""/></div>
+<map name="zlacon_8c_a529146a8706bcc149050e70f7e56da07_cgraph" id="zlacon_8c_a529146a8706bcc149050e70f7e56da07_cgraph">
+<area shape="rect" id="node2" href="izmax1_8c.html#aaf53fd062f8467a96cf58270c87e398a" title="izmax1_slu" alt="" coords="123,5,211,32"/><area shape="rect" id="node3" href="dzsum1_8c.html#af9cbf51b3cf3e66af143acf0ff920944" title="dzsum1_slu" alt="" coords="121,56,213,83"/><area shape="rect" id="node4" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="262,81,319,108"/><area shape="rect" id="node5" href="ilu__zcopy__to__ucol_8c.html [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zlangs_8c.html b/SuperLU_5.2.0/DOC/html/zlangs_8c.html
new file mode 100644
index 0000000..2b215b2
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zlangs_8c.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zlangs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zlangs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Returns the value of the one norm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zlangs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlangs_8c__incl.png" border="0" usemap="#SRC_2zlangs_8c" alt=""/></div>
+<map name="SRC_2zlangs_8c" id="SRC_2zlangs_8c">
+<area shape="rect" id="node3" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a37d1ec3ddab88e8c46872c5795ea5ada"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="zlangs_8c.html#a37d1ec3ddab88e8c46872c5795ea5ada">zlangs</a> (char *norm, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a37d1ec3ddab88e8c46872c5795ea5ada"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from lapack routine ZLANGE
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a37d1ec3ddab88e8c46872c5795ea5ada"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre><h1>Description
+</h1>
+</pre><pre></pre><pre> ZLANGE returns the value</pre><pre> ZLANGE = ( max(<a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A(i,j))</a>), 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><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(<a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A(i,j))</a>) is not a matrix norm.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlangs_8c_a37d1ec3ddab88e8c46872c5795ea5ada_cgraph.png" border="0" usemap="#zlangs_8c_a37d1ec3ddab88e8c46872c5795ea5ada_cgraph" alt=""/></div>
+<map name="zlangs_8c_a37d1ec3ddab88e8c46872c5795ea5ada_cgraph" id="zlangs_8c_a37d1ec3ddab88e8c46872c5795ea5ada_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="115,5,173,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zlaqgs_8c.html b/SuperLU_5.2.0/DOC/html/zlaqgs_8c.html
new file mode 100644
index 0000000..b806407
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zlaqgs_8c.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zlaqgs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zlaqgs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Equlibrates a general sprase matrix.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zlaqgs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlaqgs_8c__incl.png" border="0" usemap="#SRC_2zlaqgs_8c" alt=""/></div>
+<map name="SRC_2zlaqgs_8c" id="SRC_2zlaqgs_8c">
+<area shape="rect" id="node3" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0656018abfc9fa2821827415f5d5ea57"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zlaqgs_8c.html#a0656018abfc9fa2821827415f5d5ea57">THRESH</a> (0.1)</td></tr>
+<tr class="separator:a0656018abfc9fa2821827415f5d5ea57"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a46f8eefc33139578d9b4f6d1444a993c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zlaqgs_8c.html#a46f8eefc33139578d9b4f6d1444a993c">zlaqgs</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, double *r, double *c, double rowcnd, double colcnd, double amax, char *equed)</td></tr>
+<tr class="separator:a46f8eefc33139578d9b4f6d1444a993c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Modified from LAPACK routine ZLAQGE
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a0656018abfc9fa2821827415f5d5ea57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define THRESH (0.1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a46f8eefc33139578d9b4f6d1444a993c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> ZLAQGS equilibrates a general sparse M by N matrix A using the row and
+ scaling factors in the vectors R and C.</pre><pre> See <a class="el" href="supermatrix_8h.html" title="Defines matrix types. ">supermatrix.h</a> for the definition of '<a class="el" href="structSuperMatrix.html">SuperMatrix</a>' structure.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre> R (input) double*, dimension (A->nrow)
+ The row scale factors for A.</pre><pre> C (input) double*, dimension (A->ncol)
+ The column scale factors for A.</pre><pre> ROWCND (input) double
+ Ratio of the smallest R(i) to the largest R(i).</pre><pre> COLCND (input) double
+ Ratio of the smallest C(i) to the largest C(i).</pre><pre> AMAX (input) double
+ Absolute value of largest matrix entry.</pre><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><pre><h1>Internal Parameters
+</h1>
+</pre><pre></pre><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><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.
+</p>
+<hr/>
+
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlaqgs_8c_a46f8eefc33139578d9b4f6d1444a993c_cgraph.png" border="0" usemap="#zlaqgs_8c_a46f8eefc33139578d9b4f6d1444a993c_cgraph" alt=""/></div>
+<map name="zlaqgs_8c_a46f8eefc33139578d9b4f6d1444a993c_cgraph" id="zlaqgs_8c_a46f8eefc33139578d9b4f6d1444a993c_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="115,5,176,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zldperm_8c.html b/SuperLU_5.2.0/DOC/html/zldperm_8c.html
new file mode 100644
index 0000000..ffee764
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zldperm_8c.html
@@ -0,0 +1,324 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zldperm.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zldperm.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Finds a row permutation so that the matrix has large entries on the diagonal.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zldperm.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zldperm_8c__incl.png" border="0" usemap="#SRC_2zldperm_8c" alt=""/></div>
+<map name="SRC_2zldperm_8c" id="SRC_2zldperm_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1e6fb0c8dd36aef071ef165136ece781"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="zldperm_8c.html#a1e6fb0c8dd36aef071ef165136ece781">mc64id_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *)</td></tr>
+<tr class="separator:a1e6fb0c8dd36aef071ef165136ece781"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1bf33c16a135cdc671242aed1705e1cd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="zldperm_8c.html#a1bf33c16a135cdc671242aed1705e1cd">mc64ad_</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> *, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</ [...]
+<tr class="separator:a1bf33c16a135cdc671242aed1705e1cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6eac8c5b79a07db190086129b0a02901"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zldperm_8c.html#a6eac8c5b79a07db190086129b0a02901">zldperm</a> (<a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> job, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> n, <a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623 [...]
+<tr class="separator:a6eac8c5b79a07db190086129b0a02901"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1bf33c16a135cdc671242aed1705e1cd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64ad_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> </td>
+ <td class="paramname">[] </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1e6fb0c8dd36aef071ef165136ece781"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> mc64id_ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="slu__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">int_t</a> * </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6eac8c5b79a07db190086129b0a02901"></a>
+<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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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__cdefs_8h.html#ab6fd6105e64ed14a0c9281326f05e623">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> ZLDPERM finds a row permutation so that the matrix has large
+ entries on the diagonal.</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><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><pre>n (input) int
+ The order of the matrix.</pre><pre>nnz (input) int
+ The number of nonzeros in the matrix.</pre><pre>adjncy (input) int*, of size nnz
+ The adjacency structure of the matrix, which contains the row
+ indices of the nonzeros.</pre><pre>colptr (input) int*, of size n+1
+ The pointers to the beginning of each column in ADJNCY.</pre><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><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><pre>u (output) double*, of size n
+ If job = 5, the natural logarithms of the row scaling factors.</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zldperm_8c_a6eac8c5b79a07db190086129b0a02901_cgraph.png" border="0" usemap="#zldperm_8c_a6eac8c5b79a07db190086129b0a02901_cgraph" alt=""/></div>
+<map name="zldperm_8c_a6eac8c5b79a07db190086129b0a02901_cgraph" id="zldperm_8c_a6eac8c5b79a07db190086129b0a02901_cgraph">
+<area shape="rect" id="node2" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="137,5,212,32"/><area shape="rect" id="node3" href="slu__util_8h.html#ade363dcb4babb66fa0e5f51bd2e6e42c" title="slu_PrintInt10" alt="" coords="123,56,226,83"/><area shape="rect" id="node4" href="zldperm_8c.html#a1e6fb0c8dd36aef071ef165136ece781" title="mc64id_" alt="" coords="139,107,210,133"/><area shape="rect" id="node5" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zlinsol1_8c.html b/SuperLU_5.2.0/DOC/html/zlinsol1_8c.html
new file mode 100644
index 0000000..a598e71
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zlinsol1_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/zlinsol1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zlinsol1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zlinsol1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsol1_8c__incl.png" border="0" usemap="#EXAMPLE_2zlinsol1_8c" alt=""/></div>
+<map name="EXAMPLE_2zlinsol1_8c" id="EXAMPLE_2zlinsol1_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsol1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#zlinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="zlinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="zlinsol1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,157,263,184"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a354313e251a9d16f6109cd5d266826fb" title="Auxiliary routines. " alt="" coords="162,208,230,235"/><area shape="rect" id="node7" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="804,613,879,640"/><area shape="rect" id=" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zlinsol_8c.html b/SuperLU_5.2.0/DOC/html/zlinsol_8c.html
new file mode 100644
index 0000000..6445dcf
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zlinsol_8c.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/zlinsol.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zlinsol.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zlinsol.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsol_8c__incl.png" border="0" usemap="#EXAMPLE_2zlinsol_8c" alt=""/></div>
+<map name="EXAMPLE_2zlinsol_8c" id="EXAMPLE_2zlinsol_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsol_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#zlinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="zlinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="zlinsol_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,157,263,184"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a354313e251a9d16f6109cd5d266826fb" title="Auxiliary routines. " alt="" coords="162,208,230,235"/><area shape="rect" id="node7" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="804,613,879,640"/><area shape="rect" id=" [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zlinsolx1_8c.html b/SuperLU_5.2.0/DOC/html/zlinsolx1_8c.html
new file mode 100644
index 0000000..c989ae9
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zlinsolx1_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/zlinsolx1.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zlinsolx1.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zlinsolx1.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsolx1_8c__incl.png" border="0" usemap="#EXAMPLE_2zlinsolx1_8c" alt=""/></div>
+<map name="EXAMPLE_2zlinsolx1_8c" id="EXAMPLE_2zlinsolx1_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx1_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a693ba86aac49435e82cf3a57a4412744"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx1_8c.html#a693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d [...]
+<tr class="separator:a693ba86aac49435e82cf3a57a4412744"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#zlinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="zlinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="zlinsolx1_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="zlinsolx1_8c.html#a693ba86aac49435e82cf3a57a4412744" title="parse_command_line" alt="" coords="123,5,269,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,56,263,83"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#a354313e251a9d16f6109cd5d266826fb" title="Auxiliary routines. " alt="" coords="162,385,230,412"/><area shape="rec [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a693ba86aac49435e82cf3a57a4412744"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zlinsolx2_8c.html b/SuperLU_5.2.0/DOC/html/zlinsolx2_8c.html
new file mode 100644
index 0000000..88141f2
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zlinsolx2_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/zlinsolx2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zlinsolx2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zlinsolx2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsolx2_8c__incl.png" border="0" usemap="#EXAMPLE_2zlinsolx2_8c" alt=""/></div>
+<map name="EXAMPLE_2zlinsolx2_8c" id="EXAMPLE_2zlinsolx2_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx2_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a693ba86aac49435e82cf3a57a4412744"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx2_8c.html#a693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d [...]
+<tr class="separator:a693ba86aac49435e82cf3a57a4412744"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#zlinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="zlinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="zlinsolx2_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="zlinsolx2_8c.html#a693ba86aac49435e82cf3a57a4412744" title="parse_command_line" alt="" coords="123,5,269,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,56,263,83"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#a354313e251a9d16f6109cd5d266826fb" title="Auxiliary routines. " alt="" coords="162,284,230,311"/><area shape="rec [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a693ba86aac49435e82cf3a57a4412744"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zlinsolx_8c.html b/SuperLU_5.2.0/DOC/html/zlinsolx_8c.html
new file mode 100644
index 0000000..cc9d5af
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zlinsolx_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: EXAMPLE/zlinsolx.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_2ed5cd83c419d7f3788213bde77ef248.html">EXAMPLE</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zlinsolx.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zlinsolx.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsolx_8c__incl.png" border="0" usemap="#EXAMPLE_2zlinsolx_8c" alt=""/></div>
+<map name="EXAMPLE_2zlinsolx_8c" id="EXAMPLE_2zlinsolx_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx_8c.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a693ba86aac49435e82cf3a57a4412744"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zlinsolx_8c.html#a693ba86aac49435e82cf3a57a4412744">parse_command_line</a> (int argc, char *argv[], int *lwork, double *u, <a class="el" href="superlu__enum__consts_8h.html#ae6553118ce91b9c08f9376941ae1536f">yes_no_t</a> *equil, <a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d6 [...]
+<tr class="separator:a693ba86aac49435e82cf3a57a4412744"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zlinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph.png" border="0" usemap="#zlinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" alt=""/></div>
+<map name="zlinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph" id="zlinsolx_8c_a0ddf1224851353fc92bfbff6f499fa97_cgraph">
+<area shape="rect" id="node2" href="zlinsolx_8c.html#a693ba86aac49435e82cf3a57a4412744" title="parse_command_line" alt="" coords="123,5,269,32"/><area shape="rect" id="node3" href="slu__util_8h.html#a4792687285a879f7955029421ba99795" title="Set the default values for the options argument. " alt="" coords="129,56,263,83"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#a354313e251a9d16f6109cd5d266826fb" title="Auxiliary routines. " alt="" coords="162,385,230,412"/><area shape="rect [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a693ba86aac49435e82cf3a57a4412744"></a>
+<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#ae6553118ce91b9c08f9376941ae1536f">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#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> * </td>
+ <td class="paramname"><em>trans</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:06 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zmemory_8c.html b/SuperLU_5.2.0/DOC/html/zmemory_8c.html
new file mode 100644
index 0000000..19d4338
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zmemory_8c.html
@@ -0,0 +1,1047 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zmemory.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zmemory.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Memory details.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zmemory.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c__incl.png" border="0" usemap="#SRC_2zmemory_8c" alt=""/></div>
+<map name="SRC_2zmemory_8c" id="SRC_2zmemory_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a1ef4d4db4d5e1fe0719416163e0e51ae"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a1ef4d4db4d5e1fe0719416163e0e51ae">StackFull</a>(x) ( x + Glu->stack.used >= Glu->stack.size )</td></tr>
+<tr class="separator:a1ef4d4db4d5e1fe0719416163e0e51ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac11b1c3847a3d397e9675de40782134d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#ac11b1c3847a3d397e9675de40782134d">NotDoubleAlign</a>(addr) ( (intptr_t)addr & 7 )</td></tr>
+<tr class="separator:ac11b1c3847a3d397e9675de40782134d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac8204d321846eb4b23d563eac7e5bfa7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#ac8204d321846eb4b23d563eac7e5bfa7">DoubleAlign</a>(addr) ( ((intptr_t)addr + 7) & ~7L )</td></tr>
+<tr class="separator:ac8204d321846eb4b23d563eac7e5bfa7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a70ca807c578a0c495f7ce5edb0215e2b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a70ca807c578a0c495f7ce5edb0215e2b">TempSpace</a>(m, w)</td></tr>
+<tr class="separator:a70ca807c578a0c495f7ce5edb0215e2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7b2a35bfd2e6c9d03e2a6ccdba9fa847"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a7b2a35bfd2e6c9d03e2a6ccdba9fa847">Reduce</a>(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */</td></tr>
+<tr class="separator:a7b2a35bfd2e6c9d03e2a6ccdba9fa847"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a67833ee9526cec0b31d0f26e527b97df"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a67833ee9526cec0b31d0f26e527b97df">zexpand</a> (int *prev_len,<a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a> type,int len_to_copy,int keep_prev,<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a67833ee9526cec0b31d0f26e527b97df"><td class="mdescLeft"> </td><td class="mdescRight">Expand the existing storage to accommodate more fill-ins. <a href="#a67833ee9526cec0b31d0f26e527b97df">More...</a><br/></td></tr>
+<tr class="separator:a67833ee9526cec0b31d0f26e527b97df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a882c0544ebe2e000b982820ac583c180"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a882c0544ebe2e000b982820ac583c180">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 class="memdesc:a882c0544ebe2e000b982820ac583c180"><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="#a882c0544ebe2e000b982820ac583c180">More...</a><br/></td></tr>
+<tr class="separator:a882c0544ebe2e000b982820ac583c180"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa0ef433984e57ac0dacc29c5e3b53ecf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#aa0ef433984e57ac0dacc29c5e3b53ecf">copy_mem_doublecomplex</a> (int, void *, void *)</td></tr>
+<tr class="separator:aa0ef433984e57ac0dacc29c5e3b53ecf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a607a863b6fcdf1adb1931dd4c8277ee0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a607a863b6fcdf1adb1931dd4c8277ee0">zStackCompress</a> (<a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a607a863b6fcdf1adb1931dd4c8277ee0"><td class="mdescLeft"> </td><td class="mdescRight">Compress the work[] array to remove fragmentation. <a href="#a607a863b6fcdf1adb1931dd4c8277ee0">More...</a><br/></td></tr>
+<tr class="separator:a607a863b6fcdf1adb1931dd4c8277ee0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0edfb761a3a551bce967037b3e1aa9e2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a0edfb761a3a551bce967037b3e1aa9e2">zSetupSpace</a> (void *work, int lwork, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:a0edfb761a3a551bce967037b3e1aa9e2"><td class="mdescLeft"> </td><td class="mdescRight">Setup the memory model to be used for factorization. <a href="#a0edfb761a3a551bce967037b3e1aa9e2">More...</a><br/></td></tr>
+<tr class="separator:a0edfb761a3a551bce967037b3e1aa9e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0546ac846872bb77841c8502590dc3e2"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a0546ac846872bb77841c8502590dc3e2">zuser_malloc</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:a0546ac846872bb77841c8502590dc3e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9568d77c3e1f50a9b000f50a9941300a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a9568d77c3e1f50a9b000f50a9941300a">zuser_free</a> (int, int, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *)</td></tr>
+<tr class="separator:a9568d77c3e1f50a9b000f50a9941300a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab59eea34474da95fb3dc125400a1287e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#ab59eea34474da95fb3dc125400a1287e">copy_mem_int</a> (int, void *, void *)</td></tr>
+<tr class="separator:ab59eea34474da95fb3dc125400a1287e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4c226087c09a94ff40b92b14fa46fc53"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a4c226087c09a94ff40b92b14fa46fc53">user_bcopy</a> (char *, char *, int)</td></tr>
+<tr class="separator:a4c226087c09a94ff40b92b14fa46fc53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a286bf5eff2472576ba5fafe9d1daf835"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a286bf5eff2472576ba5fafe9d1daf835">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 class="separator:a286bf5eff2472576ba5fafe9d1daf835"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adcf560b50ada29ab0807eb50f16c434d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#adcf560b50ada29ab0807eb50f16c434d">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 class="separator:adcf560b50ada29ab0807eb50f16c434d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2401dcedab9db9b72801239bcb0dd85d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a2401dcedab9db9b72801239bcb0dd85d">zLUMemInit</a> (<a class="el" href="superlu__enum__consts_8h.html#ac785c8235480e5cfef9848d89c047c0a">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> * [...]
+<tr class="memdesc:a2401dcedab9db9b72801239bcb0dd85d"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for the data structures common to all factor routines. <a href="#a2401dcedab9db9b72801239bcb0dd85d">More...</a><br/></td></tr>
+<tr class="separator:a2401dcedab9db9b72801239bcb0dd85d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2d983454dded23484688350acd60d453"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a2d983454dded23484688350acd60d453">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)</ [...]
+<tr class="memdesc:a2d983454dded23484688350acd60d453"><td class="mdescLeft"> </td><td class="mdescRight">Set up pointers for real working arrays. <a href="#a2d983454dded23484688350acd60d453">More...</a><br/></td></tr>
+<tr class="separator:a2d983454dded23484688350acd60d453"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a077a37f8ac3dd3f11b78b70ead445a4a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a077a37f8ac3dd3f11b78b70ead445a4a">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 class="memdesc:a077a37f8ac3dd3f11b78b70ead445a4a"><td class="mdescLeft"> </td><td class="mdescRight">Free the working storage used by factor routines. <a href="#a077a37f8ac3dd3f11b78b70ead445a4a">More...</a><br/></td></tr>
+<tr class="separator:a077a37f8ac3dd3f11b78b70ead445a4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af10c27072006d8936e0b135a0d0e03ee"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#af10c27072006d8936e0b135a0d0e03ee">zLUMemXpand</a> (int jcol, int next, <a class="el" href="superlu__enum__consts_8h.html#abd31f838aefffa46191d0d7dc36a96b2">MemType</a> mem_type, int *maxlen, <a class="el" href="structGlobalLU__t.html">GlobalLU_t</a> *Glu)</td></tr>
+<tr class="memdesc:af10c27072006d8936e0b135a0d0e03ee"><td class="mdescLeft"> </td><td class="mdescRight">Expand the data structures for L and U during the factorization. <a href="#af10c27072006d8936e0b135a0d0e03ee">More...</a><br/></td></tr>
+<tr class="separator:af10c27072006d8936e0b135a0d0e03ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a46bbbd9396593820fd01a6d3dea08d31"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a46bbbd9396593820fd01a6d3dea08d31">zallocateA</a> (int n, int nnz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **a, int **asub, int **xa)</td></tr>
+<tr class="memdesc:a46bbbd9396593820fd01a6d3dea08d31"><td class="mdescLeft"> </td><td class="mdescRight">Allocate storage for original matrix A. <a href="#a46bbbd9396593820fd01a6d3dea08d31">More...</a><br/></td></tr>
+<tr class="separator:a46bbbd9396593820fd01a6d3dea08d31"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad681359ed37ac809cc0e456e05655823"><td class="memItemLeft" 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#ad681359ed37ac809cc0e456e05655823">doublecomplexMalloc</a> (int n)</td></tr>
+<tr class="separator:ad681359ed37ac809cc0e456e05655823"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c839d769dd079aab4bf852533d96933"><td class="memItemLeft" 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#a7c839d769dd079aab4bf852533d96933">doublecomplexCalloc</a> (int n)</td></tr>
+<tr class="separator:a7c839d769dd079aab4bf852533d96933"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a17416eb78c42063624b6859d9f88820b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zmemory_8c.html#a17416eb78c42063624b6859d9f88820b">zmemory_usage</a> (const int nzlmax, const int nzumax, const int nzlumax, const int n)</td></tr>
+<tr class="separator:a17416eb78c42063624b6859d9f88820b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ac8204d321846eb4b23d563eac7e5bfa7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DoubleAlign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> ( ((intptr_t)addr + 7) & ~7L )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac11b1c3847a3d397e9675de40782134d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NotDoubleAlign</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">addr</td><td>)</td>
+ <td> ( (intptr_t)addr & 7 )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7b2a35bfd2e6c9d03e2a6ccdba9fa847"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define Reduce</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">alpha</td><td>)</td>
+ <td> ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1ef4d4db4d5e1fe0719416163e0e51ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define StackFull</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x</td><td>)</td>
+ <td> ( x + Glu->stack.used >= Glu->stack.size )</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a70ca807c578a0c495f7ce5edb0215e2b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define TempSpace</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">m, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">w </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">( (2*w + 4 + <a class="code" href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a>) * m * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) + \</div>
+<div class="line"> (w + 1) * m * <span class="keyword">sizeof</span>(<a class="code" href="structdoublecomplex.html">doublecomplex</a>) )</div>
+<div class="ttc" id="slu__util_8h_html_a9b7b2a5116ee487722b0967317ab6360"><div class="ttname"><a href="slu__util_8h.html#a9b7b2a5116ee487722b0967317ab6360">NO_MARKER</a></div><div class="ttdeci">#define NO_MARKER</div><div class="ttdef"><b>Definition:</b> slu_util.h:41</div></div>
+<div class="ttc" id="structdoublecomplex_html"><div class="ttname"><a href="structdoublecomplex.html">doublecomplex</a></div><div class="ttdef"><b>Definition:</b> slu_dcomplex.h:31</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="aa0ef433984e57ac0dacc29c5e3b53ecf"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab59eea34474da95fb3dc125400a1287e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7c839d769dd079aab4bf852533d96933"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad681359ed37ac809cc0e456e05655823"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adcf560b50ada29ab0807eb50f16c434d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c_adcf560b50ada29ab0807eb50f16c434d_cgraph.png" border="0" usemap="#zmemory_8c_adcf560b50ada29ab0807eb50f16c434d_cgraph" alt=""/></div>
+<map name="zmemory_8c_adcf560b50ada29ab0807eb50f16c434d_cgraph" id="zmemory_8c_adcf560b50ada29ab0807eb50f16c434d_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="176,5,243,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="291,5,373,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c226087c09a94ff40b92b14fa46fc53"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a46bbbd9396593820fd01a6d3dea08d31"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c_a46bbbd9396593820fd01a6d3dea08d31_cgraph.png" border="0" usemap="#zmemory_8c_a46bbbd9396593820fd01a6d3dea08d31_cgraph" alt=""/></div>
+<map name="zmemory_8c_a46bbbd9396593820fd01a6d3dea08d31_cgraph" id="zmemory_8c_a46bbbd9396593820fd01a6d3dea08d31_cgraph">
+<area shape="rect" id="node2" href="zmemory_8c.html#ad681359ed37ac809cc0e456e05655823" title="doublecomplexMalloc" alt="" coords="136,5,283,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="172,56,247,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a67833ee9526cec0b31d0f26e527b97df"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c_a67833ee9526cec0b31d0f26e527b97df_cgraph.png" border="0" usemap="#zmemory_8c_a67833ee9526cec0b31d0f26e527b97df_cgraph" alt=""/></div>
+<map name="zmemory_8c_a67833ee9526cec0b31d0f26e527b97df_cgraph" id="zmemory_8c_a67833ee9526cec0b31d0f26e527b97df_cgraph">
+<area shape="rect" id="node2" href="zmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="163,5,269,32"/><area shape="rect" id="node3" href="zmemory_8c.html#aa0ef433984e57ac0dacc29c5e3b53ecf" title="copy_mem_doublecomplex" alt="" coords="126,56,306,83"/><area shape="rect" id="node4" href="zmemory_8c.html#a0546ac846872bb77841c8502590dc3e2" title="zuser_malloc" alt="" coords="167,107,265,133"/><area shape="rect" id="node5" href="zmemory_8c.html#a4c226087c09 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a2401dcedab9db9b72801239bcb0dd85d"></a>
+<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#ac785c8235480e5cfef9848d89c047c0a">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c_a2401dcedab9db9b72801239bcb0dd85d_cgraph.png" border="0" usemap="#zmemory_8c_a2401dcedab9db9b72801239bcb0dd85d_cgraph" alt=""/></div>
+<map name="zmemory_8c_a2401dcedab9db9b72801239bcb0dd85d_cgraph" id="zmemory_8c_a2401dcedab9db9b72801239bcb0dd85d_cgraph">
+<area shape="rect" id="node2" href="zmemory_8c.html#a0edfb761a3a551bce967037b3e1aa9e2" title="Setup the memory model to be used for factorization. " alt="" coords="157,5,257,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="169,56,244,83"/><area shape="rect" id="node4" href="zmemory_8c.html#a0546ac846872bb77841c8502590dc3e2" title="zuser_malloc" alt="" coords="356,183,455,209"/><area shape="rect" id="node5" href="z [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="af10c27072006d8936e0b135a0d0e03ee"></a>
+<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#abd31f838aefffa46191d0d7dc36a96b2">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+Return value: 0 - successful return
+ > 0 - number of bytes allocated when run out of space
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c_af10c27072006d8936e0b135a0d0e03ee_cgraph.png" border="0" usemap="#zmemory_8c_af10c27072006d8936e0b135a0d0e03ee_cgraph" alt=""/></div>
+<map name="zmemory_8c_af10c27072006d8936e0b135a0d0e03ee_cgraph" id="zmemory_8c_af10c27072006d8936e0b135a0d0e03ee_cgraph">
+<area shape="rect" id="node2" href="zmemory_8c.html#a67833ee9526cec0b31d0f26e527b97df" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="190,81,261,108"/><area shape="rect" id="node7" href="zmemory_8c.html#a17416eb78c42063624b6859d9f88820b" title="zmemory_usage" alt="" coords="166,132,285,159"/><area shape="rect" id="node3" href="zmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="371,5,477,32"/><area shape="rect" id= [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a077a37f8ac3dd3f11b78b70ead445a4a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a882c0544ebe2e000b982820ac583c180"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c_a882c0544ebe2e000b982820ac583c180_cgraph.png" border="0" usemap="#zmemory_8c_a882c0544ebe2e000b982820ac583c180_cgraph" alt=""/></div>
+<map name="zmemory_8c_a882c0544ebe2e000b982820ac583c180_cgraph" id="zmemory_8c_a882c0544ebe2e000b982820ac583c180_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="165,5,232,32"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="162,56,235,83"/><area shape="rect" id="node5" href="zmemory_8c.html#a0546ac846872bb77841c8502590dc3e2" title="zuser_malloc" alt="" coords="149,107,248,133"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55d [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a17416eb78c42063624b6859d9f88820b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a286bf5eff2472576ba5fafe9d1daf835"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+mem_usage consists of the following fields:</p>
+<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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c_a286bf5eff2472576ba5fafe9d1daf835_cgraph.png" border="0" usemap="#zmemory_8c_a286bf5eff2472576ba5fafe9d1daf835_cgraph" alt=""/></div>
+<map name="zmemory_8c_a286bf5eff2472576ba5fafe9d1daf835_cgraph" id="zmemory_8c_a286bf5eff2472576ba5fafe9d1daf835_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="269,5,352,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a2d983454dded23484688350acd60d453"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c_a2d983454dded23484688350acd60d453_cgraph.png" border="0" usemap="#zmemory_8c_a2d983454dded23484688350acd60d453_cgraph" alt=""/></div>
+<map name="zmemory_8c_a2d983454dded23484688350acd60d453_cgraph" id="zmemory_8c_a2d983454dded23484688350acd60d453_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="144,5,211,32"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#aff0de872dc60f87b89ae93a8f93a7a70" title="Fills a doublecomplex precision array with a given value. " alt="" coords="156,56,199,83"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="259,5,341,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a0edfb761a3a551bce967037b3e1aa9e2"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>lwork = 0: use system malloc; lwork > 0: use user-supplied work[] space. </p>
+
+</div>
+</div>
+<a class="anchor" id="a607a863b6fcdf1adb1931dd4c8277ee0"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmemory_8c_a607a863b6fcdf1adb1931dd4c8277ee0_cgraph.png" border="0" usemap="#zmemory_8c_a607a863b6fcdf1adb1931dd4c8277ee0_cgraph" alt=""/></div>
+<map name="zmemory_8c_a607a863b6fcdf1adb1931dd4c8277ee0_cgraph" id="zmemory_8c_a607a863b6fcdf1adb1931dd4c8277ee0_cgraph">
+<area shape="rect" id="node2" href="zmemory_8c.html#aa0ef433984e57ac0dacc29c5e3b53ecf" title="copy_mem_doublecomplex" alt="" coords="177,5,357,32"/><area shape="rect" id="node3" href="zmemory_8c.html#ab59eea34474da95fb3dc125400a1287e" title="copy_mem_int" alt="" coords="213,56,320,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a9568d77c3e1f50a9b000f50a9941300a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0546ac846872bb77841c8502590dc3e2"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zmyblas2_8c.html b/SuperLU_5.2.0/DOC/html/zmyblas2_8c.html
new file mode 100644
index 0000000..76084e5
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zmyblas2_8c.html
@@ -0,0 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zmyblas2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zmyblas2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Level 2 Blas operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__dcomplex_8h_source.html">slu_dcomplex.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zmyblas2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmyblas2_8c__incl.png" border="0" usemap="#SRC_2zmyblas2_8c" alt=""/></div>
+<map name="SRC_2zmyblas2_8c" id="SRC_2zmyblas2_8c">
+<area shape="rect" id="node2" href="slu__dcomplex_8h.html" title="Header file for complex operations. " alt="" coords="10,80,123,107"/></map>
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3aa665de6b6103328267f26f160447ae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmyblas2_8c.html#a3aa665de6b6103328267f26f160447ae">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 class="memdesc:a3aa665de6b6103328267f26f160447ae"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#a3aa665de6b6103328267f26f160447ae">More...</a><br/></td></tr>
+<tr class="separator:a3aa665de6b6103328267f26f160447ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0b0f90cd6fb38a0827eb67b22c8523cb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmyblas2_8c.html#a0b0f90cd6fb38a0827eb67b22c8523cb">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 class="memdesc:a0b0f90cd6fb38a0827eb67b22c8523cb"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#a0b0f90cd6fb38a0827eb67b22c8523cb">More...</a><br/></td></tr>
+<tr class="separator:a0b0f90cd6fb38a0827eb67b22c8523cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1eac084fbf4960e20cf730d091699c8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zmyblas2_8c.html#ab1eac084fbf4960e20cf730d091699c8">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 class="memdesc:ab1eac084fbf4960e20cf730d091699c8"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#ab1eac084fbf4960e20cf730d091699c8">More...</a><br/></td></tr>
+<tr class="separator:ab1eac084fbf4960e20cf730d091699c8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<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> Purpose: Level 2 BLAS operations: solves and matvec, written in C. Note: This is only used when the system lacks an efficient BLAS library. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a3aa665de6b6103328267f26f160447ae"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab1eac084fbf4960e20cf730d091699c8"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0b0f90cd6fb38a0827eb67b22c8523cb"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zmyblas2_8c_a0b0f90cd6fb38a0827eb67b22c8523cb_cgraph.png" border="0" usemap="#zmyblas2_8c_a0b0f90cd6fb38a0827eb67b22c8523cb_cgraph" alt=""/></div>
+<map name="zmyblas2_8c_a0b0f90cd6fb38a0827eb67b22c8523cb_cgraph" id="zmyblas2_8c_a0b0f90cd6fb38a0827eb67b22c8523cb_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#a4cfde2671a83833a15c5b48517781db0" title="Complex Division c = a/b. " alt="" coords="120,5,173,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zpanel__bmod_8c.html b/SuperLU_5.2.0/DOC/html/zpanel__bmod_8c.html
new file mode 100644
index 0000000..ffb661b
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zpanel__bmod_8c.html
@@ -0,0 +1,302 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zpanel_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zpanel_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numeric block updates.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zpanel_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zpanel__bmod_8c__incl.png" border="0" usemap="#SRC_2zpanel__bmod_8c" alt=""/></div>
+<map name="SRC_2zpanel__bmod_8c" id="SRC_2zpanel__bmod_8c">
+<area shape="rect" id="node4" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="414,80,503,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="341,155,448,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="472,155,573,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:afb6f65890b5348dc1692d01b087be35d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__bmod_8c.html#afb6f65890b5348dc1692d01b087be35d">zlsolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:afb6f65890b5348dc1692d01b087be35d"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#afb6f65890b5348dc1692d01b087be35d">More...</a><br/></td></tr>
+<tr class="separator:afb6f65890b5348dc1692d01b087be35d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1165292a4e2a6c282638868bd503fb7a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__bmod_8c.html#a1165292a4e2a6c282638868bd503fb7a">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 class="memdesc:a1165292a4e2a6c282638868bd503fb7a"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a1165292a4e2a6c282638868bd503fb7a">More...</a><br/></td></tr>
+<tr class="separator:a1165292a4e2a6c282638868bd503fb7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8673fc0ac301b4cf35788245fe0cdbcd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__bmod_8c.html#a8673fc0ac301b4cf35788245fe0cdbcd">zcheck_tempv</a> ()</td></tr>
+<tr class="separator:a8673fc0ac301b4cf35788245fe0cdbcd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6c1aae0b0c84fef3b9feb5362bf2e047"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__bmod_8c.html#a6c1aae0b0c84fef3b9feb5362bf2e047">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=" [...]
+<tr class="separator:a6c1aae0b0c84fef3b9feb5362bf2e047"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a8673fc0ac301b4cf35788245fe0cdbcd"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afb6f65890b5348dc1692d01b087be35d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1165292a4e2a6c282638868bd503fb7a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6c1aae0b0c84fef3b9feb5362bf2e047"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><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><pre> Before entering this routine, the original nonzeros in the panel
+ were already copied into the spa[m,w].</pre><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zpanel__bmod_8c_a6c1aae0b0c84fef3b9feb5362bf2e047_cgraph.png" border="0" usemap="#zpanel__bmod_8c_a6c1aae0b0c84fef3b9feb5362bf2e047_cgraph" alt=""/></div>
+<map name="zpanel__bmod_8c_a6c1aae0b0c84fef3b9feb5362bf2e047_cgraph" id="zpanel__bmod_8c_a6c1aae0b0c84fef3b9feb5362bf2e047_cgraph">
+<area shape="rect" id="node2" href="slu__util_8h.html#a72be96e75e58564c4322ef9ef73ca65f" title="sp_ienv" alt="" coords="155,5,221,32"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#ae97174a10346e0629387c0f8ce9a9a08" title="ztrsv_" alt="" coords="159,56,217,83"/><area shape="rect" id="node5" href="zpanel__bmod_8c.html#afb6f65890b5348dc1692d01b087be35d" title="Solves a dense UNIT lower triangular system. " alt="" coords="157,107,219,133"/><area shape="rect" id="node6" href="slu__z [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zpanel__dfs_8c.html b/SuperLU_5.2.0/DOC/html/zpanel__dfs_8c.html
new file mode 100644
index 0000000..39baa56
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zpanel__dfs_8c.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zpanel_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zpanel_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Peforms a symbolic factorization on a panel of symbols.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zpanel_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zpanel__dfs_8c__incl.png" border="0" usemap="#SRC_2zpanel__dfs_8c" alt=""/></div>
+<map name="SRC_2zpanel__dfs_8c" id="SRC_2zpanel__dfs_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2dfc62f0d77e7b112075276b06542f87"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpanel__dfs_8c.html#a2dfc62f0d77e7b112075276b06542f87">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_r, int *nseg, <a class="el" href="structd [...]
+<tr class="separator:a2dfc62f0d77e7b112075276b06542f87"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2dfc62f0d77e7b112075276b06542f87"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> Performs a symbolic factorization on a panel of columns [jcol, jcol+w).</pre><pre> A supernode representative is the last column of a supernode.
+ The nonzeros in U[*,j] are segments that end at supernodal
+ representatives.</pre><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><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><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>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zpivotL_8c.html b/SuperLU_5.2.0/DOC/html/zpivotL_8c.html
new file mode 100644
index 0000000..99ceafa
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zpivotL_8c.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zpivotL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zpivotL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numerical pivoting.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zpivotL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zpivotL_8c__incl.png" border="0" usemap="#SRC_2zpivotL_8c" alt=""/></div>
+<map name="SRC_2zpivotL_8c" id="SRC_2zpivotL_8c">
+<area shape="rect" id="node4" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="497,80,585,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="181,155,288,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="312,155,413,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a06029dacc576a26c1495317264d00fcc"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zpivotL_8c.html#a06029dacc576a26c1495317264d00fcc">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>
+<tr class="separator:a06029dacc576a26c1495317264d00fcc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a06029dacc576a26c1495317264d00fcc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Performs the numerical pivoting on the current column of L,
+ and the CDIV operation.</pre><pre> Pivot policy:
+ (1) Compute thresh = u * max_(i>=j) <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_ij)</a>;
+ (2) IF user specifies pivot row k and <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_kj)</a> >= thresh THEN
+ pivot row = k;
+ ELSE IF <a class="el" href="mc64ad_8c.html#a6a010865b10e541735fa2da8f3cd062d">abs(A_jj)</a> >= thresh THEN
+ pivot row = j;
+ ELSE
+ pivot row = m;</pre><pre> Note: If you absolutely want to use a given pivot order, then set u=0.0.</pre><pre> Return value: 0 success;
+ i > 0 U(i,i) is exactly zero.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zpivotL_8c_a06029dacc576a26c1495317264d00fcc_cgraph.png" border="0" usemap="#zpivotL_8c_a06029dacc576a26c1495317264d00fcc_cgraph" alt=""/></div>
+<map name="zpivotL_8c_a06029dacc576a26c1495317264d00fcc_cgraph" id="zpivotL_8c_a06029dacc576a26c1495317264d00fcc_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="117,5,181,32"/><area shape="rect" id="node3" href="dcomplex_8c.html#a4cfde2671a83833a15c5b48517781db0" title="Complex Division c = a/b. " alt="" coords="123,56,176,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zpivotgrowth_8c.html b/SuperLU_5.2.0/DOC/html/zpivotgrowth_8c.html
new file mode 100644
index 0000000..0c097b0
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zpivotgrowth_8c.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zpivotgrowth.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zpivotgrowth.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Computes the reciprocal pivot growth factor.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zpivotgrowth.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zpivotgrowth_8c__incl.png" border="0" usemap="#SRC_2zpivotgrowth_8c" alt=""/></div>
+<map name="SRC_2zpivotgrowth_8c" id="SRC_2zpivotgrowth_8c">
+<area shape="rect" id="node3" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a713bc716e136b32dfad757a3fd7d3005"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="zpivotgrowth_8c.html#a713bc716e136b32dfad757a3fd7d3005">zPivotGrowth</a> (int ncols, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int *perm_c, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *L, [...]
+<tr class="separator:a713bc716e136b32dfad757a3fd7d3005"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a713bc716e136b32dfad757a3fd7d3005"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre>Compute the reciprocal pivot growth factor of the leading ncols columns
+of the matrix, using the formula:
+ min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )</pre><pre><h1>Arguments
+</h1>
+</pre><pre></pre><pre>ncols (input) int
+ The number of columns of matrices A, L and U.</pre><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><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><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>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zpivotgrowth_8c_a713bc716e136b32dfad757a3fd7d3005_cgraph.png" border="0" usemap="#zpivotgrowth_8c_a713bc716e136b32dfad757a3fd7d3005_cgraph" alt=""/></div>
+<map name="zpivotgrowth_8c_a713bc716e136b32dfad757a3fd7d3005_cgraph" id="zpivotgrowth_8c_a713bc716e136b32dfad757a3fd7d3005_cgraph">
+<area shape="rect" id="node2" href="dmach_8c.html#a9619845d75710daa0aa4549c2862bae5" title="dmach" alt="" coords="156,5,217,32"/><area shape="rect" id="node3" href="dcomplex_8c.html#a47b00c33108809a1a9a94ffea7ef2097" title="Approximates the abs. Returns abs(z.r) + abs(z.i) " alt="" coords="155,56,219,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zpruneL_8c.html b/SuperLU_5.2.0/DOC/html/zpruneL_8c.html
new file mode 100644
index 0000000..e06ff47
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zpruneL_8c.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zpruneL.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zpruneL.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Prunes the L-structure.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zpruneL.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zpruneL_8c__incl.png" border="0" usemap="#SRC_2zpruneL_8c" alt=""/></div>
+<map name="SRC_2zpruneL_8c" id="SRC_2zpruneL_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab91a986738634178968bfab08ed42b06"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zpruneL_8c.html#ab91a986738634178968bfab08ed42b06">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>
+<tr class="separator:ab91a986738634178968bfab08ed42b06"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+ – SuperLU routine (version 2.0) –
+ Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ and Lawrence Berkeley National Lab.
+ November 15, 1997</pre><pre> Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre> THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+ EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ab91a986738634178968bfab08ed42b06"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ Prunes the L-structure of supernodes whose L-structure
+ contains the current pivot row "pivrow"
+</pre>
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zreadhb_8c.html b/SuperLU_5.2.0/DOC/html/zreadhb_8c.html
new file mode 100644
index 0000000..c8290b3
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zreadhb_8c.html
@@ -0,0 +1,447 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zreadhb.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zreadhb.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in Harwell-Boeing format.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zreadhb.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zreadhb_8c__incl.png" border="0" usemap="#SRC_2zreadhb_8c" alt=""/></div>
+<map name="SRC_2zreadhb_8c" id="SRC_2zreadhb_8c">
+<area shape="rect" id="node4" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="414,80,503,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="341,155,448,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="472,155,573,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4c9a9a1484351dcc1ae1a756a18081e7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#a4c9a9a1484351dcc1ae1a756a18081e7">zDumpLine</a> (FILE *fp)</td></tr>
+<tr class="memdesc:a4c9a9a1484351dcc1ae1a756a18081e7"><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line. <a href="#a4c9a9a1484351dcc1ae1a756a18081e7">More...</a><br/></td></tr>
+<tr class="separator:a4c9a9a1484351dcc1ae1a756a18081e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab753ef9c907b1298d163150b6e658247"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#ab753ef9c907b1298d163150b6e658247">zParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:ab753ef9c907b1298d163150b6e658247"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb86c617e31fa765098b83fd74539b9b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#afb86c617e31fa765098b83fd74539b9b">zParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:afb86c617e31fa765098b83fd74539b9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbec2a501b92e7e7bb13af2e21520522"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#afbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+<tr class="separator:afbec2a501b92e7e7bb13af2e21520522"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a321d6efeb00f45e3e4c961dcc3aa0fcc"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#a321d6efeb00f45e3e4c961dcc3aa0fcc">zReadValues</a> (FILE *fp, int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *destination, int perline, int persize)</td></tr>
+<tr class="memdesc:a321d6efeb00f45e3e4c961dcc3aa0fcc"><td class="mdescLeft"> </td><td class="mdescRight">Read complex numbers as pairs of (real, imaginary) <a href="#a321d6efeb00f45e3e4c961dcc3aa0fcc">More...</a><br/></td></tr>
+<tr class="separator:a321d6efeb00f45e3e4c961dcc3aa0fcc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3cd512057c925424d26266a1837ed6f"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#ae3cd512057c925424d26266a1837ed6f">FormFullA</a> (int n, int *nonz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:ae3cd512057c925424d26266a1837ed6f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a40ac572dff37f59aecd2ca89b1bfbfdf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadhb_8c.html#a40ac572dff37f59aecd2ca89b1bfbfdf">zreadhb</a> (FILE *fp, int *nrow, int *ncol, int *nonz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="memdesc:a40ac572dff37f59aecd2ca89b1bfbfdf"><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary routines. <a href="#a40ac572dff37f59aecd2ca89b1bfbfdf">More...</a><br/></td></tr>
+<tr class="separator:a40ac572dff37f59aecd2ca89b1bfbfdf"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre><h1>Purpose
+</h1>
+</pre><pre></pre><pre>Read a DOUBLE COMPLEX PRECISION matrix stored in Harwell-Boeing format
+as described below.</pre><pre>Line 1 (A72,A8)
+ Col. 1 - 72 Title (TITLE)
+ Col. 73 - 80 Key (KEY)</pre><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><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><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><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><pre>First Character:
+ R Real matrix
+ C Complex matrix
+ P Pattern only (no numerical values supplied)</pre><pre>Second Character:
+ S Symmetric
+ U Unsymmetric
+ H Hermitian
+ Z Skew symmetric
+ R Rectangular</pre><pre>Third Character:
+ A Assembled
+ E Elemental matrices (unassembled)</pre><pre></pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae3cd512057c925424d26266a1837ed6f"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void FormFullA </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<pre>
+On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+matrix. On exit, it represents the full matrix with lower and upper parts.
+</pre>
+</div>
+</div>
+<a class="anchor" id="afbec2a501b92e7e7bb13af2e21520522"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4c9a9a1484351dcc1ae1a756a18081e7"></a>
+<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></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afb86c617e31fa765098b83fd74539b9b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab753ef9c907b1298d163150b6e658247"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a40ac572dff37f59aecd2ca89b1bfbfdf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void zreadhb </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>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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zreadhb_8c_a40ac572dff37f59aecd2ca89b1bfbfdf_cgraph.png" border="0" usemap="#zreadhb_8c_a40ac572dff37f59aecd2ca89b1bfbfdf_cgraph" alt=""/></div>
+<map name="zreadhb_8c_a40ac572dff37f59aecd2ca89b1bfbfdf_cgraph" id="zreadhb_8c_a40ac572dff37f59aecd2ca89b1bfbfdf_cgraph">
+<area shape="rect" id="node2" href="zreadhb_8c.html#a4c9a9a1484351dcc1ae1a756a18081e7" title="Eat up the rest of the current line. " alt="" coords="145,5,233,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a2643ac77912d9f351f7294677bbe05f2" title="Allocate storage for original matrix A. " alt="" coords="148,56,231,83"/><area shape="rect" id="node6" href="zreadhb_8c.html#ab753ef9c907b1298d163150b6e658247" title="zParseIntFormat" alt="" coords="130,107,249,133"/><area shape="re [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a321d6efeb00f45e3e4c961dcc3aa0fcc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zreadrb_8c.html b/SuperLU_5.2.0/DOC/html/zreadrb_8c.html
new file mode 100644
index 0000000..0f2da16
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zreadrb_8c.html
@@ -0,0 +1,437 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zreadrb.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zreadrb.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in Rutherford-Boeing format.
+<a href="#details">More...</a></p>
+<div class="textblock"><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/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zreadrb.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zreadrb_8c__incl.png" border="0" usemap="#SRC_2zreadrb_8c" alt=""/></div>
+<map name="SRC_2zreadrb_8c" id="SRC_2zreadrb_8c">
+<area shape="rect" id="node4" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="414,80,503,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="341,155,448,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="472,155,573,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aefd047e091d4564a958a3d6bd0119eec"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#aefd047e091d4564a958a3d6bd0119eec">zDumpLine</a> (FILE *fp)</td></tr>
+<tr class="memdesc:aefd047e091d4564a958a3d6bd0119eec"><td class="mdescLeft"> </td><td class="mdescRight">Eat up the rest of the current line. <a href="#aefd047e091d4564a958a3d6bd0119eec">More...</a><br/></td></tr>
+<tr class="separator:aefd047e091d4564a958a3d6bd0119eec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa097366cbacd16b824248c34e8b1efa9"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#aa097366cbacd16b824248c34e8b1efa9">zParseIntFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:aa097366cbacd16b824248c34e8b1efa9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a307d3abcf9f61c651e454e0876736288"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#a307d3abcf9f61c651e454e0876736288">zParseFloatFormat</a> (char *buf, int *num, int *size)</td></tr>
+<tr class="separator:a307d3abcf9f61c651e454e0876736288"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afbec2a501b92e7e7bb13af2e21520522"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#afbec2a501b92e7e7bb13af2e21520522">ReadVector</a> (FILE *fp, int n, int *where, int perline, int persize)</td></tr>
+<tr class="separator:afbec2a501b92e7e7bb13af2e21520522"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeec396507b7780d0b2da753e8bfca5f4"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#aeec396507b7780d0b2da753e8bfca5f4">zReadValues</a> (FILE *fp, int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *destination, int perline, int persize)</td></tr>
+<tr class="memdesc:aeec396507b7780d0b2da753e8bfca5f4"><td class="mdescLeft"> </td><td class="mdescRight">Read complex numbers as pairs of (real, imaginary) <a href="#aeec396507b7780d0b2da753e8bfca5f4">More...</a><br/></td></tr>
+<tr class="separator:aeec396507b7780d0b2da753e8bfca5f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3cd512057c925424d26266a1837ed6f"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#ae3cd512057c925424d26266a1837ed6f">FormFullA</a> (int n, int *nonz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:ae3cd512057c925424d26266a1837ed6f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6cc83af309b56ffac83144d77effc249"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadrb_8c.html#a6cc83af309b56ffac83144d77effc249">zreadrb</a> (int *nrow, int *ncol, int *nonz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:a6cc83af309b56ffac83144d77effc249"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+-- SuperLU routine (version 4.0) --
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre><h1>Purpose </h1>
+<p>Read a DOUBLE COMPLEX PRECISION matrix stored in Rutherford-Boeing format as described below.</p>
+<p>Line 1 (A72, A8) Col. 1 - 72 Title (TITLE) Col. 73 - 80 Matrix name / identifier (MTRXID)</p>
+<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>
+<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 ent [...]
+<p>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>
+<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>
+<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>
+<p>Second Character: S Symmetric U Unsymmetric H Hermitian Z Skew symmetric R Rectangular</p>
+<p>Third Character: A Compressed column form E Elemental form</p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae3cd512057c925424d26266a1837ed6f"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void FormFullA </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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<pre>
+On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+matrix. On exit, it represents the full matrix with lower and upper parts.
+</pre>
+</div>
+</div>
+<a class="anchor" id="afbec2a501b92e7e7bb13af2e21520522"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aefd047e091d4564a958a3d6bd0119eec"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a307d3abcf9f61c651e454e0876736288"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa097366cbacd16b824248c34e8b1efa9"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6cc83af309b56ffac83144d77effc249"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zreadrb_8c_a6cc83af309b56ffac83144d77effc249_cgraph.png" border="0" usemap="#zreadrb_8c_a6cc83af309b56ffac83144d77effc249_cgraph" alt=""/></div>
+<map name="zreadrb_8c_a6cc83af309b56ffac83144d77effc249_cgraph" id="zreadrb_8c_a6cc83af309b56ffac83144d77effc249_cgraph">
+<area shape="rect" id="node2" href="zreadrb_8c.html#aefd047e091d4564a958a3d6bd0119eec" title="Eat up the rest of the current line. " alt="" coords="143,5,231,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a2643ac77912d9f351f7294677bbe05f2" title="Allocate storage for original matrix A. " alt="" coords="145,56,228,83"/><area shape="rect" id="node6" href="zreadrb_8c.html#aa097366cbacd16b824248c34e8b1efa9" title="zParseIntFormat" alt="" coords="127,107,246,133"/><area shape="re [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aeec396507b7780d0b2da753e8bfca5f4"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zreadtriple_8c.html b/SuperLU_5.2.0/DOC/html/zreadtriple_8c.html
new file mode 100644
index 0000000..ef89dba
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zreadtriple_8c.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zreadtriple.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zreadtriple.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Read a matrix stored in triplet (coordinate) format.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zreadtriple.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zreadtriple_8c__incl.png" border="0" usemap="#SRC_2zreadtriple_8c" alt=""/></div>
+<map name="SRC_2zreadtriple_8c" id="SRC_2zreadtriple_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aae3562688014d408faee4f6dc8c9647b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadtriple_8c.html#aae3562688014d408faee4f6dc8c9647b">zreadtriple</a> (int *m, int *n, int *nonz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> **nzval, int **rowind, int **colptr)</td></tr>
+<tr class="separator:aae3562688014d408faee4f6dc8c9647b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a99021adc7c4e9405035663452ff651dc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zreadtriple_8c.html#a99021adc7c4e9405035663452ff651dc">zreadrhs</a> (int m, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *b)</td></tr>
+<tr class="separator:a99021adc7c4e9405035663452ff651dc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 4.0) –
+Lawrence Berkeley National Laboratory.
+June 30, 2009
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a99021adc7c4e9405035663452ff651dc"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aae3562688014d408faee4f6dc8c9647b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zreadtriple_8c_aae3562688014d408faee4f6dc8c9647b_cgraph.png" border="0" usemap="#zreadtriple_8c_aae3562688014d408faee4f6dc8c9647b_cgraph" alt=""/></div>
+<map name="zreadtriple_8c_aae3562688014d408faee4f6dc8c9647b_cgraph" id="zreadtriple_8c_aae3562688014d408faee4f6dc8c9647b_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a2643ac77912d9f351f7294677bbe05f2" title="Allocate storage for original matrix A. " alt="" coords="136,31,219,57"/><area shape="rect" id="node3" href="zmemory_8c.html#ad681359ed37ac809cc0e456e05655823" title="doublecomplexMalloc" alt="" coords="267,5,413,32"/><area shape="rect" id="node4" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="303,56,377,83"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zsnode__bmod_8c.html b/SuperLU_5.2.0/DOC/html/zsnode__bmod_8c.html
new file mode 100644
index 0000000..093524f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zsnode__bmod_8c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zsnode_bmod.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zsnode_bmod.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Performs numeric block updates within the relaxed snode.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zsnode_bmod.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsnode__bmod_8c__incl.png" border="0" usemap="#SRC_2zsnode__bmod_8c" alt=""/></div>
+<map name="SRC_2zsnode__bmod_8c" id="SRC_2zsnode__bmod_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae4edaac25125ac0e6e309858b4b3b4d0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsnode__bmod_8c.html#ae4edaac25125ac0e6e309858b4b3b4d0">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"> [...]
+<tr class="memdesc:ae4edaac25125ac0e6e309858b4b3b4d0"><td class="mdescLeft"> </td><td class="mdescRight">Performs numeric block updates within the relaxed snode. <a href="#ae4edaac25125ac0e6e309858b4b3b4d0">More...</a><br/></td></tr>
+<tr class="separator:ae4edaac25125ac0e6e309858b4b3b4d0"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae4edaac25125ac0e6e309858b4b3b4d0"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsnode__bmod_8c_ae4edaac25125ac0e6e309858b4b3b4d0_cgraph.png" border="0" usemap="#zsnode__bmod_8c_ae4edaac25125ac0e6e309858b4b3b4d0_cgraph" alt=""/></div>
+<map name="zsnode__bmod_8c_ae4edaac25125ac0e6e309858b4b3b4d0_cgraph" id="zsnode__bmod_8c_ae4edaac25125ac0e6e309858b4b3b4d0_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#ae97174a10346e0629387c0f8ce9a9a08" title="ztrsv_" alt="" coords="164,5,223,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#aa25bbd36f5c52cf8df1db92545fe80b9" title="zgemv_" alt="" coords="159,56,227,83"/><area shape="rect" id="node4" href="zcolumn__bmod_8c.html#afb6f65890b5348dc1692d01b087be35d" title="Solves a dense UNIT lower triangular system. " alt="" coords="162,107,225,133"/><area shape="rect" id="node5" href="zcolu [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zsnode__dfs_8c.html b/SuperLU_5.2.0/DOC/html/zsnode__dfs_8c.html
new file mode 100644
index 0000000..02b35fc
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zsnode__dfs_8c.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zsnode_dfs.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zsnode_dfs.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Determines the union of row structures of columns within the relaxed node.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zsnode_dfs.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsnode__dfs_8c__incl.png" border="0" usemap="#SRC_2zsnode__dfs_8c" alt=""/></div>
+<map name="SRC_2zsnode__dfs_8c" id="SRC_2zsnode__dfs_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a30b52c07431f048048b8bf3e8c03087a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsnode__dfs_8c.html#a30b52c07431f048048b8bf3e8c03087a">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>
+<tr class="separator:a30b52c07431f048048b8bf3e8c03087a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a30b52c07431f048048b8bf3e8c03087a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre>
+ <a class="el" href="zsnode__dfs_8c.html#a30b52c07431f048048b8bf3e8c03087a">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><pre><h1>Return value
+</h1>
+</pre><pre>
+ 0 success;
+ >0 number of bytes allocated when run out of memory.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsnode__dfs_8c_a30b52c07431f048048b8bf3e8c03087a_cgraph.png" border="0" usemap="#zsnode__dfs_8c_a30b52c07431f048048b8bf3e8c03087a_cgraph" alt=""/></div>
+<map name="zsnode__dfs_8c_a30b52c07431f048048b8bf3e8c03087a_cgraph" id="zsnode__dfs_8c_a30b52c07431f048048b8bf3e8c03087a_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a399a28849bd52ce90c1cbc8e4cd85046" title="Expand the data structures for L and U during the factorization. " alt="" coords="144,107,256,133"/><area shape="rect" id="node3" href="zmemory_8c.html#a67833ee9526cec0b31d0f26e527b97df" title="Expand the existing storage to accommodate more fill-ins. " alt="" coords="329,81,399,108"/><area shape="rect" id="node8" href="zmemory_8c.html#a17416eb78c42063624b6859d9f88820b" title="zmemory_usa [...]
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zsp__blas2_8c.html b/SuperLU_5.2.0/DOC/html/zsp__blas2_8c.html
new file mode 100644
index 0000000..4f4179f
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zsp__blas2_8c.html
@@ -0,0 +1,451 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zsp_blas2.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zsp_blas2.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Sparse BLAS 2, using some dense BLAS 2 operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zsp_blas2.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsp__blas2_8c__incl.png" border="0" usemap="#SRC_2zsp__blas2_8c" alt=""/></div>
+<map name="SRC_2zsp__blas2_8c" id="SRC_2zsp__blas2_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac9798dda11fa387039351d70fa59ce3b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#ac9798dda11fa387039351d70fa59ce3b">zusolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:ac9798dda11fa387039351d70fa59ce3b"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense upper triangular system. <a href="#ac9798dda11fa387039351d70fa59ce3b">More...</a><br/></td></tr>
+<tr class="separator:ac9798dda11fa387039351d70fa59ce3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb6f65890b5348dc1692d01b087be35d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#afb6f65890b5348dc1692d01b087be35d">zlsolve</a> (int, int, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *)</td></tr>
+<tr class="memdesc:afb6f65890b5348dc1692d01b087be35d"><td class="mdescLeft"> </td><td class="mdescRight">Solves a dense UNIT lower triangular system. <a href="#afb6f65890b5348dc1692d01b087be35d">More...</a><br/></td></tr>
+<tr class="separator:afb6f65890b5348dc1692d01b087be35d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1165292a4e2a6c282638868bd503fb7a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#a1165292a4e2a6c282638868bd503fb7a">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 class="memdesc:a1165292a4e2a6c282638868bd503fb7a"><td class="mdescLeft"> </td><td class="mdescRight">Performs a dense matrix-vector multiply: Mxvec = Mxvec + M * vec. <a href="#a1165292a4e2a6c282638868bd503fb7a">More...</a><br/></td></tr>
+<tr class="separator:a1165292a4e2a6c282638868bd503fb7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a070a51d222072a18d8d6ac91381b4859"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#a070a51d222072a18d8d6ac91381b4859">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="e [...]
+<tr class="memdesc:a070a51d222072a18d8d6ac91381b4859"><td class="mdescLeft"> </td><td class="mdescRight">Solves one of the systems of equations A*x = b, or A'*x = b. <a href="#a070a51d222072a18d8d6ac91381b4859">More...</a><br/></td></tr>
+<tr class="separator:a070a51d222072a18d8d6ac91381b4859"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ea39731f07b4c2ab20e44c97ffd773c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas2_8c.html#a9ea39731f07b4c2ab20e44c97ffd773c">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#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" [...]
+<tr class="memdesc:a9ea39731f07b4c2ab20e44c97ffd773c"><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="#a9ea39731f07b4c2ab20e44c97ffd773c">More...</a><br/></td></tr>
+<tr class="separator:a9ea39731f07b4c2ab20e44c97ffd773c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 5.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+October 15, 2003</pre><pre>Last update: December 3, 2015
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a9ea39731f07b4c2ab20e44c97ffd773c"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="zsp__blas2_8c.html#a9ea39731f07b4c2ab20e44c97ffd773c" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y...">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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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^H*x + beta*y.</pre><pre> ALPHA - (input) doublecomplex
+ On entry, ALPHA specifies the scalar alpha.</pre><pre> A - (input) SuperMatrix*
+ Before entry, the leading m by n part of the array A must
+ contain the matrix of coefficients.</pre><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><pre> INCX - (input) int
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.</pre><pre> BETA - (input) doublecomplex
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.</pre><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><pre> INCY - (input) int
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.</pre><pre> ==== Sparse Level 2 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsp__blas2_8c_a9ea39731f07b4c2ab20e44c97ffd773c_cgraph.png" border="0" usemap="#zsp__blas2_8c_a9ea39731f07b4c2ab20e44c97ffd773c_cgraph" alt=""/></div>
+<map name="zsp__blas2_8c_a9ea39731f07b4c2ab20e44c97ffd773c_cgraph" id="zsp__blas2_8c_a9ea39731f07b4c2ab20e44c97ffd773c_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="136,5,219,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a070a51d222072a18d8d6ac91381b4859"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> <a class="el" href="zsp__blas2_8c.html#a070a51d222072a18d8d6ac91381b4859" 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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><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><pre> info - (output) int*
+ If *info = -i, the i-th argument had an illegal value.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsp__blas2_8c_a070a51d222072a18d8d6ac91381b4859_cgraph.png" border="0" usemap="#zsp__blas2_8c_a070a51d222072a18d8d6ac91381b4859_cgraph" alt=""/></div>
+<map name="zsp__blas2_8c_a070a51d222072a18d8d6ac91381b4859_cgraph" id="zsp__blas2_8c_a070a51d222072a18d8d6ac91381b4859_cgraph">
+<area shape="rect" id="node2" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="157,5,240,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#ab7683ac1617339478753ab308a7b0fc5" title="doublecomplexCalloc" alt="" coords="125,56,272,83"/><area shape="rect" id="node4" href="slu__zdefs_8h.html#ae97174a10346e0629387c0f8ce9a9a08" title="ztrsv_" alt="" coords="169,107,228,133"/><area shape="rect" id="node5" href="slu__zdefs_8h.html#aa25bbd3 [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="afb6f65890b5348dc1692d01b087be35d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1165292a4e2a6c282638868bd503fb7a"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>The input matrix is M(1:nrow,1:ncol); The product is returned in Mxvec[]. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac9798dda11fa387039351d70fa59ce3b"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></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. </p>
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsp__blas2_8c_ac9798dda11fa387039351d70fa59ce3b_cgraph.png" border="0" usemap="#zsp__blas2_8c_ac9798dda11fa387039351d70fa59ce3b_cgraph" alt=""/></div>
+<map name="zsp__blas2_8c_ac9798dda11fa387039351d70fa59ce3b_cgraph" id="zsp__blas2_8c_ac9798dda11fa387039351d70fa59ce3b_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#a4cfde2671a83833a15c5b48517781db0" title="Complex Division c = a/b. " alt="" coords="120,5,173,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zsp__blas3_8c.html b/SuperLU_5.2.0/DOC/html/zsp__blas3_8c.html
new file mode 100644
index 0000000..0948e8c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zsp__blas3_8c.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zsp_blas3.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zsp_blas3.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Sparse BLAS3, using some dense BLAS3 operations.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zsp_blas3.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsp__blas3_8c__incl.png" border="0" usemap="#SRC_2zsp__blas3_8c" alt=""/></div>
+<map name="SRC_2zsp__blas3_8c" id="SRC_2zsp__blas3_8c">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="311,80,400,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="521,155,628,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="652,155,753,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2648905c9e6009b63d3bf0bb4d673e8e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="zsp__blas3_8c.html#a2648905c9e6009b63d3bf0bb4d673e8e">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#ac900805a486cbb8489 [...]
+<tr class="separator:a2648905c9e6009b63d3bf0bb4d673e8e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 2.0) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+November 15, 1997
+</pre> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2648905c9e6009b63d3bf0bb4d673e8e"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<pre>
+<h1>Purpose
+</h1>
+</pre><pre></pre><pre> sp_z performs one of the matrix-matrix operations</pre><pre> C := alpha*op( A )*op( B ) + beta*C,</pre><pre> where op( X ) is one of</pre><pre> op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ),</pre><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><pre><h1>Parameters
+</h1>
+</pre><pre></pre><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><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><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><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><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><pre> ALPHA - (input) doublecomplex
+ On entry, ALPHA specifies the scalar alpha.</pre><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><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><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 max( 1, n ).
+ Unchanged on exit.</pre><pre> BETA - (input) doublecomplex
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then C need not be set on input.</pre><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><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 max(1,m).
+ Unchanged on exit.</pre><pre> ==== Sparse Level 3 Blas routine.
+</pre>
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zsp__blas3_8c_a2648905c9e6009b63d3bf0bb4d673e8e_cgraph.png" border="0" usemap="#zsp__blas3_8c_a2648905c9e6009b63d3bf0bb4d673e8e_cgraph" alt=""/></div>
+<map name="zsp__blas3_8c_a2648905c9e6009b63d3bf0bb4d673e8e_cgraph" id="zsp__blas3_8c_a2648905c9e6009b63d3bf0bb4d673e8e_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="141,5,224,32"/><area shape="rect" id="node3" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" coords="272,5,355,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/html/zutil_8c.html b/SuperLU_5.2.0/DOC/html/zutil_8c.html
new file mode 100644
index 0000000..05ad53c
--- /dev/null
+++ b/SuperLU_5.2.0/DOC/html/zutil_8c.html
@@ -0,0 +1,1014 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.6"/>
+<title>SuperLU: SRC/zutil.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">SuperLU
+ <span id="projectnumber">5.2.0</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.6 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_1e771ff450ae847412a8c28572c155bb.html">SRC</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">zutil.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Matrix utility functions.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="slu__zdefs_8h_source.html">slu_zdefs.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for zutil.c:</div>
+<div class="dyncontent">
+<div class="center"><img src="zutil_8c__incl.png" border="0" usemap="#SRC_2zutil_8c" alt=""/></div>
+<map name="SRC_2zutil_8c" id="SRC_2zutil_8c">
+<area shape="rect" id="node3" href="slu__zdefs_8h.html" title="Header file for real operations. " alt="" coords="341,80,429,107"/><area shape="rect" id="node9" href="slu__Cnames_8h.html" title="Macros defining how C routines will be called. " alt="" coords="332,155,439,181"/><area shape="rect" id="node10" href="supermatrix_8h.html" title="Defines matrix types. " alt="" coords="463,155,564,181"/><area shape="rect" id="node11" href="slu__util_8h.html" title="Utility header file. " alt="" c [...]
+</div>
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a349f23fdb4e958cc6da8e890554b9868"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a349f23fdb4e958cc6da8e890554b9868">zCreate_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> [...]
+<tr class="memdesc:a349f23fdb4e958cc6da8e890554b9868"><td class="mdescLeft"> </td><td class="mdescRight">Supernodal LU factor related. <a href="#a349f23fdb4e958cc6da8e890554b9868">More...</a><br/></td></tr>
+<tr class="separator:a349f23fdb4e958cc6da8e890554b9868"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abbb9f38872629121898fe588e5cf9c46"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#abbb9f38872629121898fe588e5cf9c46">zCreate_CompRow_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, int m, int n, int nnz, <a class="el" href="structdoublecomplex.html">doublecomplex</a> [...]
+<tr class="separator:abbb9f38872629121898fe588e5cf9c46"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6d326511607c3cb8c0b654b675bd3700"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a6d326511607c3cb8c0b654b675bd3700">zCopy_CompCol_Matrix</a> (<a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *B)</td></tr>
+<tr class="memdesc:a6d326511607c3cb8c0b654b675bd3700"><td class="mdescLeft"> </td><td class="mdescRight">Copy matrix A into matrix B. <a href="#a6d326511607c3cb8c0b654b675bd3700">More...</a><br/></td></tr>
+<tr class="separator:a6d326511607c3cb8c0b654b675bd3700"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8316b5e4832ca200a14d14f5ed164695"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a8316b5e4832ca200a14d14f5ed164695">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#a9d2ddedeb2a3d92e950811c61d0b8796">Stype_ [...]
+<tr class="separator:a8316b5e4832ca200a14d14f5ed164695"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6632ad6334d30a38c9e8b026a3983b65"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a6632ad6334d30a38c9e8b026a3983b65">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 class="separator:a6632ad6334d30a38c9e8b026a3983b65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a43150b5d7a29eebba2f8de5c2a35d645"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a43150b5d7a29eebba2f8de5c2a35d645">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 [...]
+<tr class="separator:a43150b5d7a29eebba2f8de5c2a35d645"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aee4cad234e4df121da5386a86754dd4d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#aee4cad234e4df121da5386a86754dd4d">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 class="memdesc:aee4cad234e4df121da5386a86754dd4d"><td class="mdescLeft"> </td><td class="mdescRight">Convert a row compressed storage into a column compressed storage. <a href="#aee4cad234e4df121da5386a86754dd4d">More...</a><br/></td></tr>
+<tr class="separator:aee4cad234e4df121da5386a86754dd4d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7f3c67eba79f4d63a7ef19781935985d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a7f3c67eba79f4d63a7ef19781935985d">zPrint_CompCol_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="memdesc:a7f3c67eba79f4d63a7ef19781935985d"><td class="mdescLeft"> </td><td class="mdescRight">Routines for debugging. <a href="#a7f3c67eba79f4d63a7ef19781935985d">More...</a><br/></td></tr>
+<tr class="separator:a7f3c67eba79f4d63a7ef19781935985d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a12d2264eb0e17728142e651de7cc8f9c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a12d2264eb0e17728142e651de7cc8f9c">zPrint_SuperNode_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:a12d2264eb0e17728142e651de7cc8f9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad665640e89334e9f7a57355e030ff63d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#ad665640e89334e9f7a57355e030ff63d">zPrint_Dense_Matrix</a> (char *what, <a class="el" href="structSuperMatrix.html">SuperMatrix</a> *<a class="el" href="ilu__zdrop__row_8c.html#ac900805a486cbb8489e3c176ed6e0d8e">A</a>)</td></tr>
+<tr class="separator:ad665640e89334e9f7a57355e030ff63d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8083f641fd96ede2f54db44d18f984e9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a8083f641fd96ede2f54db44d18f984e9">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 class="memdesc:a8083f641fd96ede2f54db44d18f984e9"><td class="mdescLeft"> </td><td class="mdescRight">Diagnostic print of column "jcol" in the U/L factor. <a href="#a8083f641fd96ede2f54db44d18f984e9">More...</a><br/></td></tr>
+<tr class="separator:a8083f641fd96ede2f54db44d18f984e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abbfe87885f0f664d31b4f6fcf2180127"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#abbfe87885f0f664d31b4f6fcf2180127">zcheck_tempv</a> (int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *tempv)</td></tr>
+<tr class="memdesc:abbfe87885f0f664d31b4f6fcf2180127"><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="#abbfe87885f0f664d31b4f6fcf2180127">More...</a><br/></td></tr>
+<tr class="separator:abbfe87885f0f664d31b4f6fcf2180127"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa81fbc4bdd835def817191d94fb8b208"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#aa81fbc4bdd835def817191d94fb8b208">zGenXtrue</a> (int n, int nrhs, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *x, int ldx)</td></tr>
+<tr class="separator:aa81fbc4bdd835def817191d94fb8b208"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acf2b404121b9a70942631f50b85fd8a1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#acf2b404121b9a70942631f50b85fd8a1">zFillRHS</a> (<a class="el" href="superlu__enum__consts_8h.html#a0c4e17b2d5cea33f9991ccc6a6678d62">trans_t</a> trans, int nrhs, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *x, int ldx, <a class="el" href="structSuperMatrix.html">SuperMatrix</ [...]
+<tr class="memdesc:acf2b404121b9a70942631f50b85fd8a1"><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="#acf2b404121b9a70942631f50b85fd8a1">More...</a><br/></td></tr>
+<tr class="separator:acf2b404121b9a70942631f50b85fd8a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1c222f7cb3253d97408d9395d6919d4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#ac1c222f7cb3253d97408d9395d6919d4">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 class="memdesc:ac1c222f7cb3253d97408d9395d6919d4"><td class="mdescLeft"> </td><td class="mdescRight">Fills a doublecomplex precision array with a given value. <a href="#ac1c222f7cb3253d97408d9395d6919d4">More...</a><br/></td></tr>
+<tr class="separator:ac1c222f7cb3253d97408d9395d6919d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0c645d9e2d757c5f5fa1ecd67f0c2a07"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a0c645d9e2d757c5f5fa1ecd67f0c2a07">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 class="memdesc:a0c645d9e2d757c5f5fa1ecd67f0c2a07"><td class="mdescLeft"> </td><td class="mdescRight">Check the inf-norm of the error vector. <a href="#a0c645d9e2d757c5f5fa1ecd67f0c2a07">More...</a><br/></td></tr>
+<tr class="separator:a0c645d9e2d757c5f5fa1ecd67f0c2a07"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0807017bff32a20ff59820583a9e038d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#a0807017bff32a20ff59820583a9e038d">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, doub [...]
+<tr class="memdesc:a0807017bff32a20ff59820583a9e038d"><td class="mdescLeft"> </td><td class="mdescRight">Print performance of the code. <a href="#a0807017bff32a20ff59820583a9e038d">More...</a><br/></td></tr>
+<tr class="separator:a0807017bff32a20ff59820583a9e038d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad40a765de4b05c0ab07d3299aa93b6da"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="zutil_8c.html#ad40a765de4b05c0ab07d3299aa93b6da">print_doublecomplex_vec</a> (char *what, int n, <a class="el" href="structdoublecomplex.html">doublecomplex</a> *vec)</td></tr>
+<tr class="separator:ad40a765de4b05c0ab07d3299aa93b6da"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)</p>
+<p>All rights reserved.</p>
+<p>The source code is distributed under BSD license, see the file License.txt at the top-level directory.</p>
+<pre>
+– SuperLU routine (version 3.1) –
+Univ. of California Berkeley, Xerox Palo Alto Research Center,
+and Lawrence Berkeley National Lab.
+August 1, 2008</pre><pre>Copyright (c) 1994 by Xerox Corporation. All rights reserved.</pre><pre>THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
+EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.</pre><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> </div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad40a765de4b05c0ab07d3299aa93b6da"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abbfe87885f0f664d31b4f6fcf2180127"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aee4cad234e4df121da5386a86754dd4d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zutil_8c_aee4cad234e4df121da5386a86754dd4d_cgraph.png" border="0" usemap="#zutil_8c_aee4cad234e4df121da5386a86754dd4d_cgraph" alt=""/></div>
+<map name="zutil_8c_aee4cad234e4df121da5386a86754dd4d_cgraph" id="zutil_8c_aee4cad234e4df121da5386a86754dd4d_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#ae33b5268048e570c0cdf96498198e821" title="doublecomplexMalloc" alt="" coords="224,5,371,32"/><area shape="rect" id="node3" href="memory_8c.html#a49bbe20102e5b541c8e8963afa2bd46a" title="intMalloc" alt="" coords="260,56,335,83"/><area shape="rect" id="node4" href="memory_8c.html#aaf51f82a79c361236a2d825a59a63403" title="intCalloc" alt="" coords="261,107,334,133"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a6d326511607c3cb8c0b654b675bd3700"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6632ad6334d30a38c9e8b026a3983b65"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Copies a two-dimensional matrix X to another matrix Y.</p>
+
+</div>
+</div>
+<a class="anchor" id="a349f23fdb4e958cc6da8e890554b9868"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abbb9f38872629121898fe588e5cf9c46"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8316b5e4832ca200a14d14f5ed164695"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a43150b5d7a29eebba2f8de5c2a35d645"></a>
+<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#a9d2ddedeb2a3d92e950811c61d0b8796">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#a7987cb2a28ec879b39a90e9e48e29190">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#a5962adac634f3feebe487ad443802d60">Mtype_t</a> </td>
+ <td class="paramname"><em>mtype</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac1c222f7cb3253d97408d9395d6919d4"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acf2b404121b9a70942631f50b85fd8a1"></a>
+<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#a0c4e17b2d5cea33f9991ccc6a6678d62">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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zutil_8c_acf2b404121b9a70942631f50b85fd8a1_cgraph.png" border="0" usemap="#zutil_8c_acf2b404121b9a70942631f50b85fd8a1_cgraph" alt=""/></div>
+<map name="zutil_8c_acf2b404121b9a70942631f50b85fd8a1_cgraph" id="zutil_8c_acf2b404121b9a70942631f50b85fd8a1_cgraph">
+<area shape="rect" id="node2" href="slu__zdefs_8h.html#a723eb34b4ba347bbaa753c5d66cca4ab" title="sp_zgemm" alt="" coords="129,5,215,32"/><area shape="rect" id="node3" href="slu__zdefs_8h.html#a295a004dbce1f1b0aa48e7cb319da461" title="Performs one of the matrix-vector operations y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y..." alt="" coords="264,5,347,32"/><area shape="rect" id="node4" href="input__error_8c.html#a5832852b8f6777484b6f55dd79e67d86" title="input_error" alt="" [...]
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="aa81fbc4bdd835def817191d94fb8b208"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0c645d9e2d757c5f5fa1ecd67f0c2a07"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p><div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dyncontent">
+<div class="center"><img src="zutil_8c_a0c645d9e2d757c5f5fa1ecd67f0c2a07_cgraph.png" border="0" usemap="#zutil_8c_a0c645d9e2d757c5f5fa1ecd67f0c2a07_cgraph" alt=""/></div>
+<map name="zutil_8c_a0c645d9e2d757c5f5fa1ecd67f0c2a07_cgraph" id="zutil_8c_a0c645d9e2d757c5f5fa1ecd67f0c2a07_cgraph">
+<area shape="rect" id="node2" href="dcomplex_8c.html#af701b1c549ee8dcf6767742a91681b55" title="Returns sqrt(z.r^2 + z.i^2) " alt="" coords="166,5,223,32"/></map>
+</div>
+</p>
+
+</div>
+</div>
+<a class="anchor" id="a7f3c67eba79f4d63a7ef19781935985d"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad665640e89334e9f7a57355e030ff63d"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8083f641fd96ede2f54db44d18f984e9"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a12d2264eb0e17728142e651de7cc8f9c"></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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0807017bff32a20ff59820583a9e038d"></a>
+<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>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated on Fri Apr 8 2016 18:40:08 for SuperLU by <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.6
+</small></address>
+</body>
+</html>
diff --git a/SuperLU_5.2.0/DOC/ug.pdf b/SuperLU_5.2.0/DOC/ug.pdf
new file mode 100644
index 0000000..f854405
Binary files /dev/null and b/SuperLU_5.2.0/DOC/ug.pdf differ
diff --git a/SuperLU_5.2.0/DoxyConfig b/SuperLU_5.2.0/DoxyConfig
new file mode 100644
index 0000000..ab8e73a
--- /dev/null
+++ b/SuperLU_5.2.0/DoxyConfig
@@ -0,0 +1,1356 @@
+# 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 = 5.2.0
+
+# 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/ FORTRAN/
+
+# 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 = YES
+
+# 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 = YES
+
+# 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 = YES
+
+# 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/SuperLU_5.2.0/EXAMPLE/._.gitignore b/SuperLU_5.2.0/EXAMPLE/._.gitignore
new file mode 100644
index 0000000..9eaf068
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._.gitignore differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._Makefile b/SuperLU_5.2.0/EXAMPLE/._Makefile
new file mode 100644
index 0000000..95fd6ea
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._Makefile differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._README b/SuperLU_5.2.0/EXAMPLE/._README
new file mode 100644
index 0000000..ee7d1ec
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._README differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._cfgmr.c b/SuperLU_5.2.0/EXAMPLE/._cfgmr.c
new file mode 100644
index 0000000..c8017f4
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._cfgmr.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._cg20.cua b/SuperLU_5.2.0/EXAMPLE/._cg20.cua
new file mode 100755
index 0000000..ddf8235
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._cg20.cua differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._citersol.c b/SuperLU_5.2.0/EXAMPLE/._citersol.c
new file mode 100644
index 0000000..529195b
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._citersol.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._citersol1.c b/SuperLU_5.2.0/EXAMPLE/._citersol1.c
new file mode 100644
index 0000000..55c4478
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._citersol1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._clinsol.c b/SuperLU_5.2.0/EXAMPLE/._clinsol.c
new file mode 100644
index 0000000..31c171a
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._clinsol.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._clinsol1.c b/SuperLU_5.2.0/EXAMPLE/._clinsol1.c
new file mode 100644
index 0000000..f915080
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._clinsol1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._clinsolx.c b/SuperLU_5.2.0/EXAMPLE/._clinsolx.c
new file mode 100644
index 0000000..7eb7bb6
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._clinsolx.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._clinsolx1.c b/SuperLU_5.2.0/EXAMPLE/._clinsolx1.c
new file mode 100644
index 0000000..1417e73
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._clinsolx1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._clinsolx2.c b/SuperLU_5.2.0/EXAMPLE/._clinsolx2.c
new file mode 100644
index 0000000..74ab614
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._clinsolx2.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._clinsolx3.c b/SuperLU_5.2.0/EXAMPLE/._clinsolx3.c
new file mode 100644
index 0000000..86899e9
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._clinsolx3.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._cmat.cua b/SuperLU_5.2.0/EXAMPLE/._cmat.cua
new file mode 100644
index 0000000..63c55f2
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._cmat.cua differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._dfgmr.c b/SuperLU_5.2.0/EXAMPLE/._dfgmr.c
new file mode 100644
index 0000000..1b5e985
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._dfgmr.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._ditersol.c b/SuperLU_5.2.0/EXAMPLE/._ditersol.c
new file mode 100644
index 0000000..e9386ac
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._ditersol.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._ditersol1.c b/SuperLU_5.2.0/EXAMPLE/._ditersol1.c
new file mode 100644
index 0000000..ae8d02c
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._ditersol1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._dlinsol.c b/SuperLU_5.2.0/EXAMPLE/._dlinsol.c
new file mode 100644
index 0000000..f4c6074
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._dlinsol.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._dlinsol1.c b/SuperLU_5.2.0/EXAMPLE/._dlinsol1.c
new file mode 100644
index 0000000..c83ed30
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._dlinsol1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._dlinsolx.c b/SuperLU_5.2.0/EXAMPLE/._dlinsolx.c
new file mode 100644
index 0000000..9ff807e
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._dlinsolx.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._dlinsolx1.c b/SuperLU_5.2.0/EXAMPLE/._dlinsolx1.c
new file mode 100644
index 0000000..d75079c
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._dlinsolx1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._dlinsolx2.c b/SuperLU_5.2.0/EXAMPLE/._dlinsolx2.c
new file mode 100644
index 0000000..d4f1302
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._dlinsolx2.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._dlinsolx3.c b/SuperLU_5.2.0/EXAMPLE/._dlinsolx3.c
new file mode 100644
index 0000000..2509944
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._dlinsolx3.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._fgmr.c b/SuperLU_5.2.0/EXAMPLE/._fgmr.c
new file mode 100644
index 0000000..87cda7a
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._fgmr.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._g20.rua b/SuperLU_5.2.0/EXAMPLE/._g20.rua
new file mode 100644
index 0000000..3c73cc7
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._g20.rua differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._sfgmr.c b/SuperLU_5.2.0/EXAMPLE/._sfgmr.c
new file mode 100644
index 0000000..53d0413
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._sfgmr.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._sitersol.c b/SuperLU_5.2.0/EXAMPLE/._sitersol.c
new file mode 100644
index 0000000..49a86fb
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._sitersol.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._sitersol1.c b/SuperLU_5.2.0/EXAMPLE/._sitersol1.c
new file mode 100644
index 0000000..8e8762e
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._sitersol1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._slinsol.c b/SuperLU_5.2.0/EXAMPLE/._slinsol.c
new file mode 100644
index 0000000..1e19cd7
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._slinsol.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._slinsol1.c b/SuperLU_5.2.0/EXAMPLE/._slinsol1.c
new file mode 100644
index 0000000..8362332
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._slinsol1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._slinsolx.c b/SuperLU_5.2.0/EXAMPLE/._slinsolx.c
new file mode 100644
index 0000000..4170130
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._slinsolx.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._slinsolx1.c b/SuperLU_5.2.0/EXAMPLE/._slinsolx1.c
new file mode 100644
index 0000000..a08b55c
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._slinsolx1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._slinsolx2.c b/SuperLU_5.2.0/EXAMPLE/._slinsolx2.c
new file mode 100644
index 0000000..200fb34
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._slinsolx2.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._slinsolx3.c b/SuperLU_5.2.0/EXAMPLE/._slinsolx3.c
new file mode 100644
index 0000000..ca12ba5
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._slinsolx3.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._sp_ienv.c b/SuperLU_5.2.0/EXAMPLE/._sp_ienv.c
new file mode 100644
index 0000000..db324d2
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._sp_ienv.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._superlu.c b/SuperLU_5.2.0/EXAMPLE/._superlu.c
new file mode 100644
index 0000000..a82a0e6
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._superlu.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._zfgmr.c b/SuperLU_5.2.0/EXAMPLE/._zfgmr.c
new file mode 100644
index 0000000..0959ff7
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._zfgmr.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._zitersol.c b/SuperLU_5.2.0/EXAMPLE/._zitersol.c
new file mode 100644
index 0000000..c5af1b7
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._zitersol.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._zitersol1.c b/SuperLU_5.2.0/EXAMPLE/._zitersol1.c
new file mode 100644
index 0000000..e7d3926
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._zitersol1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._zlinsol.c b/SuperLU_5.2.0/EXAMPLE/._zlinsol.c
new file mode 100644
index 0000000..0abf157
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._zlinsol.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._zlinsol1.c b/SuperLU_5.2.0/EXAMPLE/._zlinsol1.c
new file mode 100644
index 0000000..ae8dd1e
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._zlinsol1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._zlinsolx.c b/SuperLU_5.2.0/EXAMPLE/._zlinsolx.c
new file mode 100644
index 0000000..43da08f
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._zlinsolx.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._zlinsolx1.c b/SuperLU_5.2.0/EXAMPLE/._zlinsolx1.c
new file mode 100644
index 0000000..bee1508
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._zlinsolx1.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._zlinsolx2.c b/SuperLU_5.2.0/EXAMPLE/._zlinsolx2.c
new file mode 100644
index 0000000..718ef11
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._zlinsolx2.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/._zlinsolx3.c b/SuperLU_5.2.0/EXAMPLE/._zlinsolx3.c
new file mode 100644
index 0000000..d25f3bb
Binary files /dev/null and b/SuperLU_5.2.0/EXAMPLE/._zlinsolx3.c differ
diff --git a/SuperLU_5.2.0/EXAMPLE/.gitignore b/SuperLU_5.2.0/EXAMPLE/.gitignore
new file mode 100644
index 0000000..d60e48c
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/.gitignore
@@ -0,0 +1,34 @@
+/*.o
+/superlu
+/citersol
+/citersol1
+/clinsol
+/clinsol1
+/clinsolx
+/clinsolx1
+/clinsolx2
+/clinsolx3
+/ditersol
+/ditersol1
+/dlinsol
+/dlinsol1
+/dlinsolx
+/dlinsolx1
+/dlinsolx2
+/dlinsolx3
+/sitersol
+/sitersol1
+/slinsol
+/slinsol1
+/slinsolx
+/slinsolx1
+/slinsolx2
+/slinsolx3
+/zitersol
+/zitersol1
+/zlinsol
+/zlinsol1
+/zlinsolx
+/zlinsolx1
+/zlinsolx2
+/zlinsolx3
diff --git a/SuperLU_5.2.0/EXAMPLE/Makefile b/SuperLU_5.2.0/EXAMPLE/Makefile
new file mode 100644
index 0000000..7ab70b4
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/Makefile
@@ -0,0 +1,197 @@
+include ../make.inc
+
+#######################################################################
+# This makefile creates the example programs for the linear equation
+# routines in SuperLU. The files are grouped as follows:
+#
+# SLINEXM -- Single precision real example routines
+# DLINEXM -- Double precision real example routines
+# CLINEXM -- Double precision complex example routines
+# ZLINEXM -- Double precision complex example routines
+#
+# Example programs can be generated for all or some of the four different
+# precisions. Enter make followed by one or more of the data types
+# desired. Some examples:
+# make single
+# make single double
+# Alternatively, the command
+# make
+# without any arguments creates all four example programs.
+# The executable files are called
+# slinsol slinsolx
+# dlinsol dlinsolx
+# clinsol clinsolx
+# zlinsol zlinsolx
+#
+# To remove the object files after the executable files have been
+# created, enter
+# make clean
+# On some systems, you can force the source files to be recompiled by
+# entering (for example)
+# make single FRC=FRC
+#
+#######################################################################
+
+HEADER = ../SRC
+
+SLINEXM = slinsol.o
+SLINEXM1 = slinsol1.o
+SLINXEXM = slinsolx.o
+SLINXEXM1 = slinsolx1.o
+SLINXEXM2 = slinsolx2.o
+SLINXEXM3 = slinsolx3.o
+SITSOL = sitersol.o sfgmr.o
+SITSOL1 = sitersol1.o sfgmr.o
+
+DLINEXM = dlinsol.o
+DLINEXM1 = dlinsol1.o
+DLINXEXM = dlinsolx.o
+DLINXEXM1 = dlinsolx1.o
+DLINXEXM2 = dlinsolx2.o
+DLINXEXM3 = dlinsolx3.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
+CLINXEXM3 = clinsolx3.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
+ZLINXEXM3 = zlinsolx3.o
+ZITSOL = zitersol.o zfgmr.o
+ZITSOL1 = zitersol1.o zfgmr.o
+
+
+all: single double complex complex16
+
+single: slinsol slinsol1 slinsolx slinsolx1 slinsolx2 slinsolx3 \
+ sitersol sitersol1
+double: dlinsol dlinsol1 dlinsolx dlinsolx1 dlinsolx2 dlinsolx3 \
+ superlu ditersol ditersol1
+complex: clinsol clinsol1 clinsolx clinsolx1 clinsolx2 clinsolx3 \
+ citersol citersol1
+complex16: zlinsol zlinsol1 zlinsolx zlinsolx1 zlinsolx2 zlinsolx3 \
+ zitersol zitersol1
+
+slinsol: $(SLINEXM) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(SLINEXM) $(LIBS) -lm -o $@
+
+slinsol1: $(SLINEXM1) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(SLINEXM1) $(LIBS) -lm -o $@
+
+slinsolx: $(SLINXEXM) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(SLINXEXM) $(LIBS) -lm -o $@
+
+slinsolx1: $(SLINXEXM1) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(SLINXEXM1) $(LIBS) -lm -o $@
+
+slinsolx2: $(SLINXEXM2) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(SLINXEXM2) $(LIBS) -lm -o $@
+
+slinsolx3: $(SLINXEXM3) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(SLINXEXM3) $(LIBS) -lm -o $@
+
+sitersol: $(SITSOL) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(SITSOL) $(LIBS) -lm -o $@
+
+sitersol1: $(SITSOL1) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(SITSOL1) $(LIBS) -lm -o $@
+
+dlinsol: $(DLINEXM) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(DLINEXM) $(LIBS) -lm -o $@
+
+dlinsol1: $(DLINEXM1) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(DLINEXM1) $(LIBS) -lm -o $@
+
+dlinsolx: $(DLINXEXM) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(DLINXEXM) $(LIBS) -lm -o $@
+
+dlinsolx1: $(DLINXEXM1) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(DLINXEXM1) $(LIBS) -lm -o $@
+
+dlinsolx2: $(DLINXEXM2) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(DLINXEXM2) $(LIBS) -lm -o $@
+
+dlinsolx3: $(DLINXEXM3) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(DLINXEXM3) $(LIBS) -lm -o $@
+
+superlu: $(SUPERLUEXM) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(SUPERLUEXM) $(LIBS) -lm -o $@
+
+ditersol: $(DITSOL) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(DITSOL) $(LIBS) -lm -o $@
+
+ditersol1: $(DITSOL1) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(DITSOL1) $(LIBS) -lm -o $@
+
+clinsol: $(CLINEXM) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(CLINEXM) $(LIBS) -lm -o $@
+
+clinsol1: $(CLINEXM1) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(CLINEXM1) $(LIBS) -lm -o $@
+
+clinsolx: $(CLINXEXM) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(CLINXEXM) $(LIBS) -lm -o $@
+
+clinsolx1: $(CLINXEXM1) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(CLINXEXM1) $(LIBS) -lm -o $@
+
+clinsolx2: $(CLINXEXM2) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(CLINXEXM2) $(LIBS) -lm -o $@
+
+clinsolx3: $(CLINXEXM3) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(CLINXEXM3) $(LIBS) -lm -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 $@
+
+zlinsolx3: $(ZLINXEXM3) $(SUPERLULIB)
+ $(LOADER) $(LOADOPTS) $(ZLINXEXM3) $(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) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
+
+.f.o:
+ $(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
+
+clean:
+ rm -f *.o *linsol *linsol1 *linsolx *linsolx1 *linsolx2 *linsolx3 \
+ superlu *itersol *itersol1
+
+
+
+
diff --git a/SuperLU_5.2.0/EXAMPLE/README b/SuperLU_5.2.0/EXAMPLE/README
new file mode 100644
index 0000000..8330d0e
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/README
@@ -0,0 +1,55 @@
+ SuperLU EXAMPLES
+
+This directory contains sample programs to illustrate how to use
+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
+ linear system.
+ 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.
+ dlinsolx3: use DGSSVX to solve systems repeatedly with the same sparsity
+ pattern and similar numerical values as 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
+
+To run the small 5x5 sample program in Section 1 of the Users' Guide, type:
+ % superlu
+
+To run the real version examples, type:
+ % 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)
+ % dlinsolx3 < g20.rua (or, % slinsolx3 < g20.rua)
+
+To run the complex version examples, type:
+ % 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)
+ % zlinsolx3 < cg20.cua (or, % clinsolx3 < 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/SuperLU_5.2.0/EXAMPLE/cfgmr.c b/SuperLU_5.2.0/EXAMPLE/cfgmr.c
new file mode 100644
index 0000000..cb96f26
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/cfgmr.c
@@ -0,0 +1,344 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/EXAMPLE/cg20.cua
similarity index 100%
rename from EXAMPLE/cg20.cua
rename to SuperLU_5.2.0/EXAMPLE/cg20.cua
diff --git a/SuperLU_5.2.0/EXAMPLE/citersol.c b/SuperLU_5.2.0/EXAMPLE/citersol.c
new file mode 100644
index 0000000..5384e98
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/citersol.c
@@ -0,0 +1,386 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file citersol.c
+ * \brief Example #1 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * 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
+ * dynamically. 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, NULL,
+ 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;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ 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;
+ FILE *fp = stdin;
+
+ 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(fp, &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, &Glu, &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-4;
+ 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/SuperLU_5.2.0/EXAMPLE/citersol1.c b/SuperLU_5.2.0/EXAMPLE/citersol1.c
new file mode 100644
index 0000000..5eb1cdc
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/citersol1.c
@@ -0,0 +1,395 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file citersol1.c
+ * \brief Example #2 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * 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
+ * dynamically. 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, NULL,
+ 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;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ 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;
+ FILE *fp = stdin;
+
+ 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(fp, &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, &Glu, &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/SuperLU_5.2.0/EXAMPLE/clinsol.c b/SuperLU_5.2.0/EXAMPLE/clinsol.c
new file mode 100644
index 0000000..fd6e69d
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/clinsol.c
@@ -0,0 +1,126 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include "slu_cdefs.h"
+
+int main(int argc, char *argv[])
+{
+ SuperMatrix A;
+ NCformat *Astore;
+ complex *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ SuperMatrix L; /* factor L */
+ SCformat *Lstore;
+ SuperMatrix U; /* factor U */
+ NCformat *Ustore;
+ SuperMatrix B;
+ int nrhs, ldx, info, m, n, nnz;
+ complex *xact, *rhs;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Read the matrix in Harwell-Boeing format. */
+ creadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ nrhs = 1;
+ if ( !(rhs = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
+ cCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_C, SLU_GE);
+ xact = complexMalloc(n * nrhs);
+ ldx = n;
+ cGenXtrue(n, nrhs, xact, ldx);
+ cFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ cgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
+
+ if ( info == 0 ) {
+
+ /* This is how you could access the solution matrix. */
+ complex *sol = (complex*) ((DNformat*) B.Store)->nzval;
+
+ /* Compute the infinity norm of the error. */
+ cinf_norm_error(nrhs, &B, xact);
+
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (rhs);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
diff --git a/SuperLU_5.2.0/EXAMPLE/clinsol1.c b/SuperLU_5.2.0/EXAMPLE/clinsol1.c
new file mode 100644
index 0000000..db23619
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/clinsol1.c
@@ -0,0 +1,131 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include "slu_cdefs.h"
+
+int main(int argc, char *argv[])
+{
+ SuperMatrix A;
+ NCformat *Astore;
+ complex *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ SuperMatrix L; /* factor L */
+ SCformat *Lstore;
+ SuperMatrix U; /* factor U */
+ NCformat *Ustore;
+ SuperMatrix B;
+ int nrhs, ldx, info, m, n, nnz;
+ complex *xact, *rhs;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Now we modify the default options to use the symmetric mode. */
+ options.SymmetricMode = YES;
+ options.ColPerm = MMD_AT_PLUS_A;
+ options.DiagPivotThresh = 0.001;
+
+ /* Read the matrix in Harwell-Boeing format. */
+ creadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ nrhs = 1;
+ if ( !(rhs = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
+ cCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_C, SLU_GE);
+ xact = complexMalloc(n * nrhs);
+ ldx = n;
+ cGenXtrue(n, nrhs, xact, ldx);
+ cFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ cgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
+
+ if ( info == 0 ) {
+
+ /* This is how you could access the solution matrix. */
+ complex *sol = (complex*) ((DNformat*) B.Store)->nzval;
+
+ /* Compute the infinity norm of the error. */
+ cinf_norm_error(nrhs, &B, xact);
+
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (rhs);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
diff --git a/SuperLU_5.2.0/EXAMPLE/clinsolx.c b/SuperLU_5.2.0/EXAMPLE/clinsolx.c
new file mode 100644
index 0000000..ba682bb
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/clinsolx.c
@@ -0,0 +1,226 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * August 1, 2008
+ *
+ */
+#include "slu_cdefs.h"
+
+int main(int argc, char *argv[])
+{
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, L, U;
+ SuperMatrix B, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ complex *a;
+ int *asub, *xa;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, m, n, nnz;
+ complex *rhsb, *rhsx, *xact;
+ float *R, *C;
+ float *ferr, *berr;
+ float u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ /* Add more functionalities that the defaults. */
+ options.PivotGrowth = YES; /* Compute reciprocal pivot growth */
+ options.ConditionNumber = YES;/* Compute reciprocal condition number */
+ options.IterRefine = SLU_SINGLE; /* Perform single-precision refinement */
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("CLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ creadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ 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[].");
+ if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* Solve the system and compute the condition number
+ and error bounds using dgssvx. */
+
+ cgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("cgssvx(): info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth == YES )
+ printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber == YES )
+ printf("Recip. condition number = %e\n", rcond);
+ if ( options.IterRefine != NOREFINE ) {
+ printf("Iterative Refinement:\n");
+ printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ 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);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+ 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
+}
+
+
+/*
+ * Parse command line inputs.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ float *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:w:r:u:f:t:p:e:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/clinsolx1.c b/SuperLU_5.2.0/EXAMPLE/clinsolx1.c
new file mode 100644
index 0000000..477aaf4
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/clinsolx1.c
@@ -0,0 +1,257 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_cdefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program CLINSOLX1.
+ *
+ * This example illustrates how to use CGSSVX to solve systems with the same
+ * A but different right-hand side.
+ * In this case, we factorize A only once in the first call to DGSSVX,
+ * and reuse the following data structures in the subsequent call to CGSSVX:
+ * perm_c, perm_r, R, C, L, U.
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, L, U;
+ SuperMatrix B, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ complex *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, m, n, nnz;
+ complex *rhsb, *rhsx, *xact;
+ float *R, *C;
+ float *ferr, *berr;
+ float u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default values for options argument:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("CLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ creadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ 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[].");
+ if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ONLY PERFORM THE LU DECOMPOSITION */
+ B.ncol = 0; /* Indicate not to solve the system */
+ cgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("LU factorization: cgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE THE LINEAR SYSTEM USING THE FACTORED FORM OF A.
+ ------------------------------------------------------------*/
+ options.Fact = FACTORED; /* Indicate the factored form of A is supplied. */
+ B.ncol = nrhs; /* Set the number of right-hand side */
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ cgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("Triangular solve: cgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.IterRefine ) {
+ printf("Iterative Refinement:\n");
+ printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ 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);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+ 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
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ float *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/clinsolx2.c b/SuperLU_5.2.0/EXAMPLE/clinsolx2.c
new file mode 100644
index 0000000..812a938
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/clinsolx2.c
@@ -0,0 +1,293 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_cdefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program CLINSOLX2.
+ *
+ * This example illustrates how to use CGSSVX to solve systems repeatedly
+ * with the same sparsity pattern of matrix A.
+ * In this case, the column permutation vector perm_c is computed once.
+ * The following data structures will be reused in the subsequent call to
+ * CGSSVX: perm_c, etree
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, A1, L, U;
+ SuperMatrix B, B1, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ complex *a, *a1;
+ int *asub, *xa, *asub1, *xa1;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, j, m, n, nnz;
+ complex *rhsb, *rhsb1, *rhsx, *xact;
+ float *R, *C;
+ float *ferr, *berr;
+ float u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ creadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ if ( !(a1 = complexMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
+ if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
+ if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
+ for (i = 0; i < nnz; ++i) {
+ a1[i] = a[i];
+ asub1[i] = asub[i];
+ }
+ for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
+
+ cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ if ( !(rhsb = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+ if ( !(rhsb1 = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
+ 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);
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+ 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[].");
+ if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ------------------------------------------------------------
+ WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
+ ------------------------------------------------------------*/
+ cgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("First system: cgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_Dense_Matrix(&B);
+ if ( lwork >= 0 ) { /* Deallocate storage associated with L and U. */
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
+ ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
+ ------------------------------------------------------------*/
+ options.Fact = SamePattern;
+ StatInit(&stat); /* Initialize the statistics variables. */
+
+ cCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
+ SLU_NC, SLU_C, SLU_GE);
+ cCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_C, SLU_GE);
+
+ cgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("\nSecond system: cgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A1);
+ Destroy_Dense_Matrix(&B1);
+ Destroy_Dense_Matrix(&X);
+ 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
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/clinsolx3.c b/SuperLU_5.2.0/EXAMPLE/clinsolx3.c
new file mode 100644
index 0000000..ead6f3f
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/clinsolx3.c
@@ -0,0 +1,288 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_cdefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program CLINSOLX2.
+ *
+ * This example illustrates how to use CGSSVX to solve systems repeatedly
+ * with the same sparsity pattern and similar values of matrix A.
+ * In this case, the permutation vectors perm_r and perm_c are computed once.
+ * The following data structures will be reused in the subsequent call to
+ * CGSSVX: perm_r, perm_c, etree, L, U.
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, A1, L, U;
+ SuperMatrix B, B1, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu;
+ complex *a, *a1;
+ int *asub, *xa, *asub1, *xa1;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, j, m, n, nnz;
+ complex *rhsb, *rhsb1, *rhsx, *xact;
+ float *R, *C;
+ float *ferr, *berr;
+ float u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ creadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ if ( !(a1 = complexMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
+ if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
+ if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
+ for (i = 0; i < nnz; ++i) {
+ a1[i] = a[i];
+ asub1[i] = asub[i];
+ }
+ for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
+
+ cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ if ( !(rhsb = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+ if ( !(rhsb1 = complexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
+ 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);
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+ 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[].");
+ if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ------------------------------------------------------------
+ WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
+ ------------------------------------------------------------*/
+ cgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("First system: cgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_Dense_Matrix(&B);
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
+ ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
+ ------------------------------------------------------------*/
+ options.Fact = SamePattern_SameRowPerm;
+ StatInit(&stat); /* Initialize the statistics variables. */
+
+ cCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
+ SLU_NC, SLU_C, SLU_GE);
+ cCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_C, SLU_GE);
+
+ cgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("\nSecond system: cgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ complex *sol = (complex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A1);
+ Destroy_Dense_Matrix(&B1);
+ Destroy_Dense_Matrix(&X);
+ if ( lwork == 0 ) { /* Deallocate storage associated with L and U. */
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ } else if ( lwork > 0 ) {
+ SUPERLU_FREE(work);
+ }
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/EXAMPLE/cmat.cua b/SuperLU_5.2.0/EXAMPLE/cmat.cua
similarity index 100%
rename from EXAMPLE/cmat.cua
rename to SuperLU_5.2.0/EXAMPLE/cmat.cua
diff --git a/SuperLU_5.2.0/EXAMPLE/dfgmr.c b/SuperLU_5.2.0/EXAMPLE/dfgmr.c
new file mode 100644
index 0000000..cbfdf57
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/dfgmr.c
@@ -0,0 +1,308 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/EXAMPLE/ditersol.c b/SuperLU_5.2.0/EXAMPLE/ditersol.c
new file mode 100644
index 0000000..1b4deb5
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/ditersol.c
@@ -0,0 +1,384 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file ditersol.c
+ * \brief Example #1 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * 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
+ * dynamically. 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, NULL,
+ 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;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ 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;
+ FILE *fp = stdin;
+
+ 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(fp, &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, &Glu, &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/SuperLU_5.2.0/EXAMPLE/ditersol1.c b/SuperLU_5.2.0/EXAMPLE/ditersol1.c
new file mode 100644
index 0000000..4d88009
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/ditersol1.c
@@ -0,0 +1,393 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file ditersol1.c
+ * \brief Example #2 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * 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
+ * dynamically. 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, NULL,
+ 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;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ 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;
+ FILE *fp = stdin;
+
+ 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(fp, &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, &Glu, &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/SuperLU_5.2.0/EXAMPLE/dlinsol.c b/SuperLU_5.2.0/EXAMPLE/dlinsol.c
new file mode 100644
index 0000000..189824d
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/dlinsol.c
@@ -0,0 +1,126 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include "slu_ddefs.h"
+
+int main(int argc, char *argv[])
+{
+ SuperMatrix A;
+ NCformat *Astore;
+ double *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ SuperMatrix L; /* factor L */
+ SCformat *Lstore;
+ SuperMatrix U; /* factor U */
+ NCformat *Ustore;
+ SuperMatrix B;
+ int nrhs, ldx, info, m, n, nnz;
+ double *xact, *rhs;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Read the matrix in Harwell-Boeing format. */
+ dreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ nrhs = 1;
+ if ( !(rhs = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
+ dCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_D, SLU_GE);
+ xact = doubleMalloc(n * nrhs);
+ ldx = n;
+ dGenXtrue(n, nrhs, xact, ldx);
+ dFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ dgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
+
+ if ( info == 0 ) {
+
+ /* This is how you could access the solution matrix. */
+ double *sol = (double*) ((DNformat*) B.Store)->nzval;
+
+ /* Compute the infinity norm of the error. */
+ dinf_norm_error(nrhs, &B, xact);
+
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (rhs);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
diff --git a/SuperLU_5.2.0/EXAMPLE/dlinsol1.c b/SuperLU_5.2.0/EXAMPLE/dlinsol1.c
new file mode 100644
index 0000000..55d7dea
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/dlinsol1.c
@@ -0,0 +1,131 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include "slu_ddefs.h"
+
+int main(int argc, char *argv[])
+{
+ SuperMatrix A;
+ NCformat *Astore;
+ double *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ SuperMatrix L; /* factor L */
+ SCformat *Lstore;
+ SuperMatrix U; /* factor U */
+ NCformat *Ustore;
+ SuperMatrix B;
+ int nrhs, ldx, info, m, n, nnz;
+ double *xact, *rhs;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Now we modify the default options to use the symmetric mode. */
+ options.SymmetricMode = YES;
+ options.ColPerm = MMD_AT_PLUS_A;
+ options.DiagPivotThresh = 0.001;
+
+ /* Read the matrix in Harwell-Boeing format. */
+ dreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ nrhs = 1;
+ if ( !(rhs = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
+ dCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_D, SLU_GE);
+ xact = doubleMalloc(n * nrhs);
+ ldx = n;
+ dGenXtrue(n, nrhs, xact, ldx);
+ dFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ dgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
+
+ if ( info == 0 ) {
+
+ /* This is how you could access the solution matrix. */
+ double *sol = (double*) ((DNformat*) B.Store)->nzval;
+
+ /* Compute the infinity norm of the error. */
+ dinf_norm_error(nrhs, &B, xact);
+
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (rhs);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
diff --git a/SuperLU_5.2.0/EXAMPLE/dlinsolx.c b/SuperLU_5.2.0/EXAMPLE/dlinsolx.c
new file mode 100644
index 0000000..d128a27
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/dlinsolx.c
@@ -0,0 +1,226 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * August 1, 2008
+ *
+ */
+#include "slu_ddefs.h"
+
+int main(int argc, char *argv[])
+{
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, L, U;
+ SuperMatrix B, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ double *a;
+ int *asub, *xa;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, m, n, nnz;
+ double *rhsb, *rhsx, *xact;
+ double *R, *C;
+ double *ferr, *berr;
+ double u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ /* Add more functionalities that the defaults. */
+ options.PivotGrowth = YES; /* Compute reciprocal pivot growth */
+ options.ConditionNumber = YES;/* Compute reciprocal condition number */
+ options.IterRefine = SLU_DOUBLE; /* Perform double-precision refinement */
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ dreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ 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[].");
+ if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* Solve the system and compute the condition number
+ and error bounds using dgssvx. */
+
+ dgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("dgssvx(): info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ double *sol = (double*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth == YES )
+ printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber == YES )
+ printf("Recip. condition number = %e\n", rcond);
+ if ( options.IterRefine != NOREFINE ) {
+ printf("Iterative Refinement:\n");
+ printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ 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);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+ 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
+}
+
+
+/*
+ * Parse command line inputs.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:w:r:u:f:t:p:e:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/dlinsolx1.c b/SuperLU_5.2.0/EXAMPLE/dlinsolx1.c
new file mode 100644
index 0000000..da67663
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/dlinsolx1.c
@@ -0,0 +1,257 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_ddefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program DLINSOLX1.
+ *
+ * This example illustrates how to use DGSSVX to solve systems with the same
+ * A but different right-hand side.
+ * In this case, we factorize A only once in the first call to DGSSVX,
+ * and reuse the following data structures in the subsequent call to DGSSVX:
+ * perm_c, perm_r, R, C, L, U.
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, L, U;
+ SuperMatrix B, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ double *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, m, n, nnz;
+ double *rhsb, *rhsx, *xact;
+ double *R, *C;
+ double *ferr, *berr;
+ double u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default values for options argument:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ dreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ 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[].");
+ if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ONLY PERFORM THE LU DECOMPOSITION */
+ B.ncol = 0; /* Indicate not to solve the system */
+ dgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("LU factorization: dgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE THE LINEAR SYSTEM USING THE FACTORED FORM OF A.
+ ------------------------------------------------------------*/
+ options.Fact = FACTORED; /* Indicate the factored form of A is supplied. */
+ B.ncol = nrhs; /* Set the number of right-hand side */
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ dgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("Triangular solve: dgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ double *sol = (double*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.IterRefine ) {
+ printf("Iterative Refinement:\n");
+ printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ 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);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+ 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
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/dlinsolx2.c b/SuperLU_5.2.0/EXAMPLE/dlinsolx2.c
new file mode 100644
index 0000000..da74969
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/dlinsolx2.c
@@ -0,0 +1,293 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_ddefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program DLINSOLX2.
+ *
+ * This example illustrates how to use DGSSVX to solve systems repeatedly
+ * with the same sparsity pattern of matrix A.
+ * In this case, the column permutation vector perm_c is computed once.
+ * The following data structures will be reused in the subsequent call to
+ * DGSSVX: perm_c, etree
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, A1, L, U;
+ SuperMatrix B, B1, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ double *a, *a1;
+ int *asub, *xa, *asub1, *xa1;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, j, m, n, nnz;
+ double *rhsb, *rhsb1, *rhsx, *xact;
+ double *R, *C;
+ double *ferr, *berr;
+ double u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ dreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ if ( !(a1 = doubleMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
+ if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
+ if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
+ for (i = 0; i < nnz; ++i) {
+ a1[i] = a[i];
+ asub1[i] = asub[i];
+ }
+ for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
+
+ dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ if ( !(rhsb = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+ if ( !(rhsb1 = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
+ 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);
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+ 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[].");
+ if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ------------------------------------------------------------
+ WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
+ ------------------------------------------------------------*/
+ dgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("First system: dgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ double *sol = (double*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_Dense_Matrix(&B);
+ if ( lwork >= 0 ) { /* Deallocate storage associated with L and U. */
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
+ ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
+ ------------------------------------------------------------*/
+ options.Fact = SamePattern;
+ StatInit(&stat); /* Initialize the statistics variables. */
+
+ dCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
+ SLU_NC, SLU_D, SLU_GE);
+ dCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_D, SLU_GE);
+
+ dgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("\nSecond system: dgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ double *sol = (double*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A1);
+ Destroy_Dense_Matrix(&B1);
+ Destroy_Dense_Matrix(&X);
+ 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
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/dlinsolx3.c b/SuperLU_5.2.0/EXAMPLE/dlinsolx3.c
new file mode 100644
index 0000000..24325dc
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/dlinsolx3.c
@@ -0,0 +1,288 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_ddefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program DLINSOLX2.
+ *
+ * This example illustrates how to use DGSSVX to solve systems repeatedly
+ * with the same sparsity pattern and similar values of matrix A.
+ * In this case, the permutation vectors perm_r and perm_c are computed once.
+ * The following data structures will be reused in the subsequent call to
+ * DGSSVX: perm_r, perm_c, etree, L, U.
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, A1, L, U;
+ SuperMatrix B, B1, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu;
+ double *a, *a1;
+ int *asub, *xa, *asub1, *xa1;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, j, m, n, nnz;
+ double *rhsb, *rhsb1, *rhsx, *xact;
+ double *R, *C;
+ double *ferr, *berr;
+ double u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ dreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ if ( !(a1 = doubleMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
+ if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
+ if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
+ for (i = 0; i < nnz; ++i) {
+ a1[i] = a[i];
+ asub1[i] = asub[i];
+ }
+ for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
+
+ dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ if ( !(rhsb = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+ if ( !(rhsb1 = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
+ 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);
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+ 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[].");
+ if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ------------------------------------------------------------
+ WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
+ ------------------------------------------------------------*/
+ dgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("First system: dgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ double *sol = (double*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_Dense_Matrix(&B);
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
+ ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
+ ------------------------------------------------------------*/
+ options.Fact = SamePattern_SameRowPerm;
+ StatInit(&stat); /* Initialize the statistics variables. */
+
+ dCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
+ SLU_NC, SLU_D, SLU_GE);
+ dCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_D, SLU_GE);
+
+ dgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("\nSecond system: dgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ double *sol = (double*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A1);
+ Destroy_Dense_Matrix(&B1);
+ Destroy_Dense_Matrix(&X);
+ if ( lwork == 0 ) { /* Deallocate storage associated with L and U. */
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ } else if ( lwork > 0 ) {
+ SUPERLU_FREE(work);
+ }
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/fgmr.c b/SuperLU_5.2.0/EXAMPLE/fgmr.c
new file mode 100644
index 0000000..5d69b94
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/fgmr.c
@@ -0,0 +1,273 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+#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/g20.rua b/SuperLU_5.2.0/EXAMPLE/g20.rua
similarity index 100%
rename from EXAMPLE/g20.rua
rename to SuperLU_5.2.0/EXAMPLE/g20.rua
diff --git a/SuperLU_5.2.0/EXAMPLE/sfgmr.c b/SuperLU_5.2.0/EXAMPLE/sfgmr.c
new file mode 100644
index 0000000..e332c69
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/sfgmr.c
@@ -0,0 +1,308 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/EXAMPLE/sitersol.c b/SuperLU_5.2.0/EXAMPLE/sitersol.c
new file mode 100644
index 0000000..3e3c75f
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/sitersol.c
@@ -0,0 +1,384 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file sitersol.c
+ * \brief Example #1 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * 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
+ * dynamically. 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, NULL,
+ 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;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ 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;
+ FILE *fp = stdin;
+
+ 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(fp, &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, &Glu, &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-4;
+ 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/SuperLU_5.2.0/EXAMPLE/sitersol1.c b/SuperLU_5.2.0/EXAMPLE/sitersol1.c
new file mode 100644
index 0000000..a174984
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/sitersol1.c
@@ -0,0 +1,393 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file sitersol1.c
+ * \brief Example #2 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * 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
+ * dynamically. 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, NULL,
+ 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;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ 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;
+ FILE *fp = stdin;
+
+ 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(fp, &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, &Glu, &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/SuperLU_5.2.0/EXAMPLE/slinsol.c b/SuperLU_5.2.0/EXAMPLE/slinsol.c
new file mode 100644
index 0000000..86a3141
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/slinsol.c
@@ -0,0 +1,126 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include "slu_sdefs.h"
+
+int main(int argc, char *argv[])
+{
+ SuperMatrix A;
+ NCformat *Astore;
+ float *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ SuperMatrix L; /* factor L */
+ SCformat *Lstore;
+ SuperMatrix U; /* factor U */
+ NCformat *Ustore;
+ SuperMatrix B;
+ int nrhs, ldx, info, m, n, nnz;
+ float *xact, *rhs;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Read the matrix in Harwell-Boeing format. */
+ sreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ nrhs = 1;
+ if ( !(rhs = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
+ sCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_S, SLU_GE);
+ xact = floatMalloc(n * nrhs);
+ ldx = n;
+ sGenXtrue(n, nrhs, xact, ldx);
+ sFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ sgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
+
+ if ( info == 0 ) {
+
+ /* This is how you could access the solution matrix. */
+ float *sol = (float*) ((DNformat*) B.Store)->nzval;
+
+ /* Compute the infinity norm of the error. */
+ sinf_norm_error(nrhs, &B, xact);
+
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (rhs);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
diff --git a/SuperLU_5.2.0/EXAMPLE/slinsol1.c b/SuperLU_5.2.0/EXAMPLE/slinsol1.c
new file mode 100644
index 0000000..bf6b4fc
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/slinsol1.c
@@ -0,0 +1,131 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include "slu_sdefs.h"
+
+int main(int argc, char *argv[])
+{
+ SuperMatrix A;
+ NCformat *Astore;
+ float *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ SuperMatrix L; /* factor L */
+ SCformat *Lstore;
+ SuperMatrix U; /* factor U */
+ NCformat *Ustore;
+ SuperMatrix B;
+ int nrhs, ldx, info, m, n, nnz;
+ float *xact, *rhs;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Now we modify the default options to use the symmetric mode. */
+ options.SymmetricMode = YES;
+ options.ColPerm = MMD_AT_PLUS_A;
+ options.DiagPivotThresh = 0.001;
+
+ /* Read the matrix in Harwell-Boeing format. */
+ sreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ nrhs = 1;
+ if ( !(rhs = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
+ sCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_S, SLU_GE);
+ xact = floatMalloc(n * nrhs);
+ ldx = n;
+ sGenXtrue(n, nrhs, xact, ldx);
+ sFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ sgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
+
+ if ( info == 0 ) {
+
+ /* This is how you could access the solution matrix. */
+ float *sol = (float*) ((DNformat*) B.Store)->nzval;
+
+ /* Compute the infinity norm of the error. */
+ sinf_norm_error(nrhs, &B, xact);
+
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (rhs);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
diff --git a/SuperLU_5.2.0/EXAMPLE/slinsolx.c b/SuperLU_5.2.0/EXAMPLE/slinsolx.c
new file mode 100644
index 0000000..d26c954
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/slinsolx.c
@@ -0,0 +1,226 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * August 1, 2008
+ *
+ */
+#include "slu_sdefs.h"
+
+int main(int argc, char *argv[])
+{
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, L, U;
+ SuperMatrix B, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ float *a;
+ int *asub, *xa;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, m, n, nnz;
+ float *rhsb, *rhsx, *xact;
+ float *R, *C;
+ float *ferr, *berr;
+ float u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ /* Add more functionalities that the defaults. */
+ options.PivotGrowth = YES; /* Compute reciprocal pivot growth */
+ options.ConditionNumber = YES;/* Compute reciprocal condition number */
+ options.IterRefine = SLU_SINGLE; /* Perform single-precision refinement */
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("SLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ sreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ 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[].");
+ if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* Solve the system and compute the condition number
+ and error bounds using dgssvx. */
+
+ sgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("sgssvx(): info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ float *sol = (float*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth == YES )
+ printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber == YES )
+ printf("Recip. condition number = %e\n", rcond);
+ if ( options.IterRefine != NOREFINE ) {
+ printf("Iterative Refinement:\n");
+ printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ 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);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+ 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
+}
+
+
+/*
+ * Parse command line inputs.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ float *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:w:r:u:f:t:p:e:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/slinsolx1.c b/SuperLU_5.2.0/EXAMPLE/slinsolx1.c
new file mode 100644
index 0000000..8c79ccb
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/slinsolx1.c
@@ -0,0 +1,257 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_sdefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program SLINSOLX1.
+ *
+ * This example illustrates how to use SGSSVX to solve systems with the same
+ * A but different right-hand side.
+ * In this case, we factorize A only once in the first call to DGSSVX,
+ * and reuse the following data structures in the subsequent call to SGSSVX:
+ * perm_c, perm_r, R, C, L, U.
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, L, U;
+ SuperMatrix B, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ float *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, m, n, nnz;
+ float *rhsb, *rhsx, *xact;
+ float *R, *C;
+ float *ferr, *berr;
+ float u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default values for options argument:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("SLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ sreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ 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[].");
+ if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ONLY PERFORM THE LU DECOMPOSITION */
+ B.ncol = 0; /* Indicate not to solve the system */
+ sgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("LU factorization: sgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE THE LINEAR SYSTEM USING THE FACTORED FORM OF A.
+ ------------------------------------------------------------*/
+ options.Fact = FACTORED; /* Indicate the factored form of A is supplied. */
+ B.ncol = nrhs; /* Set the number of right-hand side */
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ sgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("Triangular solve: sgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ float *sol = (float*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.IterRefine ) {
+ printf("Iterative Refinement:\n");
+ printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ 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);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+ 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
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ float *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/slinsolx2.c b/SuperLU_5.2.0/EXAMPLE/slinsolx2.c
new file mode 100644
index 0000000..b0f2eb4
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/slinsolx2.c
@@ -0,0 +1,293 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_sdefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program SLINSOLX2.
+ *
+ * This example illustrates how to use SGSSVX to solve systems repeatedly
+ * with the same sparsity pattern of matrix A.
+ * In this case, the column permutation vector perm_c is computed once.
+ * The following data structures will be reused in the subsequent call to
+ * SGSSVX: perm_c, etree
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, A1, L, U;
+ SuperMatrix B, B1, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ float *a, *a1;
+ int *asub, *xa, *asub1, *xa1;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, j, m, n, nnz;
+ float *rhsb, *rhsb1, *rhsx, *xact;
+ float *R, *C;
+ float *ferr, *berr;
+ float u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ sreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ if ( !(a1 = floatMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
+ if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
+ if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
+ for (i = 0; i < nnz; ++i) {
+ a1[i] = a[i];
+ asub1[i] = asub[i];
+ }
+ for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
+
+ sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ if ( !(rhsb = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+ if ( !(rhsb1 = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
+ 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);
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+ 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[].");
+ if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ------------------------------------------------------------
+ WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
+ ------------------------------------------------------------*/
+ sgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("First system: sgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ float *sol = (float*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_Dense_Matrix(&B);
+ if ( lwork >= 0 ) { /* Deallocate storage associated with L and U. */
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
+ ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
+ ------------------------------------------------------------*/
+ options.Fact = SamePattern;
+ StatInit(&stat); /* Initialize the statistics variables. */
+
+ sCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
+ SLU_NC, SLU_S, SLU_GE);
+ sCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_S, SLU_GE);
+
+ sgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("\nSecond system: sgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ float *sol = (float*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A1);
+ Destroy_Dense_Matrix(&B1);
+ Destroy_Dense_Matrix(&X);
+ 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
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/slinsolx3.c b/SuperLU_5.2.0/EXAMPLE/slinsolx3.c
new file mode 100644
index 0000000..9df622d
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/slinsolx3.c
@@ -0,0 +1,288 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_sdefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program SLINSOLX2.
+ *
+ * This example illustrates how to use SGSSVX to solve systems repeatedly
+ * with the same sparsity pattern and similar values of matrix A.
+ * In this case, the permutation vectors perm_r and perm_c are computed once.
+ * The following data structures will be reused in the subsequent call to
+ * SGSSVX: perm_r, perm_c, etree, L, U.
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, A1, L, U;
+ SuperMatrix B, B1, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu;
+ float *a, *a1;
+ int *asub, *xa, *asub1, *xa1;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, j, m, n, nnz;
+ float *rhsb, *rhsb1, *rhsx, *xact;
+ float *R, *C;
+ float *ferr, *berr;
+ float u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ sreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ if ( !(a1 = floatMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
+ if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
+ if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
+ for (i = 0; i < nnz; ++i) {
+ a1[i] = a[i];
+ asub1[i] = asub[i];
+ }
+ for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
+
+ sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ if ( !(rhsb = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+ if ( !(rhsb1 = floatMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
+ 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);
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+ 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[].");
+ if ( !(ferr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (float *) SUPERLU_MALLOC(nrhs * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ------------------------------------------------------------
+ WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
+ ------------------------------------------------------------*/
+ sgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("First system: sgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ float *sol = (float*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_Dense_Matrix(&B);
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
+ ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
+ ------------------------------------------------------------*/
+ options.Fact = SamePattern_SameRowPerm;
+ StatInit(&stat); /* Initialize the statistics variables. */
+
+ sCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
+ SLU_NC, SLU_S, SLU_GE);
+ sCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_S, SLU_GE);
+
+ sgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("\nSecond system: sgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ float *sol = (float*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A1);
+ Destroy_Dense_Matrix(&B1);
+ Destroy_Dense_Matrix(&X);
+ if ( lwork == 0 ) { /* Deallocate storage associated with L and U. */
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ } else if ( lwork > 0 ) {
+ SUPERLU_FREE(work);
+ }
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/sp_ienv.c b/SuperLU_5.2.0/EXAMPLE/sp_ienv.c
new file mode 100644
index 0000000..f8bab39
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/sp_ienv.c
@@ -0,0 +1,89 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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"
+
+/*! \brief
+
+ <pre>
+ Purpose
+ =======
+
+ sp_ienv() is inquired to choose machine-dependent parameters for the
+ local environment. See ISPEC for a description of the parameters.
+
+ 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.
+
+ Arguments
+ =========
+
+ 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.
+
+ (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 (1);
+ case 2: return (1);
+ case 3: return (200);
+ case 4: return (200);
+ case 5: return (100);
+ case 6: return (30);
+ case 7: return (10);
+ }
+
+ /* Invalid value for ISPEC */
+ i = 1;
+ input_error("sp_ienv", &i);
+ return 0;
+
+} /* sp_ienv_ */
+
diff --git a/SuperLU_5.2.0/EXAMPLE/superlu.c b/SuperLU_5.2.0/EXAMPLE/superlu.c
new file mode 100644
index 0000000..fd42a6a
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/superlu.c
@@ -0,0 +1,94 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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"
+
+main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * 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.
+ *
+ */
+ SuperMatrix A, L, U, B;
+ double *a, *rhs;
+ double s, u, p, e, r, l;
+ int *asub, *xa;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int nrhs, info, i, m, n, nnz, permc_spec;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+
+ /* Initialize matrix A. */
+ m = n = 5;
+ nnz = 12;
+ if ( !(a = doubleMalloc(nnz)) ) ABORT("Malloc fails for a[].");
+ if ( !(asub = intMalloc(nnz)) ) ABORT("Malloc fails for asub[].");
+ if ( !(xa = intMalloc(n+1)) ) ABORT("Malloc fails for xa[].");
+ s = 19.0; u = 21.0; p = 16.0; e = 5.0; r = 18.0; l = 12.0;
+ a[0] = s; a[1] = l; a[2] = l; a[3] = u; a[4] = l; a[5] = l;
+ a[6] = u; a[7] = p; a[8] = u; a[9] = e; a[10]= u; a[11]= r;
+ asub[0] = 0; asub[1] = 1; asub[2] = 4; asub[3] = 1;
+ asub[4] = 2; asub[5] = 4; asub[6] = 0; asub[7] = 2;
+ asub[8] = 0; asub[9] = 3; asub[10]= 3; asub[11]= 4;
+ xa[0] = 0; xa[1] = 3; xa[2] = 6; xa[3] = 8; xa[4] = 10; xa[5] = 12;
+
+ /* Create matrix A in the format expected by SuperLU. */
+ dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
+
+ /* Create right-hand side matrix B. */
+ nrhs = 1;
+ if ( !(rhs = doubleMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
+ for (i = 0; i < m; ++i) rhs[i] = 1.0;
+ dCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_D, SLU_GE);
+
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+
+ /* Set the default input options. */
+ set_default_options(&options);
+ options.ColPerm = NATURAL;
+
+ /* 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);
+ dPrint_CompCol_Matrix("U", &U);
+ dPrint_SuperNode_Matrix("L", &L);
+ print_int_vec("\nperm_r", m, perm_r);
+
+ /* De-allocate storage */
+ SUPERLU_FREE (rhs);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ StatFree(&stat);
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/zfgmr.c b/SuperLU_5.2.0/EXAMPLE/zfgmr.c
new file mode 100644
index 0000000..733c05a
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/zfgmr.c
@@ -0,0 +1,344 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/EXAMPLE/zitersol.c b/SuperLU_5.2.0/EXAMPLE/zitersol.c
new file mode 100644
index 0000000..14ee4e4
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/zitersol.c
@@ -0,0 +1,386 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file zitersol.c
+ * \brief Example #1 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * 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
+ * dynamically. 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, NULL,
+ 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;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ 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;
+ FILE *fp = stdin;
+
+ 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(fp, &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, &Glu, &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/SuperLU_5.2.0/EXAMPLE/zitersol1.c b/SuperLU_5.2.0/EXAMPLE/zitersol1.c
new file mode 100644
index 0000000..468c7fa
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/zitersol1.c
@@ -0,0 +1,395 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file zitersol1.c
+ * \brief Example #2 showing how to use ILU to precondition GMRES
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * 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
+ * dynamically. 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, NULL,
+ 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;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ 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;
+ FILE *fp = stdin;
+
+ 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(fp, &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, &Glu, &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/SuperLU_5.2.0/EXAMPLE/zlinsol.c b/SuperLU_5.2.0/EXAMPLE/zlinsol.c
new file mode 100644
index 0000000..76454d1
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/zlinsol.c
@@ -0,0 +1,126 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- 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"
+
+int main(int argc, char *argv[])
+{
+ SuperMatrix A;
+ NCformat *Astore;
+ doublecomplex *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ SuperMatrix L; /* factor L */
+ SCformat *Lstore;
+ SuperMatrix U; /* factor U */
+ NCformat *Ustore;
+ SuperMatrix B;
+ int nrhs, ldx, info, m, n, nnz;
+ doublecomplex *xact, *rhs;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Read the matrix in Harwell-Boeing format. */
+ zreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ nrhs = 1;
+ if ( !(rhs = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
+ zCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_Z, SLU_GE);
+ xact = doublecomplexMalloc(n * nrhs);
+ ldx = n;
+ zGenXtrue(n, nrhs, xact, ldx);
+ zFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ zgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
+
+ if ( info == 0 ) {
+
+ /* This is how you could access the solution matrix. */
+ doublecomplex *sol = (doublecomplex*) ((DNformat*) B.Store)->nzval;
+
+ /* Compute the infinity norm of the error. */
+ zinf_norm_error(nrhs, &B, xact);
+
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (rhs);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
diff --git a/SuperLU_5.2.0/EXAMPLE/zlinsol1.c b/SuperLU_5.2.0/EXAMPLE/zlinsol1.c
new file mode 100644
index 0000000..3974d4d
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/zlinsol1.c
@@ -0,0 +1,131 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- 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"
+
+int main(int argc, char *argv[])
+{
+ SuperMatrix A;
+ NCformat *Astore;
+ doublecomplex *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ SuperMatrix L; /* factor L */
+ SCformat *Lstore;
+ SuperMatrix U; /* factor U */
+ NCformat *Ustore;
+ SuperMatrix B;
+ int nrhs, ldx, info, m, n, nnz;
+ doublecomplex *xact, *rhs;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Now we modify the default options to use the symmetric mode. */
+ options.SymmetricMode = YES;
+ options.ColPerm = MMD_AT_PLUS_A;
+ options.DiagPivotThresh = 0.001;
+
+ /* Read the matrix in Harwell-Boeing format. */
+ zreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ nrhs = 1;
+ if ( !(rhs = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhs[].");
+ zCreate_Dense_Matrix(&B, m, nrhs, rhs, m, SLU_DN, SLU_Z, SLU_GE);
+ xact = doublecomplexMalloc(n * nrhs);
+ ldx = n;
+ zGenXtrue(n, nrhs, xact, ldx);
+ zFillRHS(options.Trans, nrhs, xact, ldx, &A, &B);
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ zgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
+
+ if ( info == 0 ) {
+
+ /* This is how you could access the solution matrix. */
+ doublecomplex *sol = (doublecomplex*) ((DNformat*) B.Store)->nzval;
+
+ /* Compute the infinity norm of the error. */
+ zinf_norm_error(nrhs, &B, xact);
+
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (rhs);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
diff --git a/SuperLU_5.2.0/EXAMPLE/zlinsolx.c b/SuperLU_5.2.0/EXAMPLE/zlinsolx.c
new file mode 100644
index 0000000..b916bd3
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/zlinsolx.c
@@ -0,0 +1,226 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * August 1, 2008
+ *
+ */
+#include "slu_zdefs.h"
+
+int main(int argc, char *argv[])
+{
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, L, U;
+ SuperMatrix B, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ doublecomplex *a;
+ int *asub, *xa;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, m, n, nnz;
+ doublecomplex *rhsb, *rhsx, *xact;
+ double *R, *C;
+ double *ferr, *berr;
+ double u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ /* Add more functionalities that the defaults. */
+ options.PivotGrowth = YES; /* Compute reciprocal pivot growth */
+ options.ConditionNumber = YES;/* Compute reciprocal condition number */
+ options.IterRefine = SLU_DOUBLE; /* Perform double-precision refinement */
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("ZLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ zreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ 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[].");
+ if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* Solve the system and compute the condition number
+ and error bounds using dgssvx. */
+
+ zgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("zgssvx(): info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth == YES )
+ printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber == YES )
+ printf("Recip. condition number = %e\n", rcond);
+ if ( options.IterRefine != NOREFINE ) {
+ printf("Iterative Refinement:\n");
+ printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ 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);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+ 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
+}
+
+
+/*
+ * Parse command line inputs.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:w:r:u:f:t:p:e:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/zlinsolx1.c b/SuperLU_5.2.0/EXAMPLE/zlinsolx1.c
new file mode 100644
index 0000000..843772e
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/zlinsolx1.c
@@ -0,0 +1,257 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_zdefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program ZLINSOLX1.
+ *
+ * This example illustrates how to use ZGSSVX to solve systems with the same
+ * A but different right-hand side.
+ * In this case, we factorize A only once in the first call to DGSSVX,
+ * and reuse the following data structures in the subsequent call to ZGSSVX:
+ * perm_c, perm_r, R, C, L, U.
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, L, U;
+ SuperMatrix B, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ doublecomplex *a;
+ int *asub, *xa;
+ int *perm_c; /* column permutation vector */
+ int *perm_r; /* row permutations from partial pivoting */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, m, n, nnz;
+ doublecomplex *rhsb, *rhsx, *xact;
+ double *R, *C;
+ double *ferr, *berr;
+ double u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default values for options argument:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("ZLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ zreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+
+ zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ 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[].");
+ if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ONLY PERFORM THE LU DECOMPOSITION */
+ B.ncol = 0; /* Indicate not to solve the system */
+ zgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("LU factorization: zgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE THE LINEAR SYSTEM USING THE FACTORED FORM OF A.
+ ------------------------------------------------------------*/
+ options.Fact = FACTORED; /* Indicate the factored form of A is supplied. */
+ B.ncol = nrhs; /* Set the number of right-hand side */
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ zgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("Triangular solve: zgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.IterRefine ) {
+ printf("Iterative Refinement:\n");
+ printf("%8s%8s%16s%16s\n", "rhs", "Steps", "FERR", "BERR");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ 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);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+ 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
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/zlinsolx2.c b/SuperLU_5.2.0/EXAMPLE/zlinsolx2.c
new file mode 100644
index 0000000..aa1069a
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/zlinsolx2.c
@@ -0,0 +1,293 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_zdefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program ZLINSOLX2.
+ *
+ * This example illustrates how to use ZGSSVX to solve systems repeatedly
+ * with the same sparsity pattern of matrix A.
+ * In this case, the column permutation vector perm_c is computed once.
+ * The following data structures will be reused in the subsequent call to
+ * ZGSSVX: perm_c, etree
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, A1, L, U;
+ SuperMatrix B, B1, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu; /* facilitate multiple factorizations with
+ SamePattern_SameRowPerm */
+ doublecomplex *a, *a1;
+ int *asub, *xa, *asub1, *xa1;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, j, m, n, nnz;
+ doublecomplex *rhsb, *rhsb1, *rhsx, *xact;
+ double *R, *C;
+ double *ferr, *berr;
+ double u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ zreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ if ( !(a1 = doublecomplexMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
+ if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
+ if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
+ for (i = 0; i < nnz; ++i) {
+ a1[i] = a[i];
+ asub1[i] = asub[i];
+ }
+ for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
+
+ zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ if ( !(rhsb = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+ if ( !(rhsb1 = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
+ 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);
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+ 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[].");
+ if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ------------------------------------------------------------
+ WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
+ ------------------------------------------------------------*/
+ zgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("First system: zgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_Dense_Matrix(&B);
+ if ( lwork >= 0 ) { /* Deallocate storage associated with L and U. */
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
+ ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
+ ------------------------------------------------------------*/
+ options.Fact = SamePattern;
+ StatInit(&stat); /* Initialize the statistics variables. */
+
+ zCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
+ SLU_NC, SLU_Z, SLU_GE);
+ zCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_Z, SLU_GE);
+
+ zgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("\nSecond system: zgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A1);
+ Destroy_Dense_Matrix(&B1);
+ Destroy_Dense_Matrix(&X);
+ 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
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/EXAMPLE/zlinsolx3.c b/SuperLU_5.2.0/EXAMPLE/zlinsolx3.c
new file mode 100644
index 0000000..94b298f
--- /dev/null
+++ b/SuperLU_5.2.0/EXAMPLE/zlinsolx3.c
@@ -0,0 +1,288 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: July 10, 2015
+ *
+ */
+#include "slu_zdefs.h"
+
+int main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * The driver program ZLINSOLX2.
+ *
+ * This example illustrates how to use ZGSSVX to solve systems repeatedly
+ * with the same sparsity pattern and similar values of matrix A.
+ * In this case, the permutation vectors perm_r and perm_c are computed once.
+ * The following data structures will be reused in the subsequent call to
+ * ZGSSVX: perm_r, perm_c, etree, L, U.
+ *
+ */
+ char equed[1];
+ yes_no_t equil;
+ trans_t trans;
+ SuperMatrix A, A1, L, U;
+ SuperMatrix B, B1, X;
+ NCformat *Astore;
+ NCformat *Ustore;
+ SCformat *Lstore;
+ GlobalLU_t Glu;
+ doublecomplex *a, *a1;
+ int *asub, *xa, *asub1, *xa1;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree;
+ void *work;
+ int info, lwork, nrhs, ldx;
+ int i, j, m, n, nnz;
+ doublecomplex *rhsb, *rhsb1, *rhsx, *xact;
+ double *R, *C;
+ double *ferr, *berr;
+ double u, rpg, rcond;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ FILE *fp = stdin;
+
+ extern void parse_command_line();
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Enter main()");
+#endif
+
+ /* Defaults */
+ lwork = 0;
+ nrhs = 1;
+ equil = YES;
+ u = 1.0;
+ trans = NOTRANS;
+
+ /* Set the default input options:
+ options.Fact = DOFACT;
+ options.Equil = YES;
+ options.ColPerm = COLAMD;
+ options.DiagPivotThresh = 1.0;
+ options.Trans = NOTRANS;
+ options.IterRefine = NOREFINE;
+ options.SymmetricMode = NO;
+ options.PivotGrowth = NO;
+ options.ConditionNumber = NO;
+ options.PrintStat = YES;
+ */
+ set_default_options(&options);
+
+ /* Can use command line input to modify the defaults. */
+ parse_command_line(argc, argv, &lwork, &u, &equil, &trans);
+ options.Equil = equil;
+ options.DiagPivotThresh = u;
+ options.Trans = trans;
+
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ ABORT("DLINSOLX: cannot allocate work[]");
+ }
+ }
+
+ /* Read matrix A from a file in Harwell-Boeing format.*/
+ zreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ if ( !(a1 = doublecomplexMalloc(nnz)) ) ABORT("Malloc fails for a1[].");
+ if ( !(asub1 = intMalloc(nnz)) ) ABORT("Malloc fails for asub1[].");
+ if ( !(xa1 = intMalloc(n+1)) ) ABORT("Malloc fails for xa1[].");
+ for (i = 0; i < nnz; ++i) {
+ a1[i] = a[i];
+ asub1[i] = asub[i];
+ }
+ for (i = 0; i < n+1; ++i) xa1[i] = xa[i];
+
+ zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
+ Astore = A.Store;
+ printf("Dimension %dx%d; # nonzeros %d\n", A.nrow, A.ncol, Astore->nnz);
+
+ if ( !(rhsb = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb[].");
+ if ( !(rhsb1 = doublecomplexMalloc(m * nrhs)) ) ABORT("Malloc fails for rhsb1[].");
+ 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);
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < m; ++i) rhsb1[i+j*m] = rhsb[i+j*m];
+
+ if ( !(perm_c = intMalloc(n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(perm_r = intMalloc(m)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(etree = intMalloc(n)) ) ABORT("Malloc fails for etree[].");
+ 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[].");
+ if ( !(ferr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for ferr[].");
+ if ( !(berr = (double *) SUPERLU_MALLOC(nrhs * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for berr[].");
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* ------------------------------------------------------------
+ WE SOLVE THE LINEAR SYSTEM FOR THE FIRST TIME: AX = B
+ ------------------------------------------------------------*/
+ zgssvx(&options, &A, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("First system: zgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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);
+
+ 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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+ Destroy_CompCol_Matrix(&A);
+ Destroy_Dense_Matrix(&B);
+
+ /* ------------------------------------------------------------
+ NOW WE SOLVE ANOTHER LINEAR SYSTEM: A1*X = B1
+ ONLY THE SPARSITY PATTERN OF A1 IS THE SAME AS THAT OF A.
+ ------------------------------------------------------------*/
+ options.Fact = SamePattern_SameRowPerm;
+ StatInit(&stat); /* Initialize the statistics variables. */
+
+ zCreate_CompCol_Matrix(&A1, m, n, nnz, a1, asub1, xa1,
+ SLU_NC, SLU_Z, SLU_GE);
+ zCreate_Dense_Matrix(&B1, m, nrhs, rhsb1, m, SLU_DN, SLU_Z, SLU_GE);
+
+ zgssvx(&options, &A1, perm_c, perm_r, etree, equed, R, C,
+ &L, &U, work, lwork, &B1, &X, &rpg, &rcond, ferr, berr,
+ &Glu, &mem_usage, &stat, &info);
+
+ printf("\nSecond system: zgssvx() returns info %d\n", info);
+
+ if ( info == 0 || info == n+1 ) {
+
+ /* This is how you could access the solution matrix. */
+ doublecomplex *sol = (doublecomplex*) ((DNformat*) X.Store)->nzval;
+
+ if ( options.PivotGrowth ) printf("Recip. pivot growth = %e\n", rpg);
+ if ( options.ConditionNumber )
+ printf("Recip. condition number = %e\n", rcond);
+ Lstore = (SCformat *) L.Store;
+ Ustore = (NCformat *) U.Store;
+ 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\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");
+ for (i = 0; i < nrhs; ++i)
+ printf("%8d%8d%16e%16e\n", i+1, stat.RefineSteps, ferr[i], berr[i]);
+ }
+ fflush(stdout);
+ } else if ( info > 0 && lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n", info - n);
+ }
+
+ if ( options.PrintStat ) StatPrint(&stat);
+ StatFree(&stat);
+
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ Destroy_CompCol_Matrix(&A1);
+ Destroy_Dense_Matrix(&B1);
+ Destroy_Dense_Matrix(&X);
+ if ( lwork == 0 ) { /* Deallocate storage associated with L and U. */
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ } else if ( lwork > 0 ) {
+ SUPERLU_FREE(work);
+ }
+
+#if ( DEBUGlevel>=1 )
+ CHECK_MALLOC("Exit main()");
+#endif
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+void
+parse_command_line(int argc, char *argv[], int *lwork,
+ double *u, yes_no_t *equil, trans_t *trans )
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "hl:u:e:t:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-l <int> - length of work[*] array\n");
+ printf("\t-u <int> - pivoting threshold\n");
+ printf("\t-e <0 or 1> - equilibrate or not\n");
+ printf("\t-t <0 or 1> - solve transposed system or not\n");
+ exit(1);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'e': *equil = atoi(optarg);
+ break;
+ case 't': *trans = atoi(optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/FORTRAN/._Makefile b/SuperLU_5.2.0/FORTRAN/._Makefile
new file mode 100644
index 0000000..9438733
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._Makefile differ
diff --git a/SuperLU_5.2.0/FORTRAN/._README b/SuperLU_5.2.0/FORTRAN/._README
new file mode 100644
index 0000000..be8a21b
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._README differ
diff --git a/SuperLU_5.2.0/FORTRAN/._c_fortran_cgssv.c b/SuperLU_5.2.0/FORTRAN/._c_fortran_cgssv.c
new file mode 100644
index 0000000..5b08379
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._c_fortran_cgssv.c differ
diff --git a/SuperLU_5.2.0/FORTRAN/._c_fortran_dgssv.c b/SuperLU_5.2.0/FORTRAN/._c_fortran_dgssv.c
new file mode 100644
index 0000000..32d266c
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._c_fortran_dgssv.c differ
diff --git a/SuperLU_5.2.0/FORTRAN/._c_fortran_sgssv.c b/SuperLU_5.2.0/FORTRAN/._c_fortran_sgssv.c
new file mode 100644
index 0000000..3fbd293
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._c_fortran_sgssv.c differ
diff --git a/SuperLU_5.2.0/FORTRAN/._c_fortran_zgssv.c b/SuperLU_5.2.0/FORTRAN/._c_fortran_zgssv.c
new file mode 100644
index 0000000..c62ee41
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._c_fortran_zgssv.c differ
diff --git a/SuperLU_5.2.0/FORTRAN/._f77_main.f b/SuperLU_5.2.0/FORTRAN/._f77_main.f
new file mode 100644
index 0000000..874ea06
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._f77_main.f differ
diff --git a/SuperLU_5.2.0/FORTRAN/._f77exm.out b/SuperLU_5.2.0/FORTRAN/._f77exm.out
new file mode 100644
index 0000000..26bc236
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._f77exm.out differ
diff --git a/SuperLU_5.2.0/FORTRAN/._hbcode1.f b/SuperLU_5.2.0/FORTRAN/._hbcode1.f
new file mode 100644
index 0000000..c7bff95
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._hbcode1.f differ
diff --git a/SuperLU_5.2.0/FORTRAN/._test_omp.F b/SuperLU_5.2.0/FORTRAN/._test_omp.F
new file mode 100644
index 0000000..59aef0f
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._test_omp.F differ
diff --git a/SuperLU_5.2.0/FORTRAN/._z_f77_main.f b/SuperLU_5.2.0/FORTRAN/._z_f77_main.f
new file mode 100644
index 0000000..e69d5d3
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._z_f77_main.f differ
diff --git a/SuperLU_5.2.0/FORTRAN/._zhbcode1.f b/SuperLU_5.2.0/FORTRAN/._zhbcode1.f
new file mode 100644
index 0000000..2e801d7
Binary files /dev/null and b/SuperLU_5.2.0/FORTRAN/._zhbcode1.f differ
diff --git a/SuperLU_5.2.0/FORTRAN/Makefile b/SuperLU_5.2.0/FORTRAN/Makefile
new file mode 100644
index 0000000..f070c9b
--- /dev/null
+++ b/SuperLU_5.2.0/FORTRAN/Makefile
@@ -0,0 +1,40 @@
+include ../make.inc
+
+#######################################################################
+# This makefile creates the Fortran example interface to use the
+# C routines in SuperLU.
+#######################################################################
+
+HEADER = ../SRC
+LIBS += -lm
+
+# double real
+DF77EXM = f77_main.o hbcode1.o c_fortran_dgssv.o
+TEST_OMP= test_omp.o hbcode1.o c_fortran_dgssv.o
+
+# double complex
+ZF77EXM = z_f77_main.o zhbcode1.o c_fortran_zgssv.o
+
+all: df77exm zf77exm test_omp
+
+df77exm: $(DF77EXM) $(SUPERLULIB)
+ $(FORTRAN) $(LOADOPTS) $(DF77EXM) $(LIBS) -o $@
+
+zf77exm: $(ZF77EXM) $(SUPERLULIB)
+ $(FORTRAN) $(LOADOPTS) $(ZF77EXM) $(LIBS) -o $@
+
+test_omp: $(TEST_OMP) $(SUPERLULIB)
+ $(FORTRAN) $(LOADOPTS) $(TEST_OMP) $(LIBS) -o $@
+
+.c.o:
+ $(CC) $(CFLAGS) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
+
+.f.o:
+ $(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
+
+.F.o:
+ $(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
+
+clean:
+ rm -f *.o *f77exm test_omp
+
diff --git a/SuperLU_5.2.0/FORTRAN/README b/SuperLU_5.2.0/FORTRAN/README
new file mode 100644
index 0000000..1210894
--- /dev/null
+++ b/SuperLU_5.2.0/FORTRAN/README
@@ -0,0 +1,16 @@
+ FORTRAN INTERFACE
+
+This directory contains the Fortran example interface to use the
+C routines in SuperLU.
+
+To compile the examples, type:
+ % make
+
+To run the examples, type:
+ % df77exm < ../EXAMPLE/g20.rua -- double precision example
+ % zf77exm < ../EXAMPLE/cg20.cua -- double complex example
+ % test_omp < ../EXAMPLE/g20.rua -- solve multiple systems with different threads
+
+Useful envorinment variables for running OpenMP example:
+setenv OMP_STACKSIZE 8192M; limit stacksize unlimited; setenv OMP_NUM_THREADS 2
+
diff --git a/SuperLU_5.2.0/FORTRAN/c_fortran_cgssv.c b/SuperLU_5.2.0/FORTRAN/c_fortran_cgssv.c
new file mode 100644
index 0000000..0578fb0
--- /dev/null
+++ b/SuperLU_5.2.0/FORTRAN/c_fortran_cgssv.c
@@ -0,0 +1,188 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+
+#include "slu_cdefs.h"
+
+#define HANDLE_SIZE 8
+
+/* kind of integer to hold a pointer. Use 64-bit. */
+typedef long long int fptr;
+
+typedef struct {
+ SuperMatrix *L;
+ SuperMatrix *U;
+ int *perm_c;
+ int *perm_r;
+} factors_t;
+
+void
+c_fortran_cgssv_(int *iopt, int *n, int *nnz, int *nrhs,
+ complex *values, int *rowind, int *colptr,
+ complex *b, int *ldb,
+ fptr *f_factors, /* a handle containing the address
+ pointing to the factored matrices */
+ int *info)
+
+{
+/*
+ * This routine can be called from Fortran.
+ *
+ * iopt (input) int
+ * Specifies the operation:
+ * = 1, performs LU decomposition for the first time
+ * = 2, performs triangular solve
+ * = 3, free all the storage in the end
+ *
+ * f_factors (input/output) fptr*
+ * If iopt == 1, it is an output and contains the pointer pointing to
+ * the structure of the factored matrices.
+ * Otherwise, it it an input.
+ *
+ */
+
+ SuperMatrix A, AC, B;
+ SuperMatrix *L, *U;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree; /* column elimination tree */
+ SCformat *Lstore;
+ NCformat *Ustore;
+ int i, panel_size, permc_spec, relax;
+ trans_t trans;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ factors_t *LUfactors;
+ GlobalLU_t Glu; /* Not needed on return. */
+ int *rowind0; /* counter 1-based indexing from Frotran arrays. */
+ int *colptr0;
+
+ trans = NOTRANS;
+
+ if ( *iopt == 1 ) { /* LU decomposition */
+
+ /* Set the default input options. */
+ set_default_options(&options);
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+
+ /* Adjust to 0-based indexing */
+ if ( !(rowind0 = intMalloc(*nnz)) ) ABORT("Malloc fails for rowind0[].");
+ if ( !(colptr0 = intMalloc(*n+1)) ) ABORT("Malloc fails for colptr0[].");
+ for (i = 0; i < *nnz; ++i) rowind0[i] = rowind[i] - 1;
+ for (i = 0; i <= *n; ++i) colptr0[i] = colptr[i] - 1;
+
+ cCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind0, colptr0,
+ SLU_NC, SLU_C, SLU_GE);
+ L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+ U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+ if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
+
+ /*
+ * Get column permutation vector perm_c[], according to permc_spec:
+ * permc_spec = 0: natural ordering
+ * permc_spec = 1: minimum degree on structure of A'*A
+ * permc_spec = 2: minimum degree on structure of A'+A
+ * permc_spec = 3: approximate minimum degree for unsymmetric matrices
+ */
+ permc_spec = options.ColPerm;
+ get_perm_c(permc_spec, &A, perm_c);
+
+ sp_preorder(&options, &A, perm_c, etree, &AC);
+
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+
+ cgstrf(&options, &AC, relax, panel_size, etree,
+ NULL, 0, perm_c, perm_r, L, U, &Glu, &stat, info);
+
+ if ( *info == 0 ) {
+ Lstore = (SCformat *) L->Store;
+ Ustore = (NCformat *) U->Store;
+ 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);
+ cQuerySpace(L, U, &mem_usage);
+ 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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ /* Save the LU factors in the factors handle */
+ LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
+ LUfactors->L = L;
+ LUfactors->U = U;
+ LUfactors->perm_c = perm_c;
+ LUfactors->perm_r = perm_r;
+ *f_factors = (fptr) LUfactors;
+
+ /* Free un-wanted storage */
+ SUPERLU_FREE(etree);
+ Destroy_SuperMatrix_Store(&A);
+ Destroy_CompCol_Permuted(&AC);
+ SUPERLU_FREE(rowind0);
+ SUPERLU_FREE(colptr0);
+ StatFree(&stat);
+
+ } else if ( *iopt == 2 ) { /* Triangular solve */
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* Extract the LU factors in the factors handle */
+ LUfactors = (factors_t*) *f_factors;
+ L = LUfactors->L;
+ U = LUfactors->U;
+ perm_c = LUfactors->perm_c;
+ perm_r = LUfactors->perm_r;
+
+ cCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_C, SLU_GE);
+
+ /* Solve the system A*X=B, overwriting B with X. */
+ cgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
+
+ Destroy_SuperMatrix_Store(&B);
+ StatFree(&stat);
+
+ } else if ( *iopt == 3 ) { /* Free storage */
+ /* Free the LU factors in the factors handle */
+ LUfactors = (factors_t*) *f_factors;
+ SUPERLU_FREE (LUfactors->perm_r);
+ SUPERLU_FREE (LUfactors->perm_c);
+ Destroy_SuperNode_Matrix(LUfactors->L);
+ Destroy_CompCol_Matrix(LUfactors->U);
+ SUPERLU_FREE (LUfactors->L);
+ SUPERLU_FREE (LUfactors->U);
+ SUPERLU_FREE (LUfactors);
+ } else {
+ fprintf(stderr,"Invalid iopt=%d passed to c_fortran_cgssv()\n",*iopt);
+ exit(-1);
+ }
+}
+
+
diff --git a/SuperLU_5.2.0/FORTRAN/c_fortran_dgssv.c b/SuperLU_5.2.0/FORTRAN/c_fortran_dgssv.c
new file mode 100644
index 0000000..f1dbabc
--- /dev/null
+++ b/SuperLU_5.2.0/FORTRAN/c_fortran_dgssv.c
@@ -0,0 +1,188 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+
+#include "slu_ddefs.h"
+
+#define HANDLE_SIZE 8
+
+/* kind of integer to hold a pointer. Use 64-bit. */
+typedef long long int fptr;
+
+typedef struct {
+ SuperMatrix *L;
+ SuperMatrix *U;
+ int *perm_c;
+ int *perm_r;
+} factors_t;
+
+void
+c_fortran_dgssv_(int *iopt, int *n, int *nnz, int *nrhs,
+ double *values, int *rowind, int *colptr,
+ double *b, int *ldb,
+ fptr *f_factors, /* a handle containing the address
+ pointing to the factored matrices */
+ int *info)
+
+{
+/*
+ * This routine can be called from Fortran.
+ *
+ * iopt (input) int
+ * Specifies the operation:
+ * = 1, performs LU decomposition for the first time
+ * = 2, performs triangular solve
+ * = 3, free all the storage in the end
+ *
+ * f_factors (input/output) fptr*
+ * If iopt == 1, it is an output and contains the pointer pointing to
+ * the structure of the factored matrices.
+ * Otherwise, it it an input.
+ *
+ */
+
+ SuperMatrix A, AC, B;
+ SuperMatrix *L, *U;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree; /* column elimination tree */
+ SCformat *Lstore;
+ NCformat *Ustore;
+ int i, panel_size, permc_spec, relax;
+ trans_t trans;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ factors_t *LUfactors;
+ GlobalLU_t Glu; /* Not needed on return. */
+ int *rowind0; /* counter 1-based indexing from Frotran arrays. */
+ int *colptr0;
+
+ trans = NOTRANS;
+
+ if ( *iopt == 1 ) { /* LU decomposition */
+
+ /* Set the default input options. */
+ set_default_options(&options);
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+
+ /* Adjust to 0-based indexing */
+ if ( !(rowind0 = intMalloc(*nnz)) ) ABORT("Malloc fails for rowind0[].");
+ if ( !(colptr0 = intMalloc(*n+1)) ) ABORT("Malloc fails for colptr0[].");
+ for (i = 0; i < *nnz; ++i) rowind0[i] = rowind[i] - 1;
+ for (i = 0; i <= *n; ++i) colptr0[i] = colptr[i] - 1;
+
+ dCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind0, colptr0,
+ SLU_NC, SLU_D, SLU_GE);
+ L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+ U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+ if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
+
+ /*
+ * Get column permutation vector perm_c[], according to permc_spec:
+ * permc_spec = 0: natural ordering
+ * permc_spec = 1: minimum degree on structure of A'*A
+ * permc_spec = 2: minimum degree on structure of A'+A
+ * permc_spec = 3: approximate minimum degree for unsymmetric matrices
+ */
+ permc_spec = options.ColPerm;
+ get_perm_c(permc_spec, &A, perm_c);
+
+ sp_preorder(&options, &A, perm_c, etree, &AC);
+
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+
+ dgstrf(&options, &AC, relax, panel_size, etree,
+ NULL, 0, perm_c, perm_r, L, U, &Glu, &stat, info);
+
+ if ( *info == 0 ) {
+ Lstore = (SCformat *) L->Store;
+ Ustore = (NCformat *) U->Store;
+ 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);
+ dQuerySpace(L, U, &mem_usage);
+ 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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ /* Save the LU factors in the factors handle */
+ LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
+ LUfactors->L = L;
+ LUfactors->U = U;
+ LUfactors->perm_c = perm_c;
+ LUfactors->perm_r = perm_r;
+ *f_factors = (fptr) LUfactors;
+
+ /* Free un-wanted storage */
+ SUPERLU_FREE(etree);
+ Destroy_SuperMatrix_Store(&A);
+ Destroy_CompCol_Permuted(&AC);
+ SUPERLU_FREE(rowind0);
+ SUPERLU_FREE(colptr0);
+ StatFree(&stat);
+
+ } else if ( *iopt == 2 ) { /* Triangular solve */
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* Extract the LU factors in the factors handle */
+ LUfactors = (factors_t*) *f_factors;
+ L = LUfactors->L;
+ U = LUfactors->U;
+ perm_c = LUfactors->perm_c;
+ perm_r = LUfactors->perm_r;
+
+ dCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_D, SLU_GE);
+
+ /* Solve the system A*X=B, overwriting B with X. */
+ dgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
+
+ Destroy_SuperMatrix_Store(&B);
+ StatFree(&stat);
+
+ } else if ( *iopt == 3 ) { /* Free storage */
+ /* Free the LU factors in the factors handle */
+ LUfactors = (factors_t*) *f_factors;
+ SUPERLU_FREE (LUfactors->perm_r);
+ SUPERLU_FREE (LUfactors->perm_c);
+ Destroy_SuperNode_Matrix(LUfactors->L);
+ Destroy_CompCol_Matrix(LUfactors->U);
+ SUPERLU_FREE (LUfactors->L);
+ SUPERLU_FREE (LUfactors->U);
+ SUPERLU_FREE (LUfactors);
+ } else {
+ fprintf(stderr,"Invalid iopt=%d passed to c_fortran_dgssv()\n",*iopt);
+ exit(-1);
+ }
+}
+
+
diff --git a/SuperLU_5.2.0/FORTRAN/c_fortran_sgssv.c b/SuperLU_5.2.0/FORTRAN/c_fortran_sgssv.c
new file mode 100644
index 0000000..fcde0ae
--- /dev/null
+++ b/SuperLU_5.2.0/FORTRAN/c_fortran_sgssv.c
@@ -0,0 +1,188 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+
+#include "slu_sdefs.h"
+
+#define HANDLE_SIZE 8
+
+/* kind of integer to hold a pointer. Use 64-bit. */
+typedef long long int fptr;
+
+typedef struct {
+ SuperMatrix *L;
+ SuperMatrix *U;
+ int *perm_c;
+ int *perm_r;
+} factors_t;
+
+void
+c_fortran_sgssv_(int *iopt, int *n, int *nnz, int *nrhs,
+ float *values, int *rowind, int *colptr,
+ float *b, int *ldb,
+ fptr *f_factors, /* a handle containing the address
+ pointing to the factored matrices */
+ int *info)
+
+{
+/*
+ * This routine can be called from Fortran.
+ *
+ * iopt (input) int
+ * Specifies the operation:
+ * = 1, performs LU decomposition for the first time
+ * = 2, performs triangular solve
+ * = 3, free all the storage in the end
+ *
+ * f_factors (input/output) fptr*
+ * If iopt == 1, it is an output and contains the pointer pointing to
+ * the structure of the factored matrices.
+ * Otherwise, it it an input.
+ *
+ */
+
+ SuperMatrix A, AC, B;
+ SuperMatrix *L, *U;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree; /* column elimination tree */
+ SCformat *Lstore;
+ NCformat *Ustore;
+ int i, panel_size, permc_spec, relax;
+ trans_t trans;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ factors_t *LUfactors;
+ GlobalLU_t Glu; /* Not needed on return. */
+ int *rowind0; /* counter 1-based indexing from Frotran arrays. */
+ int *colptr0;
+
+ trans = NOTRANS;
+
+ if ( *iopt == 1 ) { /* LU decomposition */
+
+ /* Set the default input options. */
+ set_default_options(&options);
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+
+ /* Adjust to 0-based indexing */
+ if ( !(rowind0 = intMalloc(*nnz)) ) ABORT("Malloc fails for rowind0[].");
+ if ( !(colptr0 = intMalloc(*n+1)) ) ABORT("Malloc fails for colptr0[].");
+ for (i = 0; i < *nnz; ++i) rowind0[i] = rowind[i] - 1;
+ for (i = 0; i <= *n; ++i) colptr0[i] = colptr[i] - 1;
+
+ sCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind0, colptr0,
+ SLU_NC, SLU_S, SLU_GE);
+ L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+ U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+ if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
+
+ /*
+ * Get column permutation vector perm_c[], according to permc_spec:
+ * permc_spec = 0: natural ordering
+ * permc_spec = 1: minimum degree on structure of A'*A
+ * permc_spec = 2: minimum degree on structure of A'+A
+ * permc_spec = 3: approximate minimum degree for unsymmetric matrices
+ */
+ permc_spec = options.ColPerm;
+ get_perm_c(permc_spec, &A, perm_c);
+
+ sp_preorder(&options, &A, perm_c, etree, &AC);
+
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+
+ sgstrf(&options, &AC, relax, panel_size, etree,
+ NULL, 0, perm_c, perm_r, L, U, &Glu, &stat, info);
+
+ if ( *info == 0 ) {
+ Lstore = (SCformat *) L->Store;
+ Ustore = (NCformat *) U->Store;
+ 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);
+ sQuerySpace(L, U, &mem_usage);
+ 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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ /* Save the LU factors in the factors handle */
+ LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
+ LUfactors->L = L;
+ LUfactors->U = U;
+ LUfactors->perm_c = perm_c;
+ LUfactors->perm_r = perm_r;
+ *f_factors = (fptr) LUfactors;
+
+ /* Free un-wanted storage */
+ SUPERLU_FREE(etree);
+ Destroy_SuperMatrix_Store(&A);
+ Destroy_CompCol_Permuted(&AC);
+ SUPERLU_FREE(rowind0);
+ SUPERLU_FREE(colptr0);
+ StatFree(&stat);
+
+ } else if ( *iopt == 2 ) { /* Triangular solve */
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* Extract the LU factors in the factors handle */
+ LUfactors = (factors_t*) *f_factors;
+ L = LUfactors->L;
+ U = LUfactors->U;
+ perm_c = LUfactors->perm_c;
+ perm_r = LUfactors->perm_r;
+
+ sCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_S, SLU_GE);
+
+ /* Solve the system A*X=B, overwriting B with X. */
+ sgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
+
+ Destroy_SuperMatrix_Store(&B);
+ StatFree(&stat);
+
+ } else if ( *iopt == 3 ) { /* Free storage */
+ /* Free the LU factors in the factors handle */
+ LUfactors = (factors_t*) *f_factors;
+ SUPERLU_FREE (LUfactors->perm_r);
+ SUPERLU_FREE (LUfactors->perm_c);
+ Destroy_SuperNode_Matrix(LUfactors->L);
+ Destroy_CompCol_Matrix(LUfactors->U);
+ SUPERLU_FREE (LUfactors->L);
+ SUPERLU_FREE (LUfactors->U);
+ SUPERLU_FREE (LUfactors);
+ } else {
+ fprintf(stderr,"Invalid iopt=%d passed to c_fortran_sgssv()\n",*iopt);
+ exit(-1);
+ }
+}
+
+
diff --git a/SuperLU_5.2.0/FORTRAN/c_fortran_zgssv.c b/SuperLU_5.2.0/FORTRAN/c_fortran_zgssv.c
new file mode 100644
index 0000000..ead29ff
--- /dev/null
+++ b/SuperLU_5.2.0/FORTRAN/c_fortran_zgssv.c
@@ -0,0 +1,188 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+
+#include "slu_zdefs.h"
+
+#define HANDLE_SIZE 8
+
+/* kind of integer to hold a pointer. Use 64-bit. */
+typedef long long int fptr;
+
+typedef struct {
+ SuperMatrix *L;
+ SuperMatrix *U;
+ int *perm_c;
+ int *perm_r;
+} factors_t;
+
+void
+c_fortran_zgssv_(int *iopt, int *n, int *nnz, int *nrhs,
+ doublecomplex *values, int *rowind, int *colptr,
+ doublecomplex *b, int *ldb,
+ fptr *f_factors, /* a handle containing the address
+ pointing to the factored matrices */
+ int *info)
+
+{
+/*
+ * This routine can be called from Fortran.
+ *
+ * iopt (input) int
+ * Specifies the operation:
+ * = 1, performs LU decomposition for the first time
+ * = 2, performs triangular solve
+ * = 3, free all the storage in the end
+ *
+ * f_factors (input/output) fptr*
+ * If iopt == 1, it is an output and contains the pointer pointing to
+ * the structure of the factored matrices.
+ * Otherwise, it it an input.
+ *
+ */
+
+ SuperMatrix A, AC, B;
+ SuperMatrix *L, *U;
+ int *perm_r; /* row permutations from partial pivoting */
+ int *perm_c; /* column permutation vector */
+ int *etree; /* column elimination tree */
+ SCformat *Lstore;
+ NCformat *Ustore;
+ int i, panel_size, permc_spec, relax;
+ trans_t trans;
+ mem_usage_t mem_usage;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+ factors_t *LUfactors;
+ GlobalLU_t Glu; /* Not needed on return. */
+ int *rowind0; /* counter 1-based indexing from Frotran arrays. */
+ int *colptr0;
+
+ trans = NOTRANS;
+
+ if ( *iopt == 1 ) { /* LU decomposition */
+
+ /* Set the default input options. */
+ set_default_options(&options);
+
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+
+ /* Adjust to 0-based indexing */
+ if ( !(rowind0 = intMalloc(*nnz)) ) ABORT("Malloc fails for rowind0[].");
+ if ( !(colptr0 = intMalloc(*n+1)) ) ABORT("Malloc fails for colptr0[].");
+ for (i = 0; i < *nnz; ++i) rowind0[i] = rowind[i] - 1;
+ for (i = 0; i <= *n; ++i) colptr0[i] = colptr[i] - 1;
+
+ zCreate_CompCol_Matrix(&A, *n, *n, *nnz, values, rowind0, colptr0,
+ SLU_NC, SLU_Z, SLU_GE);
+ L = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+ U = (SuperMatrix *) SUPERLU_MALLOC( sizeof(SuperMatrix) );
+ if ( !(perm_r = intMalloc(*n)) ) ABORT("Malloc fails for perm_r[].");
+ if ( !(perm_c = intMalloc(*n)) ) ABORT("Malloc fails for perm_c[].");
+ if ( !(etree = intMalloc(*n)) ) ABORT("Malloc fails for etree[].");
+
+ /*
+ * Get column permutation vector perm_c[], according to permc_spec:
+ * permc_spec = 0: natural ordering
+ * permc_spec = 1: minimum degree on structure of A'*A
+ * permc_spec = 2: minimum degree on structure of A'+A
+ * permc_spec = 3: approximate minimum degree for unsymmetric matrices
+ */
+ permc_spec = options.ColPerm;
+ get_perm_c(permc_spec, &A, perm_c);
+
+ sp_preorder(&options, &A, perm_c, etree, &AC);
+
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+
+ zgstrf(&options, &AC, relax, panel_size, etree,
+ NULL, 0, perm_c, perm_r, L, U, &Glu, &stat, info);
+
+ if ( *info == 0 ) {
+ Lstore = (SCformat *) L->Store;
+ Ustore = (NCformat *) U->Store;
+ 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);
+ zQuerySpace(L, U, &mem_usage);
+ 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\n",
+ mem_usage.for_lu/1e6, mem_usage.total_needed/1e6);
+ }
+ }
+
+ /* Save the LU factors in the factors handle */
+ LUfactors = (factors_t*) SUPERLU_MALLOC(sizeof(factors_t));
+ LUfactors->L = L;
+ LUfactors->U = U;
+ LUfactors->perm_c = perm_c;
+ LUfactors->perm_r = perm_r;
+ *f_factors = (fptr) LUfactors;
+
+ /* Free un-wanted storage */
+ SUPERLU_FREE(etree);
+ Destroy_SuperMatrix_Store(&A);
+ Destroy_CompCol_Permuted(&AC);
+ SUPERLU_FREE(rowind0);
+ SUPERLU_FREE(colptr0);
+ StatFree(&stat);
+
+ } else if ( *iopt == 2 ) { /* Triangular solve */
+ /* Initialize the statistics variables. */
+ StatInit(&stat);
+
+ /* Extract the LU factors in the factors handle */
+ LUfactors = (factors_t*) *f_factors;
+ L = LUfactors->L;
+ U = LUfactors->U;
+ perm_c = LUfactors->perm_c;
+ perm_r = LUfactors->perm_r;
+
+ zCreate_Dense_Matrix(&B, *n, *nrhs, b, *ldb, SLU_DN, SLU_Z, SLU_GE);
+
+ /* Solve the system A*X=B, overwriting B with X. */
+ zgstrs (trans, L, U, perm_c, perm_r, &B, &stat, info);
+
+ Destroy_SuperMatrix_Store(&B);
+ StatFree(&stat);
+
+ } else if ( *iopt == 3 ) { /* Free storage */
+ /* Free the LU factors in the factors handle */
+ LUfactors = (factors_t*) *f_factors;
+ SUPERLU_FREE (LUfactors->perm_r);
+ SUPERLU_FREE (LUfactors->perm_c);
+ Destroy_SuperNode_Matrix(LUfactors->L);
+ Destroy_CompCol_Matrix(LUfactors->U);
+ SUPERLU_FREE (LUfactors->L);
+ SUPERLU_FREE (LUfactors->U);
+ SUPERLU_FREE (LUfactors);
+ } else {
+ fprintf(stderr,"Invalid iopt=%d passed to c_fortran_zgssv()\n",*iopt);
+ exit(-1);
+ }
+}
+
+
diff --git a/SuperLU_5.2.0/FORTRAN/f77_main.f b/SuperLU_5.2.0/FORTRAN/f77_main.f
new file mode 100644
index 0000000..fdc5b80
--- /dev/null
+++ b/SuperLU_5.2.0/FORTRAN/f77_main.f
@@ -0,0 +1,58 @@
+*
+* Copyright (c) 2003, The Regents of the University of California, through
+* Lawrence Berkeley National Laboratory (subject to receipt of any required
+* approvals from U.S. Dept. of Energy)
+*
+* All rights reserved.
+*
+* The source code is distributed under BSD license, see the file License.txt
+* at the top-level directory.
+*
+ program f77_main
+ integer maxn, maxnz
+ parameter ( maxn = 10000, maxnz = 100000 )
+ integer rowind(maxnz), colptr(maxn)
+ real*8 values(maxnz), b(maxn)
+ integer n, nnz, nrhs, ldb, info, iopt
+ integer*8 factors
+*
+ call hbcode1(n, n, nnz, values, rowind, colptr)
+*
+ nrhs = 1
+ ldb = n
+ do i = 1, n
+ b(i) = 1
+ enddo
+*
+* First, factorize the matrix. The factors are stored in *factors* handle.
+ iopt = 1
+ call c_fortran_dgssv( 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_dgssv( 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_dgssv( iopt, n, nnz, nrhs, values, rowind, colptr,
+ $ b, ldb, factors, info )
+*
+ stop
+ end
+
+
diff --git a/FORTRAN/f77exm.out b/SuperLU_5.2.0/FORTRAN/f77exm.out
similarity index 100%
rename from FORTRAN/f77exm.out
rename to SuperLU_5.2.0/FORTRAN/f77exm.out
diff --git a/FORTRAN/hbcode1.f b/SuperLU_5.2.0/FORTRAN/hbcode1.f
similarity index 100%
rename from FORTRAN/hbcode1.f
rename to SuperLU_5.2.0/FORTRAN/hbcode1.f
diff --git a/SuperLU_5.2.0/FORTRAN/test_omp.F b/SuperLU_5.2.0/FORTRAN/test_omp.F
new file mode 100644
index 0000000..a6a0290
--- /dev/null
+++ b/SuperLU_5.2.0/FORTRAN/test_omp.F
@@ -0,0 +1,130 @@
+! A simple OpenMP example to use SuperLU to solve multiple independent linear systems.
+! Contributor: Ed D'Azevedo, Oak Ridge National Laboratory
+!
+ program tslu_omp
+ implicit none
+ integer, parameter :: maxn = 10*1000
+ integer, parameter :: maxnz = 100*maxn
+ integer, parameter :: nsys = 6 !! 64
+
+ real*8 :: values(maxnz), b(maxn)
+ integer :: rowind(maxnz), colptr(maxn)
+! integer :: Ai(maxnz, nsys), Aj(maxn, nsys) ! Sherry added
+ integer n, nnz, nrhs, ldb, info, iopt
+ integer*8 :: factors, lufactors(nsys)
+ real*8 :: A(maxnz, nsys)
+ integer :: luinfo(nsys)
+ real*8 :: brhs(maxn,nsys)
+ integer :: i,j
+ real*8 :: err, maxerr
+ integer :: nthread
+!$ integer, external :: omp_get_num_threads
+
+! --------------
+! read in matrix
+! --------------
+ print*, 'before hbcode1'
+ call hbcode1(n,n,nnz,values,rowind,colptr)
+ print*, 'after hbcode1'
+
+ nthread = 1
+!$omp parallel
+!$omp master
+!$ nthread = omp_get_num_threads()
+!$omp end master
+!$omp end parallel
+ write(*,*) 'nthreads = ',nthread
+ write(*,*) 'nsys = ',nsys
+ write(*,*) 'n, nnz ', n, nnz
+
+
+!$omp parallel do private(j)
+ do j=1,nsys
+ A(1:nnz,j) = values(1:nnz)
+ enddo
+
+ nrhs = 1
+ ldb = n
+
+!$omp parallel do private(j)
+ do j=1,nsys
+ brhs(:,j) = j
+ enddo
+
+
+! ---------------------
+! perform factorization
+! ---------------------
+ iopt = 1
+
+!$omp parallel do private(j,values,b,info,factors)
+ do j=1,nsys
+!$omp parallel workshare
+ values(1:nnz) = A(1:nnz,j)
+ b(1:n) = brhs(1:n,j)
+!$omp end parallel workshare
+ info = 0
+
+ call c_fortran_dgssv( iopt,n,nnz, nrhs, values, rowind, colptr, &
+ & b, ldb, factors, info )
+
+!$omp parallel workshare
+ A(1:nnz,j) = values(1:nnz)
+ brhs(1:n,j) = b(1:n)
+!$omp end parallel workshare
+ luinfo(j) = info
+ lufactors(j) = factors
+ enddo
+
+ do j=1,nsys
+ info = luinfo(j)
+ if (info.ne.0) then
+ write(*,9010) j, info
+ 9010 format(' factorization of j=',i7,' returns info= ',i7)
+ endif
+ enddo
+
+! ---------------------------------------
+! solve the system using existing factors
+! ---------------------------------------
+ iopt = 2
+!$omp parallel do private(j,b,values,factors,info)
+ do j=1,nsys
+ factors = lufactors(j)
+ values(1:nnz) = A(1:nnz,j)
+ info = 0
+ b(1:n) = brhs(1:n,j)
+ call c_fortran_dgssv( iopt,n,nnz,nrhs,values,rowind,colptr, &
+ & b,ldb,factors,info )
+ lufactors(j) = factors
+ luinfo(j) = info
+ brhs(1:n,j) = b(1:n)
+ enddo
+
+! ------------
+! simple check
+! ------------
+ err = 0
+ maxerr = 0
+
+ do j=2,nsys
+ do i=1,n
+ err = abs(brhs(i,1)*j - brhs(i,j))
+ maxerr = max(maxerr,err)
+ enddo
+ enddo
+ write(*,*) 'max error = ', maxerr
+
+! -------------
+! free storage
+! -------------
+
+ iopt = 3
+!$omp parallel do private(j)
+ do j=1,nsys
+ call c_fortran_dgssv(iopt,n,nnz,nrhs,A(:,j),rowind,colptr, &
+ & brhs(:,j), ldb, lufactors(j), luinfo(j) )
+ enddo
+
+ stop
+ end program
diff --git a/SuperLU_5.2.0/FORTRAN/z_f77_main.f b/SuperLU_5.2.0/FORTRAN/z_f77_main.f
new file mode 100644
index 0000000..d25729e
--- /dev/null
+++ b/SuperLU_5.2.0/FORTRAN/z_f77_main.f
@@ -0,0 +1,60 @@
+*
+* Copyright (c) 2003, The Regents of the University of California, through
+* Lawrence Berkeley National Laboratory (subject to receipt of any required
+* approvals from U.S. Dept. of Energy)
+*
+* All rights reserved.
+*
+* The source code is distributed under BSD license, see the file License.txt
+* at the top-level directory.
+*
+ 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/SuperLU_5.2.0/FORTRAN/zhbcode1.f
similarity index 100%
rename from FORTRAN/zhbcode1.f
rename to SuperLU_5.2.0/FORTRAN/zhbcode1.f
diff --git a/SuperLU_5.2.0/INSTALL/._Makefile b/SuperLU_5.2.0/INSTALL/._Makefile
new file mode 100644
index 0000000..39a4b58
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._Makefile differ
diff --git a/SuperLU_5.2.0/INSTALL/._dlamch.c b/SuperLU_5.2.0/INSTALL/._dlamch.c
new file mode 100644
index 0000000..e254924
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._dlamch.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._dlamchtst.c b/SuperLU_5.2.0/INSTALL/._dlamchtst.c
new file mode 100644
index 0000000..7ac5152
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._dlamchtst.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._dmach.c b/SuperLU_5.2.0/INSTALL/._dmach.c
new file mode 100644
index 0000000..650f790
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._dmach.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._dmachtst.c b/SuperLU_5.2.0/INSTALL/._dmachtst.c
new file mode 100644
index 0000000..4b4cb57
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._dmachtst.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._install.csh b/SuperLU_5.2.0/INSTALL/._install.csh
new file mode 100755
index 0000000..dccbf1c
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._install.csh differ
diff --git a/SuperLU_5.2.0/INSTALL/._lsame.c b/SuperLU_5.2.0/INSTALL/._lsame.c
new file mode 100644
index 0000000..3ab33a5
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._lsame.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._slamch.c b/SuperLU_5.2.0/INSTALL/._slamch.c
new file mode 100644
index 0000000..5b12e84
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._slamch.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._slamchtst.c b/SuperLU_5.2.0/INSTALL/._slamchtst.c
new file mode 100644
index 0000000..f403f20
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._slamchtst.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._smach.c b/SuperLU_5.2.0/INSTALL/._smach.c
new file mode 100644
index 0000000..bb0edf7
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._smach.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._smachtst.c b/SuperLU_5.2.0/INSTALL/._smachtst.c
new file mode 100644
index 0000000..65efcee
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._smachtst.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._superlu_timer.c b/SuperLU_5.2.0/INSTALL/._superlu_timer.c
new file mode 100644
index 0000000..0072652
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._superlu_timer.c differ
diff --git a/SuperLU_5.2.0/INSTALL/._timertst.c b/SuperLU_5.2.0/INSTALL/._timertst.c
new file mode 100644
index 0000000..706bdb5
Binary files /dev/null and b/SuperLU_5.2.0/INSTALL/._timertst.c differ
diff --git a/SuperLU_5.2.0/INSTALL/Makefile b/SuperLU_5.2.0/INSTALL/Makefile
new file mode 100644
index 0000000..3328646
--- /dev/null
+++ b/SuperLU_5.2.0/INSTALL/Makefile
@@ -0,0 +1,32 @@
+include ../make.inc
+
+all: testsmach testdmach testtimer install.out #testdlamch testslamch
+
+testdmach: dmach.o lsame.o dmachtst.o
+ $(LOADER) $(LOADOPTS) -o testdmach dmach.o lsame.o dmachtst.o
+
+testsmach: smach.o lsame.o smachtst.o
+ $(LOADER) $(LOADOPTS) -o testsmach smach.o lsame.o smachtst.o
+
+testdlamch: dlamch.o lsame.o dlamchtst.o
+ $(LOADER) $(LOADOPTS) -o testdlamch dlamch.o lsame.o dlamchtst.o
+
+testslamch: slamch.o lsame.o slamchtst.o
+ $(LOADER) $(LOADOPTS) -o testslamch slamch.o lsame.o slamchtst.o
+
+testtimer: superlu_timer.o timertst.o
+ $(LOADER) $(LOADOPTS) -o testtimer superlu_timer.o timertst.o
+
+install.out: install.csh
+ @echo Testing machines parameters and timer
+ csh install.csh
+
+slamch.o: slamch.c ; $(CC) -c $(NOOPTS) $<
+dlamch.o: dlamch.c ; $(CC) -c $(NOOPTS) $<
+superlu_timer.o: superlu_timer.c; $(CC) -c $(NOOPTS) $<
+
+.c.o:
+ $(CC) $(CFLAGS) -c $<
+
+clean:
+ rm -f *.o test* *.out
diff --git a/INSTALL/dlamch.c b/SuperLU_5.2.0/INSTALL/dlamch.c
similarity index 100%
rename from INSTALL/dlamch.c
rename to SuperLU_5.2.0/INSTALL/dlamch.c
diff --git a/SuperLU_5.2.0/INSTALL/dlamchtst.c b/SuperLU_5.2.0/INSTALL/dlamchtst.c
new file mode 100644
index 0000000..984c478
--- /dev/null
+++ b/SuperLU_5.2.0/INSTALL/dlamchtst.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+
+int main()
+{
+ /* Local variables */
+ double base, emin, prec, emax, rmin, rmax, t, sfmin;
+ extern double dlamch_(char *);
+ double rnd, eps;
+
+ eps = dlamch_("Epsilon");
+ sfmin = dlamch_("Safe minimum");
+ base = dlamch_("Base");
+ prec = dlamch_("Precision");
+ t = dlamch_("Number of digits in mantissa");
+ rnd = dlamch_("Rounding mode");
+ emin = dlamch_("Minnimum exponent");
+ rmin = dlamch_("Underflow threshold");
+ emax = dlamch_("Largest exponent");
+ rmax = dlamch_("Overflow threshold");
+
+ printf(" Epsilon = %e\n", eps);
+ printf(" Safe minimum = %e\n", sfmin);
+ printf(" Base = %.0f\n", base);
+ printf(" Precision = %e\n", prec);
+ printf(" Number of digits in mantissa = %.0f\n", t);
+ printf(" Rounding mode = %.0f\n", rnd);
+ printf(" Minimum exponent = %.0f\n", emin);
+ printf(" Underflow threshold = %e\n", rmin);
+ printf(" Largest exponent = %.0f\n", emax);
+ printf(" Overflow threshold = %e\n", rmax);
+ printf(" Reciprocal of safe minimum = %e\n", 1./sfmin);
+ return 0;
+}
diff --git a/SuperLU_5.2.0/INSTALL/dmach.c b/SuperLU_5.2.0/INSTALL/dmach.c
new file mode 100644
index 0000000..e709648
--- /dev/null
+++ b/SuperLU_5.2.0/INSTALL/dmach.c
@@ -0,0 +1,84 @@
+#include <float.h>
+#include <math.h>
+#include <stdio.h>
+
+double dmach(char *cmach)
+{
+/* -- SuperLU auxiliary routine (version 5.0) --
+ This uses C99 standard constants, and is thread safe.
+
+ Must be compiled with -std=c99 flag.
+
+
+ Purpose
+ =======
+
+ DMACH returns double precision machine parameters.
+
+ Arguments
+ =========
+
+ CMACH (input) CHARACTER*1
+ Specifies the value to be returned by DMACH:
+ = 'E' or 'e', DMACH := eps
+ = 'S' or 's , DMACH := sfmin
+ = 'B' or 'b', DMACH := base
+ = 'P' or 'p', DMACH := eps*base
+ = 'N' or 'n', DMACH := t
+ = 'R' or 'r', DMACH := rnd
+ = 'M' or 'm', DMACH := emin
+ = 'U' or 'u', DMACH := rmin
+ = 'L' or 'l', DMACH := emax
+ = 'O' or 'o', DMACH := rmax
+
+ where
+
+ 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)
+
+ =====================================================================
+*/
+
+ double sfmin, small, rmach;
+ extern int lsame_(char *, char *);
+
+ if (lsame_(cmach, "E")) {
+ rmach = DBL_EPSILON * 0.5;
+ } else if (lsame_(cmach, "S")) {
+ sfmin = DBL_MIN;
+ small = 1. / DBL_MAX;
+ if (small >= sfmin) {
+ /* Use SMALL plus a bit, to avoid the possibility of rounding
+ causing overflow when computing 1/sfmin. */
+ sfmin = small * (DBL_EPSILON*0.5 + 1.);
+ }
+ rmach = sfmin;
+ } else if (lsame_(cmach, "B")) {
+ rmach = FLT_RADIX;
+ } else if (lsame_(cmach, "P")) {
+ rmach = DBL_EPSILON * 0.5 * FLT_RADIX;
+ } else if (lsame_(cmach, "N")) {
+ rmach = DBL_MANT_DIG;
+ } else if (lsame_(cmach, "R")) {
+ rmach = FLT_ROUNDS;
+ } else if (lsame_(cmach, "M")) {
+ rmach = DBL_MIN_EXP;
+ } else if (lsame_(cmach, "U")) {
+ rmach = DBL_MIN;
+ } else if (lsame_(cmach, "L")) {
+ rmach = DBL_MAX_EXP;
+ } else if (lsame_(cmach, "O")) {
+ rmach = DBL_MAX;
+ }
+
+ return rmach;
+
+} /* end dmach */
diff --git a/SuperLU_5.2.0/INSTALL/dmachtst.c b/SuperLU_5.2.0/INSTALL/dmachtst.c
new file mode 100644
index 0000000..10d16da
--- /dev/null
+++ b/SuperLU_5.2.0/INSTALL/dmachtst.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+
+int main()
+{
+ /* Local variables */
+ double base, emin, prec, emax, rmin, rmax, t, sfmin;
+ extern double dmach(char *);
+ double rnd, eps;
+
+ eps = dmach("Epsilon");
+ sfmin = dmach("Safe minimum");
+ base = dmach("Base");
+ prec = dmach("Precision");
+ t = dmach("Number of digits in mantissa");
+ rnd = dmach("Rounding mode");
+ emin = dmach("Minnimum exponent");
+ rmin = dmach("Underflow threshold");
+ emax = dmach("Largest exponent");
+ rmax = dmach("Overflow threshold");
+
+ printf(" Epsilon = %e\n", eps);
+ printf(" Safe minimum = %e\n", sfmin);
+ printf(" Base = %.0f\n", base);
+ printf(" Precision = %e\n", prec);
+ printf(" Number of digits in mantissa = %.0f\n", t);
+ printf(" Rounding mode = %.0f\n", rnd);
+ printf(" Minimum exponent = %.0f\n", emin);
+ printf(" Underflow threshold = %e\n", rmin);
+ printf(" Largest exponent = %.0f\n", emax);
+ printf(" Overflow threshold = %e\n", rmax);
+ printf(" Reciprocal of safe minimum = %e\n", 1./sfmin);
+ return 0;
+}
diff --git a/SuperLU_5.2.0/INSTALL/install.csh b/SuperLU_5.2.0/INSTALL/install.csh
new file mode 100755
index 0000000..a7b1f01
--- /dev/null
+++ b/SuperLU_5.2.0/INSTALL/install.csh
@@ -0,0 +1,14 @@
+#! /bin/csh
+
+set ofile = install.out # output file
+
+echo '---- SINGLE PRECISION' >! $ofile
+./testsmach >> $ofile
+echo '' >> $ofile
+echo ---- DOUBLE PRECISION >> $ofile
+./testdmach >> $ofile
+echo '' >> $ofile
+echo ---- TIMER >> $ofile
+./testtimer >> $ofile
+
+
diff --git a/INSTALL/lsame.c b/SuperLU_5.2.0/INSTALL/lsame.c
similarity index 100%
rename from INSTALL/lsame.c
rename to SuperLU_5.2.0/INSTALL/lsame.c
diff --git a/INSTALL/slamch.c b/SuperLU_5.2.0/INSTALL/slamch.c
similarity index 100%
rename from INSTALL/slamch.c
rename to SuperLU_5.2.0/INSTALL/slamch.c
diff --git a/INSTALL/slamchtst.c b/SuperLU_5.2.0/INSTALL/slamchtst.c
similarity index 100%
rename from INSTALL/slamchtst.c
rename to SuperLU_5.2.0/INSTALL/slamchtst.c
diff --git a/SuperLU_5.2.0/INSTALL/smach.c b/SuperLU_5.2.0/INSTALL/smach.c
new file mode 100644
index 0000000..f3c2ebb
--- /dev/null
+++ b/SuperLU_5.2.0/INSTALL/smach.c
@@ -0,0 +1,84 @@
+#include <float.h>
+#include <math.h>
+#include <stdio.h>
+
+float smach(char *cmach)
+{
+/* -- SuperLU auxiliary routine (version 5.0) --
+ This uses C99 standard constants, and is thread safe.
+
+ Must be compiled with "-std=c99" flag.
+
+
+ Purpose
+ =======
+
+ SMACH returns single precision machine parameters.
+
+ Arguments
+ =========
+
+ CMACH (input) CHARACTER*1
+ Specifies the value to be returned by SMACH:
+ = 'E' or 'e', SMACH := eps
+ = 'S' or 's , SMACH := sfmin
+ = 'B' or 'b', SMACH := base
+ = 'P' or 'p', SMACH := eps*base
+ = 'N' or 'n', SMACH := t
+ = 'R' or 'r', SMACH := rnd
+ = 'M' or 'm', SMACH := emin
+ = 'U' or 'u', SMACH := rmin
+ = 'L' or 'l', SMACH := emax
+ = 'O' or 'o', SMACH := rmax
+
+ where
+
+ 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)
+
+ =====================================================================
+*/
+
+ float sfmin, small, rmach;
+ extern int lsame_(char *, char *);
+
+ if (lsame_(cmach, "E")) {
+ rmach = FLT_EPSILON * 0.5;
+ } else if (lsame_(cmach, "S")) {
+ sfmin = FLT_MIN;
+ small = 1. / FLT_MAX;
+ if (small >= sfmin) {
+ /* Use SMALL plus a bit, to avoid the possibility of rounding
+ causing overflow when computing 1/sfmin. */
+ sfmin = small * (FLT_EPSILON*0.5 + 1.);
+ }
+ rmach = sfmin;
+ } else if (lsame_(cmach, "B")) {
+ rmach = FLT_RADIX;
+ } else if (lsame_(cmach, "P")) {
+ rmach = FLT_EPSILON * 0.5 * FLT_RADIX;
+ } else if (lsame_(cmach, "N")) {
+ rmach = FLT_MANT_DIG;
+ } else if (lsame_(cmach, "R")) {
+ rmach = FLT_ROUNDS;
+ } else if (lsame_(cmach, "M")) {
+ rmach = FLT_MIN_EXP;
+ } else if (lsame_(cmach, "U")) {
+ rmach = FLT_MIN;
+ } else if (lsame_(cmach, "L")) {
+ rmach = FLT_MAX_EXP;
+ } else if (lsame_(cmach, "O")) {
+ rmach = FLT_MAX;
+ }
+
+ return rmach;
+
+} /* end smach */
diff --git a/SuperLU_5.2.0/INSTALL/smachtst.c b/SuperLU_5.2.0/INSTALL/smachtst.c
new file mode 100644
index 0000000..421f10b
--- /dev/null
+++ b/SuperLU_5.2.0/INSTALL/smachtst.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+
+int main()
+{
+ /* Local variables */
+ float base, emin, prec, emax, rmin, rmax, t, sfmin;
+ extern float smach(char *);
+ double rnd, eps;
+
+ eps = smach("Epsilon");
+ sfmin = smach("Safe minimum");
+ base = smach("Base");
+ prec = smach("Precision");
+ t = smach("Number of digits in mantissa");
+ rnd = smach("Rounding mode");
+ emin = smach("Minnimum exponent");
+ rmin = smach("Underflow threshold");
+ emax = smach("Largest exponent");
+ rmax = smach("Overflow threshold");
+
+ printf(" Epsilon = %e\n", eps);
+ printf(" Safe minimum = %e\n", sfmin);
+ printf(" Base = %.0f\n", base);
+ printf(" Precision = %e\n", prec);
+ printf(" Number of digits in mantissa = %.0f\n", t);
+ printf(" Rounding mode = %.0f\n", rnd);
+ printf(" Minimum exponent = %.0f\n", emin);
+ printf(" Underflow threshold = %e\n", rmin);
+ printf(" Largest exponent = %.0f\n", emax);
+ printf(" Overflow threshold = %e\n", rmax);
+ printf(" Reciprocal of safe minimum = %e\n", 1./sfmin);
+ return 0;
+}
diff --git a/INSTALL/superlu_timer.c b/SuperLU_5.2.0/INSTALL/superlu_timer.c
similarity index 100%
rename from INSTALL/superlu_timer.c
rename to SuperLU_5.2.0/INSTALL/superlu_timer.c
diff --git a/INSTALL/timertst.c b/SuperLU_5.2.0/INSTALL/timertst.c
similarity index 100%
rename from INSTALL/timertst.c
rename to SuperLU_5.2.0/INSTALL/timertst.c
diff --git a/SuperLU_5.2.0/License.txt b/SuperLU_5.2.0/License.txt
new file mode 100644
index 0000000..e003503
--- /dev/null
+++ b/SuperLU_5.2.0/License.txt
@@ -0,0 +1,29 @@
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+(1) Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+(2) Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+(3) Neither the name of Lawrence Berkeley National Laboratory, U.S. Dept. of
+Energy nor the names of its contributors may be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.alpha b/SuperLU_5.2.0/MAKE_INC/._make.alpha
new file mode 100644
index 0000000..cf0ee36
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.alpha differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.altix b/SuperLU_5.2.0/MAKE_INC/._make.altix
new file mode 100644
index 0000000..7286a83
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.altix differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.cray b/SuperLU_5.2.0/MAKE_INC/._make.cray
new file mode 100644
index 0000000..50a695b
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.cray differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.cray_xc30 b/SuperLU_5.2.0/MAKE_INC/._make.cray_xc30
new file mode 100644
index 0000000..e517f49
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.cray_xc30 differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.cray_xe6 b/SuperLU_5.2.0/MAKE_INC/._make.cray_xe6
new file mode 100644
index 0000000..b7e63fa
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.cray_xe6 differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.hppa b/SuperLU_5.2.0/MAKE_INC/._make.hppa
new file mode 100644
index 0000000..26e38eb
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.hppa differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.inc b/SuperLU_5.2.0/MAKE_INC/._make.inc
new file mode 100644
index 0000000..f0a323c
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.inc differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.linux b/SuperLU_5.2.0/MAKE_INC/._make.linux
new file mode 100644
index 0000000..4289d6a
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.linux differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.mac-x b/SuperLU_5.2.0/MAKE_INC/._make.mac-x
new file mode 100644
index 0000000..6bba93f
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.mac-x differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.rs6k b/SuperLU_5.2.0/MAKE_INC/._make.rs6k
new file mode 100644
index 0000000..4c508c1
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.rs6k differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.scg1 b/SuperLU_5.2.0/MAKE_INC/._make.scg1
new file mode 100644
index 0000000..fd12b8e
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.scg1 differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.solaris b/SuperLU_5.2.0/MAKE_INC/._make.solaris
new file mode 100644
index 0000000..beb6d8f
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.solaris differ
diff --git a/SuperLU_5.2.0/MAKE_INC/._make.sp b/SuperLU_5.2.0/MAKE_INC/._make.sp
new file mode 100644
index 0000000..a3555cb
Binary files /dev/null and b/SuperLU_5.2.0/MAKE_INC/._make.sp differ
diff --git a/SuperLU_5.2.0/MAKE_INC/make.alpha b/SuperLU_5.2.0/MAKE_INC/make.alpha
new file mode 100644
index 0000000..fce83ad
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.alpha
@@ -0,0 +1,49 @@
+############################################################################
+#
+# 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 = _alpha
+
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = $(HOME)/Codes/SuperLU/SuperLU_5.1
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.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)
+# If your system has no ranlib, set RANLIB = echo.
+#
+ARCH = ar
+ARCHFLAGS = cr
+RANLIB = ranlib
+
+CC = cc
+CFLAGS = -O2
+NOOPTS =
+FORTRAN = f77
+FFLAGS = -O
+LOADER = ${CC}
+LOADOPTS = -O2
+#
+# The directory in which Matlab is installed
+#
+MATLAB = /usr/sww/matlab
diff --git a/SuperLU_5.2.0/MAKE_INC/make.altix b/SuperLU_5.2.0/MAKE_INC/make.altix
new file mode 100644
index 0000000..70ece41
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.altix
@@ -0,0 +1,58 @@
+############################################################################
+#
+# 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 = _Altix
+
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = $(HOME)/Codes/SuperLU/SuperLU_5.1
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.a
+
+BLASDEF = -DUSE_VENDOR_BLAS
+#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)
+# If your system has no ranlib, set RANLIB = echo.
+#
+ARCH = ar
+ARCHFLAGS = cr
+RANLIB = ranlib
+
+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 (-DNoChange, -DAdd_, or -DUpCase)
+#
+CDEFS = -DAdd_
+#
+# The directory in which Matlab is installed
+#
+MATLAB = /usr/common/usg/matlab/7.1.0.R14
diff --git a/SuperLU_5.2.0/MAKE_INC/make.cray b/SuperLU_5.2.0/MAKE_INC/make.cray
new file mode 100644
index 0000000..eefc714
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.cray
@@ -0,0 +1,56 @@
+############################################################################
+#
+# Program: SuperLU
+#
+# Module: make.inc
+#
+# Purpose: Top-level Definitions
+#
+# Creation date: November 15, 1997 Version 1.1
+#
+# Modified: September 1, 1999 Version 2.0
+#
+############################################################################
+#
+# The machine (platform) identifier to append to the library names
+#
+PLAT = _cray
+
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = $(HOME)/Codes/SuperLU/SuperLU_5.1
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.a
+
+#
+BLASDEF = -DUSE_VENDOR_BLAS
+BLASLIB =
+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 = 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}
+LOADOPTS =
+#
+# C preprocessor defs for compilation for the Fortran interface
+# (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
+#
+CDEFS = -DUpCase
+#
+# The directory in which Matlab is installed
+#
+MATLAB = /usr/local/matlab
diff --git a/SuperLU_5.2.0/MAKE_INC/make.cray_xc30 b/SuperLU_5.2.0/MAKE_INC/make.cray_xc30
new file mode 100644
index 0000000..f74f365
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.cray_xc30
@@ -0,0 +1,64 @@
+############################################################################
+#
+# Program: SuperLU
+#
+# Module: make.inc
+#
+# Purpose: Top-level Definitions
+#
+# Creation date: July 24, 2015 version 5.0
+#
+# Modified:
+#
+############################################################################
+#
+# The machine (platform) identifier to append to the library names
+#
+PLAT = _xc30
+
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = $(HOME)/Edison/SuperLU_5.1
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.a
+#
+# need 'module load mkl'
+BLASDEF = -DUSE_VENDOR_BLAS
+BLASLIB =
+#
+
+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
+
+############################################################################
+# C compiler setup
+CC = cc
+# CFLAGS should be set to be the C flags that include optimization
+CFLAGS = -no-ipo -fast \
+ -DDEBUGlevel=0 -DPRNTlevel=0 -DPROFlevel=0 \
+#
+# NOOPTS should be set to be the C flags that turn off any optimization
+NOOPTS = -O0
+############################################################################
+# FORTRAN compiler setup
+FORTRAN = ftn
+FFLAGS = -fast -no-ipo -openmp # -Mipa=fast,safe
+############################################################################
+LOADER = $(CC)
+LOADOPTS = -openmp
+# LOADOPTS += -Wl,-ydgemm_ -mkl=sequential
+
+############################################################################
+# C preprocessor defs for compilation (-DNoChange, -DAdd_, or -DUpCase)
+#
+# Need follow the convention of how C calls a Fortran routine.
+#
+CDEFS = -DAdd_
diff --git a/SuperLU_5.2.0/MAKE_INC/make.cray_xe6 b/SuperLU_5.2.0/MAKE_INC/make.cray_xe6
new file mode 100644
index 0000000..5942573
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.cray_xe6
@@ -0,0 +1,64 @@
+############################################################################
+#
+# Program: SuperLU
+#
+# Module: make.inc
+#
+# Purpose: Top-level Definitions
+#
+# Creation date: July 24, 2015 version 5.0
+#
+# Modified:
+#
+############################################################################
+#
+# The machine (platform) identifier to append to the library names
+#
+PLAT = _xe6
+
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = $(HOME)/Hopper/SuperLU_5.1
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.a
+#
+# need 'module load mkl'
+BLASDEF = -DUSE_VENDOR_BLAS
+BLASLIB =
+#
+
+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
+
+############################################################################
+# C compiler setup
+CC = cc
+# CFLAGS should be set to be the C flags that include optimization
+CFLAGS = -fast -Mipa=fast,safe -m64 \
+ -DDEBUGlevel=0 -DPRNTlevel=0 -DPROFlevel=0 \
+#
+# NOOPTS should be set to be the C flags that turn off any optimization
+NOOPTS = -O0
+############################################################################
+# FORTRAN compiler setup
+FORTRAN = ftn
+FFLAGS = -fast -mp=nonuma -Mipa=fast,safe
+############################################################################
+LOADER = $(CC)
+LOADOPTS = -mp=nonuma
+# LOADOPTS += -Wl,-ydgemm_ -mkl=sequential
+
+############################################################################
+# C preprocessor defs for compilation (-DNoChange, -DAdd_, or -DUpCase)
+#
+# Need follow the convention of how C calls a Fortran routine.
+#
+CDEFS = -DAdd_
diff --git a/SuperLU_5.2.0/MAKE_INC/make.hppa b/SuperLU_5.2.0/MAKE_INC/make.hppa
new file mode 100644
index 0000000..cd8872d
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.hppa
@@ -0,0 +1,58 @@
+############################################################################
+#
+# 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 = _hppa
+
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = $(HOME)/Codes/SuperLU/SuperLU_5.1
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.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)
+# If your system has no ranlib, set RANLIB = echo.
+#
+ARCH = ar
+ARCHFLAGS = cr
+RANLIB = echo
+#
+# Compiler and optimization
+#
+CC = gcc
+CFLAGS = -O3
+NOOPTS =
+FORTRAN = f77
+FFLAGS = -O
+LOADER = ${CC}
+LOADOPTS = -O3
+#
+# C preprocessor defs for compilation for the Fortran interface
+# (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
+#
+CDEFS = -DNoChange
+#
+# The directory in which Matlab is installed
+#
+MATLAB = /usr/sww/matlab
+
diff --git a/MAKE_INC/make.inc b/SuperLU_5.2.0/MAKE_INC/make.inc
similarity index 100%
rename from MAKE_INC/make.inc
rename to SuperLU_5.2.0/MAKE_INC/make.inc
diff --git a/SuperLU_5.2.0/MAKE_INC/make.linux b/SuperLU_5.2.0/MAKE_INC/make.linux
new file mode 100644
index 0000000..de9c2d3
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.linux
@@ -0,0 +1,65 @@
+############################################################################
+#
+# 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
+#
+SuperLUroot = $(HOME)/Dropbox/Codes/SuperLU/SuperLU
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.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)
+# If your system has no ranlib, set RANLIB = echo.
+#
+ARCH = ar
+ARCHFLAGS = cr
+RANLIB = ranlib
+
+CC = gcc
+CFLAGS = -O3 -g
+NOOPTS =
+FORTRAN = gfortran #g77
+FFLAGS = -O2 -g -fopenmp
+LOADER = $(CC)
+LOADOPTS = -fopenmp
+
+#
+# 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/matlab
+
diff --git a/SuperLU_5.2.0/MAKE_INC/make.mac-x b/SuperLU_5.2.0/MAKE_INC/make.mac-x
new file mode 100644
index 0000000..ddd0e25
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.mac-x
@@ -0,0 +1,65 @@
+############################################################################
+#
+# 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)/Dropbox/Codes/SuperLU/SuperLU
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.a
+BLASLIB = $(SuperLUroot)/lib/libblas.a
+TMGLIB = libtmglib.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
+
+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 = gfortran
+FFLAGS = -O3 -fopenmp #-cpu:g5 -YEXT_NAMES=LCS -s -YEXT_SFX=_
+LOADER = $(CC)
+LOADOPTS = -fopenmp
+
+#
+# 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/MATLAB_R2015b.app
+
diff --git a/SuperLU_5.2.0/MAKE_INC/make.rs6k b/SuperLU_5.2.0/MAKE_INC/make.rs6k
new file mode 100644
index 0000000..e9a45f3
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.rs6k
@@ -0,0 +1,61 @@
+############################################################################
+#
+# 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 = _rs6k
+
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = $(HOME)/Codes/SuperLU/SuperLU_5.1
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.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
+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 = xlc
+CFLAGS = -O3
+NOOPTS =
+FORTRAN = xlf
+FFLAGS = -O3
+LOADER = $(CC)
+LOADOPTS = -bmaxdata:0x80000000
+#
+# C preprocessor defs for compilation for the Fortran interface
+# (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
+#
+CDEFS = -DNoChange
+#
+# The directory in which Matlab is installed
+#
+MATLAB = /usr/local/matlab
+
+
diff --git a/SuperLU_5.2.0/MAKE_INC/make.scg1 b/SuperLU_5.2.0/MAKE_INC/make.scg1
new file mode 100644
index 0000000..46d7b0f
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.scg1
@@ -0,0 +1,65 @@
+############################################################################
+#
+# 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
+#
+SuperLUroot = $(HOME)/Dropbox/Codes/SuperLU/SuperLU_5.2.0
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.2.0.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)
+# If your system has no ranlib, set RANLIB = echo.
+#
+ARCH = ar
+ARCHFLAGS = cr
+RANLIB = ranlib
+
+CC = gcc
+CFLAGS = -O3 -g
+NOOPTS =
+FORTRAN = gfortran
+FFLAGS = -O3 -g -fopenmp
+LOADER = $(CC)
+LOADOPTS = -fopenmp
+
+#
+# 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/matlab
+
diff --git a/SuperLU_5.2.0/MAKE_INC/make.solaris b/SuperLU_5.2.0/MAKE_INC/make.solaris
new file mode 100644
index 0000000..df69930
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.solaris
@@ -0,0 +1,54 @@
+############################################################################
+#
+# 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 = _solaris
+
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = $(HOME)/Codes/SuperLU/SuperLU_5.1
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.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 = cc
+CFLAGS = -xO3 -xcg92
+NOOPTS =
+FORTRAN = f77
+FFLAGS = -O
+LOADER = $(CC)
+LOADOPTS = -xO3
+
+#
+# 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
diff --git a/SuperLU_5.2.0/MAKE_INC/make.sp b/SuperLU_5.2.0/MAKE_INC/make.sp
new file mode 100644
index 0000000..57e8c35
--- /dev/null
+++ b/SuperLU_5.2.0/MAKE_INC/make.sp
@@ -0,0 +1,62 @@
+############################################################################
+#
+# 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 = _sp
+
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = $(HOME)/Codes/SuperLU/SuperLU_5.1
+SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_5.1.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
+
+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 = xlc
+CFLAGS = -O3 -qarch=pwr3 -qalias=allptrs
+NOOPTS =
+FORTRAN = xlf
+FFLAGS = -O3 -qarch=pwr3
+LOADER = $(CC)
+LOADOPTS = -bmaxdata:0x80000000
+#
+# C preprocessor defs for compilation for the Fortran interface
+# (-DNoChange, -DAdd_, -DAdd__, or -DUpCase)
+#
+CDEFS = -DNoChange
+#
+# The directory in which Matlab is installed
+#
+MATLAB = /usr/local/matlab
+
+
diff --git a/SuperLU_5.2.0/MATLAB/._Makefile b/SuperLU_5.2.0/MATLAB/._Makefile
new file mode 100644
index 0000000..d6c3990
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._Makefile differ
diff --git a/SuperLU_5.2.0/MATLAB/._README b/SuperLU_5.2.0/MATLAB/._README
new file mode 100644
index 0000000..7362294
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._README differ
diff --git a/SuperLU_5.2.0/MATLAB/._airfoil2.mat b/SuperLU_5.2.0/MATLAB/._airfoil2.mat
new file mode 100644
index 0000000..041a82e
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._airfoil2.mat differ
diff --git a/SuperLU_5.2.0/MATLAB/._babble.m b/SuperLU_5.2.0/MATLAB/._babble.m
new file mode 100644
index 0000000..890887b
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._babble.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._burble.m b/SuperLU_5.2.0/MATLAB/._burble.m
new file mode 100644
index 0000000..d191c0e
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._burble.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._copyright.m b/SuperLU_5.2.0/MATLAB/._copyright.m
new file mode 100644
index 0000000..1bfe77f
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._copyright.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._hbo.m b/SuperLU_5.2.0/MATLAB/._hbo.m
new file mode 100644
index 0000000..c6b4895
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._hbo.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._isperm.m b/SuperLU_5.2.0/MATLAB/._isperm.m
new file mode 100644
index 0000000..11f2eff
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._isperm.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._lusolve.m b/SuperLU_5.2.0/MATLAB/._lusolve.m
new file mode 100644
index 0000000..90fbcf4
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._lusolve.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._mexlusolve.c b/SuperLU_5.2.0/MATLAB/._mexlusolve.c
new file mode 100644
index 0000000..5a24917
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._mexlusolve.c differ
diff --git a/SuperLU_5.2.0/MATLAB/._mexlusolve.m b/SuperLU_5.2.0/MATLAB/._mexlusolve.m
new file mode 100644
index 0000000..bb93709
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._mexlusolve.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._mexopts.sh.old b/SuperLU_5.2.0/MATLAB/._mexopts.sh.old
new file mode 100755
index 0000000..385ba82
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._mexopts.sh.old differ
diff --git a/SuperLU_5.2.0/MATLAB/._mexsuperlu.c b/SuperLU_5.2.0/MATLAB/._mexsuperlu.c
new file mode 100644
index 0000000..ba0e576
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._mexsuperlu.c differ
diff --git a/SuperLU_5.2.0/MATLAB/._mexsuperlu.m b/SuperLU_5.2.0/MATLAB/._mexsuperlu.m
new file mode 100644
index 0000000..b7a02d6
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._mexsuperlu.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._permutation.m b/SuperLU_5.2.0/MATLAB/._permutation.m
new file mode 100644
index 0000000..a61911c
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._permutation.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._resetrandoms.m b/SuperLU_5.2.0/MATLAB/._resetrandoms.m
new file mode 100644
index 0000000..524ea1a
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._resetrandoms.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._smallmesh.mat b/SuperLU_5.2.0/MATLAB/._smallmesh.mat
new file mode 100644
index 0000000..8bbffcc
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._smallmesh.mat differ
diff --git a/SuperLU_5.2.0/MATLAB/._spart2.m b/SuperLU_5.2.0/MATLAB/._spart2.m
new file mode 100644
index 0000000..491c2be
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._spart2.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._spypart.m b/SuperLU_5.2.0/MATLAB/._spypart.m
new file mode 100644
index 0000000..0001d55
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._spypart.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._superlu.m b/SuperLU_5.2.0/MATLAB/._superlu.m
new file mode 100644
index 0000000..d70f2e6
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._superlu.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._time.m b/SuperLU_5.2.0/MATLAB/._time.m
new file mode 100644
index 0000000..e2413f5
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._time.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._try2.m b/SuperLU_5.2.0/MATLAB/._try2.m
new file mode 100644
index 0000000..f0484aa
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._try2.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._try3.m b/SuperLU_5.2.0/MATLAB/._try3.m
new file mode 100644
index 0000000..afbb914
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._try3.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._try4.m b/SuperLU_5.2.0/MATLAB/._try4.m
new file mode 100644
index 0000000..f566a63
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._try4.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._trylusolve.m b/SuperLU_5.2.0/MATLAB/._trylusolve.m
new file mode 100644
index 0000000..d99635e
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._trylusolve.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._trysuperlu.m b/SuperLU_5.2.0/MATLAB/._trysuperlu.m
new file mode 100644
index 0000000..c1f6d46
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._trysuperlu.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._trytime.m b/SuperLU_5.2.0/MATLAB/._trytime.m
new file mode 100644
index 0000000..c15df5c
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._trytime.m differ
diff --git a/SuperLU_5.2.0/MATLAB/._verbose.m b/SuperLU_5.2.0/MATLAB/._verbose.m
new file mode 100644
index 0000000..92652b8
Binary files /dev/null and b/SuperLU_5.2.0/MATLAB/._verbose.m differ
diff --git a/MATLAB/Makefile b/SuperLU_5.2.0/MATLAB/Makefile
similarity index 100%
rename from MATLAB/Makefile
rename to SuperLU_5.2.0/MATLAB/Makefile
diff --git a/MATLAB/README b/SuperLU_5.2.0/MATLAB/README
similarity index 100%
rename from MATLAB/README
rename to SuperLU_5.2.0/MATLAB/README
diff --git a/MATLAB/airfoil2.mat b/SuperLU_5.2.0/MATLAB/airfoil2.mat
similarity index 100%
rename from MATLAB/airfoil2.mat
rename to SuperLU_5.2.0/MATLAB/airfoil2.mat
diff --git a/MATLAB/babble.m b/SuperLU_5.2.0/MATLAB/babble.m
similarity index 100%
rename from MATLAB/babble.m
rename to SuperLU_5.2.0/MATLAB/babble.m
diff --git a/MATLAB/burble.m b/SuperLU_5.2.0/MATLAB/burble.m
similarity index 100%
rename from MATLAB/burble.m
rename to SuperLU_5.2.0/MATLAB/burble.m
diff --git a/MATLAB/copyright.m b/SuperLU_5.2.0/MATLAB/copyright.m
similarity index 100%
rename from MATLAB/copyright.m
rename to SuperLU_5.2.0/MATLAB/copyright.m
diff --git a/MATLAB/hbo.m b/SuperLU_5.2.0/MATLAB/hbo.m
similarity index 100%
rename from MATLAB/hbo.m
rename to SuperLU_5.2.0/MATLAB/hbo.m
diff --git a/MATLAB/isperm.m b/SuperLU_5.2.0/MATLAB/isperm.m
similarity index 100%
rename from MATLAB/isperm.m
rename to SuperLU_5.2.0/MATLAB/isperm.m
diff --git a/MATLAB/lusolve.m b/SuperLU_5.2.0/MATLAB/lusolve.m
similarity index 100%
rename from MATLAB/lusolve.m
rename to SuperLU_5.2.0/MATLAB/lusolve.m
diff --git a/SuperLU_5.2.0/MATLAB/mexlusolve.c b/SuperLU_5.2.0/MATLAB/mexlusolve.c
new file mode 100644
index 0000000..e98b92a
--- /dev/null
+++ b/SuperLU_5.2.0/MATLAB/mexlusolve.c
@@ -0,0 +1,163 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*
+ * -- 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"
+
+#define MatlabMatrix mxArray
+
+#if 0 /* V4 */
+#define MatlabMatrix Matrix
+#endif
+
+
+/* Aliases for input and output arguments */
+#define A_in prhs[0]
+#define b_in prhs[1]
+#define Pc_in prhs[2]
+#define x_out plhs[0]
+
+#define verbose (SPUMONI>0)
+#define babble (SPUMONI>1)
+#define burble (SPUMONI>2)
+
+void mexFunction(
+ int nlhs, /* number of expected outputs */
+ MatlabMatrix *plhs[], /* matrix pointer array returning outputs */
+ int nrhs, /* number of inputs */
+ const MatlabMatrix *prhs[] /* matrix pointer array for inputs. */
+#if 0 /* V4 */
+ MatlabMatrix *prhs[] /* matrix pointer array for inputs */
+#endif
+ )
+{
+ int SPUMONI; /* ... as should the sparse monitor flag */
+ double FlopsInSuperLU; /* ... as should the flop counter. */
+ extern flops_t LUFactFlops(SuperLUStat_t*);
+ extern flops_t LUSolveFlops(SuperLUStat_t*);
+
+ /* Arguments to dgssv(). */
+ SuperMatrix A;
+ SuperMatrix B;
+ SuperMatrix L, U;
+ int m, n, nnz;
+ int numrhs;
+ double *vb, *x;
+ double *val;
+ 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;
+ superlu_options_t options;
+ SuperLUStat_t stat;
+
+ /* Check number of arguments passed from Matlab. */
+ if (nrhs != 3) {
+ mexErrMsgTxt("LUSOLVE requires 3 input arguments.");
+ } else if (nlhs != 1) {
+ mexErrMsgTxt("LUSOLVE requires 1 output argument.");
+ }
+
+ /* Read the Sparse Monitor Flag */
+ X = mxCreateString("spumoni");
+ mexerr = mexCallMATLAB(1, &Y, 1, &X, "sparsfun");
+ SPUMONI = mxGetScalar(Y);
+ mxDestroyArray(Y);
+ mxDestroyArray(X);
+#if 0 /* V4 */
+ mxFreeMatrix(Y);
+ mxFreeMatrix(X);
+#endif
+
+ m = mxGetM(A_in);
+ n = mxGetN(A_in);
+ numrhs = mxGetN(b_in);
+ if ( babble ) printf("m=%d, n=%d, numrhs=%d\n", m, n, numrhs);
+ vb = mxGetPr(b_in);
+ x_out = mxCreateDoubleMatrix(m, numrhs, mxREAL);
+
+ 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 = (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);
+ dCopy_Dense_Matrix(m, numrhs, vb, m, x, m);
+ dCreate_Dense_Matrix(&B, m, numrhs, x, m, SLU_DN, SLU_D, SLU_GE);
+
+ FlopsInSuperLU = 0;
+
+ set_default_options(&options);
+ options.ColPerm = MY_PERMC;
+ StatInit(&stat);
+
+ /* Call simple driver */
+ if ( verbose )
+ mexPrintf("Call LUSOLVE, use SUPERLU to factor first ...\n");
+ dgssv(&options, &A, perm_c, perm_r, &L, &U, &B, &stat, &info);
+
+#if 0 /* FLOPS is not available in the new Matlab. */
+ /* Tell Matlab how many flops we did. */
+ FlopsInSuperLU += LUFactFlops(&stat) + LUSolveFlops(&stat);
+ if ( verbose ) mexPrintf("LUSOLVE flops: %.f\n", FlopsInSuperLU);
+ mexerr = mexCallMATLAB(1, &X, 0, NULL, "flops");
+ *(mxGetPr(X)) += FlopsInSuperLU;
+ mexerr = mexCallMATLAB(1, &Y, 1, &X, "flops");
+ mxDestroyArray(Y);
+ mxDestroyArray(X);
+#endif
+
+ /* Construct Matlab solution matrix. */
+ if ( !info ) {
+ Destroy_SuperNode_Matrix(&L);
+ 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/mexlusolve.m b/SuperLU_5.2.0/MATLAB/mexlusolve.m
similarity index 100%
rename from MATLAB/mexlusolve.m
rename to SuperLU_5.2.0/MATLAB/mexlusolve.m
diff --git a/MATLAB/mexopts.sh.old b/SuperLU_5.2.0/MATLAB/mexopts.sh.old
similarity index 100%
rename from MATLAB/mexopts.sh.old
rename to SuperLU_5.2.0/MATLAB/mexopts.sh.old
diff --git a/SuperLU_5.2.0/MATLAB/mexsuperlu.c b/SuperLU_5.2.0/MATLAB/mexsuperlu.c
new file mode 100644
index 0000000..b2fe67c
--- /dev/null
+++ b/SuperLU_5.2.0/MATLAB/mexsuperlu.c
@@ -0,0 +1,275 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*
+ * -- SuperLU routine (version 5.2) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * June 30, 2009
+ *
+ * Modified:
+ * September 25, 2011, compatible with 64-bit integer in R2006b
+ * January 17, 2016, compatible with SuperLU_5.0 interface
+ */
+#include <stdio.h>
+#include "mex.h"
+#include "matrix.h"
+
+#include "slu_ddefs.h"
+
+#define MatlabMatrix mxArray
+
+
+/* Aliases for input and output arguments */
+#define A_in prhs[0]
+#define Pc_in prhs[1]
+#define L_out plhs[0]
+#define U_out plhs[1]
+#define Pr_out plhs[2]
+#define Pc_out plhs[3]
+
+void LUextract(SuperMatrix *, SuperMatrix *, double *, mwIndex *, mwIndex *,
+ double *, mwIndex *, mwIndex *, int *, int*);
+
+#define verbose (SPUMONI>0)
+#define babble (SPUMONI>1)
+#define burble (SPUMONI>2)
+
+void mexFunction(
+ int nlhs, /* number of expected outputs */
+ MatlabMatrix *plhs[], /* matrix pointer array returning outputs */
+ int nrhs, /* number of inputs */
+ const MatlabMatrix *prhs[] /* matrix pointer array for inputs */
+ )
+{
+ int SPUMONI; /* ... as should the sparse monitor flag */
+ double FlopsInSuperLU; /* ... as should the flop counter */
+ extern flops_t LUFactFlops(SuperLUStat_t *);
+
+ /* Arguments to C dgstrf(). */
+ superlu_options_t options;
+ SuperMatrix Ac; /* Matrix postmultiplied by Pc */
+ SuperMatrix L, U;
+ GlobalLU_t Glu; /* Not needed on return. */
+ int panel_size, relax;
+ int *etree, *perm_r, *perm_c;
+ SuperLUStat_t stat;
+
+ /* other local variables */
+ SuperMatrix A;
+ int m, n, nnz;
+ double *val;
+ int *rowind;
+ int *colptr;
+ mwSize *perm_c_64;
+ mwSize *rowind_64;
+ mwSize *colptr_64;
+ double thresh = 1.0; /* diagonal pivoting threshold */
+ int info;
+ MatlabMatrix *X, *Y; /* args to calls back to Matlab */
+ int i, mexerr;
+ double *dp;
+ double *Lval, *Uval;
+ int *Lrow, *Urow;
+ int *Lcol, *Ucol;
+ mwIndex *Lrow_64, *Lcol_64, *Urow_64, *Ucol_64;
+ int nnzL, nnzU, snnzL, snnzU;
+
+ /* Check number of arguments passed from Matlab. */
+ if (nrhs != 2) {
+ mexErrMsgTxt("SUPERLU requires 2 input arguments.");
+ } else if (nlhs != 4) {
+ mexErrMsgTxt("SUPERLU requires 4 output arguments.");
+ }
+
+ /* Read the Sparse Monitor Flag */
+ X = mxCreateString("spumoni");
+ mexerr = mexCallMATLAB(1, &Y, 1, &X, "sparsfun");
+ SPUMONI = mxGetScalar(Y);
+ mxDestroyArray(Y);
+ mxDestroyArray(X);
+
+ 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 = (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;
+ FlopsInSuperLU = 0;
+
+ set_default_options(&options);
+ StatInit(&stat);
+
+ if ( verbose ) mexPrintf("Apply column perm to A and compute etree...\n");
+ sp_preorder(&options, &A, perm_c, etree, &Ac);
+
+ if ( verbose ) {
+ mexPrintf("LU factorization...\n");
+ mexPrintf("\tpanel_size %d, relax %d, diag_pivot_thresh %.2g\n",
+ panel_size, relax, thresh);
+ }
+
+ dgstrf(&options, &Ac, relax, panel_size, etree,
+ NULL, 0, perm_c, perm_r, &L, &U, &Glu, &stat, &info);
+
+ if ( verbose ) mexPrintf("INFO from dgstrf %d\n", info);
+
+#if 0 /* FLOPS is not available in the new Matlab. */
+ /* Tell Matlab how many flops we did. */
+ FlopsInSuperLU += LUFactFlops(&stat);
+ if (verbose) mexPrintf("SUPERLU flops: %.f\n", FlopsInSuperLU);
+ mexerr = mexCallMATLAB(1, &X, 0, NULL, "flops");
+ *(mxGetPr(X)) += FlopsInSuperLU;
+ mexerr = mexCallMATLAB(1, &Y, 1, &X, "flops");
+ mxDestroyArray(Y);
+ mxDestroyArray(X);
+#endif
+
+ /* Construct output arguments for Matlab. */
+ if ( info >= 0 && info <= n ) {
+ Pr_out = mxCreateDoubleMatrix(m, 1, mxREAL); /* output row perm */
+ dp = mxGetPr(Pr_out);
+ for (i = 0; i < m; *dp++ = (double) perm_r[i++]+1);
+
+ Pc_out = mxCreateDoubleMatrix(n, 1, mxREAL); /* output col perm */
+ dp = mxGetPr(Pc_out);
+ 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;
+ L_out = mxCreateSparse(m, n, nnzL, mxREAL);
+ Lval = mxGetPr(L_out);
+ Lrow_64 = mxGetIr(L_out);
+ Lcol_64 = mxGetJc(L_out);
+ U_out = mxCreateSparse(m, n, nnzU, mxREAL);
+ Uval = mxGetPr(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]);
+ }
+
+ Destroy_CompCol_Permuted(&Ac);
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+
+ if (verbose) mexPrintf("factor nonzeros: %d unsqueezed, %d squeezed.\n",
+ nnzL + nnzU, snnzL + snnzU);
+ } else {
+ mexErrMsgTxt("Error returned from C dgstrf().");
+ }
+
+ mxFree(etree);
+ mxFree(perm_r);
+ mxFree(perm_c);
+ mxFree(rowind);
+ mxFree(colptr);
+
+ StatFree(&stat);
+
+ return;
+}
+
+void
+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;
+ int fsupc, istart, nsupr;
+ int lastl = 0, lastu = 0;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ double *SNptr;
+
+ Lstore = L->Store;
+ Ustore = U->Store;
+ Lcol[0] = 0;
+ Ucol[0] = 0;
+
+ /* for each supernode */
+ for (k = 0; k <= Lstore->nsuper; ++k) {
+
+ fsupc = L_FST_SUPC(k);
+ istart = L_SUB_START(fsupc);
+ nsupr = L_SUB_START(fsupc+1) - istart;
+ upper = 1;
+
+ /* for each column in the supernode */
+ for (j = fsupc; j < L_FST_SUPC(k+1); ++j) {
+ SNptr = &((double*)Lstore->nzval)[L_NZ_START(j)];
+
+ /* Extract U */
+ 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++] = (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++] = (mwIndex)L_SUB(istart+i);
+ }
+ Ucol[j+1] = lastu;
+
+ /* Extract L */
+ Lval[lastl] = 1.0; /* unit diagonal */
+ Lrow[lastl++] = L_SUB(istart + upper - 1);
+ for (i = upper; i < nsupr; ++i) {
+ Lval[lastl] = SNptr[i];
+ /* Matlab doesn't like explicit zero. */
+ if (Lval[lastl] != 0.0) Lrow[lastl++] = (mwIndex)L_SUB(istart+i);
+ }
+ Lcol[j+1] = lastl;
+
+ ++upper;
+
+ } /* for j ... */
+
+ } /* for k ... */
+
+ *snnzL = lastl;
+ *snnzU = lastu;
+}
diff --git a/MATLAB/mexsuperlu.m b/SuperLU_5.2.0/MATLAB/mexsuperlu.m
similarity index 100%
rename from MATLAB/mexsuperlu.m
rename to SuperLU_5.2.0/MATLAB/mexsuperlu.m
diff --git a/MATLAB/permutation.m b/SuperLU_5.2.0/MATLAB/permutation.m
similarity index 100%
rename from MATLAB/permutation.m
rename to SuperLU_5.2.0/MATLAB/permutation.m
diff --git a/MATLAB/resetrandoms.m b/SuperLU_5.2.0/MATLAB/resetrandoms.m
similarity index 100%
rename from MATLAB/resetrandoms.m
rename to SuperLU_5.2.0/MATLAB/resetrandoms.m
diff --git a/MATLAB/smallmesh.mat b/SuperLU_5.2.0/MATLAB/smallmesh.mat
similarity index 100%
rename from MATLAB/smallmesh.mat
rename to SuperLU_5.2.0/MATLAB/smallmesh.mat
diff --git a/MATLAB/spart2.m b/SuperLU_5.2.0/MATLAB/spart2.m
similarity index 100%
rename from MATLAB/spart2.m
rename to SuperLU_5.2.0/MATLAB/spart2.m
diff --git a/SuperLU_5.2.0/MATLAB/spypart.m b/SuperLU_5.2.0/MATLAB/spypart.m
new file mode 100644
index 0000000..c83ee54
--- /dev/null
+++ b/SuperLU_5.2.0/MATLAB/spypart.m
@@ -0,0 +1,35 @@
+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/SuperLU_5.2.0/MATLAB/superlu.m
similarity index 100%
rename from MATLAB/superlu.m
rename to SuperLU_5.2.0/MATLAB/superlu.m
diff --git a/SuperLU_5.2.0/MATLAB/time.m b/SuperLU_5.2.0/MATLAB/time.m
new file mode 100644
index 0000000..8286451
--- /dev/null
+++ b/SuperLU_5.2.0/MATLAB/time.m
@@ -0,0 +1,12 @@
+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/try2.m b/SuperLU_5.2.0/MATLAB/try2.m
similarity index 100%
rename from MATLAB/try2.m
rename to SuperLU_5.2.0/MATLAB/try2.m
diff --git a/MATLAB/try3.m b/SuperLU_5.2.0/MATLAB/try3.m
similarity index 100%
rename from MATLAB/try3.m
rename to SuperLU_5.2.0/MATLAB/try3.m
diff --git a/MATLAB/try4.m b/SuperLU_5.2.0/MATLAB/try4.m
similarity index 100%
rename from MATLAB/try4.m
rename to SuperLU_5.2.0/MATLAB/try4.m
diff --git a/MATLAB/trylusolve.m b/SuperLU_5.2.0/MATLAB/trylusolve.m
similarity index 100%
rename from MATLAB/trylusolve.m
rename to SuperLU_5.2.0/MATLAB/trylusolve.m
diff --git a/MATLAB/trysuperlu.m b/SuperLU_5.2.0/MATLAB/trysuperlu.m
similarity index 100%
rename from MATLAB/trysuperlu.m
rename to SuperLU_5.2.0/MATLAB/trysuperlu.m
diff --git a/MATLAB/trytime.m b/SuperLU_5.2.0/MATLAB/trytime.m
similarity index 100%
rename from MATLAB/trytime.m
rename to SuperLU_5.2.0/MATLAB/trytime.m
diff --git a/MATLAB/verbose.m b/SuperLU_5.2.0/MATLAB/verbose.m
similarity index 100%
rename from MATLAB/verbose.m
rename to SuperLU_5.2.0/MATLAB/verbose.m
diff --git a/Makefile b/SuperLU_5.2.0/Makefile
similarity index 100%
rename from Makefile
rename to SuperLU_5.2.0/Makefile
diff --git a/SuperLU_5.2.0/README b/SuperLU_5.2.0/README
new file mode 100644
index 0000000..b729a69
--- /dev/null
+++ b/SuperLU_5.2.0/README
@@ -0,0 +1,160 @@
+ SuperLU (Version 5.2.0)
+ =======================
+
+SuperLU contains a set of subroutines to solve a sparse linear system
+A*X=B. It uses Gaussian elimination with partial pivoting (GEPP).
+The columns of A may be preordered before factorization; the
+preordering for sparsity is completely separate from the factorization.
+
+SuperLU is implemented in ANSI C, and must be compiled with standard
+ANSI C compilers. It provides functionality for both real and complex
+matrices, in both single and double precision. The file names for the
+single-precision real version start with letter "s" (such as sgstrf.c);
+the file names for the double-precision real version start with letter "d"
+(such as dgstrf.c); the file names for the single-precision complex
+version start with letter "c" (such as cgstrf.c); the file names
+for the double-precision complex version start with letter "z"
+(such as zgstrf.c).
+
+
+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.
+ SuperLU/MAKE_INC/ sample machine-specific make.inc files
+ SuperLU/MATLAB/ Matlab mex-file interface
+ SuperLU/SRC/ C source code, to be compiled into the superlu.a library
+ SuperLU/TESTING/ driver routines to test correctness
+ SuperLU/Makefile top level Makefile that does installation and testing
+ SuperLU/make.inc compiler, compile flags, library definitions and C
+ preprocessor definitions, included in all Makefiles.
+ (You may need to edit it to be suitable for your system
+ before compiling the whole package.)
+
+There are two ways to install the package. One uses CMake build system,
+the other requires users to edit makefile manually. The procedures
+are described below.
+
+1. Manual installation with makefile.
+ Before installing the package, please examine the three things dependent
+ on your system setup:
+
+ 1.1 Edit the make.inc include file.
+ This make include file is referenced inside each of the Makefiles
+ in the various subdirectories. As a result, there is no need to
+ edit the Makefiles in the subdirectories. All information that is
+ 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 Linux,
+ MacX, Cray, IBM, SunOS 5.x (Solaris), and HP-PA.
+ 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 linux, you can do
+
+ 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.
+
+ 1.2. The BLAS library.
+ If there is BLAS library available on your machine, you may define
+ the following in the file SuperLU/make.inc:
+ BLASDEF = -DUSE_VENDOR_BLAS
+ BLASLIB = <BLAS library you wish to link with>
+
+ The CBLAS/ subdirectory contains the part of the C BLAS needed by
+ SuperLU package. However, these codes are intended for use only if
+ there is no faster implementation of the BLAS already available
+ on your machine. In this case, you should do the following:
+
+ 1) In SuperLU/make.inc, undefine (comment out) BLASDEF, and define:
+ BLASLIB = ../lib/blas$(PLAT).a
+
+ 2) Go to the SuperLU/ directory, type:
+ make blaslib
+ to make the BLAS library from the routines in the
+ CBLAS/ subdirectory.
+
+ 1.3. C preprocessor definition CDEFS.
+ In the header file SRC/slu_Cnames.h, we use macros to determine how
+ C routines should be named so that they are callable by Fortran.
+ (Some vendor-supplied BLAS libraries do not have C interface. So the
+ re-naming is needed in order for the SuperLU BLAS calls (in C) to
+ interface with the Fortran-style BLAS.)
+ The possible options for CDEFS are:
+
+ o -DAdd_: Fortran expects a C routine to have an underscore
+ postfixed to the name;
+ o -DNoChange: Fortran expects a C routine name to be identical to
+ that compiled by C;
+ o -DUpCase: Fortran expects a C routine name to be all uppercase.
+
+ 1.4. The Matlab MEX-file interface.
+ The MATLAB/ subdirectory includes Matlab C MEX-files, so that
+ our factor and solve routines can be called as alternatives to those
+ built into Matlab. In the file SuperLU/make.inc, define MATLAB to be
+ the directory in which Matlab is installed on your system, for example:
+
+ MATLAB = /usr/local/matlab
+
+ At the SuperLU/ directory, type "make matlabmex" to build the MEX-file
+ interface. After you have built the interface, you may go to the
+ MATLAB/ directory to test the correctness by typing (in Matlab):
+ trysuperlu
+ trylusolve
+
+ A Makefile is provided in each subdirectory. The installation can be done
+ completely automatically by simply typing "make" at the top level.
+ The test results are in the files below:
+ INSTALL/install.out
+ TESTING/stest.out # single precision, real
+ TESTING/dtest.out # double precision, real
+ TESTING/ctest.out # single precision, complex
+ TESTING/ztest.out # double precision, complex
+
+
+2. Using CMake build system.
+ You will need to create a build tree from which to invoke CMake.
+
+ From the top level directory, do:
+ mkdir build ; cd build
+ cmake ..
+
+ or with more options:
+ cmake .. \
+
+
+ To actually build, type:
+ make
+
+ To run the installation test, type:
+ ctest
+
+ The test results are in the files below:
+ build/TESTING/s_test.out # single precision, real
+ build/TESTING/d_test.out # double precision, real
+ build/TESTING/c_test.out # single precision, complex
+ build/TESTING/z_test.out # double precision, complex
+
+
+--------------------
+| 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
+ October 27, 2011 Version 4.3
+ July 26, 2015 Version 5.0
+ December 3, 2015 Version 5.1
+ April 8, 2016 Version 5.2.0
diff --git a/SuperLU_5.2.0/SRC/._CMakeLists.txt b/SuperLU_5.2.0/SRC/._CMakeLists.txt
new file mode 100644
index 0000000..e8755b4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._CMakeLists.txt differ
diff --git a/SuperLU_5.2.0/SRC/._Makefile b/SuperLU_5.2.0/SRC/._Makefile
new file mode 100644
index 0000000..a0ca428
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._Makefile differ
diff --git a/SuperLU_5.2.0/SRC/._ccolumn_bmod.c b/SuperLU_5.2.0/SRC/._ccolumn_bmod.c
new file mode 100644
index 0000000..7becf65
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ccolumn_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._ccolumn_dfs.c b/SuperLU_5.2.0/SRC/._ccolumn_dfs.c
new file mode 100644
index 0000000..3fdb8c6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ccolumn_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ccopy_to_ucol.c b/SuperLU_5.2.0/SRC/._ccopy_to_ucol.c
new file mode 100644
index 0000000..42cfc4d
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ccopy_to_ucol.c differ
diff --git a/SuperLU_5.2.0/SRC/._cdiagonal.c b/SuperLU_5.2.0/SRC/._cdiagonal.c
new file mode 100644
index 0000000..e228c3f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cdiagonal.c differ
diff --git a/SuperLU_5.2.0/SRC/._cgscon.c b/SuperLU_5.2.0/SRC/._cgscon.c
new file mode 100644
index 0000000..7dd053f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cgscon.c differ
diff --git a/SuperLU_5.2.0/SRC/._cgsequ.c b/SuperLU_5.2.0/SRC/._cgsequ.c
new file mode 100644
index 0000000..9b36c78
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cgsequ.c differ
diff --git a/SuperLU_5.2.0/SRC/._cgsisx.c b/SuperLU_5.2.0/SRC/._cgsisx.c
new file mode 100644
index 0000000..a8fb4fa
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cgsisx.c differ
diff --git a/SuperLU_5.2.0/SRC/._cgsitrf.c b/SuperLU_5.2.0/SRC/._cgsitrf.c
new file mode 100644
index 0000000..38d4086
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cgsitrf.c differ
diff --git a/SuperLU_5.2.0/SRC/._cgsrfs.c b/SuperLU_5.2.0/SRC/._cgsrfs.c
new file mode 100644
index 0000000..2f4eed5
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cgsrfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._cgssv.c b/SuperLU_5.2.0/SRC/._cgssv.c
new file mode 100644
index 0000000..bc0c194
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cgssv.c differ
diff --git a/SuperLU_5.2.0/SRC/._cgssvx.c b/SuperLU_5.2.0/SRC/._cgssvx.c
new file mode 100644
index 0000000..ef0849a
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cgssvx.c differ
diff --git a/SuperLU_5.2.0/SRC/._cgstrf.c b/SuperLU_5.2.0/SRC/._cgstrf.c
new file mode 100644
index 0000000..d39f391
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cgstrf.c differ
diff --git a/SuperLU_5.2.0/SRC/._cgstrs.c b/SuperLU_5.2.0/SRC/._cgstrs.c
new file mode 100644
index 0000000..8b2eac4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cgstrs.c differ
diff --git a/SuperLU_5.2.0/SRC/._clacon.c b/SuperLU_5.2.0/SRC/._clacon.c
new file mode 100644
index 0000000..2a87871
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._clacon.c differ
diff --git a/SuperLU_5.2.0/SRC/._clacon2.c b/SuperLU_5.2.0/SRC/._clacon2.c
new file mode 100644
index 0000000..85cfea0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._clacon2.c differ
diff --git a/SuperLU_5.2.0/SRC/._clangs.c b/SuperLU_5.2.0/SRC/._clangs.c
new file mode 100644
index 0000000..6eb4eac
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._clangs.c differ
diff --git a/SuperLU_5.2.0/SRC/._claqgs.c b/SuperLU_5.2.0/SRC/._claqgs.c
new file mode 100644
index 0000000..20a5db8
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._claqgs.c differ
diff --git a/SuperLU_5.2.0/SRC/._cldperm.c b/SuperLU_5.2.0/SRC/._cldperm.c
new file mode 100644
index 0000000..4009373
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cldperm.c differ
diff --git a/SuperLU_5.2.0/SRC/._cmemory.c b/SuperLU_5.2.0/SRC/._cmemory.c
new file mode 100644
index 0000000..eb02c49
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cmemory.c differ
diff --git a/SuperLU_5.2.0/SRC/._cmyblas2.c b/SuperLU_5.2.0/SRC/._cmyblas2.c
new file mode 100644
index 0000000..9ec0256
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cmyblas2.c differ
diff --git a/SuperLU_5.2.0/SRC/._colamd.c b/SuperLU_5.2.0/SRC/._colamd.c
new file mode 100644
index 0000000..c0f1835
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._colamd.c differ
diff --git a/SuperLU_5.2.0/SRC/._colamd.h b/SuperLU_5.2.0/SRC/._colamd.h
new file mode 100644
index 0000000..391afb4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._colamd.h differ
diff --git a/SuperLU_5.2.0/SRC/._cpanel_bmod.c b/SuperLU_5.2.0/SRC/._cpanel_bmod.c
new file mode 100644
index 0000000..0336570
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cpanel_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._cpanel_dfs.c b/SuperLU_5.2.0/SRC/._cpanel_dfs.c
new file mode 100644
index 0000000..75b2326
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cpanel_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._cpivotL.c b/SuperLU_5.2.0/SRC/._cpivotL.c
new file mode 100644
index 0000000..2fc68d6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cpivotL.c differ
diff --git a/SuperLU_5.2.0/SRC/._cpivotgrowth.c b/SuperLU_5.2.0/SRC/._cpivotgrowth.c
new file mode 100644
index 0000000..1dc6fa6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cpivotgrowth.c differ
diff --git a/SuperLU_5.2.0/SRC/._cpruneL.c b/SuperLU_5.2.0/SRC/._cpruneL.c
new file mode 100644
index 0000000..c20b090
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cpruneL.c differ
diff --git a/SuperLU_5.2.0/SRC/._creadhb.c b/SuperLU_5.2.0/SRC/._creadhb.c
new file mode 100644
index 0000000..96a67ae
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._creadhb.c differ
diff --git a/SuperLU_5.2.0/SRC/._creadrb.c b/SuperLU_5.2.0/SRC/._creadrb.c
new file mode 100644
index 0000000..3e9033b
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._creadrb.c differ
diff --git a/SuperLU_5.2.0/SRC/._creadtriple.c b/SuperLU_5.2.0/SRC/._creadtriple.c
new file mode 100644
index 0000000..e97a5f4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._creadtriple.c differ
diff --git a/SuperLU_5.2.0/SRC/._csnode_bmod.c b/SuperLU_5.2.0/SRC/._csnode_bmod.c
new file mode 100644
index 0000000..5175ea2
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._csnode_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._csnode_dfs.c b/SuperLU_5.2.0/SRC/._csnode_dfs.c
new file mode 100644
index 0000000..dfc802f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._csnode_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._csp_blas2.c b/SuperLU_5.2.0/SRC/._csp_blas2.c
new file mode 100644
index 0000000..f84fbb6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._csp_blas2.c differ
diff --git a/SuperLU_5.2.0/SRC/._csp_blas3.c b/SuperLU_5.2.0/SRC/._csp_blas3.c
new file mode 100644
index 0000000..9ae0f30
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._csp_blas3.c differ
diff --git a/SuperLU_5.2.0/SRC/._cutil.c b/SuperLU_5.2.0/SRC/._cutil.c
new file mode 100644
index 0000000..cdda17b
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._cutil.c differ
diff --git a/SuperLU_5.2.0/SRC/._dcolumn_bmod.c b/SuperLU_5.2.0/SRC/._dcolumn_bmod.c
new file mode 100644
index 0000000..427c365
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dcolumn_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._dcolumn_dfs.c b/SuperLU_5.2.0/SRC/._dcolumn_dfs.c
new file mode 100644
index 0000000..526769d
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dcolumn_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._dcomplex.c b/SuperLU_5.2.0/SRC/._dcomplex.c
new file mode 100644
index 0000000..8ac9fc4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dcomplex.c differ
diff --git a/SuperLU_5.2.0/SRC/._dcopy_to_ucol.c b/SuperLU_5.2.0/SRC/._dcopy_to_ucol.c
new file mode 100644
index 0000000..47f88b6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dcopy_to_ucol.c differ
diff --git a/SuperLU_5.2.0/SRC/._ddiagonal.c b/SuperLU_5.2.0/SRC/._ddiagonal.c
new file mode 100644
index 0000000..44a317f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ddiagonal.c differ
diff --git a/SuperLU_5.2.0/SRC/._dgscon.c b/SuperLU_5.2.0/SRC/._dgscon.c
new file mode 100644
index 0000000..a7abcd4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dgscon.c differ
diff --git a/SuperLU_5.2.0/SRC/._dgsequ.c b/SuperLU_5.2.0/SRC/._dgsequ.c
new file mode 100644
index 0000000..f89d2a4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dgsequ.c differ
diff --git a/SuperLU_5.2.0/SRC/._dgsisx.c b/SuperLU_5.2.0/SRC/._dgsisx.c
new file mode 100644
index 0000000..586908c
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dgsisx.c differ
diff --git a/SuperLU_5.2.0/SRC/._dgsitrf.c b/SuperLU_5.2.0/SRC/._dgsitrf.c
new file mode 100644
index 0000000..757d444
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dgsitrf.c differ
diff --git a/SuperLU_5.2.0/SRC/._dgsrfs.c b/SuperLU_5.2.0/SRC/._dgsrfs.c
new file mode 100644
index 0000000..5d0c669
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dgsrfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._dgssv.c b/SuperLU_5.2.0/SRC/._dgssv.c
new file mode 100644
index 0000000..8749d72
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dgssv.c differ
diff --git a/SuperLU_5.2.0/SRC/._dgssvx.c b/SuperLU_5.2.0/SRC/._dgssvx.c
new file mode 100644
index 0000000..177ef1f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dgssvx.c differ
diff --git a/SuperLU_5.2.0/SRC/._dgstrf.c b/SuperLU_5.2.0/SRC/._dgstrf.c
new file mode 100644
index 0000000..d7c9444
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dgstrf.c differ
diff --git a/SuperLU_5.2.0/SRC/._dgstrs.c b/SuperLU_5.2.0/SRC/._dgstrs.c
new file mode 100644
index 0000000..1c09d30
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dgstrs.c differ
diff --git a/SuperLU_5.2.0/SRC/._dlacon.c b/SuperLU_5.2.0/SRC/._dlacon.c
new file mode 100644
index 0000000..326d431
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dlacon.c differ
diff --git a/SuperLU_5.2.0/SRC/._dlacon2.c b/SuperLU_5.2.0/SRC/._dlacon2.c
new file mode 100644
index 0000000..230fcea
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dlacon2.c differ
diff --git a/SuperLU_5.2.0/SRC/._dlangs.c b/SuperLU_5.2.0/SRC/._dlangs.c
new file mode 100644
index 0000000..c2e3373
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dlangs.c differ
diff --git a/SuperLU_5.2.0/SRC/._dlaqgs.c b/SuperLU_5.2.0/SRC/._dlaqgs.c
new file mode 100644
index 0000000..d040839
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dlaqgs.c differ
diff --git a/SuperLU_5.2.0/SRC/._dldperm.c b/SuperLU_5.2.0/SRC/._dldperm.c
new file mode 100644
index 0000000..fa364c6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dldperm.c differ
diff --git a/SuperLU_5.2.0/SRC/._dmach.c b/SuperLU_5.2.0/SRC/._dmach.c
new file mode 100644
index 0000000..9df9f3d
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dmach.c differ
diff --git a/SuperLU_5.2.0/SRC/._dmemory.c b/SuperLU_5.2.0/SRC/._dmemory.c
new file mode 100644
index 0000000..7eedcf6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dmemory.c differ
diff --git a/SuperLU_5.2.0/SRC/._dmyblas2.c b/SuperLU_5.2.0/SRC/._dmyblas2.c
new file mode 100644
index 0000000..7cb8d84
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dmyblas2.c differ
diff --git a/SuperLU_5.2.0/SRC/._dpanel_bmod.c b/SuperLU_5.2.0/SRC/._dpanel_bmod.c
new file mode 100644
index 0000000..b31265a
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dpanel_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._dpanel_dfs.c b/SuperLU_5.2.0/SRC/._dpanel_dfs.c
new file mode 100644
index 0000000..0f1cc5d
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dpanel_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._dpivotL.c b/SuperLU_5.2.0/SRC/._dpivotL.c
new file mode 100644
index 0000000..0459a56
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dpivotL.c differ
diff --git a/SuperLU_5.2.0/SRC/._dpivotgrowth.c b/SuperLU_5.2.0/SRC/._dpivotgrowth.c
new file mode 100644
index 0000000..3bbe13d
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dpivotgrowth.c differ
diff --git a/SuperLU_5.2.0/SRC/._dpruneL.c b/SuperLU_5.2.0/SRC/._dpruneL.c
new file mode 100644
index 0000000..3a1f59f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dpruneL.c differ
diff --git a/SuperLU_5.2.0/SRC/._dreadhb.c b/SuperLU_5.2.0/SRC/._dreadhb.c
new file mode 100644
index 0000000..6f435ce
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dreadhb.c differ
diff --git a/SuperLU_5.2.0/SRC/._dreadrb.c b/SuperLU_5.2.0/SRC/._dreadrb.c
new file mode 100644
index 0000000..7fe9a64
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dreadrb.c differ
diff --git a/SuperLU_5.2.0/SRC/._dreadtriple.c b/SuperLU_5.2.0/SRC/._dreadtriple.c
new file mode 100644
index 0000000..ce5fd07
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dreadtriple.c differ
diff --git a/SuperLU_5.2.0/SRC/._dsnode_bmod.c b/SuperLU_5.2.0/SRC/._dsnode_bmod.c
new file mode 100644
index 0000000..bdf4077
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dsnode_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._dsnode_dfs.c b/SuperLU_5.2.0/SRC/._dsnode_dfs.c
new file mode 100644
index 0000000..4fa4b72
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dsnode_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._dsp_blas2.c b/SuperLU_5.2.0/SRC/._dsp_blas2.c
new file mode 100644
index 0000000..9080a6b
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dsp_blas2.c differ
diff --git a/SuperLU_5.2.0/SRC/._dsp_blas3.c b/SuperLU_5.2.0/SRC/._dsp_blas3.c
new file mode 100644
index 0000000..8da98f9
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dsp_blas3.c differ
diff --git a/SuperLU_5.2.0/SRC/._dutil.c b/SuperLU_5.2.0/SRC/._dutil.c
new file mode 100644
index 0000000..c3229ce
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dutil.c differ
diff --git a/SuperLU_5.2.0/SRC/._dzsum1.c b/SuperLU_5.2.0/SRC/._dzsum1.c
new file mode 100644
index 0000000..d37388f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._dzsum1.c differ
diff --git a/SuperLU_5.2.0/SRC/._get_perm_c.c b/SuperLU_5.2.0/SRC/._get_perm_c.c
new file mode 100644
index 0000000..1fc8516
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._get_perm_c.c differ
diff --git a/SuperLU_5.2.0/SRC/._heap_relax_snode.c b/SuperLU_5.2.0/SRC/._heap_relax_snode.c
new file mode 100644
index 0000000..2acacb4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._heap_relax_snode.c differ
diff --git a/SuperLU_5.2.0/SRC/._html_mainpage.h b/SuperLU_5.2.0/SRC/._html_mainpage.h
new file mode 100644
index 0000000..00a4f66
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._html_mainpage.h differ
diff --git a/SuperLU_5.2.0/SRC/._icmax1.c b/SuperLU_5.2.0/SRC/._icmax1.c
new file mode 100644
index 0000000..6d5b0fc
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._icmax1.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_ccolumn_dfs.c b/SuperLU_5.2.0/SRC/._ilu_ccolumn_dfs.c
new file mode 100644
index 0000000..1c795de
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_ccolumn_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_ccopy_to_ucol.c b/SuperLU_5.2.0/SRC/._ilu_ccopy_to_ucol.c
new file mode 100644
index 0000000..d31b831
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_ccopy_to_ucol.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_cdrop_row.c b/SuperLU_5.2.0/SRC/._ilu_cdrop_row.c
new file mode 100644
index 0000000..72975a3
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_cdrop_row.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_cpanel_dfs.c b/SuperLU_5.2.0/SRC/._ilu_cpanel_dfs.c
new file mode 100644
index 0000000..3f346f4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_cpanel_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_cpivotL.c b/SuperLU_5.2.0/SRC/._ilu_cpivotL.c
new file mode 100644
index 0000000..c4d3ec1
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_cpivotL.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_csnode_dfs.c b/SuperLU_5.2.0/SRC/._ilu_csnode_dfs.c
new file mode 100644
index 0000000..afc61e0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_csnode_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_dcolumn_dfs.c b/SuperLU_5.2.0/SRC/._ilu_dcolumn_dfs.c
new file mode 100644
index 0000000..46b7b6f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_dcolumn_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_dcopy_to_ucol.c b/SuperLU_5.2.0/SRC/._ilu_dcopy_to_ucol.c
new file mode 100644
index 0000000..ee5259e
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_dcopy_to_ucol.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_ddrop_row.c b/SuperLU_5.2.0/SRC/._ilu_ddrop_row.c
new file mode 100644
index 0000000..524fa54
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_ddrop_row.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_dpanel_dfs.c b/SuperLU_5.2.0/SRC/._ilu_dpanel_dfs.c
new file mode 100644
index 0000000..4c24cd6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_dpanel_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_dpivotL.c b/SuperLU_5.2.0/SRC/._ilu_dpivotL.c
new file mode 100644
index 0000000..10e55cc
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_dpivotL.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_dsnode_dfs.c b/SuperLU_5.2.0/SRC/._ilu_dsnode_dfs.c
new file mode 100644
index 0000000..5ee6561
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_dsnode_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_heap_relax_snode.c b/SuperLU_5.2.0/SRC/._ilu_heap_relax_snode.c
new file mode 100644
index 0000000..097e5a3
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_heap_relax_snode.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_relax_snode.c b/SuperLU_5.2.0/SRC/._ilu_relax_snode.c
new file mode 100644
index 0000000..272b07a
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_relax_snode.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_scolumn_dfs.c b/SuperLU_5.2.0/SRC/._ilu_scolumn_dfs.c
new file mode 100644
index 0000000..0e22542
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_scolumn_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_scopy_to_ucol.c b/SuperLU_5.2.0/SRC/._ilu_scopy_to_ucol.c
new file mode 100644
index 0000000..e2b0789
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_scopy_to_ucol.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_sdrop_row.c b/SuperLU_5.2.0/SRC/._ilu_sdrop_row.c
new file mode 100644
index 0000000..5faf741
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_sdrop_row.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_spanel_dfs.c b/SuperLU_5.2.0/SRC/._ilu_spanel_dfs.c
new file mode 100644
index 0000000..c12e620
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_spanel_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_spivotL.c b/SuperLU_5.2.0/SRC/._ilu_spivotL.c
new file mode 100644
index 0000000..571c751
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_spivotL.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_ssnode_dfs.c b/SuperLU_5.2.0/SRC/._ilu_ssnode_dfs.c
new file mode 100644
index 0000000..e09d9c4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_ssnode_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_zcolumn_dfs.c b/SuperLU_5.2.0/SRC/._ilu_zcolumn_dfs.c
new file mode 100644
index 0000000..26a23bf
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_zcolumn_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_zcopy_to_ucol.c b/SuperLU_5.2.0/SRC/._ilu_zcopy_to_ucol.c
new file mode 100644
index 0000000..e6862b0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_zcopy_to_ucol.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_zdrop_row.c b/SuperLU_5.2.0/SRC/._ilu_zdrop_row.c
new file mode 100644
index 0000000..d6b4474
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_zdrop_row.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_zpanel_dfs.c b/SuperLU_5.2.0/SRC/._ilu_zpanel_dfs.c
new file mode 100644
index 0000000..8ca77bc
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_zpanel_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_zpivotL.c b/SuperLU_5.2.0/SRC/._ilu_zpivotL.c
new file mode 100644
index 0000000..c4d13af
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_zpivotL.c differ
diff --git a/SuperLU_5.2.0/SRC/._ilu_zsnode_dfs.c b/SuperLU_5.2.0/SRC/._ilu_zsnode_dfs.c
new file mode 100644
index 0000000..0dc82cf
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ilu_zsnode_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._input_error.c b/SuperLU_5.2.0/SRC/._input_error.c
new file mode 100644
index 0000000..fa498b1
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._input_error.c differ
diff --git a/SuperLU_5.2.0/SRC/._izmax1.c b/SuperLU_5.2.0/SRC/._izmax1.c
new file mode 100644
index 0000000..bbca4f8
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._izmax1.c differ
diff --git a/SuperLU_5.2.0/SRC/._mark_relax.c b/SuperLU_5.2.0/SRC/._mark_relax.c
new file mode 100644
index 0000000..b38bd77
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._mark_relax.c differ
diff --git a/SuperLU_5.2.0/SRC/._mc64ad.c b/SuperLU_5.2.0/SRC/._mc64ad.c
new file mode 100644
index 0000000..8749b1f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._mc64ad.c differ
diff --git a/SuperLU_5.2.0/SRC/._memory.c b/SuperLU_5.2.0/SRC/._memory.c
new file mode 100644
index 0000000..ef4163b
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._memory.c differ
diff --git a/SuperLU_5.2.0/SRC/._mmd.c b/SuperLU_5.2.0/SRC/._mmd.c
new file mode 100644
index 0000000..f4f6da5
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._mmd.c differ
diff --git a/SuperLU_5.2.0/SRC/._qselect.c b/SuperLU_5.2.0/SRC/._qselect.c
new file mode 100644
index 0000000..efd803f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._qselect.c differ
diff --git a/SuperLU_5.2.0/SRC/._relax_snode.c b/SuperLU_5.2.0/SRC/._relax_snode.c
new file mode 100644
index 0000000..d8686a0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._relax_snode.c differ
diff --git a/SuperLU_5.2.0/SRC/._scolumn_bmod.c b/SuperLU_5.2.0/SRC/._scolumn_bmod.c
new file mode 100644
index 0000000..6e6754f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._scolumn_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._scolumn_dfs.c b/SuperLU_5.2.0/SRC/._scolumn_dfs.c
new file mode 100644
index 0000000..668d991
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._scolumn_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._scomplex.c b/SuperLU_5.2.0/SRC/._scomplex.c
new file mode 100644
index 0000000..9e685d1
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._scomplex.c differ
diff --git a/SuperLU_5.2.0/SRC/._scopy_to_ucol.c b/SuperLU_5.2.0/SRC/._scopy_to_ucol.c
new file mode 100644
index 0000000..aa8fd59
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._scopy_to_ucol.c differ
diff --git a/SuperLU_5.2.0/SRC/._scsum1.c b/SuperLU_5.2.0/SRC/._scsum1.c
new file mode 100644
index 0000000..20c9e8e
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._scsum1.c differ
diff --git a/SuperLU_5.2.0/SRC/._sdiagonal.c b/SuperLU_5.2.0/SRC/._sdiagonal.c
new file mode 100644
index 0000000..63f8970
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sdiagonal.c differ
diff --git a/SuperLU_5.2.0/SRC/._sgscon.c b/SuperLU_5.2.0/SRC/._sgscon.c
new file mode 100644
index 0000000..adc25e5
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sgscon.c differ
diff --git a/SuperLU_5.2.0/SRC/._sgsequ.c b/SuperLU_5.2.0/SRC/._sgsequ.c
new file mode 100644
index 0000000..40cbf68
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sgsequ.c differ
diff --git a/SuperLU_5.2.0/SRC/._sgsisx.c b/SuperLU_5.2.0/SRC/._sgsisx.c
new file mode 100644
index 0000000..ea6c4e6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sgsisx.c differ
diff --git a/SuperLU_5.2.0/SRC/._sgsitrf.c b/SuperLU_5.2.0/SRC/._sgsitrf.c
new file mode 100644
index 0000000..8688d8a
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sgsitrf.c differ
diff --git a/SuperLU_5.2.0/SRC/._sgsrfs.c b/SuperLU_5.2.0/SRC/._sgsrfs.c
new file mode 100644
index 0000000..181d1f4
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sgsrfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._sgssv.c b/SuperLU_5.2.0/SRC/._sgssv.c
new file mode 100644
index 0000000..d959de8
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sgssv.c differ
diff --git a/SuperLU_5.2.0/SRC/._sgssvx.c b/SuperLU_5.2.0/SRC/._sgssvx.c
new file mode 100644
index 0000000..1479773
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sgssvx.c differ
diff --git a/SuperLU_5.2.0/SRC/._sgstrf.c b/SuperLU_5.2.0/SRC/._sgstrf.c
new file mode 100644
index 0000000..e0b91ab
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sgstrf.c differ
diff --git a/SuperLU_5.2.0/SRC/._sgstrs.c b/SuperLU_5.2.0/SRC/._sgstrs.c
new file mode 100644
index 0000000..81ab5a5
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sgstrs.c differ
diff --git a/SuperLU_5.2.0/SRC/._slacon.c b/SuperLU_5.2.0/SRC/._slacon.c
new file mode 100644
index 0000000..4b140c0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slacon.c differ
diff --git a/SuperLU_5.2.0/SRC/._slacon2.c b/SuperLU_5.2.0/SRC/._slacon2.c
new file mode 100644
index 0000000..4376bbd
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slacon2.c differ
diff --git a/SuperLU_5.2.0/SRC/._slangs.c b/SuperLU_5.2.0/SRC/._slangs.c
new file mode 100644
index 0000000..6e1d9c2
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slangs.c differ
diff --git a/SuperLU_5.2.0/SRC/._slaqgs.c b/SuperLU_5.2.0/SRC/._slaqgs.c
new file mode 100644
index 0000000..4eefb44
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slaqgs.c differ
diff --git a/SuperLU_5.2.0/SRC/._sldperm.c b/SuperLU_5.2.0/SRC/._sldperm.c
new file mode 100644
index 0000000..799c352
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sldperm.c differ
diff --git a/SuperLU_5.2.0/SRC/._slu_Cnames.h b/SuperLU_5.2.0/SRC/._slu_Cnames.h
new file mode 100644
index 0000000..9a90063
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slu_Cnames.h differ
diff --git a/SuperLU_5.2.0/SRC/._slu_cdefs.h b/SuperLU_5.2.0/SRC/._slu_cdefs.h
new file mode 100644
index 0000000..09fe8f2
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slu_cdefs.h differ
diff --git a/SuperLU_5.2.0/SRC/._slu_dcomplex.h b/SuperLU_5.2.0/SRC/._slu_dcomplex.h
new file mode 100644
index 0000000..1d0ece0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slu_dcomplex.h differ
diff --git a/SuperLU_5.2.0/SRC/._slu_ddefs.h b/SuperLU_5.2.0/SRC/._slu_ddefs.h
new file mode 100644
index 0000000..b5ee8a3
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slu_ddefs.h differ
diff --git a/SuperLU_5.2.0/SRC/._slu_scomplex.h b/SuperLU_5.2.0/SRC/._slu_scomplex.h
new file mode 100644
index 0000000..a51d2a7
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slu_scomplex.h differ
diff --git a/SuperLU_5.2.0/SRC/._slu_sdefs.h b/SuperLU_5.2.0/SRC/._slu_sdefs.h
new file mode 100644
index 0000000..1a5d3aa
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slu_sdefs.h differ
diff --git a/SuperLU_5.2.0/SRC/._slu_util.h b/SuperLU_5.2.0/SRC/._slu_util.h
new file mode 100644
index 0000000..99b108d
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slu_util.h differ
diff --git a/SuperLU_5.2.0/SRC/._slu_zdefs.h b/SuperLU_5.2.0/SRC/._slu_zdefs.h
new file mode 100644
index 0000000..5553c36
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._slu_zdefs.h differ
diff --git a/SuperLU_5.2.0/SRC/._smach.c b/SuperLU_5.2.0/SRC/._smach.c
new file mode 100644
index 0000000..4ade505
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._smach.c differ
diff --git a/SuperLU_5.2.0/SRC/._smemory.c b/SuperLU_5.2.0/SRC/._smemory.c
new file mode 100644
index 0000000..48b8d04
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._smemory.c differ
diff --git a/SuperLU_5.2.0/SRC/._smyblas2.c b/SuperLU_5.2.0/SRC/._smyblas2.c
new file mode 100644
index 0000000..7a48f95
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._smyblas2.c differ
diff --git a/SuperLU_5.2.0/SRC/._sp_coletree.c b/SuperLU_5.2.0/SRC/._sp_coletree.c
new file mode 100644
index 0000000..84add53
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sp_coletree.c differ
diff --git a/SuperLU_5.2.0/SRC/._sp_ienv.c b/SuperLU_5.2.0/SRC/._sp_ienv.c
new file mode 100644
index 0000000..7a80e25
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sp_ienv.c differ
diff --git a/SuperLU_5.2.0/SRC/._sp_preorder.c b/SuperLU_5.2.0/SRC/._sp_preorder.c
new file mode 100644
index 0000000..9597518
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sp_preorder.c differ
diff --git a/SuperLU_5.2.0/SRC/._spanel_bmod.c b/SuperLU_5.2.0/SRC/._spanel_bmod.c
new file mode 100644
index 0000000..476767c
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._spanel_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._spanel_dfs.c b/SuperLU_5.2.0/SRC/._spanel_dfs.c
new file mode 100644
index 0000000..596a56e
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._spanel_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._spivotL.c b/SuperLU_5.2.0/SRC/._spivotL.c
new file mode 100644
index 0000000..1518c53
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._spivotL.c differ
diff --git a/SuperLU_5.2.0/SRC/._spivotgrowth.c b/SuperLU_5.2.0/SRC/._spivotgrowth.c
new file mode 100644
index 0000000..3ab0caa
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._spivotgrowth.c differ
diff --git a/SuperLU_5.2.0/SRC/._spruneL.c b/SuperLU_5.2.0/SRC/._spruneL.c
new file mode 100644
index 0000000..3d35e73
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._spruneL.c differ
diff --git a/SuperLU_5.2.0/SRC/._sreadhb.c b/SuperLU_5.2.0/SRC/._sreadhb.c
new file mode 100644
index 0000000..f2fbb3f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sreadhb.c differ
diff --git a/SuperLU_5.2.0/SRC/._sreadrb.c b/SuperLU_5.2.0/SRC/._sreadrb.c
new file mode 100644
index 0000000..2487ee0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sreadrb.c differ
diff --git a/SuperLU_5.2.0/SRC/._sreadtriple.c b/SuperLU_5.2.0/SRC/._sreadtriple.c
new file mode 100644
index 0000000..ba79b41
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sreadtriple.c differ
diff --git a/SuperLU_5.2.0/SRC/._ssnode_bmod.c b/SuperLU_5.2.0/SRC/._ssnode_bmod.c
new file mode 100644
index 0000000..d4e8cd1
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ssnode_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._ssnode_dfs.c b/SuperLU_5.2.0/SRC/._ssnode_dfs.c
new file mode 100644
index 0000000..943c528
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ssnode_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._ssp_blas2.c b/SuperLU_5.2.0/SRC/._ssp_blas2.c
new file mode 100644
index 0000000..34573ca
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ssp_blas2.c differ
diff --git a/SuperLU_5.2.0/SRC/._ssp_blas3.c b/SuperLU_5.2.0/SRC/._ssp_blas3.c
new file mode 100644
index 0000000..fba9867
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._ssp_blas3.c differ
diff --git a/SuperLU_5.2.0/SRC/._superlu_enum_consts.h b/SuperLU_5.2.0/SRC/._superlu_enum_consts.h
new file mode 100644
index 0000000..b96813f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._superlu_enum_consts.h differ
diff --git a/SuperLU_5.2.0/SRC/._superlu_timer.c b/SuperLU_5.2.0/SRC/._superlu_timer.c
new file mode 100644
index 0000000..af0bbcf
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._superlu_timer.c differ
diff --git a/SuperLU_5.2.0/SRC/._supermatrix.h b/SuperLU_5.2.0/SRC/._supermatrix.h
new file mode 100644
index 0000000..d193afa
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._supermatrix.h differ
diff --git a/SuperLU_5.2.0/SRC/._sutil.c b/SuperLU_5.2.0/SRC/._sutil.c
new file mode 100644
index 0000000..971ba08
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._sutil.c differ
diff --git a/SuperLU_5.2.0/SRC/._util.c b/SuperLU_5.2.0/SRC/._util.c
new file mode 100644
index 0000000..ca30a3a
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._util.c differ
diff --git a/SuperLU_5.2.0/SRC/._zcolumn_bmod.c b/SuperLU_5.2.0/SRC/._zcolumn_bmod.c
new file mode 100644
index 0000000..3f9c042
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zcolumn_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._zcolumn_dfs.c b/SuperLU_5.2.0/SRC/._zcolumn_dfs.c
new file mode 100644
index 0000000..08253ef
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zcolumn_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._zcopy_to_ucol.c b/SuperLU_5.2.0/SRC/._zcopy_to_ucol.c
new file mode 100644
index 0000000..f830916
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zcopy_to_ucol.c differ
diff --git a/SuperLU_5.2.0/SRC/._zdiagonal.c b/SuperLU_5.2.0/SRC/._zdiagonal.c
new file mode 100644
index 0000000..caa6c8f
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zdiagonal.c differ
diff --git a/SuperLU_5.2.0/SRC/._zgscon.c b/SuperLU_5.2.0/SRC/._zgscon.c
new file mode 100644
index 0000000..6cc0b87
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zgscon.c differ
diff --git a/SuperLU_5.2.0/SRC/._zgsequ.c b/SuperLU_5.2.0/SRC/._zgsequ.c
new file mode 100644
index 0000000..e692bb3
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zgsequ.c differ
diff --git a/SuperLU_5.2.0/SRC/._zgsisx.c b/SuperLU_5.2.0/SRC/._zgsisx.c
new file mode 100644
index 0000000..a80f6f7
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zgsisx.c differ
diff --git a/SuperLU_5.2.0/SRC/._zgsitrf.c b/SuperLU_5.2.0/SRC/._zgsitrf.c
new file mode 100644
index 0000000..b047b3a
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zgsitrf.c differ
diff --git a/SuperLU_5.2.0/SRC/._zgsrfs.c b/SuperLU_5.2.0/SRC/._zgsrfs.c
new file mode 100644
index 0000000..d37a374
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zgsrfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._zgssv.c b/SuperLU_5.2.0/SRC/._zgssv.c
new file mode 100644
index 0000000..e06ed6a
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zgssv.c differ
diff --git a/SuperLU_5.2.0/SRC/._zgssvx.c b/SuperLU_5.2.0/SRC/._zgssvx.c
new file mode 100644
index 0000000..230ce74
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zgssvx.c differ
diff --git a/SuperLU_5.2.0/SRC/._zgstrf.c b/SuperLU_5.2.0/SRC/._zgstrf.c
new file mode 100644
index 0000000..cdaa970
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zgstrf.c differ
diff --git a/SuperLU_5.2.0/SRC/._zgstrs.c b/SuperLU_5.2.0/SRC/._zgstrs.c
new file mode 100644
index 0000000..90d0599
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zgstrs.c differ
diff --git a/SuperLU_5.2.0/SRC/._zlacon.c b/SuperLU_5.2.0/SRC/._zlacon.c
new file mode 100644
index 0000000..6da88d0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zlacon.c differ
diff --git a/SuperLU_5.2.0/SRC/._zlacon2.c b/SuperLU_5.2.0/SRC/._zlacon2.c
new file mode 100644
index 0000000..058f2a6
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zlacon2.c differ
diff --git a/SuperLU_5.2.0/SRC/._zlangs.c b/SuperLU_5.2.0/SRC/._zlangs.c
new file mode 100644
index 0000000..810aa32
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zlangs.c differ
diff --git a/SuperLU_5.2.0/SRC/._zlaqgs.c b/SuperLU_5.2.0/SRC/._zlaqgs.c
new file mode 100644
index 0000000..dec264e
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zlaqgs.c differ
diff --git a/SuperLU_5.2.0/SRC/._zldperm.c b/SuperLU_5.2.0/SRC/._zldperm.c
new file mode 100644
index 0000000..53cca34
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zldperm.c differ
diff --git a/SuperLU_5.2.0/SRC/._zmemory.c b/SuperLU_5.2.0/SRC/._zmemory.c
new file mode 100644
index 0000000..c008e17
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zmemory.c differ
diff --git a/SuperLU_5.2.0/SRC/._zmyblas2.c b/SuperLU_5.2.0/SRC/._zmyblas2.c
new file mode 100644
index 0000000..683d9ad
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zmyblas2.c differ
diff --git a/SuperLU_5.2.0/SRC/._zpanel_bmod.c b/SuperLU_5.2.0/SRC/._zpanel_bmod.c
new file mode 100644
index 0000000..3dffde0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zpanel_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._zpanel_dfs.c b/SuperLU_5.2.0/SRC/._zpanel_dfs.c
new file mode 100644
index 0000000..ba14b3d
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zpanel_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._zpivotL.c b/SuperLU_5.2.0/SRC/._zpivotL.c
new file mode 100644
index 0000000..87daa2b
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zpivotL.c differ
diff --git a/SuperLU_5.2.0/SRC/._zpivotgrowth.c b/SuperLU_5.2.0/SRC/._zpivotgrowth.c
new file mode 100644
index 0000000..597ccc7
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zpivotgrowth.c differ
diff --git a/SuperLU_5.2.0/SRC/._zpruneL.c b/SuperLU_5.2.0/SRC/._zpruneL.c
new file mode 100644
index 0000000..bb4f850
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zpruneL.c differ
diff --git a/SuperLU_5.2.0/SRC/._zreadhb.c b/SuperLU_5.2.0/SRC/._zreadhb.c
new file mode 100644
index 0000000..13b4423
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zreadhb.c differ
diff --git a/SuperLU_5.2.0/SRC/._zreadrb.c b/SuperLU_5.2.0/SRC/._zreadrb.c
new file mode 100644
index 0000000..d491e71
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zreadrb.c differ
diff --git a/SuperLU_5.2.0/SRC/._zreadtriple.c b/SuperLU_5.2.0/SRC/._zreadtriple.c
new file mode 100644
index 0000000..fc31687
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zreadtriple.c differ
diff --git a/SuperLU_5.2.0/SRC/._zsnode_bmod.c b/SuperLU_5.2.0/SRC/._zsnode_bmod.c
new file mode 100644
index 0000000..fbfea84
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zsnode_bmod.c differ
diff --git a/SuperLU_5.2.0/SRC/._zsnode_dfs.c b/SuperLU_5.2.0/SRC/._zsnode_dfs.c
new file mode 100644
index 0000000..652bcd2
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zsnode_dfs.c differ
diff --git a/SuperLU_5.2.0/SRC/._zsp_blas2.c b/SuperLU_5.2.0/SRC/._zsp_blas2.c
new file mode 100644
index 0000000..79f9618
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zsp_blas2.c differ
diff --git a/SuperLU_5.2.0/SRC/._zsp_blas3.c b/SuperLU_5.2.0/SRC/._zsp_blas3.c
new file mode 100644
index 0000000..d5e2294
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zsp_blas3.c differ
diff --git a/SuperLU_5.2.0/SRC/._zutil.c b/SuperLU_5.2.0/SRC/._zutil.c
new file mode 100644
index 0000000..b9415b0
Binary files /dev/null and b/SuperLU_5.2.0/SRC/._zutil.c differ
diff --git a/SuperLU_5.2.0/SRC/CMakeLists.txt b/SuperLU_5.2.0/SRC/CMakeLists.txt
new file mode 100644
index 0000000..7576295
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/CMakeLists.txt
@@ -0,0 +1,241 @@
+
+set(headers
+ supermatrix.h
+ slu_Cnames.h
+ slu_dcomplex.h
+ slu_scomplex.h
+ slu_util.h
+ superlu_enum_consts.h)
+
+set(sources
+ superlu_timer.c
+ util.c
+ memory.c
+ get_perm_c.c
+ mmd.c
+ sp_coletree.c
+ sp_preorder.c
+ sp_ienv.c
+ relax_snode.c
+ heap_relax_snode.c
+ colamd.c
+ ilu_relax_snode.c
+ ilu_heap_relax_snode.c
+ mark_relax.c
+ mc64ad.c
+ qselect.c
+ input_error.c
+)
+set_source_files_properties(superlu_timer.c PROPERTIES COMPILE_FLAGS -O0)
+
+if(enable_single)
+ list(APPEND headers
+ slu_sdefs.h
+ )
+
+ list(APPEND sources
+ slacon2.c
+ smach.c
+ sgssv.c
+ sgssvx.c
+ ssp_blas2.c
+ ssp_blas3.c
+ sgscon.c
+ slangs.c
+ sgsequ.c
+ slaqgs.c
+ spivotgrowth.c
+ sgsrfs.c
+ sgstrf.c
+ sgstrs.c
+ scopy_to_ucol.c
+ ssnode_dfs.c
+ ssnode_bmod.c
+ spanel_dfs.c
+ spanel_bmod.c
+ sreadhb.c
+ sreadrb.c
+ sreadtriple.c
+ scolumn_dfs.c
+ scolumn_bmod.c
+ spivotL.c
+ spruneL.c
+ smemory.c
+ sutil.c
+ smyblas2.c
+ sgsisx.c
+ sgsitrf.c
+ sldperm.c
+ ilu_sdrop_row.c
+ ilu_ssnode_dfs.c
+ ilu_scolumn_dfs.c
+ ilu_spanel_dfs.c
+ ilu_scopy_to_ucol.c
+ ilu_spivotL.c
+ sdiagonal.c
+ )
+ set_source_files_properties(smach.c PROPERTIES COMPILE_FLAGS -O0)
+endif()
+
+if(enable_double)
+ list(APPEND headers
+ slu_ddefs.h
+ )
+
+ list(APPEND sources
+ dlacon2.c
+ dmach.c
+ dgssv.c
+ dgssvx.c
+ dsp_blas2.c
+ dsp_blas3.c
+ dgscon.c
+ dlangs.c
+ dgsequ.c
+ dlaqgs.c
+ dpivotgrowth.c
+ dgsrfs.c
+ dgstrf.c
+ dgstrs.c
+ dcopy_to_ucol.c
+ dsnode_dfs.c
+ dsnode_bmod.c
+ dpanel_dfs.c
+ dpanel_bmod.c
+ dreadhb.c
+ dreadrb.c
+ dreadtriple.c
+ dcolumn_dfs.c
+ dcolumn_bmod.c
+ dpivotL.c
+ dpruneL.c
+ dmemory.c
+ dutil.c
+ dmyblas2.c
+ dgsisx.c
+ dgsitrf.c
+ dldperm.c
+ ilu_ddrop_row.c
+ ilu_dsnode_dfs.c
+ ilu_dcolumn_dfs.c
+ ilu_dpanel_dfs.c
+ ilu_dcopy_to_ucol.c
+ ilu_dpivotL.c
+ ddiagonal.c
+ )
+ set_source_files_properties(dmach.c PROPERTIES COMPILE_FLAGS -O0)
+endif()
+
+if(enable_complex)
+ list(APPEND headers
+ slu_cdefs.h
+ )
+
+ list(APPEND sources
+ clacon2.c
+ scsum1.c
+ icmax1.c
+ scomplex.c
+ cgssv.c
+ cgssvx.c
+ csp_blas2.c
+ csp_blas3.c
+ cgscon.c
+ clangs.c
+ cgsequ.c
+ claqgs.c
+ cpivotgrowth.c
+ cgsrfs.c
+ cgstrf.c
+ cgstrs.c
+ ccopy_to_ucol.c
+ csnode_dfs.c
+ csnode_bmod.c
+ cpanel_dfs.c
+ cpanel_bmod.c
+ creadhb.c
+ creadrb.c
+ creadtriple.c
+ ccolumn_dfs.c
+ ccolumn_bmod.c
+ cpivotL.c
+ cpruneL.c
+ cmemory.c
+ cutil.c
+ cmyblas2.c
+ cgsisx.c
+ cgsitrf.c
+ cldperm.c
+ ilu_cdrop_row.c
+ ilu_csnode_dfs.c
+ ilu_ccolumn_dfs.c
+ ilu_cpanel_dfs.c
+ ilu_ccopy_to_ucol.c
+ ilu_cpivotL.c
+ cdiagonal.c
+ )
+endif()
+
+if(enable_complex16)
+ list(APPEND headers
+ slu_zdefs.h
+ )
+
+ list(APPEND sources
+ zlacon2.c
+ dzsum1.c
+ izmax1.c
+ dcomplex.c
+ zgssv.c
+ zgssvx.c
+ zsp_blas2.c
+ zsp_blas3.c
+ zgscon.c
+ zlangs.c
+ zgsequ.c
+ zlaqgs.c
+ zpivotgrowth.c
+ zgsrfs.c
+ zgstrf.c
+ zgstrs.c
+ zcopy_to_ucol.c
+ zsnode_dfs.c
+ zsnode_bmod.c
+ zpanel_dfs.c
+ zpanel_bmod.c
+ zreadhb.c
+ zreadrb.c
+ zreadtriple.c
+ zcolumn_dfs.c
+ zcolumn_bmod.c
+ zpivotL.c
+ zpruneL.c
+ zmemory.c
+ zutil.c
+ zmyblas2.c
+ zgsisx.c
+ zgsitrf.c
+ zldperm.c
+ ilu_zdrop_row.c
+ ilu_zsnode_dfs.c
+ ilu_zcolumn_dfs.c
+ ilu_zpanel_dfs.c
+ ilu_zcopy_to_ucol.c
+ ilu_zpivotL.c
+ zdiagonal.c
+ )
+endif()
+
+add_library(superlu ${sources} ${HEADERS})
+
+target_link_libraries(superlu ${BLAS_LIB} m)
+set_target_properties(superlu PROPERTIES
+ VERSION ${PROJECT_VERSION} SOVERSION ${VERSION_MAJOR}
+ )
+install(TARGETS superlu
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
+)
+
+install(FILES ${headers}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/include
+)
diff --git a/SuperLU_5.2.0/SRC/Makefile b/SuperLU_5.2.0/SRC/Makefile
new file mode 100644
index 0000000..713a4a8
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/Makefile
@@ -0,0 +1,135 @@
+# makefile for sparse supernodal LU, implemented in ANSI C
+include ../make.inc
+
+#######################################################################
+# This is the makefile to create a library for SuperLU.
+# The files are organized as follows:
+#
+# ALLAUX -- Auxiliary routines called from all precisions of SuperLU
+# SLUSRC -- Single precision real SuperLU routines
+# DLUSRC -- Double precision real SuperLU routines
+# CLUSRC -- Single precision complex SuperLU routines
+# ZLUSRC -- Double precision complex SuperLU routines
+#
+# The library can be set up to include routines for any combination
+# of the four precisions. To create or add to the library, enter make
+# followed by one or more of the precisions desired. Some examples:
+# make single
+# make single double
+# make single double complex complex16
+# Alternatively, the command
+# make
+# without any arguments creates a library of all four precisions.
+# The library is called
+# superlu.a
+# and is created at the next higher directory level.
+#
+# To remove the object files after the library is created, enter
+# make clean
+#
+#######################################################################
+
+### return machine parameters
+SCAUX = smach.o
+DZAUX = dmach.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 \
+ ilu_relax_snode.o ilu_heap_relax_snode.o mark_relax.o \
+ mc64ad.o qselect.o input_error.o smach.o dmach.o
+
+SLUSRC = \
+ sgssv.o sgssvx.o \
+ ssp_blas2.o ssp_blas3.o sgscon.o \
+ 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 sreadrb.o sreadtriple.o \
+ scolumn_dfs.o scolumn_bmod.o spivotL.o spruneL.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 slacon2.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 dreadrb.o dreadtriple.o \
+ dcolumn_dfs.o dcolumn_bmod.o dpivotL.o dpruneL.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 dlacon2.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 creadrb.o creadtriple.o \
+ ccolumn_dfs.o ccolumn_bmod.o cpivotL.o cpruneL.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 clacon2.o scsum1.o icmax1.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 zreadrb.o zreadtriple.o \
+ zcolumn_dfs.o zcolumn_bmod.o zpivotL.o zpruneL.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 zlacon2.o dzsum1.o izmax1.o
+
+all: single double complex complex16
+
+single: $(SLUSRC) $(ALLAUX) $(SCAUX)
+ $(ARCH) $(ARCHFLAGS) $(SUPERLULIB) $(SLUSRC) $(ALLAUX) $(SCAUX)
+ $(RANLIB) $(SUPERLULIB)
+
+double: $(DLUSRC) $(ALLAUX) $(DZLAUX)
+ $(ARCH) $(ARCHFLAGS) $(SUPERLULIB) $(DLUSRC) $(ALLAUX) $(DZLAUX)
+ $(RANLIB) $(SUPERLULIB)
+
+complex: $(CLUSRC) $(ALLAUX) $(SCAUX)
+ $(ARCH) $(ARCHFLAGS) $(SUPERLULIB) $(CLUSRC) $(ALLAUX) $(SCAUX)
+ $(RANLIB) $(SUPERLULIB)
+
+complex16: $(ZLUSRC) $(ALLAUX) $(DZLAUX)
+ $(ARCH) $(ARCHFLAGS) $(SUPERLULIB) $(ZLUSRC) $(ALLAUX) $(DZLAUX)
+ $(RANLIB) $(SUPERLULIB)
+
+
+##################################
+# Do not optimize these routines #
+##################################
+smach.o: smach.c ; $(CC) -c $(NOOPTS) $(CDEFS) $<
+dmach.o: dmach.c ; $(CC) -c $(NOOPTS) $(CDEFS) $<
+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 $(SUPERLULIB)
diff --git a/SuperLU_5.2.0/SRC/ccolumn_bmod.c b/SuperLU_5.2.0/SRC/ccolumn_bmod.c
new file mode 100644
index 0000000..ae507c9
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ccolumn_bmod.c
@@ -0,0 +1,375 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * </pre>
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "slu_cdefs.h"
+
+/*
+ * Function prototypes
+ */
+void cusolve(int, int, complex*, complex*);
+void clsolve(int, int, complex*, complex*);
+void cmatvec(int, int, int, complex*, complex*, complex*);
+
+
+
+/*! \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 (
+ const int jcol, /* in */
+ const int nseg, /* in */
+ complex *dense, /* in */
+ complex *tempv, /* working array */
+ int *segrep, /* in */
+ int *repfnz, /* in */
+ int fpanelc, /* in -- first column in the current panel */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ complex alpha, beta;
+
+ /* krep = representative of current k-th supernode
+ * fsupc = first supernodal column
+ * nsupc = no of columns in supernode
+ * nsupr = no of rows in supernode (used as leading dimension)
+ * luptr = location of supernodal LU-block in storage
+ * kfnz = first nonz in the k-th supernodal segment
+ * no_zeros = no of leading zeros in a supernodal U-segment
+ */
+ complex ukj, ukj1, ukj2;
+ int luptr, luptr1, luptr2;
+ int fsupc, nsupc, nsupr, segsze;
+ int nrow; /* No of rows in the matrix of matrix-vector */
+ int jcolp1, jsupno, k, ksub, krep, krep_ind, ksupno;
+ register int lptr, kfnz, isub, irow, i;
+ register int no_zeros, new_next;
+ int ufirst, nextlu;
+ int fst_col; /* First column within small LU update */
+ int d_fsupc; /* Distance between the first column of the current
+ panel and the first column of the current snode. */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ complex *lusup;
+ int *xlusup;
+ int nzlumax;
+ complex *tempv1;
+ complex zero = {0.0, 0.0};
+ complex one = {1.0, 0.0};
+ complex none = {-1.0, 0.0};
+ complex comp_temp, comp_temp1;
+ int mem_error;
+ flops_t *ops = stat->ops;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (complex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+ nzlumax = Glu->nzlumax;
+ jcolp1 = jcol + 1;
+ jsupno = supno[jcol];
+
+ /*
+ * For each nonz supernode segment of U[*,j] in topological order
+ */
+ k = nseg - 1;
+ for (ksub = 0; ksub < nseg; ksub++) {
+
+ krep = segrep[k];
+ k--;
+ ksupno = supno[krep];
+ if ( jsupno != ksupno ) { /* Outside the rectangular supernode */
+
+ fsupc = xsup[ksupno];
+ fst_col = SUPERLU_MAX ( fsupc, fpanelc );
+
+ /* Distance from the current supernode to the current panel;
+ d_fsupc=0 if fsupc > fpanelc. */
+ d_fsupc = fst_col - fsupc;
+
+ luptr = xlusup[fst_col] + d_fsupc;
+ lptr = xlsub[fsupc] + d_fsupc;
+
+ kfnz = repfnz[krep];
+ kfnz = SUPERLU_MAX ( kfnz, fpanelc );
+
+ segsze = krep - kfnz + 1;
+ nsupc = krep - fst_col + 1;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
+ nrow = nsupr - d_fsupc - nsupc;
+ krep_ind = lptr + nsupc - 1;
+
+
+
+
+ /*
+ * Case 1: Update U-segment of size 1 -- col-col update
+ */
+ if ( segsze == 1 ) {
+ ukj = dense[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ cc_mult(&comp_temp, &ukj, &lusup[luptr]);
+ c_sub(&dense[irow], &dense[irow], &comp_temp);
+ luptr++;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ ukj1 = dense[lsub[krep_ind - 1]];
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) { /* Case 2: 2cols-col update */
+ cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ c_sub(&ukj, &ukj, &comp_temp);
+ dense[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++;
+ luptr1++;
+ cc_mult(&comp_temp, &ukj, &lusup[luptr]);
+ cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ c_sub(&dense[irow], &dense[irow], &comp_temp);
+ }
+ } else { /* Case 3: 3cols-col update */
+ ukj2 = dense[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ cc_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
+ c_sub(&ukj1, &ukj1, &comp_temp);
+
+ cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ c_sub(&ukj, &ukj, &comp_temp);
+
+ dense[lsub[krep_ind]] = ukj;
+ dense[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++;
+ luptr1++;
+ luptr2++;
+ cc_mult(&comp_temp, &ukj, &lusup[luptr]);
+ cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ c_sub(&dense[irow], &dense[irow], &comp_temp);
+ }
+ }
+
+
+ } else {
+ /*
+ * Case: sup-col update
+ * Perform a triangular solve and block update,
+ * then scatter the result of sup-col update to dense
+ */
+
+ no_zeros = kfnz - fst_col;
+
+ /* Copy U[*,j] segment from dense[*] to tempv[*] */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ tempv[i] = dense[irow];
+ ++isub;
+ }
+
+ /* Dense triangular solve -- start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#else
+ ctrsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#endif
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ CGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#else
+ cgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#endif
+#else
+ clsolve ( nsupr, segsze, &lusup[luptr], tempv );
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ cmatvec (nsupr, nrow , segsze, &lusup[luptr], tempv, tempv1);
+#endif
+
+
+ /* Scatter tempv[] into SPA dense[] as a temporary storage */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense[irow] = tempv[i];
+ tempv[i] = zero;
+ ++isub;
+ }
+
+ /* Scatter tempv1[] into SPA dense[] */
+ for (i = 0; i < nrow; i++) {
+ irow = lsub[isub];
+ c_sub(&dense[irow], &dense[irow], &tempv1[i]);
+ tempv1[i] = zero;
+ ++isub;
+ }
+ }
+
+ } /* if jsupno ... */
+
+ } /* for each segment... */
+
+ /*
+ * Process the supernodal portion of L\U[*,j]
+ */
+ nextlu = xlusup[jcol];
+ fsupc = xsup[jsupno];
+
+ /* Copy the SPA dense into L\U[*,j] */
+ new_next = nextlu + xlsub[fsupc+1] - xlsub[fsupc];
+ while ( new_next > nzlumax ) {
+ if (mem_error = cLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, Glu))
+ return (mem_error);
+ lusup = (complex *) Glu->lusup;
+ lsub = Glu->lsub;
+ }
+
+ for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
+ irow = lsub[isub];
+ lusup[nextlu] = dense[irow];
+ dense[irow] = zero;
+ ++nextlu;
+ }
+
+ xlusup[jcolp1] = nextlu; /* Close L\U[*,jcol] */
+
+ /* For more updates within the panel (also within the current supernode),
+ * should start from the first column of the panel, or the first column
+ * of the supernode, whichever is bigger. There are 2 cases:
+ * 1) fsupc < fpanelc, then fst_col := fpanelc
+ * 2) fsupc >= fpanelc, then fst_col := fsupc
+ */
+ fst_col = SUPERLU_MAX ( fsupc, fpanelc );
+
+ if ( fst_col < jcol ) {
+
+ /* Distance between the current supernode and the current panel.
+ d_fsupc=0 if fsupc >= fpanelc. */
+ d_fsupc = fst_col - fsupc;
+
+ lptr = xlsub[fsupc] + d_fsupc;
+ luptr = xlusup[fst_col] + d_fsupc;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
+ nsupc = jcol - fst_col; /* Excluding jcol */
+ nrow = nsupr - d_fsupc - nsupc;
+
+ /* Points to the beginning of jcol in snode L\U(jsupno) */
+ ufirst = xlusup[jcol] + d_fsupc;
+
+ ops[TRSV] += 4 * nsupc * (nsupc - 1);
+ ops[GEMV] += 8 * nrow * nsupc;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr],
+ &nsupr, &lusup[ufirst], &incx );
+#else
+ ctrsv_( "L", "N", "U", &nsupc, &lusup[luptr],
+ &nsupr, &lusup[ufirst], &incx );
+#endif
+
+ alpha = none; beta = one; /* y := beta*y + alpha*A*x */
+
+#ifdef _CRAY
+ CGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#else
+ cgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#endif
+#else
+ clsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
+
+ cmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
+ &lusup[ufirst], tempv );
+
+ /* Copy updates from tempv[*] into lusup[*] */
+ isub = ufirst + nsupc;
+ for (i = 0; i < nrow; i++) {
+ c_sub(&lusup[isub], &lusup[isub], &tempv[i]);
+ tempv[i] = zero;
+ ++isub;
+ }
+
+#endif
+
+
+ } /* if fst_col < jcol ... */
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/ccolumn_dfs.c b/SuperLU_5.2.0/SRC/ccolumn_dfs.c
new file mode 100644
index 0000000..8fa6587
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ccolumn_dfs.c
@@ -0,0 +1,281 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * </pre>
+*/
+
+#include "slu_cdefs.h"
+
+/*! \brief What type of supernodes we want */
+#define T2_SUPER
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ * 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
+ * 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 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.
+ *
+ * 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.
+ *
+ * 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
+ *
+ * Return value
+ * ============
+ * 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 */
+ int fsupc; /* First column of a snode */
+ int myfnz; /* First nonz column of a U-segment */
+ int chperm, chmark, chrep, kchild;
+ int xdfs, maxdfs, kpar, oldrep;
+ int jptr, jm1ptr;
+ int ito, ifrom, istop; /* Used to compress row subscripts */
+ int mem_error;
+ int *xsup, *supno, *lsub, *xlsub;
+ int nzlmax;
+ int maxsuper;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ nzlmax = Glu->nzlmax;
+
+ maxsuper = sp_ienv(3);
+ jcolp1 = jcol + 1;
+ jcolm1 = jcol - 1;
+ nsuper = supno[jcol];
+ jsuper = nsuper;
+ nextl = xlsub[jcol];
+ marker2 = &marker[2*m];
+
+ /* For each nonzero in A[*,jcol] do dfs */
+ for (k = 0; lsub_col[k] != EMPTY; k++) {
+
+ krow = lsub_col[k];
+ lsub_col[k] = EMPTY;
+ kmark = marker2[krow];
+
+ /* krow was visited before, go to the next nonz */
+ if ( kmark == jcol ) continue;
+
+ /* For each unmarked nbr krow of jcol
+ * krow is in L: place it in structure of L[*,jcol]
+ */
+ marker2[krow] = jcol;
+ kperm = perm_r[krow];
+
+ if ( kperm == EMPTY ) {
+ lsub[nextl++] = krow; /* krow is indexed into A */
+ if ( nextl >= nzlmax ) {
+ 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 {
+ /* krow is in U: if its supernode-rep krep
+ * has been explored, update repfnz[*]
+ */
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz[krep];
+
+ if ( myfnz != EMPTY ) { /* Visited before */
+ 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];
+
+ do {
+ /*
+ * For each unmarked kchild of krep
+ */
+ while ( xdfs < maxdfs ) {
+
+ kchild = lsub[xdfs];
+ xdfs++;
+ chmark = marker2[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;
+ if ( nextl >= nzlmax ) {
+ 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 */
+ if ( myfnz > 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) */
+ parent[krep] = oldrep;
+ repfnz[krep] = chperm;
+ xdfs = xlsub[krep];
+ maxdfs = xprune[krep];
+ } /* else */
+
+ } /* else */
+
+ } /* if */
+
+ } /* while */
+
+ /* krow has no more unexplored nbrs;
+ * place supernode-rep krep in postorder DFS.
+ * backtrack dfs to its parent
+ */
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ kpar = parent[krep]; /* Pop from stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ maxdfs = xprune[krep];
+
+ } while ( kpar != EMPTY ); /* Until empty stack */
+
+ } /* else */
+
+ } /* else */
+
+ } /* for each nonzero ... */
+
+ /* Check to see if j belongs in the same supernode as j-1 */
+ if ( jcol == 0 ) { /* Do nothing for column 0 */
+ nsuper = supno[0] = 0;
+ } else {
+ fsupc = xsup[nsuper];
+ jptr = xlsub[jcol]; /* Not compressed yet */
+ jm1ptr = xlsub[jcolm1];
+
+#ifdef T2_SUPER
+ if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
+#endif
+ /* 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)
+ */
+ if ( jsuper == EMPTY ) { /* starts a new supernode */
+ if ( (fsupc < jcolm1-1) ) { /* >= 3 columns in nsuper */
+#ifdef CHK_COMPRESS
+ printf(" Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
+#endif
+ 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)
+ lsub[ito] = lsub[ifrom];
+ nextl = ito; /* = istop + length(jcol) */
+ }
+ nsuper++;
+ supno[jcol] = nsuper;
+ } /* if a new supernode */
+
+ } /* 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/SuperLU_5.2.0/SRC/ccopy_to_ucol.c b/SuperLU_5.2.0/SRC/ccopy_to_ucol.c
new file mode 100644
index 0000000..c910e5c
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ccopy_to_ucol.c
@@ -0,0 +1,113 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_cdefs.h"
+
+int
+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 */
+ GlobalLU_t *Glu /* modified */
+ )
+{
+/*
+ * 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;
+ complex zero = {0.0, 0.0};
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ ucol = (complex *) Glu->ucol;
+ usub = Glu->usub;
+ xusub = Glu->xusub;
+ nzumax = Glu->nzumax;
+
+ 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))
+ return (mem_error);
+ ucol = (complex *) Glu->ucol;
+ if (mem_error = cLUMemXpand(jcol, nextu, USUB, &nzumax, Glu))
+ return (mem_error);
+ usub = Glu->usub;
+ lsub = Glu->lsub;
+ }
+
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ usub[nextu] = perm_r[irow];
+ ucol[nextu] = dense[irow];
+ dense[irow] = zero;
+ nextu++;
+ isub++;
+ }
+
+ }
+
+ }
+
+ } /* for each segment... */
+
+ xusub[jcol + 1] = nextu; /* Close U[*,jcol] */
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/cdiagonal.c b/SuperLU_5.2.0/SRC/cdiagonal.c
new file mode 100644
index 0000000..6909ff5
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cdiagonal.c
@@ -0,0 +1,143 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/cgscon.c b/SuperLU_5.2.0/SRC/cgscon.c
new file mode 100644
index 0000000..3d81374
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cgscon.c
@@ -0,0 +1,165 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file cgscon.c
+ * \brief Estimates reciprocal of the condition number of a general matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * July 25, 2015
+ *
+ * Modified from lapack routines CGECON.
+ * </pre>
+ */
+
+/*
+ * File name: cgscon.c
+ * History: Modified from lapack routines CGECON.
+ */
+#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)
+{
+
+
+ /* Local variables */
+ int kase, kase1, onenrm, i;
+ float ainvnm;
+ complex *work;
+ int isave[3];
+ extern int crscl_(int *, complex *, complex *, int *);
+
+ extern int clacon2_(int *, complex *, complex *, float *, int *, int []);
+
+
+ /* Test the input parameters. */
+ *info = 0;
+ onenrm = *(unsigned char *)norm == '1' || strncmp(norm, "O", 1)==0;
+ if (! onenrm && ! strncmp(norm, "I", 1)==0) *info = -1;
+ else if (L->nrow < 0 || L->nrow != L->ncol ||
+ L->Stype != SLU_SC || L->Dtype != SLU_C || L->Mtype != SLU_TRLU)
+ *info = -2;
+ else if (U->nrow < 0 || U->nrow != U->ncol ||
+ U->Stype != SLU_NC || U->Dtype != SLU_C || U->Mtype != SLU_TRU)
+ *info = -3;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("cgscon", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ *rcond = 0.;
+ if ( L->nrow == 0 || U->nrow == 0) {
+ *rcond = 1.;
+ return;
+ }
+
+ work = complexCalloc( 3*L->nrow );
+
+
+ if ( !work )
+ ABORT("Malloc fails for work arrays in cgscon.");
+
+ /* Estimate the norm of inv(A). */
+ ainvnm = 0.;
+ if ( onenrm ) kase1 = 1;
+ else kase1 = 2;
+ kase = 0;
+
+ do {
+ clacon2_(&L->nrow, &work[L->nrow], &work[0], &ainvnm, &kase, isave);
+
+ if (kase == 0) break;
+
+ if (kase == kase1) {
+ /* Multiply by inv(L). */
+ sp_ctrsv("L", "No trans", "Unit", L, U, &work[0], stat, info);
+
+ /* Multiply by inv(U). */
+ sp_ctrsv("U", "No trans", "Non-unit", L, U, &work[0], stat, info);
+
+ } else {
+
+ /* Multiply by inv(U'). */
+ sp_ctrsv("U", "Transpose", "Non-unit", L, U, &work[0], stat, info);
+
+ /* Multiply by inv(L'). */
+ sp_ctrsv("L", "Transpose", "Unit", L, U, &work[0], stat, info);
+
+ }
+
+ } while ( kase != 0 );
+
+ /* Compute the estimate of the reciprocal condition number. */
+ if (ainvnm != 0.) *rcond = (1. / ainvnm) / anorm;
+
+ SUPERLU_FREE (work);
+ return;
+
+} /* cgscon */
+
diff --git a/SuperLU_5.2.0/SRC/cgsequ.c b/SuperLU_5.2.0/SRC/cgsequ.c
new file mode 100644
index 0000000..c87db44
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cgsequ.c
@@ -0,0 +1,205 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from LAPACK routine CGEEQU
+ */
+#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)
+{
+
+
+ /* Local variables */
+ NCformat *Astore;
+ complex *Aval;
+ int i, j, irow;
+ float rcmin, rcmax;
+ float bignum, smlnum;
+ extern float smach(char *);
+
+ /* Test the input parameters. */
+ *info = 0;
+ if ( A->nrow < 0 || A->ncol < 0 ||
+ A->Stype != SLU_NC || A->Dtype != SLU_C || A->Mtype != SLU_GE )
+ *info = -1;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("cgsequ", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ if ( A->nrow == 0 || A->ncol == 0 ) {
+ *rowcnd = 1.;
+ *colcnd = 1.;
+ *amax = 0.;
+ return;
+ }
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Get machine constants. */
+ smlnum = smach("S"); /* slamch_("S"); */
+ bignum = 1. / smlnum;
+
+ /* Compute row scale factors. */
+ for (i = 0; i < A->nrow; ++i) r[i] = 0.;
+
+ /* Find the maximum element in each row. */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ r[irow] = SUPERLU_MAX( r[irow], c_abs1(&Aval[i]) );
+ }
+
+ /* Find the maximum and minimum scale factors. */
+ rcmin = bignum;
+ rcmax = 0.;
+ for (i = 0; i < A->nrow; ++i) {
+ rcmax = SUPERLU_MAX(rcmax, r[i]);
+ rcmin = SUPERLU_MIN(rcmin, r[i]);
+ }
+ *amax = rcmax;
+
+ if (rcmin == 0.) {
+ /* Find the first zero scale factor and return an error code. */
+ for (i = 0; i < A->nrow; ++i)
+ if (r[i] == 0.) {
+ *info = i + 1;
+ return;
+ }
+ } else {
+ /* Invert the scale factors. */
+ for (i = 0; i < A->nrow; ++i)
+ r[i] = 1. / SUPERLU_MIN( SUPERLU_MAX( r[i], smlnum ), bignum );
+ /* Compute ROWCND = min(R(I)) / max(R(I)) */
+ *rowcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
+ }
+
+ /* Compute column scale factors */
+ for (j = 0; j < A->ncol; ++j) c[j] = 0.;
+
+ /* Find the maximum element in each column, assuming the row
+ scalings computed above. */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ c[j] = SUPERLU_MAX( c[j], c_abs1(&Aval[i]) * r[irow] );
+ }
+
+ /* Find the maximum and minimum scale factors. */
+ rcmin = bignum;
+ rcmax = 0.;
+ for (j = 0; j < A->ncol; ++j) {
+ rcmax = SUPERLU_MAX(rcmax, c[j]);
+ rcmin = SUPERLU_MIN(rcmin, c[j]);
+ }
+
+ if (rcmin == 0.) {
+ /* Find the first zero scale factor and return an error code. */
+ for (j = 0; j < A->ncol; ++j)
+ if ( c[j] == 0. ) {
+ *info = A->nrow + j + 1;
+ return;
+ }
+ } else {
+ /* Invert the scale factors. */
+ for (j = 0; j < A->ncol; ++j)
+ c[j] = 1. / SUPERLU_MIN( SUPERLU_MAX( c[j], smlnum ), bignum);
+ /* Compute COLCND = min(C(J)) / max(C(J)) */
+ *colcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
+ }
+
+ return;
+
+} /* cgsequ */
+
+
diff --git a/SuperLU_5.2.0/SRC/cgsisx.c b/SuperLU_5.2.0/SRC/cgsisx.c
new file mode 100644
index 0000000..c01d1ce
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cgsisx.c
@@ -0,0 +1,738 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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,
+ GlobalLU_t *Glu, 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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ smlnum = smach("Safe minimum"); /* lamch_("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 || strncmp(equed, "N", 1)==0) )
+ *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);
+ input_error("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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ }
+ 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, Glu, 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 ( *rcond < smach("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/SuperLU_5.2.0/SRC/cgsitrf.c b/SuperLU_5.2.0/SRC/cgsitrf.c
new file mode 100644
index 0000000..fd21080
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cgsitrf.c
@@ -0,0 +1,661 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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,
+ GlobalLU_t *Glu, /* persistent to facilitate multiple factorizations */
+ 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 */
+ 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]++;
+ ((complex *) 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 = (complex *) 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 = (complex *) Glu->ucol;
+ ((NCformat *)U->Store)->rowind = Glu->usub;
+ ((NCformat *)U->Store)->colptr = Glu->xusub;
+ } else {
+ cCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL,
+ (complex *) 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,
+ (complex *) 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/SuperLU_5.2.0/SRC/cgsrfs.c b/SuperLU_5.2.0/SRC/cgsrfs.c
new file mode 100644
index 0000000..a7dd2f8
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cgsrfs.c
@@ -0,0 +1,475 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file cgsrfs.c
+ * \brief Improves computed solution to a system of inear equations
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Modified from lapack routine CGERFS
+ * Last modified: December 3, 2015
+ * </pre>
+ */
+/*
+ * File name: cgsrfs.c
+ * History: Modified from lapack routine CGERFS
+ */
+#include <math.h>
+#include "slu_cdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * CGSRFS improves the computed solution to a system of linear
+ * equations and provides error bounds and backward error estimates for
+ * the solution.
+ *
+ * If equilibration was performed, the system becomes:
+ * (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * 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)
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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 cgstrs().
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See 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
+ *
+ * Internal Parameters
+ * ===================
+ *
+ * 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
+
+ /* Table of constant values */
+ int ione = 1;
+ complex ndone = {-1., 0.};
+ complex done = {1., 0.};
+
+ /* Local variables */
+ NCformat *Astore;
+ complex *Aval;
+ SuperMatrix Bjcol;
+ DNformat *Bstore, *Xstore, *Bjcol_store;
+ complex *Bmat, *Xmat, *Bptr, *Xptr;
+ int kase;
+ float safe1, safe2;
+ int i, j, k, irow, nz, count, notran, rowequ, colequ;
+ int ldb, ldx, nrhs;
+ float s, xk, lstres, eps, safmin;
+ char transc[1];
+ trans_t transt;
+ complex *work;
+ float *rwork;
+ int *iwork;
+ int isave[3];
+
+ extern int clacon2_(int *, complex *, complex *, float *, int *, int []);
+#ifdef _CRAY
+ extern int CCOPY(int *, complex *, int *, complex *, int *);
+ extern int CSAXPY(int *, complex *, complex *, int *, complex *, int *);
+#else
+ extern int ccopy_(int *, complex *, int *, complex *, int *);
+ extern int caxpy_(int *, complex *, complex *, int *, complex *, int *);
+#endif
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+ Bstore = B->Store;
+ Xstore = X->Store;
+ Bmat = Bstore->nzval;
+ Xmat = Xstore->nzval;
+ ldb = Bstore->lda;
+ ldx = Xstore->lda;
+ nrhs = B->ncol;
+
+ /* Test the input parameters */
+ *info = 0;
+ notran = (trans == NOTRANS);
+ if ( !notran && trans != TRANS && trans != CONJ ) *info = -1;
+ else if ( A->nrow != A->ncol || A->nrow < 0 ||
+ A->Stype != SLU_NC || A->Dtype != SLU_C || A->Mtype != SLU_GE )
+ *info = -2;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ||
+ L->Stype != SLU_SC || L->Dtype != SLU_C || L->Mtype != SLU_TRLU )
+ *info = -3;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ||
+ U->Stype != SLU_NC || U->Dtype != SLU_C || U->Mtype != SLU_TRU )
+ *info = -4;
+ else if ( ldb < SUPERLU_MAX(0, A->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_C || B->Mtype != SLU_GE )
+ *info = -10;
+ else if ( ldx < SUPERLU_MAX(0, A->nrow) ||
+ X->Stype != SLU_DN || X->Dtype != SLU_C || X->Mtype != SLU_GE )
+ *info = -11;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("cgsrfs", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ if ( A->nrow == 0 || nrhs == 0) {
+ for (j = 0; j < nrhs; ++j) {
+ ferr[j] = 0.;
+ berr[j] = 0.;
+ }
+ return;
+ }
+
+ rowequ = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+
+ /* Allocate working space */
+ work = complexMalloc(2*A->nrow);
+ rwork = (float *) SUPERLU_MALLOC( A->nrow * sizeof(float) );
+ iwork = intMalloc(A->nrow);
+ if ( !work || !rwork || !iwork )
+ ABORT("Malloc fails for work/rwork/iwork.");
+
+ if ( notran ) {
+ *(unsigned char *)transc = 'N';
+ transt = TRANS;
+ } else if ( trans == TRANS ) {
+ *(unsigned char *)transc = 'T';
+ transt = NOTRANS;
+ } else if ( trans == CONJ ) {
+ *(unsigned char *)transc = 'C';
+ transt = NOTRANS;
+ }
+
+ /* NZ = maximum number of nonzero elements in each row of A, plus 1 */
+ nz = A->ncol + 1;
+ eps = smach("Epsilon");
+ safmin = smach("Safe minimum");
+
+ /* Set SAFE1 essentially to be the underflow threshold times the
+ number of additions in each row. */
+ safe1 = nz * safmin;
+ safe2 = safe1 / eps;
+
+ /* Compute the number of nonzeros in each row (or column) of A */
+ for (i = 0; i < A->nrow; ++i) iwork[i] = 0;
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k)
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ ++iwork[Astore->rowind[i]];
+ } else {
+ for (k = 0; k < A->ncol; ++k)
+ iwork[k] = Astore->colptr[k+1] - Astore->colptr[k];
+ }
+
+ /* Copy one column of RHS B into Bjcol. */
+ Bjcol.Stype = B->Stype;
+ Bjcol.Dtype = B->Dtype;
+ Bjcol.Mtype = B->Mtype;
+ Bjcol.nrow = B->nrow;
+ Bjcol.ncol = 1;
+ Bjcol.Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
+ if ( !Bjcol.Store ) ABORT("SUPERLU_MALLOC fails for Bjcol.Store");
+ Bjcol_store = Bjcol.Store;
+ Bjcol_store->lda = ldb;
+ Bjcol_store->nzval = work; /* address aliasing */
+
+ /* Do for each right hand side ... */
+ for (j = 0; j < nrhs; ++j) {
+ count = 0;
+ lstres = 3.;
+ Bptr = &Bmat[j*ldb];
+ Xptr = &Xmat[j*ldx];
+
+ while (1) { /* Loop until stopping criterion is satisfied. */
+
+ /* Compute residual R = B - op(A) * X,
+ where op(A) = A, A**T, or A**H, depending on TRANS. */
+
+#ifdef _CRAY
+ CCOPY(&A->nrow, Bptr, &ione, work, &ione);
+#else
+ ccopy_(&A->nrow, Bptr, &ione, work, &ione);
+#endif
+ sp_cgemv(transc, ndone, A, Xptr, ione, done, work, ione);
+
+ /* Compute componentwise relative backward error from formula
+ max(i) ( abs(R(i)) / ( abs(op(A))*abs(X) + abs(B) )(i) )
+ 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 before dividing. */
+
+ for (i = 0; i < A->nrow; ++i) rwork[i] = c_abs1( &Bptr[i] );
+
+ /* Compute abs(op(A))*abs(X) + abs(B). */
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k) {
+ xk = c_abs1( &Xptr[k] );
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ rwork[Astore->rowind[i]] += c_abs1(&Aval[i]) * xk;
+ }
+ } else { /* trans = TRANS or CONJ */
+ for (k = 0; k < A->ncol; ++k) {
+ s = 0.;
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+ irow = Astore->rowind[i];
+ s += c_abs1(&Aval[i]) * c_abs1(&Xptr[irow]);
+ }
+ rwork[k] += s;
+ }
+ }
+ s = 0.;
+ for (i = 0; i < A->nrow; ++i) {
+ if (rwork[i] > safe2) {
+ s = SUPERLU_MAX( s, c_abs1(&work[i]) / rwork[i] );
+ } 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;
+
+ /* Test stopping criterion. Continue iterating if
+ 1) The residual BERR(J) is larger than machine epsilon, and
+ 2) BERR(J) decreased by at least a factor of 2 during the
+ last iteration, and
+ 3) At most ITMAX iterations tried. */
+
+ if (berr[j] > eps && berr[j] * 2. <= lstres && count < ITMAX) {
+ /* Update solution and try again. */
+ cgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+#ifdef _CRAY
+ CAXPY(&A->nrow, &done, work, &ione,
+ &Xmat[j*ldx], &ione);
+#else
+ caxpy_(&A->nrow, &done, work, &ione,
+ &Xmat[j*ldx], &ione);
+#endif
+ lstres = berr[j];
+ ++count;
+ } else {
+ break;
+ }
+
+ } /* end while */
+
+ stat->RefineSteps = count;
+
+ /* Bound error from formula:
+ norm(X - XTRUE) / norm(X) .le. FERR = norm( abs(inv(op(A)))*
+ ( abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) / norm(X)
+ where
+ norm(Z) is the magnitude of the largest component of Z
+ inv(op(A)) is the inverse of op(A)
+ abs(Z) is the componentwise absolute value of the matrix or
+ vector Z
+ NZ is the maximum number of nonzeros in any row of A, plus 1
+ EPS is machine epsilon
+
+ The i-th component of abs(R)+NZ*EPS*(abs(op(A))*abs(X)+abs(B))
+ is incremented by SAFE1 if the i-th component of
+ abs(op(A))*abs(X) + abs(B) is less than SAFE2.
+
+ Use CLACON2 to estimate the infinity-norm of the matrix
+ inv(op(A)) * diag(W),
+ where W = abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) */
+
+ for (i = 0; i < A->nrow; ++i) rwork[i] = c_abs1( &Bptr[i] );
+
+ /* Compute abs(op(A))*abs(X) + abs(B). */
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k) {
+ xk = c_abs1( &Xptr[k] );
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ rwork[Astore->rowind[i]] += c_abs1(&Aval[i]) * xk;
+ }
+ } else { /* trans == TRANS or CONJ */
+ for (k = 0; k < A->ncol; ++k) {
+ s = 0.;
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+ irow = Astore->rowind[i];
+ xk = c_abs1( &Xptr[irow] );
+ s += c_abs1(&Aval[i]) * xk;
+ }
+ rwork[k] += s;
+ }
+ }
+
+ for (i = 0; i < A->nrow; ++i)
+ if (rwork[i] > safe2)
+ rwork[i] = c_abs(&work[i]) + (iwork[i]+1)*eps*rwork[i];
+ else
+ rwork[i] = c_abs(&work[i])+(iwork[i]+1)*eps*rwork[i]+safe1;
+ kase = 0;
+
+ do {
+ clacon2_(&A->nrow, &work[A->nrow], work, &ferr[j], &kase, isave);
+ if (kase == 0) break;
+
+ if (kase == 1) {
+ /* Multiply by diag(W)*inv(op(A)**T)*(diag(C) or diag(R)). */
+ if ( notran && colequ )
+ for (i = 0; i < A->ncol; ++i) {
+ cs_mult(&work[i], &work[i], C[i]);
+ }
+ else if ( !notran && rowequ )
+ for (i = 0; i < A->nrow; ++i) {
+ cs_mult(&work[i], &work[i], R[i]);
+ }
+
+ cgstrs (transt, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+ for (i = 0; i < A->nrow; ++i) {
+ cs_mult(&work[i], &work[i], rwork[i]);
+ }
+ } else {
+ /* Multiply by (diag(C) or diag(R))*inv(op(A))*diag(W). */
+ for (i = 0; i < A->nrow; ++i) {
+ cs_mult(&work[i], &work[i], rwork[i]);
+ }
+
+ cgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+ if ( notran && colequ )
+ for (i = 0; i < A->ncol; ++i) {
+ cs_mult(&work[i], &work[i], C[i]);
+ }
+ else if ( !notran && rowequ )
+ for (i = 0; i < A->ncol; ++i) {
+ cs_mult(&work[i], &work[i], R[i]);
+ }
+ }
+
+ } while ( kase != 0 );
+
+ /* Normalize error. */
+ lstres = 0.;
+ if ( notran && colequ ) {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, C[i] * c_abs1( &Xptr[i]) );
+ } else if ( !notran && rowequ ) {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, R[i] * c_abs1( &Xptr[i]) );
+ } else {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, c_abs1( &Xptr[i]) );
+ }
+ if ( lstres != 0. )
+ ferr[j] /= lstres;
+
+ } /* for each RHS j ... */
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(rwork);
+ SUPERLU_FREE(iwork);
+ SUPERLU_FREE(Bjcol.Store);
+
+ return;
+
+} /* cgsrfs */
diff --git a/SuperLU_5.2.0/SRC/cgssv.c b/SuperLU_5.2.0/SRC/cgssv.c
new file mode 100644
index 0000000..38e9136
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cgssv.c
@@ -0,0 +1,238 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * CGSSV solves the system of linear equations A*X=B, using the
+ * LU factorization from CGSTRF. It performs the following steps:
+ *
+ * 1. If A is stored column-wise (A->Stype = SLU_NC):
+ *
+ * 1.1. Permute the columns of A, forming A*Pc, where Pc
+ * is a permutation matrix. For more details of this step,
+ * see sp_preorder.c.
+ *
+ * 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.
+ *
+ * 1.3. Solve the system of equations A*X=B using the factored
+ * form of A.
+ *
+ * 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ * above algorithm to the transpose of A:
+ *
+ * 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 sp_preorder.c.
+ *
+ * 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.
+ *
+ * 2.3. Solve the system of equations A*X=B using the factored
+ * form of A.
+ *
+ * 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) 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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->RowPerm = MY_PERMR or
+ * options->Fact = SamePattern_SameRowPerm, perm_r is an
+ * input argument.
+ * otherwise it is an output argument.
+ *
+ * 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.
+ *
+ * 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;
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See util.h for the definition of 'SuperLUStat_t'.
+ *
+ * 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>
+ */
+
+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;
+ GlobalLU_t Glu; /* Not needed on return. */
+
+ /* Set default values for some parameters */
+ int panel_size; /* panel size */
+ int relax; /* no of columns in a relaxed snodes */
+ int permc_spec;
+ trans_t trans = NOTRANS;
+ double *utime;
+ double t; /* Temporary time */
+
+ /* Test the input parameters ... */
+ *info = 0;
+ Bstore = B->Store;
+ if ( options->Fact != DOFACT ) *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 ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_C || B->Mtype != SLU_GE )
+ *info = -7;
+ if ( *info != 0 ) {
+ i = -(*info);
+ input_error("cgssv", &i);
+ return;
+ }
+
+ 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);
+ trans = TRANS;
+ } else {
+ if ( A->Stype == SLU_NC ) AA = A;
+ }
+
+ t = SuperLU_timer_();
+ /*
+ * Get 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_() - t;
+
+ etree = intMalloc(A->ncol);
+
+ t = SuperLU_timer_();
+ sp_preorder(options, AA, perm_c, etree, &AC);
+ utime[ETREE] = SuperLU_timer_() - t;
+
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+
+ /*printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
+ relax, panel_size, sp_ienv(3), sp_ienv(4));*/
+ t = SuperLU_timer_();
+ /* Compute the LU factorization of A. */
+ cgstrf(options, &AC, relax, panel_size, etree,
+ NULL, lwork, perm_c, perm_r, L, U, &Glu, stat, info);
+ utime[FACT] = SuperLU_timer_() - t;
+
+ t = SuperLU_timer_();
+ if ( *info == 0 ) {
+ /* Solve the system A*X=B, overwriting B with X. */
+ cgstrs (trans, L, U, perm_c, perm_r, B, stat, info);
+ }
+ utime[SOLVE] = SuperLU_timer_() - t;
+
+ SUPERLU_FREE (etree);
+ Destroy_CompCol_Permuted(&AC);
+ if ( A->Stype == SLU_NR ) {
+ Destroy_SuperMatrix_Store(AA);
+ SUPERLU_FREE(AA);
+ }
+
+}
diff --git a/SuperLU_5.2.0/SRC/cgssvx.c b/SuperLU_5.2.0/SRC/cgssvx.c
new file mode 100644
index 0000000..e214d45
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cgssvx.c
@@ -0,0 +1,646 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * CGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ * the LU factorization from cgstrf(). Error bounds on the solution and
+ * a condition estimate are also provided. It performs the following steps:
+ *
+ * 1. If A is stored column-wise (A->Stype = SLU_NC):
+ *
+ * 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).
+ *
+ * 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 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.
+ *
+ * 1.6. The system of equations is solved for X using the factored form
+ * of A.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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, 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 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.
+ *
+ * 2.6. The system of equations is solved for X using the factored form
+ * of transpose(A).
+ *
+ * 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.
+ *
+ * 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.
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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: 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>
+ */
+
+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,
+ GlobalLU_t *Glu, 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;
+ 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;
+
+ /* 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);
+ if ( nofact ) {
+ *(unsigned char *)equed = 'N';
+ rowequ = FALSE;
+ colequ = FALSE;
+ } else {
+ rowequ = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ smlnum = smach("Safe minimum"); /* lamch_("Safe minimum"); */
+ bignum = 1. / smlnum;
+ }
+
+#if 0
+printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
+ options->Fact, options->Trans, *equed);
+#endif
+
+ /* 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 || strncmp(equed, "N", 1)==0) )
+ *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 ) *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;
+ }
+ 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) {
+ i = -(*info);
+ input_error("cgssvx", &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 && 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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ }
+ 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;
+
+/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
+ relax, panel_size, sp_ienv(3), sp_ienv(4));
+ fflush(stdout); */
+
+ /* Compute the LU factorization of A*Pc. */
+ t0 = SuperLU_timer_();
+ cgstrf(options, &AC, relax, panel_size, etree,
+ work, lwork, perm_c, perm_r, L, U, Glu, stat, info);
+ utime[FACT] = SuperLU_timer_() - t0;
+
+ if ( lwork == -1 ) {
+ mem_usage->total_needed = *info - A->ncol;
+ return;
+ }
+ }
+
+ if ( *info > 0 ) {
+ if ( *info <= A->ncol ) {
+ /* Compute the reciprocal pivot growth factor of the leading
+ rank-deficient (*info) columns of A. */
+ *recip_pivot_growth = cPivotGrowth(*info, AA, perm_c, L, U);
+ }
+ return;
+ }
+
+ /* *info == 0 at this point. */
+
+ if ( options->PivotGrowth ) {
+ /* 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 ) {
+ /* 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++)
+ 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;
+
+ /* Use iterative refinement to improve the computed solution and compute
+ error bounds and backward error estimates for it. */
+ t0 = SuperLU_timer_();
+ if ( options->IterRefine != NOREFINE ) {
+ cgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
+ X, ferr, berr, stat, &info1);
+ } else {
+ for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
+ }
+ utime[REFINE] = 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 < 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)
+ cs_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
+ }
+ } /* 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 = A->ncol + 1;*/
+ if ( *rcond < smach("E") ) *info = A->ncol + 1;
+ }
+
+ if ( nofact ) {
+ cQuerySpace(L, U, mem_usage);
+ Destroy_CompCol_Permuted(&AC);
+ }
+ if ( A->Stype == SLU_NR ) {
+ Destroy_SuperMatrix_Store(AA);
+ SUPERLU_FREE(AA);
+ }
+
+}
diff --git a/SuperLU_5.2.0/SRC/cgstrf.c b/SuperLU_5.2.0/SRC/cgstrf.c
new file mode 100644
index 0000000..2cd14a9
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cgstrf.c
@@ -0,0 +1,459 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_cdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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: 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.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ * m = number of rows in the matrix
+ * n = number of columns in the matrix
+ *
+ * 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.
+ *
+ * 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 cpanel_dfs.c; marker2 is used for inner-factorization,
+ * see ccolumn_dfs.c.
+ *
+ * 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 cpanel_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_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,
+ GlobalLU_t *Glu, /* persistent to facilitate multiple factorizations */
+ 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 *iwork;
+ complex *cwork;
+ int *segrep, *repfnz, *parent, *xplore;
+ int *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+ int *xprune;
+ int *marker;
+ complex *dense, *tempv;
+ int *relax_end;
+ complex *a;
+ int *asub;
+ int *xa_begin, *xa_end;
+ int *xsup, *supno;
+ int *xlsub, *xlusup, *xusub;
+ int nzlumax;
+ float fill_ratio = sp_ienv(6); /* estimated fill ratio */
+
+ /* Local scalars */
+ fact_t fact = options->Fact;
+ double diag_pivot_thresh = options->DiagPivotThresh;
+ 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;
+
+ 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, fill_ratio, 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, &xprune, &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;
+
+ /* Identify relaxed snodes */
+ relax_end = (int *) intMalloc(n);
+ if ( options->SymmetricMode == YES ) {
+ heap_relax_snode(n, etree, relax, marker, relax_end);
+ } else {
+ relax_snode(n, etree, relax, marker, relax_end);
+ }
+
+ 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;
+
+ /*
+ * 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]++;
+
+ /* --------------------------------------
+ * Factorize the relaxed supernode(jcol:kcol)
+ * -------------------------------------- */
+ /* Determine the union of the row structure of the snode */
+ if ( (*info = csnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+ xprune, 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;
+
+ /* Scatter into SPA dense[*] */
+ for (k = xa_begin[icol]; k < xa_end[icol]; k++)
+ dense[asub[k]] = a[k];
+
+ /* Numeric update within the snode */
+ csnode_bmod(icol, jsupno, fsupc, dense, tempv, Glu, stat);
+
+ if ( (*info = cpivotL(icol, diag_pivot_thresh, &usepr, perm_r,
+ iperm_r, iperm_c, &pivrow, Glu, stat)) )
+ if ( iinfo == 0 ) iinfo = *info;
+
+#ifdef DEBUG
+ cprint_lu_col("[1]: ", icol, pivrow, xprune, Glu);
+#endif
+
+ }
+
+ jcol = icol;
+
+ } 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 */
+ cpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+ dense, panel_lsub, segrep, repfnz, xprune,
+ 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 */
+
+ if ((*info = ccolumn_dfs(m, jj, perm_r, &nseg, &panel_lsub[k],
+ segrep, &repfnz[k], xprune, marker,
+ parent, xplore, Glu)) != 0) return;
+
+ /* Numeric updates */
+ if ((*info = ccolumn_bmod(jj, (nseg - nseg1), &dense[k],
+ tempv, &segrep[nseg1], &repfnz[k],
+ jcol, Glu, stat)) != 0) return;
+
+ /* Copy the U-segments to ucol[*] */
+ if ((*info = ccopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+ perm_r, &dense[k], Glu)) != 0)
+ return;
+
+ if ( (*info = cpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+ iperm_r, iperm_c, &pivrow, Glu, stat)) )
+ if ( iinfo == 0 ) iinfo = *info;
+
+ /* Prune columns (0:jj-1) using column jj */
+ cpruneL(jj, perm_r, pivrow, nseg, segrep,
+ &repfnz[k], xprune, Glu);
+
+ /* Reset repfnz[] for this column */
+ resetrep_col (nseg, segrep, &repfnz[k]);
+
+#ifdef DEBUG
+ cprint_lu_col("[2]: ", jj, pivrow, xprune, Glu);
+#endif
+
+ }
+
+ 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;
+ }
+ }
+
+ countnz(min_mn, xprune, &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 = (complex *) 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 = (complex *) Glu->ucol;
+ ((NCformat *)U->Store)->rowind = Glu->usub;
+ ((NCformat *)U->Store)->colptr = Glu->xusub;
+ } else {
+ cCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL,
+ (complex *) 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,
+ (complex *) 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);
+
+}
diff --git a/SuperLU_5.2.0/SRC/cgstrs.c b/SuperLU_5.2.0/SRC/cgstrs.c
new file mode 100644
index 0000000..f0cc2fc
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cgstrs.c
@@ -0,0 +1,360 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_cdefs.h"
+
+
+/*
+ * Function prototypes
+ */
+void cusolve(int, int, complex*, complex*);
+void clsolve(int, int, complex*, complex*);
+void cmatvec(int, int, int, complex*, complex*, complex*);
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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.
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * 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)
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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_C, Mtype = SLU_GE.
+ * On entry, the right hand side matrix.
+ * On exit, the solution matrix if info = 0;
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See 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
+ * </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
+ int incx = 1, incy = 1;
+#ifdef USE_VENDOR_BLAS
+ complex alpha = {1.0, 0.0}, beta = {1.0, 0.0};
+ complex *work_col;
+#endif
+ complex temp_comp;
+ DNformat *Bstore;
+ complex *Bmat;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ complex *Lval, *Uval;
+ int fsupc, nrow, nsupr, nsupc, luptr, istart, irow;
+ int i, j, k, iptr, jcol, n, ldb, nrhs;
+ complex *work, *rhs_work, *soln;
+ flops_t solve_ops;
+ void cprint_soln();
+
+ /* Test input parameters ... */
+ *info = 0;
+ Bstore = B->Store;
+ ldb = Bstore->lda;
+ nrhs = B->ncol;
+ if ( trans != NOTRANS && trans != TRANS && trans != CONJ ) *info = -1;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ||
+ L->Stype != SLU_SC || L->Dtype != SLU_C || L->Mtype != SLU_TRLU )
+ *info = -2;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ||
+ U->Stype != SLU_NC || U->Dtype != SLU_C || U->Mtype != SLU_TRU )
+ *info = -3;
+ else if ( ldb < SUPERLU_MAX(0, L->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_C || B->Mtype != SLU_GE )
+ *info = -6;
+ if ( *info ) {
+ i = -(*info);
+ input_error("cgstrs", &i);
+ return;
+ }
+
+ n = L->nrow;
+ work = complexCalloc(n * nrhs);
+ if ( !work ) ABORT("Malloc fails for local work[].");
+ soln = complexMalloc(n);
+ if ( !soln ) ABORT("Malloc fails for local soln[].");
+
+ Bmat = Bstore->nzval;
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+ solve_ops = 0;
+
+ if ( trans == NOTRANS ) {
+ /* 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 += 4 * nsupc * (nsupc - 1) * nrhs;
+ solve_ops += 8 * 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;
+ cc_mult(&temp_comp, &rhs_work[fsupc], &Lval[luptr]);
+ c_sub(&rhs_work[irow], &rhs_work[irow], &temp_comp);
+ }
+ }
+ } 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"));
+ CTRSM( ftcs1, ftcs1, ftcs2, ftcs3, &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+
+ CGEMM( ftcs2, ftcs2, &nrow, &nrhs, &nsupc, &alpha,
+ &Lval[luptr+nsupc], &nsupr, &Bmat[fsupc], &ldb,
+ &beta, &work[0], &n );
+#else
+ ctrsm_("L", "L", "N", "U", &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+
+ cgemm_( "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);
+ c_sub(&rhs_work[irow], &rhs_work[irow], &work_col[i]);
+ work_col[i].r = 0.0;
+ work_col[i].i = 0.0;
+ iptr++;
+ }
+ }
+#else
+ for (j = 0; j < nrhs; j++) {
+ rhs_work = &Bmat[j*ldb];
+ clsolve (nsupr, nsupc, &Lval[luptr], &rhs_work[fsupc]);
+ cmatvec (nsupr, nrow, nsupc, &Lval[luptr+nsupc],
+ &rhs_work[fsupc], &work[0] );
+
+ iptr = istart + nsupc;
+ for (i = 0; i < nrow; i++) {
+ irow = L_SUB(iptr);
+ c_sub(&rhs_work[irow], &rhs_work[irow], &work[i]);
+ work[i].r = 0.;
+ work[i].i = 0.;
+ iptr++;
+ }
+ }
+#endif
+ } /* else ... */
+ } /* for L-solve */
+
+#ifdef DEBUG
+ printf("After L-solve: y=\n");
+ cprint_soln(n, nrhs, Bmat);
+#endif
+
+ /*
+ * Back solve Ux=y.
+ */
+ for (k = Lstore->nsuper; k >= 0; 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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += 4 * nsupc * (nsupc + 1) * nrhs;
+
+ if ( nsupc == 1 ) {
+ rhs_work = &Bmat[0];
+ for (j = 0; j < nrhs; j++) {
+ c_div(&rhs_work[fsupc], &rhs_work[fsupc], &Lval[luptr]);
+ rhs_work += ldb;
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd("U", strlen("U"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ CTRSM( ftcs1, ftcs2, ftcs3, ftcs3, &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+#else
+ ctrsm_("L", "U", "N", "N", &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+#endif
+#else
+ for (j = 0; j < nrhs; j++)
+ cusolve ( nsupr, nsupc, &Lval[luptr], &Bmat[fsupc+j*ldb] );
+#endif
+ }
+
+ for (j = 0; j < nrhs; ++j) {
+ rhs_work = &Bmat[j*ldb];
+ for (jcol = fsupc; jcol < fsupc + nsupc; jcol++) {
+ solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++ ){
+ irow = U_SUB(i);
+ cc_mult(&temp_comp, &rhs_work[jcol], &Uval[i]);
+ c_sub(&rhs_work[irow], &rhs_work[irow], &temp_comp);
+ }
+ }
+ }
+
+ } /* for U-solve */
+
+#ifdef DEBUG
+ printf("After U-solve: x=\n");
+ cprint_soln(n, nrhs, Bmat);
+#endif
+
+ /* Compute the final solution X := Pc*X. */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[k] = rhs_work[perm_c[k]];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ stat->ops[SOLVE] = solve_ops;
+
+ } else { /* Solve A'*X=B or CONJ(A)*X=B */
+ /* Permute right hand sides to form Pc'*B. */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[perm_c[k]] = rhs_work[k];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ stat->ops[SOLVE] = 0;
+ if (trans == TRANS) {
+ for (k = 0; k < nrhs; ++k) {
+ /* Multiply by inv(U'). */
+ sp_ctrsv("U", "T", "N", L, U, &Bmat[k*ldb], stat, info);
+
+ /* Multiply by inv(L'). */
+ sp_ctrsv("L", "T", "U", L, U, &Bmat[k*ldb], stat, info);
+ }
+ } else { /* trans == CONJ */
+ for (k = 0; k < nrhs; ++k) {
+ /* Multiply by conj(inv(U')). */
+ sp_ctrsv("U", "C", "N", L, U, &Bmat[k*ldb], stat, info);
+
+ /* Multiply by conj(inv(L')). */
+ sp_ctrsv("L", "C", "U", L, U, &Bmat[k*ldb], stat, info);
+ }
+ }
+ /* Compute the final solution X := Pr'*X (=inv(Pr)*X) */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[k] = rhs_work[perm_r[k]];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ }
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(soln);
+}
+
+/*
+ * Diagnostic print of the solution vector
+ */
+void
+cprint_soln(int n, int nrhs, complex *soln)
+{
+ int i;
+
+ for (i = 0; i < n; i++)
+ printf("\t%d: %.4f\t%.4f\n", i, soln[i].r, soln[i].i);
+}
diff --git a/SuperLU_5.2.0/SRC/clacon.c b/SuperLU_5.2.0/SRC/clacon.c
new file mode 100644
index 0000000..f850bdb
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/clacon.c
@@ -0,0 +1,232 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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)
+
+{
+
+
+ /* Table of constant values */
+ int c__1 = 1;
+ complex zero = {0.0, 0.0};
+ complex one = {1.0, 0.0};
+
+ /* System generated locals */
+ float d__1;
+
+ /* Local variables */
+ static int jump;
+ int jlast;
+ int iter;
+ float altsgn, estold;
+ int i, j;
+ float temp;
+ float safmin;
+ extern float slamch_(char *);
+ extern int icmax1_slu(int *, complex *, int *);
+ extern double scsum1_slu(int *, complex *, int *);
+
+ safmin = slamch_("Safe minimum");
+ if ( *kase == 0 ) {
+ for (i = 0; i < *n; ++i) {
+ x[i].r = 1. / (float) (*n);
+ x[i].i = 0.;
+ }
+ *kase = 1;
+ jump = 1;
+ return 0;
+ }
+
+ switch (jump) {
+ case 1: goto L20;
+ case 2: goto L40;
+ case 3: goto L70;
+ case 4: goto L110;
+ case 5: goto L140;
+ }
+
+ /* ................ ENTRY (JUMP = 1)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
+ L20:
+ if (*n == 1) {
+ v[0] = x[0];
+ *est = c_abs(&v[0]);
+ /* ... QUIT */
+ goto L150;
+ }
+ *est = scsum1_slu(n, x, &c__1);
+
+ for (i = 0; i < *n; ++i) {
+ d__1 = c_abs(&x[i]);
+ if (d__1 > safmin) {
+ d__1 = 1 / d__1;
+ x[i].r *= d__1;
+ x[i].i *= d__1;
+ } else {
+ x[i] = one;
+ }
+ }
+ *kase = 2;
+ jump = 2;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 2)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
+L40:
+ j = icmax1_slu(n, &x[0], &c__1);
+ --j;
+ iter = 2;
+
+ /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
+L50:
+ for (i = 0; i < *n; ++i) x[i] = zero;
+ x[j] = one;
+ *kase = 1;
+ jump = 3;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 3)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L70:
+#ifdef _CRAY
+ CCOPY(n, x, &c__1, v, &c__1);
+#else
+ ccopy_(n, x, &c__1, v, &c__1);
+#endif
+ estold = *est;
+ *est = scsum1_slu(n, v, &c__1);
+
+
+L90:
+ /* TEST FOR CYCLING. */
+ if (*est <= estold) goto L120;
+
+ for (i = 0; i < *n; ++i) {
+ d__1 = c_abs(&x[i]);
+ if (d__1 > safmin) {
+ d__1 = 1 / d__1;
+ x[i].r *= d__1;
+ x[i].i *= d__1;
+ } else {
+ x[i] = one;
+ }
+ }
+ *kase = 2;
+ jump = 4;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 4)
+ X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
+L110:
+ jlast = j;
+ j = icmax1_slu(n, &x[0], &c__1);
+ --j;
+ if (x[jlast].r != (d__1 = x[j].r, fabs(d__1)) && iter < 5) {
+ ++iter;
+ goto L50;
+ }
+
+ /* ITERATION COMPLETE. FINAL STAGE. */
+L120:
+ altsgn = 1.;
+ for (i = 1; i <= *n; ++i) {
+ x[i-1].r = altsgn * ((float)(i - 1) / (float)(*n - 1) + 1.);
+ x[i-1].i = 0.;
+ altsgn = -altsgn;
+ }
+ *kase = 1;
+ jump = 5;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 5)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L140:
+ temp = scsum1_slu(n, x, &c__1) / (float)(*n * 3) * 2.;
+ if (temp > *est) {
+#ifdef _CRAY
+ CCOPY(n, &x[0], &c__1, &v[0], &c__1);
+#else
+ ccopy_(n, &x[0], &c__1, &v[0], &c__1);
+#endif
+ *est = temp;
+ }
+
+L150:
+ *kase = 0;
+ return 0;
+
+} /* clacon_ */
diff --git a/SuperLU_5.2.0/SRC/clacon2.c b/SuperLU_5.2.0/SRC/clacon2.c
new file mode 100644
index 0000000..107bb64
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/clacon2.c
@@ -0,0 +1,239 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file clacon2.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * July 25, 2015
+ * </pre>
+ */
+#include <math.h>
+#include "slu_Cnames.h"
+#include "slu_scomplex.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * CLACON2 estimates the 1-norm of a square matrix A.
+ * Reverse communication is used for evaluating matrix-vector products.
+ *
+ * This is a thread safe version of CLACON, which uses the array ISAVE
+ * in place of a STATIC variables, as follows:
+ *
+ * CLACON CLACON2
+ * jump isave[0]
+ * j isave[1]
+ * iter isave[2]
+ *
+ *
+ * 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.
+ *
+ * isave (input/output) int [3]
+ * ISAVE is INTEGER array, dimension (3)
+ * ISAVE is used to save variables between calls to CLACON2
+ *
+ * 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
+clacon2_(int *n, complex *v, complex *x, float *est, int *kase, int isave[3])
+{
+ /* Table of constant values */
+ int c__1 = 1;
+ complex zero = {0.0, 0.0};
+ complex one = {1.0, 0.0};
+
+ /* System generated locals */
+ float d__1;
+
+ /* Local variables */
+ int jlast;
+ float altsgn, estold;
+ int i;
+ float temp;
+ float safmin;
+ extern float smach(char *);
+ extern int icmax1_slu(int *, complex *, int *);
+ extern double scsum1_slu(int *, complex *, int *);
+
+ safmin = smach("Safe minimum"); /* lamch_("Safe minimum"); */
+ if ( *kase == 0 ) {
+ for (i = 0; i < *n; ++i) {
+ x[i].r = 1. / (float) (*n);
+ x[i].i = 0.;
+ }
+ *kase = 1;
+ isave[0] = 1; /* jump = 1; */
+ return 0;
+ }
+
+ switch (isave[0]) {
+ case 1: goto L20;
+ case 2: goto L40;
+ case 3: goto L70;
+ case 4: goto L110;
+ case 5: goto L140;
+ }
+
+ /* ................ ENTRY (isave[0] = 1)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
+ L20:
+ if (*n == 1) {
+ v[0] = x[0];
+ *est = c_abs(&v[0]);
+ /* ... QUIT */
+ goto L150;
+ }
+ *est = scsum1_slu(n, x, &c__1);
+
+ for (i = 0; i < *n; ++i) {
+ d__1 = c_abs(&x[i]);
+ if (d__1 > safmin) {
+ d__1 = 1 / d__1;
+ x[i].r *= d__1;
+ x[i].i *= d__1;
+ } else {
+ x[i] = one;
+ }
+ }
+ *kase = 2;
+ isave[0] = 2; /* jump = 2; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 2)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
+L40:
+ isave[1] = icmax1_slu(n, &x[0], &c__1); /* j */
+ --isave[1]; /* --j; */
+ isave[2] = 2; /* iter = 2; */
+
+ /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
+L50:
+ for (i = 0; i < *n; ++i) x[i] = zero;
+ x[isave[1]] = one;
+ *kase = 1;
+ isave[0] = 3; /* jump = 3; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 3)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L70:
+#ifdef _CRAY
+ CCOPY(n, x, &c__1, v, &c__1);
+#else
+ ccopy_(n, x, &c__1, v, &c__1);
+#endif
+ estold = *est;
+ *est = scsum1_slu(n, v, &c__1);
+
+
+L90:
+ /* TEST FOR CYCLING. */
+ if (*est <= estold) goto L120;
+
+ for (i = 0; i < *n; ++i) {
+ d__1 = c_abs(&x[i]);
+ if (d__1 > safmin) {
+ d__1 = 1 / d__1;
+ x[i].r *= d__1;
+ x[i].i *= d__1;
+ } else {
+ x[i] = one;
+ }
+ }
+ *kase = 2;
+ isave[0] = 4; /* jump = 4; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 4)
+ X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
+L110:
+ jlast = isave[1]; /* j; */
+ isave[1] = icmax1_slu(n, &x[0], &c__1); /* j */
+ isave[1] = isave[1] - 1; /* --j; */
+ if (x[jlast].r != (d__1 = x[isave[1]].r, fabs(d__1)) && isave[2] < 5) {
+ isave[2] = isave[2] + 1; /* ++iter; */
+ goto L50;
+ }
+
+ /* ITERATION COMPLETE. FINAL STAGE. */
+L120:
+ altsgn = 1.;
+ for (i = 1; i <= *n; ++i) {
+ x[i-1].r = altsgn * ((float)(i - 1) / (float)(*n - 1) + 1.);
+ x[i-1].i = 0.;
+ altsgn = -altsgn;
+ }
+ *kase = 1;
+ isave[0] = 5; /* jump = 5; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 5)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L140:
+ temp = scsum1_slu(n, x, &c__1) / (float)(*n * 3) * 2.;
+ if (temp > *est) {
+#ifdef _CRAY
+ CCOPY(n, &x[0], &c__1, &v[0], &c__1);
+#else
+ ccopy_(n, &x[0], &c__1, &v[0], &c__1);
+#endif
+ *est = temp;
+ }
+
+L150:
+ *kase = 0;
+ return 0;
+
+} /* clacon_ */
diff --git a/SuperLU_5.2.0/SRC/clangs.c b/SuperLU_5.2.0/SRC/clangs.c
new file mode 100644
index 0000000..fa8ad8d
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/clangs.c
@@ -0,0 +1,129 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from lapack routine CLANGE
+ */
+#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)
+{
+
+ /* Local variables */
+ NCformat *Astore;
+ complex *Aval;
+ int i, j, irow;
+ float value, sum;
+ float *rwork;
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ if ( SUPERLU_MIN(A->nrow, A->ncol) == 0) {
+ value = 0.;
+
+ } else if (strncmp(norm, "M", 1)==0) {
+ /* Find max(abs(A(i,j))). */
+ value = 0.;
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
+ value = SUPERLU_MAX( value, c_abs( &Aval[i]) );
+
+ } else if (strncmp(norm, "O", 1)==0 || *(unsigned char *)norm == '1') {
+ /* Find norm1(A). */
+ value = 0.;
+ for (j = 0; j < A->ncol; ++j) {
+ sum = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
+ sum += c_abs( &Aval[i] );
+ value = SUPERLU_MAX(value,sum);
+ }
+
+ } else if (strncmp(norm, "I", 1)==0) {
+ /* Find normI(A). */
+ if ( !(rwork = (float *) SUPERLU_MALLOC(A->nrow * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for rwork.");
+ for (i = 0; i < A->nrow; ++i) rwork[i] = 0.;
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++) {
+ irow = Astore->rowind[i];
+ rwork[irow] += c_abs( &Aval[i] );
+ }
+ value = 0.;
+ for (i = 0; i < A->nrow; ++i)
+ value = SUPERLU_MAX(value, rwork[i]);
+
+ SUPERLU_FREE (rwork);
+
+ } else if (strncmp(norm, "F", 1)==0 || strncmp(norm, "E", 1)==0) {
+ /* Find normF(A). */
+ ABORT("Not implemented.");
+ } else
+ ABORT("Illegal norm specified.");
+
+ return (value);
+
+} /* clangs */
+
diff --git a/SuperLU_5.2.0/SRC/claqgs.c b/SuperLU_5.2.0/SRC/claqgs.c
new file mode 100644
index 0000000..71361a3
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/claqgs.c
@@ -0,0 +1,157 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from LAPACK routine CLAQGE
+ */
+#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)
+{
+
+
+#define THRESH (0.1)
+
+ /* Local variables */
+ NCformat *Astore;
+ complex *Aval;
+ int i, j, irow;
+ float large, small, cj;
+ float temp;
+
+
+ /* Quick return if possible */
+ if (A->nrow <= 0 || A->ncol <= 0) {
+ *(unsigned char *)equed = 'N';
+ return;
+ }
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Initialize LARGE and SMALL. */
+ small = smach("Safe minimum") / smach("Precision");
+ large = 1. / small;
+
+ if (rowcnd >= THRESH && amax >= small && amax <= large) {
+ if (colcnd >= THRESH)
+ *(unsigned char *)equed = 'N';
+ else {
+ /* Column scaling */
+ for (j = 0; j < A->ncol; ++j) {
+ cj = c[j];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ cs_mult(&Aval[i], &Aval[i], cj);
+ }
+ }
+ *(unsigned char *)equed = 'C';
+ }
+ } else if (colcnd >= THRESH) {
+ /* Row scaling, no column scaling */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ cs_mult(&Aval[i], &Aval[i], r[irow]);
+ }
+ *(unsigned char *)equed = 'R';
+ } else {
+ /* Row and column scaling */
+ for (j = 0; j < A->ncol; ++j) {
+ cj = c[j];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ temp = cj * r[irow];
+ cs_mult(&Aval[i], &Aval[i], temp);
+ }
+ }
+ *(unsigned char *)equed = 'B';
+ }
+
+ return;
+
+} /* claqgs */
+
diff --git a/SuperLU_5.2.0/SRC/cldperm.c b/SuperLU_5.2.0/SRC/cldperm.c
new file mode 100644
index 0000000..2cf8803
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cldperm.c
@@ -0,0 +1,178 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/cmemory.c b/SuperLU_5.2.0/SRC/cmemory.c
new file mode 100644
index 0000000..b41aef2
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cmemory.c
@@ -0,0 +1,710 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file cmemory.c
+ * \brief Memory details
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+#include "slu_cdefs.h"
+
+
+/* Internal prototypes */
+void *cexpand (int *, MemType,int, int, GlobalLU_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, GlobalLU_t *);
+void *cuser_malloc (int, int, GlobalLU_t *);
+void cuser_free (int, int, GlobalLU_t *);
+
+/* External prototypes (in memory.c - prec-independent) */
+extern void copy_mem_int (int, void *, void *);
+extern void user_bcopy (char *, char *, int);
+
+
+/* Macros to manipulate stack */
+#define StackFull(x) ( x + Glu->stack.used >= Glu->stack.size )
+#define NotDoubleAlign(addr) ( (intptr_t)addr & 7 )
+#define DoubleAlign(addr) ( ((intptr_t)addr + 7) & ~7L )
+#define TempSpace(m, w) ( (2*w + 4 + NO_MARKER) * m * sizeof(int) + \
+ (w + 1) * m * sizeof(complex) )
+#define Reduce(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */
+
+
+
+
+/*! \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, GlobalLU_t *Glu)
+{
+ if ( lwork == 0 ) {
+ Glu->MemModel = SYSTEM; /* malloc/free */
+ } else if ( lwork > 0 ) {
+ 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, GlobalLU_t *Glu)
+{
+ void *buf;
+
+ if ( StackFull(bytes) ) return (NULL);
+
+ if ( which_end == HEAD ) {
+ buf = (char*) Glu->stack.array + Glu->stack.top1;
+ Glu->stack.top1 += bytes;
+ } else {
+ Glu->stack.top2 -= bytes;
+ buf = (char*) Glu->stack.array + Glu->stack.top2;
+ }
+
+ Glu->stack.used += bytes;
+ return buf;
+}
+
+
+void cuser_free(int bytes, int which_end, GlobalLU_t *Glu)
+{
+ if ( which_end == HEAD ) {
+ Glu->stack.top1 -= bytes;
+ } else {
+ Glu->stack.top2 += 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.
+ * </pre>
+ */
+int cQuerySpace(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(complex);
+
+ /* For LU factors */
+ 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.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
+ (panel_size + 1.0) * n * dword );
+
+ return 0;
+} /* cQuerySpace */
+
+
+/*! \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, float fill_ratio, SuperMatrix *L, SuperMatrix *U,
+ GlobalLU_t *Glu, int **iwork, complex **dwork)
+{
+ int info, iword, dword;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ complex *lusup;
+ int *xlusup;
+ complex *ucol;
+ int *usub, *xusub;
+ int nzlmax, nzumax, nzlumax;
+
+ iword = sizeof(int);
+ dword = sizeof(complex);
+ Glu->n = n;
+ Glu->num_expansions = 0;
+
+ 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_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);
+ }
+
+#if ( PRNTlevel >= 1 )
+ printf("cLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n",
+ fill_ratio, 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 *)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 );
+ ucol = (complex *) cexpand( &nzumax, UCOL, 0, 0, Glu );
+ lsub = (int *) cexpand( &nzlmax, LSUB, 0, 0, Glu );
+ usub = (int *) cexpand( &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 {
+ cuser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
+ HEAD, Glu);
+ }
+ nzlumax /= 2;
+ nzumax /= 2;
+ nzlmax /= 2;
+ if ( nzlumax < annz ) {
+ printf("Not enough memory to perform factorization.\n");
+ return (cmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
+ }
+#if ( PRNTlevel >= 1)
+ printf("cLUMemInit() reduce size: nzlmax %ld, nzumax %ld\n",
+ nzlmax, nzumax);
+ fflush(stdout);
+#endif
+ lusup = (complex *) cexpand( &nzlumax, LUSUP, 0, 0, Glu );
+ ucol = (complex *) cexpand( &nzumax, UCOL, 0, 0, Glu );
+ lsub = (int *) cexpand( &nzlmax, LSUB, 0, 0, Glu );
+ usub = (int *) cexpand( &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;
+ Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
+ Glu->stack.size = Glu->stack.top2;
+ }
+
+ 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;
+ Glu->supno = supno;
+ Glu->lsub = lsub;
+ Glu->xlsub = xlsub;
+ Glu->lusup = (void *) lusup;
+ Glu->xlusup = xlusup;
+ Glu->ucol = (void *) ucol;
+ Glu->usub = usub;
+ Glu->xusub = xusub;
+ Glu->nzlmax = nzlmax;
+ Glu->nzumax = nzumax;
+ Glu->nzlumax = nzlumax;
+
+ info = cLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
+ if ( info )
+ return ( info + cmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
+
+ ++Glu->num_expansions;
+ return 0;
+
+} /* cLUMemInit */
+
+/*! \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, GlobalLU_t *Glu)
+{
+ int isize, dsize, extra;
+ complex *old_ptr;
+ 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 ( Glu->MemModel == SYSTEM )
+ *iworkptr = (int *) intCalloc(isize/sizeof(int));
+ else
+ *iworkptr = (int *) cuser_malloc(isize, TAIL, Glu);
+ if ( ! *iworkptr ) {
+ fprintf(stderr, "cLUWorkInit: malloc fails for local iworkptr[]\n");
+ return (isize + n);
+ }
+
+ if ( Glu->MemModel == SYSTEM )
+ *dworkptr = (complex *) SUPERLU_MALLOC(dsize);
+ else {
+ *dworkptr = (complex *) cuser_malloc(dsize, TAIL, Glu);
+ if ( NotDoubleAlign(*dworkptr) ) {
+ old_ptr = *dworkptr;
+ *dworkptr = (complex*) DoubleAlign(*dworkptr);
+ *dworkptr = (complex*) ((double*)*dworkptr - 1);
+ extra = (char*)old_ptr - (char*)*dworkptr;
+#ifdef DEBUG
+ printf("cLUWorkInit: not aligned, extra %d\n", extra);
+#endif
+ Glu->stack.top2 -= extra;
+ Glu->stack.used += extra;
+ }
+ }
+ if ( ! *dworkptr ) {
+ fprintf(stderr, "malloc fails for local dworkptr[].");
+ return (isize + dsize + n);
+ }
+
+ return 0;
+}
+
+
+/*! \brief Set up pointers for real working arrays.
+ */
+void
+cSetRWork(int m, int panel_size, complex *dworkptr,
+ complex **dense, complex **tempv)
+{
+ complex zero = {0.0, 0.0};
+
+ int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
+ rowblk = sp_ienv(4);
+ *dense = dworkptr;
+ *tempv = *dense + panel_size*m;
+ cfill (*dense, m * panel_size, zero);
+ cfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);
+}
+
+/*! \brief Free the working storage used by factor routines.
+ */
+void cLUWorkFree(int *iwork, complex *dwork, GlobalLU_t *Glu)
+{
+ if ( Glu->MemModel == SYSTEM ) {
+ SUPERLU_FREE (iwork);
+ SUPERLU_FREE (dwork);
+ } else {
+ Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
+ Glu->stack.top2 = Glu->stack.size;
+/* cStackCompress(Glu); */
+ }
+
+ SUPERLU_FREE (Glu->expanders);
+ Glu->expanders = NULL;
+}
+
+/*! \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,
+ 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("cLUMemXpand(): jcol %d, next %d, maxlen %d, MemType %d\n",
+ jcol, next, *maxlen, mem_type);
+#endif
+
+ if (mem_type == USUB)
+ new_mem = cexpand(maxlen, mem_type, next, 1, Glu);
+ else
+ new_mem = cexpand(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 (cmemory_usage(nzlmax, nzumax, nzlumax, Glu->n) + Glu->n);
+ }
+
+ switch ( mem_type ) {
+ case LUSUP:
+ Glu->lusup = (void *) new_mem;
+ Glu->nzlumax = *maxlen;
+ break;
+ case UCOL:
+ Glu->ucol = (void *) 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_complex(int howmany, void *old, void *new)
+{
+ register int i;
+ complex *dold = old;
+ complex *dnew = new;
+ for (i = 0; i < howmany; i++) dnew[i] = dold[i];
+}
+
+/*! \brief Expand the existing storage to accommodate more fill-ins.
+ */
+void
+*cexpand (
+ 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;
+ ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
+
+ alpha = EXPAND;
+
+ if ( Glu->num_expansions == 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(complex);
+
+ if ( Glu->MemModel == SYSTEM ) {
+ new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
+ if ( Glu->num_expansions != 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((size_t)new_len * lword);
+ }
+ }
+ if ( type == LSUB || type == USUB ) {
+ copy_mem_int(len_to_copy, expanders[type].mem, new_mem);
+ } else {
+ copy_mem_complex(len_to_copy, expanders[type].mem, new_mem);
+ }
+ SUPERLU_FREE (expanders[type].mem);
+ }
+ expanders[type].mem = (void *) new_mem;
+
+ } else { /* MemModel == USER */
+ 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;
+ new_mem = (void *)DoubleAlign(new_mem);
+ extra = (char*)new_mem - (char*)old_mem;
+#ifdef DEBUG
+ printf("expand(): not aligned, extra %d\n", extra);
+#endif
+ Glu->stack.top1 += extra;
+ Glu->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*)Glu->stack.array + Glu->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);
+ }
+ Glu->stack.top1 += extra;
+ Glu->stack.used += extra;
+ if ( type == UCOL ) {
+ Glu->stack.top1 += extra; /* Add same amount for USUB */
+ Glu->stack.used += extra;
+ }
+
+ } /* if ... */
+
+ } /* else ... */
+ }
+
+ expanders[type].size = new_len;
+ *prev_len = new_len;
+ if ( Glu->num_expansions ) ++Glu->num_expansions;
+
+ return (void *) expanders[type].mem;
+
+} /* cexpand */
+
+
+/*! \brief Compress the work[] array to remove fragmentation.
+ */
+void
+cStackCompress(GlobalLU_t *Glu)
+{
+ register int iword, dword, ndim;
+ char *last, *fragment;
+ int *ifrom, *ito;
+ complex *dfrom, *dto;
+ int *xlsub, *lsub, *xusub, *usub, *xlusup;
+ complex *ucol, *lusup;
+
+ iword = sizeof(int);
+ dword = sizeof(complex);
+ 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 = (complex *)((char*)lusup + xlusup[ndim] * dword);
+ copy_mem_complex(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*)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;
+ Glu->usub = usub;
+
+#ifdef DEBUG
+ printf("cStackCompress: fragment %d\n", fragment);
+ /* for (last = 0; last < ndim; ++last)
+ print_lu_col("After compress:", last, 0);*/
+#endif
+
+}
+
+/*! \brief Allocate storage for original matrix A
+ */
+void
+callocateA(int n, int nnz, complex **a, int **asub, int **xa)
+{
+ *a = (complex *) complexMalloc(nnz);
+ *asub = (int *) intMalloc(nnz);
+ *xa = (int *) intMalloc(n+1);
+}
+
+
+complex *complexMalloc(int n)
+{
+ complex *buf;
+ buf = (complex *) SUPERLU_MALLOC((size_t)n * sizeof(complex));
+ if ( !buf ) {
+ ABORT("SUPERLU_MALLOC failed for buf in complexMalloc()\n");
+ }
+ return (buf);
+}
+
+complex *complexCalloc(int n)
+{
+ complex *buf;
+ register int i;
+ complex zero = {0.0, 0.0};
+ buf = (complex *) SUPERLU_MALLOC((size_t)n * sizeof(complex));
+ if ( !buf ) {
+ ABORT("SUPERLU_MALLOC failed for buf in complexCalloc()\n");
+ }
+ for (i = 0; i < n; ++i) buf[i] = zero;
+ return (buf);
+}
+
+
+int cmemory_usage(const int nzlmax, const int nzumax,
+ const int nzlumax, const int n)
+{
+ register int iword, dword;
+
+ iword = sizeof(int);
+ dword = sizeof(complex);
+
+ return (10 * n * iword +
+ nzlmax * iword + nzumax * (iword + dword) + nzlumax * dword);
+
+}
diff --git a/SuperLU_5.2.0/SRC/cmyblas2.c b/SuperLU_5.2.0/SRC/cmyblas2.c
new file mode 100644
index 0000000..094138b
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cmyblas2.c
@@ -0,0 +1,198 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * </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"
+
+/*! \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.
+ */
+void clsolve ( int ldm, int ncol, complex *M, complex *rhs )
+{
+ int k;
+ complex x0, x1, x2, x3, temp;
+ complex *M0;
+ complex *Mki0, *Mki1, *Mki2, *Mki3;
+ register int firstcol = 0;
+
+ M0 = &M[0];
+
+
+ while ( firstcol < ncol - 3 ) { /* Do 4 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+ Mki2 = Mki1 + ldm + 1;
+ Mki3 = Mki2 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ cc_mult(&temp, &x0, Mki0); Mki0++;
+ c_sub(&x1, &rhs[firstcol+1], &temp);
+ cc_mult(&temp, &x0, Mki0); Mki0++;
+ c_sub(&x2, &rhs[firstcol+2], &temp);
+ cc_mult(&temp, &x1, Mki1); Mki1++;
+ c_sub(&x2, &x2, &temp);
+ cc_mult(&temp, &x0, Mki0); Mki0++;
+ c_sub(&x3, &rhs[firstcol+3], &temp);
+ cc_mult(&temp, &x1, Mki1); Mki1++;
+ c_sub(&x3, &x3, &temp);
+ cc_mult(&temp, &x2, Mki2); Mki2++;
+ c_sub(&x3, &x3, &temp);
+
+ rhs[++firstcol] = x1;
+ rhs[++firstcol] = x2;
+ rhs[++firstcol] = x3;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++) {
+ cc_mult(&temp, &x0, Mki0); Mki0++;
+ c_sub(&rhs[k], &rhs[k], &temp);
+ cc_mult(&temp, &x1, Mki1); Mki1++;
+ c_sub(&rhs[k], &rhs[k], &temp);
+ cc_mult(&temp, &x2, Mki2); Mki2++;
+ c_sub(&rhs[k], &rhs[k], &temp);
+ cc_mult(&temp, &x3, Mki3); Mki3++;
+ c_sub(&rhs[k], &rhs[k], &temp);
+ }
+
+ M0 += 4 * ldm + 4;
+ }
+
+ if ( firstcol < ncol - 1 ) { /* Do 2 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ cc_mult(&temp, &x0, Mki0); Mki0++;
+ c_sub(&x1, &rhs[firstcol+1], &temp);
+
+ rhs[++firstcol] = x1;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++) {
+ cc_mult(&temp, &x0, Mki0); Mki0++;
+ c_sub(&rhs[k], &rhs[k], &temp);
+ cc_mult(&temp, &x1, Mki1); Mki1++;
+ c_sub(&rhs[k], &rhs[k], &temp);
+ }
+ }
+
+}
+
+/*! \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.
+ */
+void
+cusolve ( ldm, ncol, M, rhs )
+int ldm; /* in */
+int ncol; /* in */
+complex *M; /* in */
+complex *rhs; /* modified */
+{
+ complex xj, temp;
+ int jcol, j, irow;
+
+ jcol = ncol - 1;
+
+ for (j = 0; j < ncol; j++) {
+
+ c_div(&xj, &rhs[jcol], &M[jcol + jcol*ldm]); /* M(jcol, jcol) */
+ rhs[jcol] = xj;
+
+ for (irow = 0; irow < jcol; irow++) {
+ cc_mult(&temp, &xj, &M[irow+jcol*ldm]); /* M(irow, jcol) */
+ c_sub(&rhs[irow], &rhs[irow], &temp);
+ }
+
+ jcol--;
+
+ }
+}
+
+
+/*! \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 )
+int ldm; /* in -- leading dimension of M */
+int nrow; /* in */
+int ncol; /* in */
+complex *M; /* in */
+complex *vec; /* in */
+complex *Mxvec; /* in/out */
+{
+ complex vi0, vi1, vi2, vi3;
+ complex *M0, temp;
+ complex *Mki0, *Mki1, *Mki2, *Mki3;
+ register int firstcol = 0;
+ int k;
+
+ M0 = &M[0];
+
+ while ( firstcol < ncol - 3 ) { /* Do 4 columns */
+ Mki0 = M0;
+ Mki1 = Mki0 + ldm;
+ Mki2 = Mki1 + ldm;
+ Mki3 = Mki2 + ldm;
+
+ vi0 = vec[firstcol++];
+ vi1 = vec[firstcol++];
+ vi2 = vec[firstcol++];
+ vi3 = vec[firstcol++];
+ for (k = 0; k < nrow; k++) {
+ cc_mult(&temp, &vi0, Mki0); Mki0++;
+ c_add(&Mxvec[k], &Mxvec[k], &temp);
+ cc_mult(&temp, &vi1, Mki1); Mki1++;
+ c_add(&Mxvec[k], &Mxvec[k], &temp);
+ cc_mult(&temp, &vi2, Mki2); Mki2++;
+ c_add(&Mxvec[k], &Mxvec[k], &temp);
+ cc_mult(&temp, &vi3, Mki3); Mki3++;
+ c_add(&Mxvec[k], &Mxvec[k], &temp);
+ }
+
+ M0 += 4 * ldm;
+ }
+
+ while ( firstcol < ncol ) { /* Do 1 column */
+ Mki0 = M0;
+ vi0 = vec[firstcol++];
+ for (k = 0; k < nrow; k++) {
+ cc_mult(&temp, &vi0, Mki0); Mki0++;
+ c_add(&Mxvec[k], &Mxvec[k], &temp);
+ }
+ M0 += ldm;
+ }
+
+}
+
diff --git a/SuperLU_5.2.0/SRC/colamd.c b/SuperLU_5.2.0/SRC/colamd.c
new file mode 100644
index 0000000..5500e68
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/colamd.c
@@ -0,0 +1,3424 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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
+ linear programming problems, and other related problems.
+
+ symamd: an approximate minimum degree ordering algorithm for Cholesky
+ factorization of symmetric matrices.
+
+ 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 built-in function in MATLAB Version 6,
+ available from MathWorks, Inc. (http://www.mathworks.com). This
+ routine can be used in place of colmmd in MATLAB.
+
+ 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.
+
+ 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:
+
+ September 8, 2003. Version 2.3.
+
+ Acknowledgements:
+
+ This work was supported by the National Science Foundation, under
+ grants DMS-9504974 and DMS-9803599.
+
+ Copyright and License:
+
+ Copyright (c) 1998-2003 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, 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.
+
+ Availability:
+
+ The colamd/symamd library is available at
+
+ http://www.cise.ufl.edu/research/sparse/colamd/
+
+ This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.c
+ file. It requires the colamd.h file. It is required by the colamdmex.c
+ and symamdmex.c files, for the MATLAB interface to colamd and symamd.
+
+ See the ChangeLog file for changes since Version 1.0.
+
+ ==========================================================================
+ === Description of user-callable routines ================================
+ ==========================================================================
+
+
+ ----------------------------------------------------------------------------
+ colamd_recommended:
+ ----------------------------------------------------------------------------
+
+ C syntax:
+
+ #include "colamd.h"
+ int colamd_recommended (int nnz, int n_row, int n_col) ;
+
+ or as a C macro
+
+ #include "colamd.h"
+ Alen = COLAMD_RECOMMENDED (int nnz, int n_row, int n_col) ;
+
+ Purpose:
+
+ 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.
+
+ Arguments (all input 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:
+ ----------------------------------------------------------------------------
+
+ C syntax:
+
+ #include "colamd.h"
+ colamd_set_defaults (double knobs [COLAMD_KNOBS]) ;
+
+ Purpose:
+
+ Sets the default parameters. The use of this routine is optional.
+
+ Arguments:
+
+ double knobs [COLAMD_KNOBS] ; Output only.
+
+ 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.
+
+ 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.
+
+ COLAMD_DENSE_ROW and COLAMD_DENSE_COL are defined as 0 and 1,
+ respectively, in colamd.h. 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.
+
+ ----------------------------------------------------------------------------
+ colamd:
+ ----------------------------------------------------------------------------
+
+ C syntax:
+
+ #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]) ;
+
+ 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.
+
+ Returns:
+
+ TRUE (1) if successful, FALSE (0) otherwise.
+
+ Arguments:
+
+ int n_row ; Input argument.
+
+ Number of rows in the matrix A.
+ Restriction: n_row >= 0.
+ Colamd returns FALSE if n_row is negative.
+
+ int n_col ; Input argument.
+
+ Number of columns in the matrix A.
+ Restriction: n_col >= 0.
+ Colamd returns FALSE if n_col is negative.
+
+ int Alen ; Input argument.
+
+ 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.
+
+ Note: this restriction makes an modest assumption regarding
+ the size of the two typedef's structures in colamd.h.
+ We do, however, guarantee that
+
+ Alen >= colamd_recommended (nnz, n_row, n_col)
+
+ or equivalently as a C preprocessor macro:
+
+ Alen >= COLAMD_RECOMMENDED (nnz, n_row, n_col)
+
+ will be sufficient.
+
+ int A [Alen] ; Input argument, undefined 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
+ undefined on output.
+
+ 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 argument.
+
+ See colamd_set_defaults for a description.
+
+ int stats [COLAMD_STATS] ; Output argument.
+
+ Statistics on the ordering, and error status.
+ See colamd.h for related definitions.
+ Colamd returns FALSE if stats is not present.
+
+ stats [0]: number of dense or empty rows ignored.
+
+ 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.
+
+ stats [2]: number of garbage collections performed.
+ This can be excessively high if Alen is close
+ to the minimum required value.
+
+ stats [3]: status code. < 0 is an error code.
+ > 1 is a warning or notice.
+
+ 0 OK. Each column of the input matrix contained
+ row indices in increasing order, with no
+ duplicates.
+
+ 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).
+
+ 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.
+
+ -1 A is a null pointer
+
+ -2 p is a null pointer
+
+ -3 n_row is negative
+
+ stats [4]: n_row
+
+ -4 n_col is negative
+
+ stats [4]: n_col
+
+ -5 number of nonzeros in matrix is negative
+
+ stats [4]: number of nonzeros, p [n_col]
+
+ -6 p [0] is nonzero
+
+ stats [4]: p [0]
+
+ -7 A is too small
+
+ stats [4]: required size
+ stats [5]: actual size (Alen)
+
+ -8 a column has a negative number of entries
+
+ stats [4]: column with < 0 entries
+ stats [5]: number of entries in col
+
+ -9 a row index is out of bounds
+
+ stats [4]: column with bad row index
+ stats [5]: bad row index
+ stats [6]: n_row, # of rows of matrx
+
+ -10 (unused; see symamd.c)
+
+ -999 (unused; see symamd.c)
+
+ Future versions may return more statistics in the stats array.
+
+ Example:
+
+ See http://www.cise.ufl.edu/research/sparse/colamd/example.c
+ for a complete example.
+
+ To order the columns of a 5-by-4 matrix with 11 nonzero entries in
+ the following nonzero pattern
+
+ x 0 x 0
+ x 0 x x
+ 0 x x 0
+ 0 0 x x
+ x x 0 0
+
+ with default knobs and no output statistics, do the following:
+
+ #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) ;
+
+ The permutation is returned in the array p, and A is destroyed.
+
+ ----------------------------------------------------------------------------
+ symamd:
+ ----------------------------------------------------------------------------
+
+ C syntax:
+
+ #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 *)) ;
+
+ Purpose:
+
+ 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.
+
+ Returns:
+
+ TRUE (1) if successful, FALSE (0) otherwise.
+
+ Arguments:
+
+ int n ; Input argument.
+
+ Number of rows and columns in the symmetrix matrix A.
+ Restriction: n >= 0.
+ Symamd returns FALSE if n is negative.
+
+ int A [nnz] ; Input argument.
+
+ A is an integer array of size nnz, where nnz = p [n].
+
+ 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.
+
+ 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.
+
+ The contents of A are not modified.
+
+ int p [n+1] ; Input argument.
+
+ 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.
+
+ The contents of p are not modified.
+
+ int perm [n+1] ; Output argument.
+
+ 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.
+
+ double knobs [COLAMD_KNOBS] ; Input argument.
+
+ See colamd_set_defaults for a description.
+
+ int stats [COLAMD_STATS] ; Output argument.
+
+ Statistics on the ordering, and error status.
+ See colamd.h for related definitions.
+ Symamd returns FALSE if stats is not present.
+
+ 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.
+
+ stats [1]: (same as stats [0])
+
+ stats [2]: number of garbage collections performed.
+
+ stats [3]: status code. < 0 is an error code.
+ > 1 is a warning or notice.
+
+ 0 OK. Each column of the input matrix contained
+ row indices in increasing order, with no
+ duplicates.
+
+ 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).
+
+ 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.
+
+ -1 A is a null pointer
+
+ -2 p is a null pointer
+
+ -3 (unused, see colamd.c)
+
+ -4 n is negative
+
+ stats [4]: n
+
+ -5 number of nonzeros in matrix is negative
+
+ stats [4]: # of nonzeros (p [n]).
+
+ -6 p [0] is nonzero
+
+ stats [4]: p [0]
+
+ -7 (unused)
+
+ -8 a column has a negative number of entries
+
+ stats [4]: column with < 0 entries
+ stats [5]: number of entries in col
+
+ -9 a row index is out of bounds
+
+ stats [4]: column with bad row index
+ stats [5]: bad row index
+ stats [6]: n_row, # of rows of matrx
+
+ -10 out of memory (unable to allocate temporary
+ workspace for M or count arrays using the
+ "allocate" routine passed into symamd).
+
+ -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.
+
+ Future versions may return more statistics in the stats array.
+
+ void * (*allocate) (size_t, size_t)
+
+ 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.
+
+ void (*release) (size_t, size_t)
+
+ 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.
+
+
+ ----------------------------------------------------------------------------
+ colamd_report:
+ ----------------------------------------------------------------------------
+
+ C syntax:
+
+ #include "colamd.h"
+ colamd_report (int stats [COLAMD_STATS]) ;
+
+ Purpose:
+
+ 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).
+
+ Arguments:
+
+ int stats [COLAMD_STATS] ; Input only. Statistics from colamd.
+
+
+ ----------------------------------------------------------------------------
+ symamd_report:
+ ----------------------------------------------------------------------------
+
+ C syntax:
+
+ #include "colamd.h"
+ symamd_report (int stats [COLAMD_STATS]) ;
+
+ Purpose:
+
+ 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).
+
+ Arguments:
+
+ int stats [COLAMD_STATS] ; Input only. Statistics from symamd.
+
+ </pre>
+*/
+
+/* ========================================================================== */
+/* === Scaffolding code definitions ======================================== */
+/* ========================================================================== */
+
+/* Ensure that debugging is turned off: */
+#ifndef NDEBUG
+#define NDEBUG
+#endif /* NDEBUG */
+
+/*
+ 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. For a MATLAB
+ mexFunction, you will also need to modify mexopts.sh to remove the -DNDEBUG
+ definition. 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). When debugging,
+ you should see the following message on the standard output:
+
+ colamd: debug version, D = 1 (THIS WILL BE SLOW!)
+
+ or a similar message for symamd. If you don't, then debugging has not
+ been enabled.
+
+*/
+
+/* ========================================================================== */
+/* === Include files ======================================================== */
+/* ========================================================================== */
+
+#include "colamd.h"
+#include <limits.h>
+
+#ifdef MATLAB_MEX_FILE
+#include "mex.h"
+#include "matrix.h"
+#else
+#include <stdio.h>
+#include <assert.h>
+#endif /* MATLAB_MEX_FILE */
+
+/* ========================================================================== */
+/* === Definitions ========================================================== */
+/* ========================================================================== */
+
+/* Routines are either PUBLIC (user-callable) or PRIVATE (not user-callable) */
+#define PUBLIC
+#define PRIVATE static
+
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+
+#define ONES_COMPLEMENT(r) (-(r)-1)
+
+/* -------------------------------------------------------------------------- */
+/* Change for version 2.1: define TRUE and FALSE only if not yet defined */
+/* -------------------------------------------------------------------------- */
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+/* -------------------------------------------------------------------------- */
+
+#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 ; }
+
+/* ========================================================================== */
+/* === Colamd reporting mechanism =========================================== */
+/* ========================================================================== */
+
+#ifdef MATLAB_MEX_FILE
+
+/* use mexPrintf in a MATLAB mexFunction, for debugging and statistics output */
+#define PRINTF mexPrintf
+
+/* In MATLAB, matrices are 1-based to the user, but 0-based internally */
+#define INDEX(i) ((i)+1)
+
+#else
+
+/* Use printf in standard C environment, for debugging and statistics output. */
+/* Output is generated only if debugging is enabled at compile time, or if */
+/* the caller explicitly calls colamd_report or symamd_report. */
+#define PRINTF printf
+
+/* In C, matrices are 0-based and indices are reported as such in *_report */
+#define INDEX(i) (i)
+
+#endif /* MATLAB_MEX_FILE */
+
+/* ========================================================================== */
+/* === Prototypes of PRIVATE routines ======================================= */
+/* ========================================================================== */
+
+PRIVATE int init_rows_cols
+(
+ int n_row,
+ int n_col,
+ Colamd_Row Row [],
+ Colamd_Col Col [],
+ int A [],
+ int p [],
+ int stats [COLAMD_STATS]
+) ;
+
+PRIVATE void init_scoring
+(
+ 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
+) ;
+
+PRIVATE int find_ordering
+(
+ 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
+) ;
+
+PRIVATE void order_children
+(
+ int n_col,
+ Colamd_Col Col [],
+ int p []
+) ;
+
+PRIVATE void detect_super_cols
+(
+
+#ifndef NDEBUG
+ int n_col,
+ Colamd_Row Row [],
+#endif /* NDEBUG */
+
+ Colamd_Col Col [],
+ int A [],
+ int head [],
+ int row_start,
+ int row_length
+) ;
+
+PRIVATE int garbage_collection
+(
+ int n_row,
+ int n_col,
+ Colamd_Row Row [],
+ Colamd_Col Col [],
+ int A [],
+ int *pfree
+) ;
+
+PRIVATE int clear_mark
+(
+ int n_row,
+ Colamd_Row Row []
+) ;
+
+PRIVATE void print_report
+(
+ char *method,
+ int stats [COLAMD_STATS]
+) ;
+
+/* ========================================================================== */
+/* === Debugging prototypes and definitions ================================= */
+/* ========================================================================== */
+
+#ifndef NDEBUG
+
+/* colamd_debug is the *ONLY* global variable, and is only */
+/* present when debugging */
+
+PRIVATE int colamd_debug ; /* debug print level */
+
+#define DEBUG0(params) { (void) PRINTF params ; }
+#define DEBUG1(params) { if (colamd_debug >= 1) (void) PRINTF params ; }
+#define DEBUG2(params) { if (colamd_debug >= 2) (void) PRINTF params ; }
+#define DEBUG3(params) { if (colamd_debug >= 3) (void) PRINTF params ; }
+#define DEBUG4(params) { if (colamd_debug >= 4) (void) PRINTF params ; }
+
+#ifdef MATLAB_MEX_FILE
+#define ASSERT(expression) (mxAssert ((expression), ""))
+#else
+#define ASSERT(expression) (assert (expression))
+#endif /* MATLAB_MEX_FILE */
+
+PRIVATE void colamd_get_debug /* gets the debug print level from getenv */
+(
+ char *method
+) ;
+
+PRIVATE void debug_deg_lists
+(
+ int n_row,
+ int n_col,
+ Colamd_Row Row [],
+ Colamd_Col Col [],
+ int head [],
+ int min_score,
+ int should,
+ int max_deg
+) ;
+
+PRIVATE void debug_mark
+(
+ int n_row,
+ Colamd_Row Row [],
+ int tag_mark,
+ int max_mark
+) ;
+
+PRIVATE void debug_matrix
+(
+ int n_row,
+ int n_col,
+ Colamd_Row Row [],
+ Colamd_Col Col [],
+ int A []
+) ;
+
+PRIVATE void debug_structures
+(
+ int n_row,
+ int n_col,
+ Colamd_Row Row [],
+ Colamd_Col Col [],
+ int A [],
+ int n_col2
+) ;
+
+#else /* NDEBUG */
+
+/* === No debugging ========================================================= */
+
+#define DEBUG0(params) ;
+#define DEBUG1(params) ;
+#define DEBUG2(params) ;
+#define DEBUG3(params) ;
+#define DEBUG4(params) ;
+
+#define ASSERT(expression) ((void) 0)
+
+#endif /* NDEBUG */
+
+/* ========================================================================== */
+
+
+
+/* ========================================================================== */
+/* === 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. If any
+ argument is negative, a -1 is returned as an error condition. This
+ function is also available as a macro defined in colamd.h, so that you
+ can use it for a statically-allocated array size.
+*/
+
+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 */
+)
+{
+ return (COLAMD_RECOMMENDED (nnz, n_row, n_col)) ;
+}
+
+
+/* ========================================================================== */
+/* === 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 in colamd. Rows and columns with
+ knobs[0]*n_col entries or more are removed prior to
+ ordering in symamd and placed last in the output
+ ordering.
+
+ knobs [1] columns with knobs[1]*n_row entries or more are removed
+ prior to ordering in colamd, and placed last in the
+ column permutation. Symamd ignores this knob.
+
+ 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 */
+}
+
+
+/* ========================================================================== */
+/* === symamd =============================================================== */
+/* ========================================================================== */
+
+PUBLIC int symamd /* return TRUE if OK, FALSE otherwise */
+(
+ /* === Parameters ======================================================= */
+
+ int n, /* number of rows and columns of A */
+ int A [], /* row indices of A */
+ int p [], /* column pointers of A */
+ int perm [], /* output permutation, size n+1 */
+ double knobs [COLAMD_KNOBS], /* parameters (uses defaults if NULL) */
+ int stats [COLAMD_STATS], /* output statistics and error codes */
+ void * (*allocate) (size_t, size_t),
+ /* pointer to calloc (ANSI C) or */
+ /* mxCalloc (for MATLAB mexFunction) */
+ void (*release) (void *)
+ /* pointer to free (ANSI C) or */
+ /* mxFree (for MATLAB mexFunction) */
+)
+{
+ /* === Local variables ================================================== */
+
+ int *count ; /* length of each column of M, and col pointer*/
+ int *mark ; /* mark array for finding duplicate entries */
+ int *M ; /* row indices of matrix M */
+ int Mlen ; /* length of M */
+ int n_row ; /* number of rows in M */
+ int nnz ; /* number of entries in A */
+ int i ; /* row index of A */
+ int j ; /* column index of A */
+ int k ; /* row index of M */
+ int mnz ; /* number of nonzeros in M */
+ int pp ; /* index into a column of A */
+ int last_row ; /* last row seen in the current column */
+ int length ; /* number of nonzeros in a column */
+
+ double cknobs [COLAMD_KNOBS] ; /* knobs for colamd */
+ double default_knobs [COLAMD_KNOBS] ; /* default knobs for colamd */
+ int cstats [COLAMD_STATS] ; /* colamd stats */
+
+#ifndef NDEBUG
+ colamd_get_debug ("symamd") ;
+#endif /* NDEBUG */
+
+ /* === Check the input arguments ======================================== */
+
+ if (!stats)
+ {
+ DEBUG0 (("symamd: stats not present\n")) ;
+ return (FALSE) ;
+ }
+ for (i = 0 ; i < COLAMD_STATS ; i++)
+ {
+ stats [i] = 0 ;
+ }
+ stats [COLAMD_STATUS] = COLAMD_OK ;
+ stats [COLAMD_INFO1] = -1 ;
+ stats [COLAMD_INFO2] = -1 ;
+
+ if (!A)
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_A_not_present ;
+ DEBUG0 (("symamd: A not present\n")) ;
+ return (FALSE) ;
+ }
+
+ if (!p) /* p is not present */
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_p_not_present ;
+ DEBUG0 (("symamd: p not present\n")) ;
+ return (FALSE) ;
+ }
+
+ if (n < 0) /* n must be >= 0 */
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_ncol_negative ;
+ stats [COLAMD_INFO1] = n ;
+ DEBUG0 (("symamd: n negative %d\n", n)) ;
+ return (FALSE) ;
+ }
+
+ nnz = p [n] ;
+ if (nnz < 0) /* nnz must be >= 0 */
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_nnz_negative ;
+ stats [COLAMD_INFO1] = nnz ;
+ DEBUG0 (("symamd: number of entries negative %d\n", nnz)) ;
+ return (FALSE) ;
+ }
+
+ if (p [0] != 0)
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_p0_nonzero ;
+ stats [COLAMD_INFO1] = p [0] ;
+ DEBUG0 (("symamd: p[0] not zero %d\n", p [0])) ;
+ return (FALSE) ;
+ }
+
+ /* === If no knobs, set default knobs =================================== */
+
+ if (!knobs)
+ {
+ colamd_set_defaults (default_knobs) ;
+ knobs = default_knobs ;
+ }
+
+ /* === Allocate count and mark ========================================== */
+
+ count = (int *) ((*allocate) (n+1, sizeof (int))) ;
+ if (!count)
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_out_of_memory ;
+ DEBUG0 (("symamd: allocate count (size %d) failed\n", n+1)) ;
+ return (FALSE) ;
+ }
+
+ mark = (int *) ((*allocate) (n+1, sizeof (int))) ;
+ if (!mark)
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_out_of_memory ;
+ (*release) ((void *) count) ;
+ DEBUG0 (("symamd: allocate mark (size %d) failed\n", n+1)) ;
+ return (FALSE) ;
+ }
+
+ /* === Compute column counts of M, check if A is valid ================== */
+
+ stats [COLAMD_INFO3] = 0 ; /* number of duplicate or unsorted row indices*/
+
+ for (i = 0 ; i < n ; i++)
+ {
+ mark [i] = -1 ;
+ }
+
+ for (j = 0 ; j < n ; j++)
+ {
+ last_row = -1 ;
+
+ length = p [j+1] - p [j] ;
+ if (length < 0)
+ {
+ /* column pointers must be non-decreasing */
+ stats [COLAMD_STATUS] = COLAMD_ERROR_col_length_negative ;
+ stats [COLAMD_INFO1] = j ;
+ stats [COLAMD_INFO2] = length ;
+ (*release) ((void *) count) ;
+ (*release) ((void *) mark) ;
+ DEBUG0 (("symamd: col %d negative length %d\n", j, length)) ;
+ return (FALSE) ;
+ }
+
+ for (pp = p [j] ; pp < p [j+1] ; pp++)
+ {
+ i = A [pp] ;
+ if (i < 0 || i >= n)
+ {
+ /* row index i, in column j, is out of bounds */
+ stats [COLAMD_STATUS] = COLAMD_ERROR_row_index_out_of_bounds ;
+ stats [COLAMD_INFO1] = j ;
+ stats [COLAMD_INFO2] = i ;
+ stats [COLAMD_INFO3] = n ;
+ (*release) ((void *) count) ;
+ (*release) ((void *) mark) ;
+ DEBUG0 (("symamd: row %d col %d out of bounds\n", i, j)) ;
+ return (FALSE) ;
+ }
+
+ if (i <= last_row || mark [i] == j)
+ {
+ /* row index is unsorted or repeated (or both), thus col */
+ /* is jumbled. This is a notice, not an error condition. */
+ stats [COLAMD_STATUS] = COLAMD_OK_BUT_JUMBLED ;
+ stats [COLAMD_INFO1] = j ;
+ stats [COLAMD_INFO2] = i ;
+ (stats [COLAMD_INFO3]) ++ ;
+ DEBUG1 (("symamd: row %d col %d unsorted/duplicate\n", i, j)) ;
+ }
+
+ if (i > j && mark [i] != j)
+ {
+ /* row k of M will contain column indices i and j */
+ count [i]++ ;
+ count [j]++ ;
+ }
+
+ /* mark the row as having been seen in this column */
+ mark [i] = j ;
+
+ last_row = i ;
+ }
+ }
+
+ if (stats [COLAMD_STATUS] == COLAMD_OK)
+ {
+ /* if there are no duplicate entries, then mark is no longer needed */
+ (*release) ((void *) mark) ;
+ }
+
+ /* === Compute column pointers of M ===================================== */
+
+ /* use output permutation, perm, for column pointers of M */
+ perm [0] = 0 ;
+ for (j = 1 ; j <= n ; j++)
+ {
+ perm [j] = perm [j-1] + count [j-1] ;
+ }
+ for (j = 0 ; j < n ; j++)
+ {
+ count [j] = perm [j] ;
+ }
+
+ /* === Construct M ====================================================== */
+
+ mnz = perm [n] ;
+ n_row = mnz / 2 ;
+ Mlen = colamd_recommended (mnz, n_row, n) ;
+ M = (int *) ((*allocate) (Mlen, sizeof (int))) ;
+ DEBUG0 (("symamd: M is %d-by-%d with %d entries, Mlen = %d\n",
+ n_row, n, mnz, Mlen)) ;
+
+ if (!M)
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_out_of_memory ;
+ (*release) ((void *) count) ;
+ (*release) ((void *) mark) ;
+ DEBUG0 (("symamd: allocate M (size %d) failed\n", Mlen)) ;
+ return (FALSE) ;
+ }
+
+ k = 0 ;
+
+ if (stats [COLAMD_STATUS] == COLAMD_OK)
+ {
+ /* Matrix is OK */
+ for (j = 0 ; j < n ; j++)
+ {
+ ASSERT (p [j+1] - p [j] >= 0) ;
+ for (pp = p [j] ; pp < p [j+1] ; pp++)
+ {
+ i = A [pp] ;
+ ASSERT (i >= 0 && i < n) ;
+ if (i > j)
+ {
+ /* row k of M contains column indices i and j */
+ M [count [i]++] = k ;
+ M [count [j]++] = k ;
+ k++ ;
+ }
+ }
+ }
+ }
+ else
+ {
+ /* Matrix is jumbled. Do not add duplicates to M. Unsorted cols OK. */
+ DEBUG0 (("symamd: Duplicates in A.\n")) ;
+ for (i = 0 ; i < n ; i++)
+ {
+ mark [i] = -1 ;
+ }
+ for (j = 0 ; j < n ; j++)
+ {
+ ASSERT (p [j+1] - p [j] >= 0) ;
+ for (pp = p [j] ; pp < p [j+1] ; pp++)
+ {
+ i = A [pp] ;
+ ASSERT (i >= 0 && i < n) ;
+ if (i > j && mark [i] != j)
+ {
+ /* row k of M contains column indices i and j */
+ M [count [i]++] = k ;
+ M [count [j]++] = k ;
+ k++ ;
+ mark [i] = j ;
+ }
+ }
+ }
+ (*release) ((void *) mark) ;
+ }
+
+ /* count and mark no longer needed */
+ (*release) ((void *) count) ;
+ ASSERT (k == n_row) ;
+
+ /* === Adjust the knobs for M =========================================== */
+
+ for (i = 0 ; i < COLAMD_KNOBS ; i++)
+ {
+ cknobs [i] = knobs [i] ;
+ }
+
+ /* there are no dense rows in M */
+ cknobs [COLAMD_DENSE_ROW] = 1.0 ;
+
+ if (n_row != 0 && n < n_row)
+ {
+ /* On input, the knob is a fraction of 1..n, the number of rows of A. */
+ /* Convert it to a fraction of 1..n_row, of the number of rows of M. */
+ cknobs [COLAMD_DENSE_COL] = (knobs [COLAMD_DENSE_ROW] * n) / n_row ;
+ }
+ else
+ {
+ /* no dense columns in M */
+ cknobs [COLAMD_DENSE_COL] = 1.0 ;
+ }
+
+ DEBUG0 (("symamd: dense col knob for M: %g\n", cknobs [COLAMD_DENSE_COL])) ;
+
+ /* === Order the columns of M =========================================== */
+
+ if (!colamd (n_row, n, Mlen, M, perm, cknobs, cstats))
+ {
+ /* This "cannot" happen, unless there is a bug in the code. */
+ stats [COLAMD_STATUS] = COLAMD_ERROR_internal_error ;
+ (*release) ((void *) M) ;
+ DEBUG0 (("symamd: internal error!\n")) ;
+ return (FALSE) ;
+ }
+
+ /* Note that the output permutation is now in perm */
+
+ /* === get the statistics for symamd from colamd ======================== */
+
+ /* note that a dense column in colamd means a dense row and col in symamd */
+ stats [COLAMD_DENSE_ROW] = cstats [COLAMD_DENSE_COL] ;
+ stats [COLAMD_DENSE_COL] = cstats [COLAMD_DENSE_COL] ;
+ stats [COLAMD_DEFRAG_COUNT] = cstats [COLAMD_DEFRAG_COUNT] ;
+
+ /* === Free M =========================================================== */
+
+ (*release) ((void *) M) ;
+ DEBUG0 (("symamd: done.\n")) ;
+ return (TRUE) ;
+
+}
+
+/* ========================================================================== */
+/* === 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.
+*/
+
+PUBLIC int colamd /* returns TRUE if successful, FALSE otherwise*/
+(
+ /* === 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) */
+ int stats [COLAMD_STATS] /* output statistics and error codes */
+)
+{
+ /* === 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 need ; /* minimum required length of A */
+ Colamd_Row *Row ; /* pointer into A of Row [0..n_row] array */
+ Colamd_Col *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 array */
+
+#ifndef NDEBUG
+ colamd_get_debug ("colamd") ;
+#endif /* NDEBUG */
+
+ /* === Check the input arguments ======================================== */
+
+ if (!stats)
+ {
+ DEBUG0 (("colamd: stats not present\n")) ;
+ return (FALSE) ;
+ }
+ for (i = 0 ; i < COLAMD_STATS ; i++)
+ {
+ stats [i] = 0 ;
+ }
+ stats [COLAMD_STATUS] = COLAMD_OK ;
+ stats [COLAMD_INFO1] = -1 ;
+ stats [COLAMD_INFO2] = -1 ;
+
+ if (!A) /* A is not present */
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_A_not_present ;
+ DEBUG0 (("colamd: A not present\n")) ;
+ return (FALSE) ;
+ }
+
+ if (!p) /* p is not present */
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_p_not_present ;
+ DEBUG0 (("colamd: p not present\n")) ;
+ return (FALSE) ;
+ }
+
+ if (n_row < 0) /* n_row must be >= 0 */
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_nrow_negative ;
+ stats [COLAMD_INFO1] = n_row ;
+ DEBUG0 (("colamd: nrow negative %d\n", n_row)) ;
+ return (FALSE) ;
+ }
+
+ if (n_col < 0) /* n_col must be >= 0 */
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_ncol_negative ;
+ stats [COLAMD_INFO1] = n_col ;
+ DEBUG0 (("colamd: ncol negative %d\n", n_col)) ;
+ return (FALSE) ;
+ }
+
+ nnz = p [n_col] ;
+ if (nnz < 0) /* nnz must be >= 0 */
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_nnz_negative ;
+ stats [COLAMD_INFO1] = nnz ;
+ DEBUG0 (("colamd: number of entries negative %d\n", nnz)) ;
+ return (FALSE) ;
+ }
+
+ if (p [0] != 0)
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_p0_nonzero ;
+ stats [COLAMD_INFO1] = p [0] ;
+ DEBUG0 (("colamd: p[0] not zero %d\n", p [0])) ;
+ return (FALSE) ;
+ }
+
+ /* === If no knobs, set default knobs =================================== */
+
+ if (!knobs)
+ {
+ colamd_set_defaults (default_knobs) ;
+ knobs = default_knobs ;
+ }
+
+ /* === Allocate the Row and Col arrays from array A ===================== */
+
+ Col_size = COLAMD_C (n_col) ;
+ Row_size = COLAMD_R (n_row) ;
+ need = 2*nnz + n_col + Col_size + Row_size ;
+
+ if (need > Alen)
+ {
+ /* not enough space in array A to perform the ordering */
+ stats [COLAMD_STATUS] = COLAMD_ERROR_A_too_small ;
+ stats [COLAMD_INFO1] = need ;
+ stats [COLAMD_INFO2] = Alen ;
+ DEBUG0 (("colamd: Need Alen >= %d, given only Alen = %d\n", need,Alen));
+ return (FALSE) ;
+ }
+
+ Alen -= Col_size + Row_size ;
+ Col = (Colamd_Col *) &A [Alen] ;
+ Row = (Colamd_Row *) &A [Alen + Col_size] ;
+
+ /* === Construct the row and column data structures ===================== */
+
+ if (!init_rows_cols (n_row, n_col, Row, Col, A, p, stats))
+ {
+ /* input matrix is invalid */
+ DEBUG0 (("colamd: 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 stats ======================================= */
+
+ stats [COLAMD_DENSE_ROW] = n_row - n_row2 ;
+ stats [COLAMD_DENSE_COL] = n_col - n_col2 ;
+ stats [COLAMD_DEFRAG_COUNT] = ngarbage ;
+ DEBUG0 (("colamd: done.\n")) ;
+ return (TRUE) ;
+}
+
+
+/* ========================================================================== */
+/* === colamd_report ======================================================== */
+/* ========================================================================== */
+
+PUBLIC void colamd_report
+(
+ int stats [COLAMD_STATS]
+)
+{
+ print_report ("colamd", stats) ;
+}
+
+
+/* ========================================================================== */
+/* === symamd_report ======================================================== */
+/* ========================================================================== */
+
+PUBLIC void symamd_report
+(
+ int stats [COLAMD_STATS]
+)
+{
+ print_report ("symamd", stats) ;
+}
+
+
+
+/* ========================================================================== */
+/* === 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 FALSE if the matrix is invalid,
+ TRUE otherwise. Not user-callable.
+*/
+
+PRIVATE int init_rows_cols /* returns TRUE if OK, or FALSE otherwise */
+(
+ /* === Parameters ======================================================= */
+
+ int n_row, /* number of rows of A */
+ int n_col, /* number of columns of A */
+ Colamd_Row Row [], /* of size n_row+1 */
+ Colamd_Col 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 */
+ int stats [COLAMD_STATS] /* colamd statistics */
+)
+{
+ /* === 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_row ; /* previous row */
+
+ /* === Initialize columns, and check column pointers ==================== */
+
+ for (col = 0 ; col < n_col ; col++)
+ {
+ Col [col].start = p [col] ;
+ Col [col].length = p [col+1] - p [col] ;
+
+ if (Col [col].length < 0)
+ {
+ /* column pointers must be non-decreasing */
+ stats [COLAMD_STATUS] = COLAMD_ERROR_col_length_negative ;
+ stats [COLAMD_INFO1] = col ;
+ stats [COLAMD_INFO2] = Col [col].length ;
+ DEBUG0 (("colamd: col %d length %d < 0\n", col, Col [col].length)) ;
+ return (FALSE) ;
+ }
+
+ Col [col].shared1.thickness = 1 ;
+ Col [col].shared2.score = 0 ;
+ Col [col].shared3.prev = EMPTY ;
+ Col [col].shared4.degree_next = EMPTY ;
+ }
+
+ /* p [0..n_col] no longer needed, used as "head" in subsequent routines */
+
+ /* === Scan columns, compute row degrees, and check row indices ========= */
+
+ stats [COLAMD_INFO3] = 0 ; /* number of duplicate or unsorted row indices*/
+
+ 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)
+ {
+ stats [COLAMD_STATUS] = COLAMD_ERROR_row_index_out_of_bounds ;
+ stats [COLAMD_INFO1] = col ;
+ stats [COLAMD_INFO2] = row ;
+ stats [COLAMD_INFO3] = n_row ;
+ DEBUG0 (("colamd: row %d col %d out of bounds\n", row, col)) ;
+ return (FALSE) ;
+ }
+
+ if (row <= last_row || Row [row].shared2.mark == col)
+ {
+ /* row index are unsorted or repeated (or both), thus col */
+ /* is jumbled. This is a notice, not an error condition. */
+ stats [COLAMD_STATUS] = COLAMD_OK_BUT_JUMBLED ;
+ stats [COLAMD_INFO1] = col ;
+ stats [COLAMD_INFO2] = row ;
+ (stats [COLAMD_INFO3]) ++ ;
+ DEBUG1 (("colamd: row %d col %d unsorted/duplicate\n",row,col));
+ }
+
+ if (Row [row].shared2.mark != col)
+ {
+ Row [row].length++ ;
+ }
+ else
+ {
+ /* this is a repeated entry in the column, */
+ /* it will be removed */
+ Col [col].length-- ;
+ }
+
+ /* mark the row as having been seen in this column */
+ Row [row].shared2.mark = col ;
+
+ last_row = row ;
+ }
+ }
+
+ /* === 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 (stats [COLAMD_STATUS] == COLAMD_OK_BUT_JUMBLED)
+ {
+ /* 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 (stats [COLAMD_STATUS] == COLAMD_OK_BUT_JUMBLED)
+ {
+ DEBUG0 (("colamd: reconstructing column form, matrix jumbled\n")) ;
+
+#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 /* NDEBUG */
+
+ /* === 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 ;
+ }
+ }
+ }
+
+ /* === Done. Matrix is not (or no longer) jumbled ====================== */
+
+ return (TRUE) ;
+}
+
+
+/* ========================================================================== */
+/* === 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 */
+ Colamd_Row Row [], /* of size n_row+1 */
+ Colamd_Col 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 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 /* NDEBUG */
+
+ /* === 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)) ;
+ DEBUG1 (("colamd: 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 order, 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) ;
+ }
+ }
+ DEBUG1 (("colamd: 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) ;
+ }
+ }
+ DEBUG1 (("colamd: 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) ;
+ }
+ }
+ DEBUG1 (("colamd: 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) */
+ DEBUG2 (("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 ;
+ }
+ }
+ DEBUG1 (("colamd: 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 /* NDEBUG */
+
+ /* === Initialize degree lists ========================================== */
+
+#ifndef NDEBUG
+ debug_count = 0 ;
+#endif /* NDEBUG */
+
+ /* 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 /* NDEBUG */
+
+ }
+ }
+
+#ifndef NDEBUG
+ DEBUG1 (("colamd: 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 /* NDEBUG */
+
+ /* === 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 + n_col or larger */
+ Colamd_Row Row [], /* of size n_row+1 */
+ Colamd_Col 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 ; /* number of columns in pivot row */
+ int pivot_row_length ; /* number 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" (no. 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 /* NDEBUG */
+
+ /* === 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 ;
+ DEBUG1 (("colamd: 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)
+ {
+ DEBUG2 (("\n... Step k: %d out of n_col2: %d\n", k, n_col2)) ;
+ }
+ else
+ {
+ DEBUG3 (("\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 /* NDEBUG */
+
+ /* === 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 /* NDEBUG */
+
+ /* 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 /* NDEBUG */
+ }
+
+ /* === 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 /* NDEBUG */
+
+ /* === 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++ ;
+ DEBUG3 (("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] ;
+ DEBUG3 (("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 ====================================== */
+
+ DEBUG3 (("** Computing set differences phase. **\n")) ;
+
+ /* pivot row is currently dead - it will be revived later. */
+
+ DEBUG3 (("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) ;
+ DEBUG3 (("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)
+ {
+ DEBUG3 (("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 /* NDEBUG */
+
+ /* === Add up set differences for each column ======================= */
+
+ DEBUG3 (("** 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 ;
+
+ DEBUG4 (("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)
+ {
+ DEBUG4 (("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 ==================== */
+
+ DEBUG4 (("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 ;
+
+ DEBUG4 ((" 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 ======================================== */
+
+ DEBUG3 (("** Supercolumn detection phase. **\n")) ;
+
+ detect_super_cols (
+
+#ifndef NDEBUG
+ n_col, Row,
+#endif /* NDEBUG */
+
+ 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)
+ {
+ DEBUG2 (("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 /* NDEBUG */
+
+ /* === Finalize the new pivot row, and column scores ================ */
+
+ DEBUG3 (("** 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 /* NDEBUG */
+
+ /* === 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 */
+ Colamd_Col 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 */
+ Colamd_Row Row [], /* of size n_row+1 */
+#endif /* NDEBUG */
+
+ Colamd_Col 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 value 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 */
+ Colamd_Row Row [], /* row info */
+ Colamd_Col 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 ;
+ DEBUG2 (("Defrag..\n")) ;
+ for (psrc = &A[0] ; psrc < pfree ; psrc++) ASSERT (*psrc >= 0) ;
+ debug_rows = 0 ;
+#endif /* NDEBUG */
+
+ /* === 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 */
+ DEBUG3 (("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 /* NDEBUG */
+
+ }
+ }
+ }
+
+ /* === 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 /* NDEBUG */
+
+ }
+ }
+ /* 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 */
+ Colamd_Row Row [] /* Row [0 ... n_row-1].shared2.mark is set to zero */
+)
+{
+ /* === Local variables ================================================== */
+
+ int r ;
+
+ for (r = 0 ; r < n_row ; r++)
+ {
+ if (ROW_IS_ALIVE (r))
+ {
+ Row [r].shared2.mark = 0 ;
+ }
+ }
+ return (1) ;
+}
+
+
+/* ========================================================================== */
+/* === print_report ========================================================= */
+/* ========================================================================== */
+
+PRIVATE void print_report
+(
+ char *method,
+ int stats [COLAMD_STATS]
+)
+{
+
+ int i1, i2, i3 ;
+
+ if (!stats)
+ {
+ PRINTF ("%s: No statistics available.\n", method) ;
+ return ;
+ }
+
+ i1 = stats [COLAMD_INFO1] ;
+ i2 = stats [COLAMD_INFO2] ;
+ i3 = stats [COLAMD_INFO3] ;
+
+ if (stats [COLAMD_STATUS] >= 0)
+ {
+ PRINTF ("%s: OK. ", method) ;
+ }
+ else
+ {
+ PRINTF ("%s: ERROR. ", method) ;
+ }
+
+ switch (stats [COLAMD_STATUS])
+ {
+
+ case COLAMD_OK_BUT_JUMBLED:
+
+ PRINTF ("Matrix has unsorted or duplicate row indices.\n") ;
+
+ PRINTF ("%s: number of duplicate or out-of-order row indices: %d\n",
+ method, i3) ;
+
+ PRINTF ("%s: last seen duplicate or out-of-order row index: %d\n",
+ method, INDEX (i2)) ;
+
+ PRINTF ("%s: last seen in column: %d",
+ method, INDEX (i1)) ;
+
+ /* no break - fall through to next case instead */
+
+ case COLAMD_OK:
+
+ PRINTF ("\n") ;
+
+ PRINTF ("%s: number of dense or empty rows ignored: %d\n",
+ method, stats [COLAMD_DENSE_ROW]) ;
+
+ PRINTF ("%s: number of dense or empty columns ignored: %d\n",
+ method, stats [COLAMD_DENSE_COL]) ;
+
+ PRINTF ("%s: number of garbage collections performed: %d\n",
+ method, stats [COLAMD_DEFRAG_COUNT]) ;
+ break ;
+
+ case COLAMD_ERROR_A_not_present:
+
+ PRINTF ("Array A (row indices of matrix) not present.\n") ;
+ break ;
+
+ case COLAMD_ERROR_p_not_present:
+
+ PRINTF ("Array p (column pointers for matrix) not present.\n") ;
+ break ;
+
+ case COLAMD_ERROR_nrow_negative:
+
+ PRINTF ("Invalid number of rows (%d).\n", i1) ;
+ break ;
+
+ case COLAMD_ERROR_ncol_negative:
+
+ PRINTF ("Invalid number of columns (%d).\n", i1) ;
+ break ;
+
+ case COLAMD_ERROR_nnz_negative:
+
+ PRINTF ("Invalid number of nonzero entries (%d).\n", i1) ;
+ break ;
+
+ case COLAMD_ERROR_p0_nonzero:
+
+ PRINTF ("Invalid column pointer, p [0] = %d, must be zero.\n", i1) ;
+ break ;
+
+ case COLAMD_ERROR_A_too_small:
+
+ PRINTF ("Array A too small.\n") ;
+ PRINTF (" Need Alen >= %d, but given only Alen = %d.\n",
+ i1, i2) ;
+ break ;
+
+ case COLAMD_ERROR_col_length_negative:
+
+ PRINTF
+ ("Column %d has a negative number of nonzero entries (%d).\n",
+ INDEX (i1), i2) ;
+ break ;
+
+ case COLAMD_ERROR_row_index_out_of_bounds:
+
+ PRINTF
+ ("Row index (row %d) out of bounds (%d to %d) in column %d.\n",
+ INDEX (i2), INDEX (0), INDEX (i3-1), INDEX (i1)) ;
+ break ;
+
+ case COLAMD_ERROR_out_of_memory:
+
+ PRINTF ("Out of memory.\n") ;
+ break ;
+
+ case COLAMD_ERROR_internal_error:
+
+ /* if this happens, there is a bug in the code */
+ PRINTF
+ ("Internal error! Please contact authors (davis at cise.ufl.edu).\n") ;
+ break ;
+ }
+}
+
+
+
+
+/* ========================================================================== */
+/* === colamd 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,
+ Colamd_Row Row [],
+ Colamd_Col 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,
+ Colamd_Row Row [],
+ Colamd_Col 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 && colamd_debug <= 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 && colamd_debug <= 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,
+ Colamd_Row 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 && colamd_debug <= 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,
+ Colamd_Row Row [],
+ Colamd_Col 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 (colamd_debug < 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++ ;
+ DEBUG4 ((" %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++ ;
+ DEBUG4 ((" %d row %d\n", ROW_IS_ALIVE (r), r)) ;
+ }
+ }
+}
+
+PRIVATE void colamd_get_debug
+(
+ char *method
+)
+{
+ colamd_debug = 0 ; /* no debug printing */
+
+ /* get "D" environment variable, which gives the debug printing level */
+ if (getenv ("D"))
+ {
+ colamd_debug = atoi (getenv ("D")) ;
+ }
+
+ DEBUG0 (("%s: debug version, D = %d (THIS WILL BE SLOW!)\n",
+ method, colamd_debug)) ;
+}
+
+#endif /* NDEBUG */
+
diff --git a/SuperLU_5.2.0/SRC/colamd.h b/SuperLU_5.2.0/SRC/colamd.h
new file mode 100644
index 0000000..03fc3bd
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/colamd.h
@@ -0,0 +1,259 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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.
+
+ 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:
+
+ September 8, 2003. Version 2.3.
+
+ Acknowledgements:
+
+ This work was supported by the National Science Foundation, under
+ grants DMS-9504974 and DMS-9803599.
+
+ Notice:
+
+ Copyright (c) 1998-2003 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, 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.
+
+ Availability:
+
+ The colamd/symamd library is available at
+
+ http://www.cise.ufl.edu/research/sparse/colamd/
+
+ This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.h
+ 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
+#define COLAMD_H
+
+/* ========================================================================== */
+/* === Include files ======================================================== */
+/* ========================================================================== */
+
+#include <stdlib.h>
+
+/* ========================================================================== */
+/* === Knob and statistics definitions ====================================== */
+/* ========================================================================== */
+
+/* size of the knobs [ ] array. Only knobs [0..1] are currently used. */
+#define COLAMD_KNOBS 20
+
+/* number of output statistics. Only stats [0..6] are currently used. */
+#define COLAMD_STATS 20
+
+/* knobs [0] and stats [0]: dense row knob and output statistic. */
+#define COLAMD_DENSE_ROW 0
+
+/* knobs [1] and stats [1]: dense column knob and output statistic. */
+#define COLAMD_DENSE_COL 1
+
+/* stats [2]: memory defragmentation count output statistic */
+#define COLAMD_DEFRAG_COUNT 2
+
+/* stats [3]: colamd status: zero OK, > 0 warning or notice, < 0 error */
+#define COLAMD_STATUS 3
+
+/* stats [4..6]: error info, or info on jumbled columns */
+#define COLAMD_INFO1 4
+#define COLAMD_INFO2 5
+#define COLAMD_INFO3 6
+
+/* error codes returned in stats [3]: */
+#define COLAMD_OK (0)
+#define COLAMD_OK_BUT_JUMBLED (1)
+#define COLAMD_ERROR_A_not_present (-1)
+#define COLAMD_ERROR_p_not_present (-2)
+#define COLAMD_ERROR_nrow_negative (-3)
+#define COLAMD_ERROR_ncol_negative (-4)
+#define COLAMD_ERROR_nnz_negative (-5)
+#define COLAMD_ERROR_p0_nonzero (-6)
+#define COLAMD_ERROR_A_too_small (-7)
+#define COLAMD_ERROR_col_length_negative (-8)
+#define COLAMD_ERROR_row_index_out_of_bounds (-9)
+#define COLAMD_ERROR_out_of_memory (-10)
+#define COLAMD_ERROR_internal_error (-999)
+
+/* ========================================================================== */
+/* === Row and Column structures ============================================ */
+/* ========================================================================== */
+
+/* User code that makes use of the colamd/symamd routines need not directly */
+/* reference these structures. They are used only for the COLAMD_RECOMMENDED */
+/* macro. */
+
+typedef struct Colamd_Col_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 ;
+
+} Colamd_Col ;
+
+typedef struct Colamd_Row_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 ;
+
+} Colamd_Row ;
+
+/* ========================================================================== */
+/* === Colamd recommended memory size ======================================= */
+/* ========================================================================== */
+
+/*
+ The recommended length Alen of the array A passed to colamd is given by
+ the COLAMD_RECOMMENDED (nnz, n_row, n_col) macro. It returns -1 if any
+ argument is negative. 2*nnz space is required for the row and column
+ indices of the matrix. COLAMD_C (n_col) + COLAMD_R (n_row) space is
+ required for the Col and Row arrays, respectively, which are internal to
+ colamd. An additional n_col space is the minimal amount of "elbow room",
+ and nnz/5 more space is recommended for run time efficiency.
+
+ This macro is not needed when using symamd.
+
+ Explicit typecast to int added Sept. 23, 2002, COLAMD version 2.2, to avoid
+ gcc -pedantic warning messages.
+*/
+
+#define COLAMD_C(n_col) ((int) (((n_col) + 1) * sizeof (Colamd_Col) / sizeof (int)))
+#define COLAMD_R(n_row) ((int) (((n_row) + 1) * sizeof (Colamd_Row) / sizeof (int)))
+
+#define COLAMD_RECOMMENDED(nnz, n_row, n_col) \
+( \
+((nnz) < 0 || (n_row) < 0 || (n_col) < 0) \
+? \
+ (-1) \
+: \
+ (2 * (nnz) + COLAMD_C (n_col) + COLAMD_R (n_row) + (n_col) + ((nnz) / 5)) \
+)
+
+/* ========================================================================== */
+/* === Prototypes of user-callable routines ================================= */
+/* ========================================================================== */
+
+int colamd_recommended /* returns recommended value of Alen, */
+ /* or (-1) if input arguments are erroneous */
+(
+ 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 (1) if successful, (0) 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 */
+ int stats [COLAMD_STATS] /* colamd output statistics and error codes */
+) ;
+
+int symamd /* return (1) if OK, (0) otherwise */
+(
+ int n, /* number of rows and columns of A */
+ int A [], /* row indices of A */
+ int p [], /* column pointers of A */
+ int perm [], /* output permutation, size n_col+1 */
+ double knobs [COLAMD_KNOBS], /* parameters (uses defaults if NULL) */
+ int stats [COLAMD_STATS], /* output statistics and error codes */
+ void * (*allocate) (size_t, size_t),
+ /* pointer to calloc (ANSI C) or */
+ /* mxCalloc (for MATLAB mexFunction) */
+ void (*release) (void *)
+ /* pointer to free (ANSI C) or */
+ /* mxFree (for MATLAB mexFunction) */
+) ;
+
+void colamd_report
+(
+ int stats [COLAMD_STATS]
+) ;
+
+void symamd_report
+(
+ int stats [COLAMD_STATS]
+) ;
+
+#endif /* COLAMD_H */
diff --git a/SuperLU_5.2.0/SRC/cpanel_bmod.c b/SuperLU_5.2.0/SRC/cpanel_bmod.c
new file mode 100644
index 0000000..fdb9696
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cpanel_bmod.c
@@ -0,0 +1,494 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+/*
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "slu_cdefs.h"
+
+/*
+ * Function prototypes
+ */
+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 */
+ const int w, /* in */
+ const int jcol, /* in */
+ const int nseg, /* in */
+ complex *dense, /* out, of size n by w */
+ complex *tempv, /* working array */
+ int *segrep, /* in */
+ int *repfnz, /* in, of size n by w */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ complex alpha, beta;
+#endif
+
+ register int k, ksub;
+ int fsupc, nsupc, nsupr, nrow;
+ int krep, krep_ind;
+ complex ukj, ukj1, ukj2;
+ int luptr, luptr1, luptr2;
+ int segsze;
+ int block_nrow; /* no of rows in a block row */
+ register int lptr; /* Points to the row subscripts of a supernode */
+ int kfnz, irow, no_zeros;
+ register int isub, isub1, i;
+ register int jj; /* Index through each column in the panel */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ complex *lusup;
+ int *xlusup;
+ int *repfnz_col; /* repfnz[] for a column in the panel */
+ complex *dense_col; /* dense[] for a column in the panel */
+ complex *tempv1; /* Used in 1-D update */
+ complex *TriTmp, *MatvecTmp; /* used in 2-D update */
+ complex zero = {0.0, 0.0};
+ complex one = {1.0, 0.0};
+ complex comp_temp, comp_temp1;
+ register int ldaTmp;
+ register int r_ind, r_hi;
+ int maxsuper, rowblk, colblk;
+ flops_t *ops = stat->ops;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (complex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
+ rowblk = sp_ienv(4);
+ colblk = sp_ienv(5);
+ ldaTmp = maxsuper + rowblk;
+
+ /*
+ * For each nonz supernode segment of U[*,j] in topological order
+ */
+ k = nseg - 1;
+ for (ksub = 0; ksub < nseg; ksub++) { /* for each updating supernode */
+
+ /* krep = representative of current k-th supernode
+ * fsupc = first supernodal column
+ * nsupc = no of columns in a supernode
+ * nsupr = no of rows in a supernode
+ */
+ krep = segrep[k--];
+ fsupc = xsup[supno[krep]];
+ nsupc = krep - fsupc + 1;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc];
+ nrow = nsupr - nsupc;
+ lptr = xlsub[fsupc];
+ krep_ind = lptr + nsupc - 1;
+
+ repfnz_col = repfnz;
+ dense_col = dense;
+
+ if ( nsupc >= colblk && nrow > rowblk ) { /* 2-D block update */
+
+ TriTmp = tempv;
+
+ /* Sequence through each column in panel -- triangular solves */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp ) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ luptr = xlusup[fsupc];
+
+ ops[TRSV] += 4 * segsze * (segsze - 1);
+ ops[GEMV] += 8 * nrow * segsze;
+
+ /* Case 1: Update U-segment of size 1 -- col-col update */
+ if ( segsze == 1 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
+ irow = lsub[i];
+ cc_mult(&comp_temp, &ukj, &lusup[luptr]);
+ c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ ++luptr;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ ukj1 = dense_col[lsub[krep_ind - 1]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) {
+ cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ c_sub(&ukj, &ukj, &comp_temp);
+ dense_col[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++; luptr1++;
+ cc_mult(&comp_temp, &ukj, &lusup[luptr]);
+ cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ }
+ } else {
+ ukj2 = dense_col[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ cc_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
+ c_sub(&ukj1, &ukj1, &comp_temp);
+
+ cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ c_sub(&ukj, &ukj, &comp_temp);
+ dense_col[lsub[krep_ind]] = ukj;
+ dense_col[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++; luptr1++; luptr2++;
+ cc_mult(&comp_temp, &ukj, &lusup[luptr]);
+ cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ }
+ }
+
+ } else { /* segsze >= 4 */
+
+ /* Copy U[*,j] segment from dense[*] to TriTmp[*], which
+ holds the result of triangular solves. */
+ no_zeros = kfnz - fsupc;
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; ++i) {
+ irow = lsub[isub];
+ TriTmp[i] = dense_col[irow]; /* Gather */
+ ++isub;
+ }
+
+ /* start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, TriTmp, &incx );
+#else
+ ctrsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, TriTmp, &incx );
+#endif
+#else
+ clsolve ( nsupr, segsze, &lusup[luptr], TriTmp );
+#endif
+
+
+ } /* else ... */
+
+ } /* for jj ... end tri-solves */
+
+ /* Block row updates; push all the way into dense[*] block */
+ for ( r_ind = 0; r_ind < nrow; r_ind += rowblk ) {
+
+ r_hi = SUPERLU_MIN(nrow, r_ind + rowblk);
+ block_nrow = SUPERLU_MIN(rowblk, r_hi - r_ind);
+ luptr = xlusup[fsupc] + nsupc + r_ind;
+ isub1 = lptr + nsupc + r_ind;
+
+ repfnz_col = repfnz;
+ TriTmp = tempv;
+ dense_col = dense;
+
+ /* Sequence through each column in panel -- matrix-vector */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ if ( segsze <= 3 ) continue; /* skip unrolled cases */
+
+ /* Perform a block update, and scatter the result of
+ matrix-vector to dense[]. */
+ no_zeros = kfnz - fsupc;
+ luptr1 = luptr + nsupr * no_zeros;
+ MatvecTmp = &TriTmp[maxsuper];
+
+#ifdef USE_VENDOR_BLAS
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ CGEMV(ftcs2, &block_nrow, &segsze, &alpha, &lusup[luptr1],
+ &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
+#else
+ cgemv_("N", &block_nrow, &segsze, &alpha, &lusup[luptr1],
+ &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
+#endif
+#else
+ cmatvec(nsupr, block_nrow, segsze, &lusup[luptr1],
+ TriTmp, MatvecTmp);
+#endif
+
+ /* Scatter MatvecTmp[*] into SPA dense[*] temporarily
+ * such that MatvecTmp[*] can be re-used for the
+ * the next blok row update. dense[] will be copied into
+ * global store after the whole panel has been finished.
+ */
+ isub = isub1;
+ for (i = 0; i < block_nrow; i++) {
+ irow = lsub[isub];
+ c_sub(&dense_col[irow], &dense_col[irow],
+ &MatvecTmp[i]);
+ MatvecTmp[i] = zero;
+ ++isub;
+ }
+
+ } /* for jj ... */
+
+ } /* for each block row ... */
+
+ /* Scatter the triangular solves into SPA dense[*] */
+ repfnz_col = repfnz;
+ TriTmp = tempv;
+ dense_col = dense;
+
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ if ( segsze <= 3 ) continue; /* skip unrolled cases */
+
+ no_zeros = kfnz - fsupc;
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense_col[irow] = TriTmp[i];
+ TriTmp[i] = zero;
+ ++isub;
+ }
+
+ } /* for jj ... */
+
+ } else { /* 1-D block modification */
+
+
+ /* Sequence through each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ luptr = xlusup[fsupc];
+
+ ops[TRSV] += 4 * segsze * (segsze - 1);
+ ops[GEMV] += 8 * nrow * segsze;
+
+ /* Case 1: Update U-segment of size 1 -- col-col update */
+ if ( segsze == 1 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
+ irow = lsub[i];
+ cc_mult(&comp_temp, &ukj, &lusup[luptr]);
+ c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ ++luptr;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ ukj1 = dense_col[lsub[krep_ind - 1]];
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) {
+ cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ c_sub(&ukj, &ukj, &comp_temp);
+ dense_col[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ ++luptr; ++luptr1;
+ cc_mult(&comp_temp, &ukj, &lusup[luptr]);
+ cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ }
+ } else {
+ ukj2 = dense_col[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ cc_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
+ c_sub(&ukj1, &ukj1, &comp_temp);
+
+ cc_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ c_sub(&ukj, &ukj, &comp_temp);
+ dense_col[lsub[krep_ind]] = ukj;
+ dense_col[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ ++luptr; ++luptr1; ++luptr2;
+ cc_mult(&comp_temp, &ukj, &lusup[luptr]);
+ cc_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ cc_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ c_add(&comp_temp, &comp_temp, &comp_temp1);
+ c_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ }
+ }
+
+ } else { /* segsze >= 4 */
+ /*
+ * Perform a triangular solve and block update,
+ * then scatter the result of sup-col update to dense[].
+ */
+ no_zeros = kfnz - fsupc;
+
+ /* Copy U[*,j] segment from dense[*] to tempv[*]:
+ * The result of triangular solve is in tempv[*];
+ * The result of matrix vector update is in dense_col[*]
+ */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; ++i) {
+ irow = lsub[isub];
+ tempv[i] = dense_col[irow]; /* Gather */
+ ++isub;
+ }
+
+ /* start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#else
+ ctrsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#endif
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ CGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#else
+ cgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#endif
+#else
+ clsolve ( nsupr, segsze, &lusup[luptr], tempv );
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ cmatvec (nsupr, nrow, segsze, &lusup[luptr], tempv, tempv1);
+#endif
+
+ /* Scatter tempv[*] into SPA dense[*] temporarily, such
+ * that tempv[*] can be used for the triangular solve of
+ * the next column of the panel. They will be copied into
+ * ucol[*] after the whole panel has been finished.
+ */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense_col[irow] = tempv[i];
+ tempv[i] = zero;
+ isub++;
+ }
+
+ /* Scatter the update from tempv1[*] into SPA dense[*] */
+ /* Start dense rectangular L */
+ for (i = 0; i < nrow; i++) {
+ irow = lsub[isub];
+ c_sub(&dense_col[irow], &dense_col[irow], &tempv1[i]);
+ tempv1[i] = zero;
+ ++isub;
+ }
+
+ } /* else segsze>=4 ... */
+
+ } /* for each column in the panel... */
+
+ } /* else 1-D update ... */
+
+ } /* for each updating supernode ... */
+
+}
+
+
+
diff --git a/SuperLU_5.2.0/SRC/cpanel_dfs.c b/SuperLU_5.2.0/SRC/cpanel_dfs.c
new file mode 100644
index 0000000..988dad7
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cpanel_dfs.c
@@ -0,0 +1,264 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_cdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
+ *
+ * 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 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.
+ *
+ * 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;
+ *
+ * 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>
+ */
+
+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;
+ int *xa_begin, *xa_end;
+ 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 *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;
+
+ /* Initialize pointers */
+ Astore = A->Store;
+ a = Astore->nzval;
+ asub = Astore->rowind;
+ xa_begin = Astore->colbeg;
+ xa_end = Astore->colend;
+ marker1 = marker + m;
+ repfnz_col = repfnz;
+ dense_col = dense;
+ *nseg = 0;
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+
+ /* For each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++) {
+ nextl_col = (jj - jcol) * m;
+
+#ifdef CHK_DFS
+ printf("\npanel col %d: ", jj);
+#endif
+
+ /* 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 )
+ continue; /* krow visited before, go to the next nonzero */
+
+ /* For each unmarked nbr krow of jj
+ * krow is in L: place it in structure of L[*,jj]
+ */
+ 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[*]
+ */
+ else {
+
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz_col[krep];
+
+#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 > kperm ) repfnz_col[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz_col[krep] = kperm;
+ xdfs = xlsub[krep];
+ maxdfs = xprune[krep];
+
+#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
+ */
+ 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
+ * been explored, update its repfnz[*]
+ */
+ else {
+
+ chrep = xsup[supno[chperm]+1] - 1;
+ myfnz = repfnz_col[chrep];
+#ifdef CHK_DFS
+ printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
+#endif
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > chperm )
+ repfnz_col[chrep] = chperm;
+ }
+ else {
+ /* Cont. dfs at snode-rep of kchild */
+ 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
+ printf(" xdfs %d, maxdfs %d: ", xdfs, maxdfs);
+ 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
+ * segment is seen for the first time. (Note that
+ * "repfnz[krep]" may change later.)
+ * Backtrack dfs to its parent.
+ */
+ if ( marker1[krep] < jcol ) {
+ segrep[*nseg] = krep;
+ ++(*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
+ 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;
+
+ } /* for jj ... */
+
+}
diff --git a/SuperLU_5.2.0/SRC/cpivotL.c b/SuperLU_5.2.0/SRC/cpivotL.c
new file mode 100644
index 0000000..46bf8e9
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cpivotL.c
@@ -0,0 +1,195 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_cdefs.h"
+
+#undef DEBUG
+
+/*! \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
+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 */
+ int nsupr; /* no of rows in the supernode */
+ int lptr; /* points to the starting subscript of the supernode */
+ int pivptr, old_pivptr, diag, diagind;
+ float pivmax, rtemp, thresh;
+ complex temp;
+ complex *lu_sup_ptr;
+ complex *lu_col_ptr;
+ int *lsub_ptr;
+ int isub, icol, k, itemp;
+ int *lsub, *xlsub;
+ complex *lusup;
+ int *xlusup;
+ flops_t *ops = stat->ops;
+
+ /* Initialize pointers */
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (complex *) 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 */
+
+#ifdef DEBUG
+if ( jcol == MIN_COL ) {
+ printf("Before cdiv: col %d\n", jcol);
+ for (k = nsupc; k < nsupr; k++)
+ printf(" lu[%d] %f\n", lsub_ptr[k], lu_col_ptr[k]);
+}
+#endif
+
+ /* Determine the largest abs numerical value for partial pivoting;
+ Also search for user-specified pivot, and diagonal element. */
+ if ( *usepr ) *pivrow = iperm_r[jcol];
+ diagind = iperm_c[jcol];
+ pivmax = 0.0;
+ pivptr = nsupc;
+ diag = EMPTY;
+ old_pivptr = nsupc;
+ for (isub = nsupc; isub < nsupr; ++isub) {
+ rtemp = c_abs1 (&lu_col_ptr[isub]);
+ if ( rtemp > pivmax ) {
+ pivmax = rtemp;
+ pivptr = isub;
+ }
+ if ( *usepr && lsub_ptr[isub] == *pivrow ) old_pivptr = isub;
+ if ( lsub_ptr[isub] == diagind ) diag = isub;
+ }
+
+ /* 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);
+ }
+
+ thresh = u * pivmax;
+
+ /* Choose appropriate pivotal element by our policy. */
+ if ( *usepr ) {
+ rtemp = c_abs1 (&lu_col_ptr[old_pivptr]);
+ if ( rtemp != 0.0 && rtemp >= thresh )
+ pivptr = old_pivptr;
+ else
+ *usepr = 0;
+ }
+ if ( *usepr == 0 ) {
+ /* Use diagonal pivot? */
+ if ( diag >= 0 ) { /* diagonal exists */
+ rtemp = c_abs1 (&lu_col_ptr[diag]);
+ if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
+ }
+ *pivrow = lsub_ptr[pivptr];
+ }
+
+ /* Record pivot row */
+ perm_r[*pivrow] = jcol;
+
+ /* 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 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/cpivotgrowth.c b/SuperLU_5.2.0/SRC/cpivotgrowth.c
new file mode 100644
index 0000000..8f3a129
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cpivotgrowth.c
@@ -0,0 +1,124 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Compute the reciprocal pivot growth factor of the leading ncols columns
+ * of the matrix, using the formula:
+ * min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )
+ *
+ * Arguments
+ * =========
+ *
+ * ncols (input) int
+ * The number of columns of matrices A, L and U.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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>
+ */
+
+float
+cPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
+ SuperMatrix *L, SuperMatrix *U)
+{
+
+ NCformat *Astore;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ complex *Aval, *Lval, *Uval;
+ int fsupc, nsupr, luptr, nz_in_U;
+ int i, j, k, oldcol;
+ int *inv_perm_c;
+ float rpg, maxaj, maxuj;
+ float smlnum;
+ complex *luval;
+ complex temp_comp;
+
+ /* Get machine constants. */
+ smlnum = smach("S");
+ rpg = 1. / smlnum;
+
+ Astore = A->Store;
+ Lstore = L->Store;
+ Ustore = U->Store;
+ Aval = Astore->nzval;
+ Lval = Lstore->nzval;
+ Uval = Ustore->nzval;
+
+ inv_perm_c = (int *) SUPERLU_MALLOC(A->ncol*sizeof(int));
+ for (j = 0; j < A->ncol; ++j) inv_perm_c[perm_c[j]] = j;
+
+ for (k = 0; k <= Lstore->nsuper; ++k) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ luptr = L_NZ_START(fsupc);
+ luval = &Lval[luptr];
+ nz_in_U = 1;
+
+ for (j = fsupc; j < L_FST_SUPC(k+1) && j < ncols; ++j) {
+ maxaj = 0.;
+ oldcol = inv_perm_c[j];
+ for (i = Astore->colptr[oldcol]; i < Astore->colptr[oldcol+1]; ++i)
+ maxaj = SUPERLU_MAX( maxaj, c_abs1( &Aval[i]) );
+
+ maxuj = 0.;
+ for (i = Ustore->colptr[j]; i < Ustore->colptr[j+1]; i++)
+ maxuj = SUPERLU_MAX( maxuj, c_abs1( &Uval[i]) );
+
+ /* Supernode */
+ for (i = 0; i < nz_in_U; ++i)
+ maxuj = SUPERLU_MAX( maxuj, c_abs1( &luval[i]) );
+
+ ++nz_in_U;
+ luval += nsupr;
+
+ if ( maxuj == 0. )
+ rpg = SUPERLU_MIN( rpg, 1.);
+ else
+ rpg = SUPERLU_MIN( rpg, maxaj / maxuj );
+ }
+
+ if ( j >= ncols ) break;
+ }
+
+ SUPERLU_FREE(inv_perm_c);
+ return (rpg);
+}
diff --git a/SuperLU_5.2.0/SRC/cpruneL.c b/SuperLU_5.2.0/SRC/cpruneL.c
new file mode 100644
index 0000000..0816920
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cpruneL.c
@@ -0,0 +1,164 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#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 */
+ const int *perm_r, /* in */
+ const int pivrow, /* in */
+ const int nseg, /* in */
+ const int *segrep, /* in */
+ const int *repfnz, /* in */
+ int *xprune, /* out */
+ GlobalLU_t *Glu /* modified - global LU data structures */
+ )
+{
+
+ complex utemp;
+ int jsupno, irep, irep1, kmin, kmax, krow, movnum;
+ int i, ktemp, minloc, maxloc;
+ int do_prune; /* logical variable */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ complex *lusup;
+ int *xlusup;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (complex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ /*
+ * For each supernode-rep irep in U[*,j]
+ */
+ jsupno = supno[jcol];
+ for (i = 0; i < nseg; i++) {
+
+ irep = segrep[i];
+ irep1 = irep + 1;
+ do_prune = FALSE;
+
+ /* Don't prune with a zero U-segment */
+ if ( repfnz[irep] == EMPTY )
+ continue;
+
+ /* If a snode overlaps with the next panel, then the U-segment
+ * is fragmented into two parts -- irep and irep1. We should let
+ * pruning occur at the rep-column in irep1's snode.
+ */
+ if ( supno[irep] == supno[irep1] ) /* Don't prune */
+ continue;
+
+ /*
+ * If it has not been pruned & it has a nonz in row L[pivrow,i]
+ */
+ if ( supno[irep] != jsupno ) {
+ if ( xprune[irep] >= xlsub[irep1] ) {
+ kmin = xlsub[irep];
+ kmax = xlsub[irep1] - 1;
+ for (krow = kmin; krow <= kmax; krow++)
+ if ( lsub[krow] == pivrow ) {
+ do_prune = TRUE;
+ break;
+ }
+ }
+
+ if ( do_prune ) {
+
+ /* Do a quicksort-type partition
+ * movnum=TRUE means that the num values have to be exchanged.
+ */
+ movnum = FALSE;
+ if ( irep == xsup[supno[irep]] ) /* Snode of size 1 */
+ movnum = TRUE;
+
+ while ( kmin <= kmax ) {
+
+ if ( perm_r[lsub[kmax]] == EMPTY )
+ kmax--;
+ else if ( perm_r[lsub[kmin]] != EMPTY )
+ kmin++;
+ else { /* kmin below pivrow (not yet pivoted), and kmax
+ * above pivrow: interchange the two subscripts
+ */
+ ktemp = lsub[kmin];
+ lsub[kmin] = lsub[kmax];
+ lsub[kmax] = ktemp;
+
+ /* 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.
+ */
+ if ( movnum ) {
+ minloc = xlusup[irep] + (kmin - xlsub[irep]);
+ maxloc = xlusup[irep] + (kmax - xlsub[irep]);
+ utemp = lusup[minloc];
+ lusup[minloc] = lusup[maxloc];
+ lusup[maxloc] = utemp;
+ }
+
+ kmin++;
+ kmax--;
+
+ }
+
+ } /* while */
+
+ xprune[irep] = kmin; /* Pruning */
+
+#ifdef CHK_PRUNE
+ printf(" After cpruneL(),using col %d: xprune[%d] = %d\n",
+ jcol, irep, kmin);
+#endif
+ } /* if do_prune */
+
+ } /* if */
+
+ } /* for each U-segment... */
+}
diff --git a/SuperLU_5.2.0/SRC/creadhb.c b/SuperLU_5.2.0/SRC/creadhb.c
new file mode 100644
index 0000000..b5b61ec
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/creadhb.c
@@ -0,0 +1,379 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+
+/*! \brief Eat up the rest of the current line */
+int cDumpLine(FILE *fp)
+{
+ register int c;
+ while ((c = fgetc(fp)) != '\n') ;
+ return 0;
+}
+
+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;
+}
+
+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) */
+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;
+}
+
+/*! \brief
+ *
+ * <pre>
+ * On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+ * matrix. On exit, it represents the full matrix with lower and upper parts.
+ * </pre>
+ */
+static void
+FormFullA(int n, int *nonz, complex **nzval, int **rowind, int **colptr)
+{
+ register int i, j, k, col, new_nnz;
+ int *t_rowind, *t_colptr, *al_rowind, *al_colptr, *a_rowind, *a_colptr;
+ int *marker;
+ complex *t_val, *al_val, *a_val;
+
+ al_rowind = *rowind;
+ al_colptr = *colptr;
+ al_val = *nzval;
+
+ if ( !(marker =(int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC t_colptr[]");
+ if ( !(t_rowind = (int *) SUPERLU_MALLOC( *nonz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_rowind[]");
+ if ( !(t_val = (complex*) SUPERLU_MALLOC( *nonz * sizeof(complex)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_val[]");
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < n; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i)
+ ++marker[al_rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < n; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose matrix A to T */
+ for (j = 0; j < n; ++j)
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ col = al_rowind[i];
+ t_rowind[marker[col]] = j;
+ t_val[marker[col]] = al_val[i];
+ ++marker[col];
+ }
+
+ new_nnz = *nonz * 2 - n;
+ if ( !(a_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC a_colptr[]");
+ if ( !(a_rowind = (int *) SUPERLU_MALLOC( new_nnz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_rowind[]");
+ if ( !(a_val = (complex*) SUPERLU_MALLOC( new_nnz * sizeof(complex)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_val[]");
+
+ a_colptr[0] = 0;
+ k = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ if ( t_rowind[i] != j ) { /* not diagonal */
+ a_rowind[k] = t_rowind[i];
+ a_val[k] = t_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+ }
+
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ a_rowind[k] = al_rowind[i];
+ a_val[k] = al_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+
+ a_colptr[j+1] = k;
+ }
+
+ printf("FormFullA: new_nnz = %d, k = %d\n", new_nnz, k);
+
+ SUPERLU_FREE(al_val);
+ SUPERLU_FREE(al_rowind);
+ SUPERLU_FREE(al_colptr);
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_val);
+ SUPERLU_FREE(t_rowind);
+ SUPERLU_FREE(t_colptr);
+
+ *nzval = a_val;
+ *rowind = a_rowind;
+ *colptr = a_colptr;
+ *nonz = new_nnz;
+}
+
+void
+creadhb(FILE *fp, int *nrow, int *ncol, int *nonz,
+ complex **nzval, int **rowind, int **colptr)
+{
+
+ register int i, numer_lines = 0, rhscrd = 0;
+ int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
+ char buf[100], type[4], key[10];
+ int sym;
+
+ /* Line 1 */
+ fgets(buf, 100, fp);
+ fputs(buf, stdout);
+#if 0
+ fscanf(fp, "%72c", buf); buf[72] = 0;
+ printf("Title: %s", buf);
+ fscanf(fp, "%8c", key); key[8] = 0;
+ printf("Key: %s\n", key);
+ cDumpLine(fp);
+#endif
+
+ /* Line 2 */
+ for (i=0; i<5; i++) {
+ fscanf(fp, "%14c", buf); buf[14] = 0;
+ sscanf(buf, "%d", &tmp);
+ if (i == 3) numer_lines = tmp;
+ if (i == 4 && tmp) rhscrd = 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);
+ fscanf(fp, "%20c", buf);
+ cDumpLine(fp);
+
+ /* Line 5: right-hand side */
+ if ( rhscrd ) cDumpLine(fp); /* skip RHSFMT */
+
+#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);
+ }
+
+ sym = (type[1] == 'S' || type[1] == 's');
+ if ( sym ) {
+ FormFullA(*ncol, nonz, nzval, rowind, colptr);
+ }
+
+ fclose(fp);
+}
+
diff --git a/SuperLU_5.2.0/SRC/creadrb.c b/SuperLU_5.2.0/SRC/creadrb.c
new file mode 100644
index 0000000..e5c63fd
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/creadrb.c
@@ -0,0 +1,365 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 <stdio.h>
+#include <stdlib.h>
+#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;
+}
+
+
+/*! \brief
+ *
+ * <pre>
+ * On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+ * matrix. On exit, it represents the full matrix with lower and upper parts.
+ * </pre>
+ */
+static void
+FormFullA(int n, int *nonz, complex **nzval, int **rowind, int **colptr)
+{
+ register int i, j, k, col, new_nnz;
+ int *t_rowind, *t_colptr, *al_rowind, *al_colptr, *a_rowind, *a_colptr;
+ int *marker;
+ complex *t_val, *al_val, *a_val;
+
+ al_rowind = *rowind;
+ al_colptr = *colptr;
+ al_val = *nzval;
+
+ if ( !(marker =(int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC t_colptr[]");
+ if ( !(t_rowind = (int *) SUPERLU_MALLOC( *nonz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_rowind[]");
+ if ( !(t_val = (complex*) SUPERLU_MALLOC( *nonz * sizeof(complex)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_val[]");
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < n; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i)
+ ++marker[al_rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < n; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose matrix A to T */
+ for (j = 0; j < n; ++j)
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ col = al_rowind[i];
+ t_rowind[marker[col]] = j;
+ t_val[marker[col]] = al_val[i];
+ ++marker[col];
+ }
+
+ new_nnz = *nonz * 2 - n;
+ if ( !(a_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC a_colptr[]");
+ if ( !(a_rowind = (int *) SUPERLU_MALLOC( new_nnz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_rowind[]");
+ if ( !(a_val = (complex*) SUPERLU_MALLOC( new_nnz * sizeof(complex)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_val[]");
+
+ a_colptr[0] = 0;
+ k = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ if ( t_rowind[i] != j ) { /* not diagonal */
+ a_rowind[k] = t_rowind[i];
+ a_val[k] = t_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+ }
+
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ a_rowind[k] = al_rowind[i];
+ a_val[k] = al_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+
+ a_colptr[j+1] = k;
+ }
+
+ printf("FormFullA: new_nnz = %d, k = %d\n", new_nnz, k);
+
+ SUPERLU_FREE(al_val);
+ SUPERLU_FREE(al_rowind);
+ SUPERLU_FREE(al_colptr);
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_val);
+ SUPERLU_FREE(t_rowind);
+ SUPERLU_FREE(t_colptr);
+
+ *nzval = a_val;
+ *rowind = a_rowind;
+ *colptr = a_colptr;
+ *nonz = new_nnz;
+}
+
+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];
+ int sym;
+ 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);
+ }
+
+ sym = (type[1] == 'S' || type[1] == 's');
+ if ( sym ) {
+ FormFullA(*ncol, nonz, nzval, rowind, colptr);
+ }
+
+ fclose(fp);
+}
diff --git a/SuperLU_5.2.0/SRC/creadtriple.c b/SuperLU_5.2.0/SRC/creadtriple.c
new file mode 100644
index 0000000..97cf70a
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/creadtriple.c
@@ -0,0 +1,150 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+creadtriple(int *m, int *n, int *nonz,
+ complex **nzval, int **rowind, int **colptr)
+{
+/*
+ * Output parameters
+ * =================
+ * (a,asub,xa): asub[*] contains the row subscripts of nonzeros
+ * in columns of matrix A; a[*] the numerical values;
+ * row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
+ *
+ */
+ int j, k, jsize, nnz, nz;
+ complex *a, *val;
+ int *asub, *xa, *row, *col;
+ int zero_base = 0;
+
+ /* Matrix format:
+ * First line: #rows, #cols, #non-zero
+ * Triplet in the rest of lines:
+ * row, col, value
+ */
+
+ scanf("%d%d", n, nonz);
+ *m = *n;
+ printf("m %d, n %d, nonz %d\n", *m, *n, *nonz);
+ callocateA(*n, *nonz, nzval, rowind, colptr); /* Allocate storage */
+ a = *nzval;
+ asub = *rowind;
+ xa = *colptr;
+
+ val = (complex *) SUPERLU_MALLOC(*nonz * sizeof(complex));
+ 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 (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
+ 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,%e) out of bound, removed\n",
+ nz, row[nz], col[nz], val[nz].r, val[nz].i);
+ exit(-1);
+ } else {
+ ++xa[col[nz]];
+ ++nz;
+ }
+ }
+
+ *nonz = nz;
+
+ /* Initialize the array of column pointers */
+ k = 0;
+ jsize = xa[0];
+ xa[0] = 0;
+ for (j = 1; j < *n; ++j) {
+ k += jsize;
+ jsize = xa[j];
+ xa[j] = k;
+ }
+
+ /* Copy the triplets into the column oriented storage */
+ for (nz = 0; nz < *nonz; ++nz) {
+ j = col[nz];
+ k = xa[j];
+ asub[k] = row[nz];
+ a[k] = val[nz];
+ ++xa[j];
+ }
+
+ /* Reset the column pointers to the beginning of each column */
+ for (j = *n; j > 0; --j)
+ xa[j] = xa[j-1];
+ xa[0] = 0;
+
+ SUPERLU_FREE(val);
+ SUPERLU_FREE(row);
+ SUPERLU_FREE(col);
+
+#ifdef CHK_INPUT
+ {
+ 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 creadrhs(int m, complex *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, "%f%f\n", &b[i].r, &b[i].i);
+
+ /* readpair_(j, &b[i]);*/
+ fclose(fp);
+}
diff --git a/SuperLU_5.2.0/SRC/csnode_bmod.c b/SuperLU_5.2.0/SRC/csnode_bmod.c
new file mode 100644
index 0000000..1d5c6f4
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/csnode_bmod.c
@@ -0,0 +1,130 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_cdefs.h"
+
+
+/*! \brief Performs numeric block updates within the relaxed snode.
+ */
+int
+csnode_bmod (
+ const int jcol, /* in */
+ const int jsupno, /* in */
+ const int fsupc, /* in */
+ complex *dense, /* in */
+ complex *tempv, /* working array */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ complex alpha = {-1.0, 0.0}, beta = {1.0, 0.0};
+#endif
+
+ complex comp_zero = {0.0, 0.0};
+ int luptr, nsupc, nsupr, nrow;
+ int isub, irow, i, iptr;
+ register int ufirst, nextlu;
+ int *lsub, *xlsub;
+ complex *lusup;
+ int *xlusup;
+ flops_t *ops = stat->ops;
+
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (complex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ nextlu = xlusup[jcol];
+
+ /*
+ * Process the supernodal portion of L\U[*,j]
+ */
+ for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
+ irow = lsub[isub];
+ lusup[nextlu] = dense[irow];
+ dense[irow] = comp_zero;
+ ++nextlu;
+ }
+
+ xlusup[jcol + 1] = nextlu; /* Initialize xlusup for next column */
+
+ if ( fsupc < jcol ) {
+
+ luptr = xlusup[fsupc];
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc];
+ nsupc = jcol - fsupc; /* Excluding jcol */
+ ufirst = xlusup[jcol]; /* Points to the beginning of column
+ jcol in supernode L\U(jsupno). */
+ nrow = nsupr - nsupc;
+
+ ops[TRSV] += 4 * nsupc * (nsupc - 1);
+ ops[GEMV] += 8 * nrow * nsupc;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr], &nsupr,
+ &lusup[ufirst], &incx );
+ CGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#else
+ ctrsv_( "L", "N", "U", &nsupc, &lusup[luptr], &nsupr,
+ &lusup[ufirst], &incx );
+ cgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#endif
+#else
+ clsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
+ cmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
+ &lusup[ufirst], &tempv[0] );
+
+ /* Scatter tempv[*] into lusup[*] */
+ iptr = ufirst + nsupc;
+ for (i = 0; i < nrow; i++) {
+ c_sub(&lusup[iptr], &lusup[iptr], &tempv[i]);
+ ++iptr;
+ tempv[i] = comp_zero;
+ }
+#endif
+
+ }
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/csnode_dfs.c b/SuperLU_5.2.0/SRC/csnode_dfs.c
new file mode 100644
index 0000000..f9748cd
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/csnode_dfs.c
@@ -0,0 +1,122 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#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 */
+ const int kcol, /* in - end of the supernode */
+ const int *asub, /* in */
+ const int *xa_begin, /* in */
+ const int *xa_end, /* in */
+ int *xprune, /* out */
+ int *marker, /* modified */
+ GlobalLU_t *Glu /* modified */
+ )
+{
+
+ register int i, k, ifrom, ito, nextl, new_next;
+ 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) )
+ return (mem_error);
+ lsub = Glu->lsub;
+ }
+ }
+ }
+ supno[i] = nsuper;
+ }
+
+ /* Supernode > 1, then make a copy of the subscripts for pruning */
+ if ( jcol < kcol ) {
+ new_next = nextl + (nextl - xlsub[jcol]);
+ while ( new_next > nzlmax ) {
+ if ( mem_error = cLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
+ return (mem_error);
+ lsub = Glu->lsub;
+ }
+ ito = nextl;
+ for (ifrom = xlsub[jcol]; ifrom < nextl; )
+ lsub[ito++] = lsub[ifrom++];
+ for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
+ nextl = ito;
+ }
+
+ xsup[nsuper+1] = kcol + 1;
+ supno[kcol+1] = nsuper;
+ xprune[kcol] = nextl;
+ xlsub[kcol+1] = nextl;
+
+ return 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/csp_blas2.c b/SuperLU_5.2.0/SRC/csp_blas2.c
new file mode 100644
index 0000000..93311df
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/csp_blas2.c
@@ -0,0 +1,608 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file csp_blas2.c
+ * \brief Sparse BLAS 2, using some dense BLAS 2 operations
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: December 3, 2015
+ * </pre>
+ */
+/*
+ * File name: csp_blas2.c
+ * Purpose: Sparse BLAS 2, using some dense BLAS 2 operations.
+ */
+
+#include "slu_cdefs.h"
+
+/*
+ * Function prototypes
+ */
+void cusolve(int, int, complex*, complex*);
+void clsolve(int, int, complex*, complex*);
+void cmatvec(int, int, int, complex*, complex*, complex*);
+
+/*! \brief Solves one of the systems of equations A*x = b, or A'*x = b
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * sp_ctrsv() 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.
+ *
+ * Parameters
+ * ==========
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * U - (input) SuperMatrix*
+ * The factor U from the factorization Pr*A*Pc=L*U.
+ * U has types: Stype = NC, Dtype = SLU_C, Mtype = TRU.
+ *
+ * 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.
+ *
+ * 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")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ SCformat *Lstore;
+ NCformat *Ustore;
+ complex *Lval, *Uval;
+ int incx = 1, incy = 1;
+ complex temp;
+ complex alpha = {1.0, 0.0}, beta = {1.0, 0.0};
+ complex comp_zero = {0.0, 0.0};
+ int nrow;
+ int fsupc, nsupr, nsupc, luptr, istart, irow;
+ int i, k, iptr, jcol;
+ complex *work;
+ flops_t solve_ops;
+
+ /* Test the input parameters */
+ *info = 0;
+ if ( strncmp(uplo,"L", 1)!=0 && strncmp(uplo, "U", 1)!=0 ) *info = -1;
+ else if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0) *info = -2;
+ else if ( strncmp(diag, "U", 1)!=0 && strncmp(diag, "N", 1)!=0 )
+ *info = -3;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ) *info = -4;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ) *info = -5;
+ if ( *info ) {
+ i = -(*info);
+ input_error("sp_ctrsv", &i);
+ return 0;
+ }
+
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+ solve_ops = 0;
+
+ if ( !(work = complexCalloc(L->nrow)) )
+ ABORT("Malloc fails for work in sp_ctrsv().");
+
+ if ( strncmp(trans, "N", 1)==0 ) { /* Form x := inv(A)*x. */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := inv(L)*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ 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;
+ luptr = L_NZ_START(fsupc);
+ nrow = nsupr - nsupc;
+
+ /* 1 c_div costs 10 flops */
+ solve_ops += 4 * nsupc * (nsupc - 1) + 10 * nsupc;
+ solve_ops += 8 * nrow * nsupc;
+
+ if ( nsupc == 1 ) {
+ for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
+ irow = L_SUB(iptr);
+ ++luptr;
+ cc_mult(&comp_zero, &x[fsupc], &Lval[luptr]);
+ c_sub(&x[irow], &x[irow], &comp_zero);
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+
+ CGEMV(ftcs2, &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
+ &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
+#else
+ ctrsv_("L", "N", "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+
+ cgemv_("N", &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
+ &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
+#endif
+#else
+ clsolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc]);
+
+ cmatvec ( nsupr, nsupr-nsupc, nsupc, &Lval[luptr+nsupc],
+ &x[fsupc], &work[0] );
+#endif
+
+ iptr = istart + nsupc;
+ for (i = 0; i < nrow; ++i, ++iptr) {
+ irow = L_SUB(iptr);
+ c_sub(&x[irow], &x[irow], &work[i]); /* Scatter */
+ work[i] = comp_zero;
+
+ }
+ }
+ } /* for k ... */
+
+ } else {
+ /* Form x := inv(U)*x */
+
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; k--) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ /* 1 c_div costs 10 flops */
+ solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
+
+ if ( nsupc == 1 ) {
+ c_div(&x[fsupc], &x[fsupc], &Lval[luptr]);
+ for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
+ irow = U_SUB(i);
+ cc_mult(&comp_zero, &x[fsupc], &Uval[i]);
+ c_sub(&x[irow], &x[irow], &comp_zero);
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV(ftcs3, ftcs2, ftcs2, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ctrsv_("U", "N", "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+#else
+ cusolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
+#endif
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1);
+ i++) {
+ irow = U_SUB(i);
+ cc_mult(&comp_zero, &x[jcol], &Uval[i]);
+ c_sub(&x[irow], &x[irow], &comp_zero);
+ }
+ }
+ }
+ } /* for k ... */
+
+ }
+ } else if ( strncmp(trans, "T", 1)==0 ) { /* Form x := inv(A')*x */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := inv(L')*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; --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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += 8 * (nsupr - nsupc) * nsupc;
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ iptr = istart + nsupc;
+ for (i = L_NZ_START(jcol) + nsupc;
+ i < L_NZ_START(jcol+1); i++) {
+ irow = L_SUB(iptr);
+ cc_mult(&comp_zero, &x[irow], &Lval[i]);
+ c_sub(&x[jcol], &x[jcol], &comp_zero);
+ iptr++;
+ }
+ }
+
+ if ( nsupc > 1 ) {
+ solve_ops += 4 * nsupc * (nsupc - 1);
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd("T", strlen("T"));
+ ftcs3 = _cptofcd("U", strlen("U"));
+ CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ctrsv_("L", "T", "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ }
+ } else {
+ /* Form x := inv(U')*x */
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = 0; k <= Lstore->nsuper; k++) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
+ irow = U_SUB(i);
+ cc_mult(&comp_zero, &x[irow], &Uval[i]);
+ c_sub(&x[jcol], &x[jcol], &comp_zero);
+ }
+ }
+
+ /* 1 c_div costs 10 flops */
+ solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
+
+ if ( nsupc == 1 ) {
+ c_div(&x[fsupc], &x[fsupc], &Lval[luptr]);
+ } else {
+#ifdef _CRAY
+ ftcs1 = _cptofcd("U", strlen("U"));
+ ftcs2 = _cptofcd("T", strlen("T"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ctrsv_("U", "T", "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ } /* for k ... */
+ }
+ } else { /* Form x := conj(inv(A'))*x */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := conj(inv(L'))*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; --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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += 8 * (nsupr - nsupc) * nsupc;
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ iptr = istart + nsupc;
+ for (i = L_NZ_START(jcol) + nsupc;
+ i < L_NZ_START(jcol+1); i++) {
+ irow = L_SUB(iptr);
+ cc_conj(&temp, &Lval[i]);
+ cc_mult(&comp_zero, &x[irow], &temp);
+ c_sub(&x[jcol], &x[jcol], &comp_zero);
+ iptr++;
+ }
+ }
+
+ if ( nsupc > 1 ) {
+ solve_ops += 4 * nsupc * (nsupc - 1);
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd(trans, strlen("T"));
+ ftcs3 = _cptofcd("U", strlen("U"));
+ CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ctrsv_("L", trans, "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ }
+ } else {
+ /* Form x := conj(inv(U'))*x */
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = 0; k <= Lstore->nsuper; k++) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
+ irow = U_SUB(i);
+ cc_conj(&temp, &Uval[i]);
+ cc_mult(&comp_zero, &x[irow], &temp);
+ c_sub(&x[jcol], &x[jcol], &comp_zero);
+ }
+ }
+
+ /* 1 c_div costs 10 flops */
+ solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
+
+ if ( nsupc == 1 ) {
+ cc_conj(&temp, &Lval[luptr]);
+ c_div(&x[fsupc], &x[fsupc], &temp);
+ } else {
+#ifdef _CRAY
+ ftcs1 = _cptofcd("U", strlen("U"));
+ ftcs2 = _cptofcd(trans, strlen("T"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ctrsv_("U", trans, "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ } /* for k ... */
+ }
+ }
+
+ stat->ops[SOLVE] += solve_ops;
+ SUPERLU_FREE(work);
+ return 0;
+}
+
+
+
+/*! \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^H*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)
+{
+
+ /* Local variables */
+ NCformat *Astore;
+ complex *Aval;
+ int info;
+ complex temp, temp1;
+ int lenx, leny, i, j, irow;
+ int iy, jx, jy, kx, ky;
+ int notran;
+ complex comp_zero = {0.0, 0.0};
+ complex comp_one = {1.0, 0.0};
+
+ notran = ( strncmp(trans, "N", 1)==0 || strncmp(trans, "n", 1)==0 );
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Test the input parameters */
+ info = 0;
+ if ( !notran && strncmp(trans, "T", 1)!=0 && strncmp(trans, "C", 1)!=0)
+ info = 1;
+ else if ( A->nrow < 0 || A->ncol < 0 ) info = 3;
+ else if (incx == 0) info = 5;
+ else if (incy == 0) info = 8;
+ if (info != 0) {
+ input_error("sp_cgemv ", &info);
+ return 0;
+ }
+
+ /* Quick return if possible. */
+ if (A->nrow == 0 || A->ncol == 0 ||
+ c_eq(&alpha, &comp_zero) &&
+ c_eq(&beta, &comp_one))
+ return 0;
+
+ /* Set LENX and LENY, the lengths of the vectors x and y, and set
+ up the start points in X and Y. */
+ if ( notran ) {
+ lenx = A->ncol;
+ leny = A->nrow;
+ } else {
+ lenx = A->nrow;
+ leny = A->ncol;
+ }
+ if (incx > 0) kx = 0;
+ else kx = - (lenx - 1) * incx;
+ if (incy > 0) ky = 0;
+ else ky = - (leny - 1) * incy;
+
+ /* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+ /* First form y := beta*y. */
+ if ( !c_eq(&beta, &comp_one) ) {
+ if (incy == 1) {
+ if ( c_eq(&beta, &comp_zero) )
+ for (i = 0; i < leny; ++i) y[i] = comp_zero;
+ else
+ for (i = 0; i < leny; ++i)
+ cc_mult(&y[i], &beta, &y[i]);
+ } else {
+ iy = ky;
+ if ( c_eq(&beta, &comp_zero) )
+ for (i = 0; i < leny; ++i) {
+ y[iy] = comp_zero;
+ iy += incy;
+ }
+ else
+ for (i = 0; i < leny; ++i) {
+ cc_mult(&y[iy], &beta, &y[iy]);
+ iy += incy;
+ }
+ }
+ }
+
+ if ( c_eq(&alpha, &comp_zero) ) return 0;
+
+ if ( notran ) {
+ /* Form y := alpha*A*x + y. */
+ jx = kx;
+ if (incy == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ if ( !c_eq(&x[jx], &comp_zero) ) {
+ cc_mult(&temp, &alpha, &x[jx]);
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ cc_mult(&temp1, &temp, &Aval[i]);
+ c_add(&y[irow], &y[irow], &temp1);
+ }
+ }
+ jx += incx;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ } else if (strncmp(trans, "T", 1) == 0 || strncmp(trans, "t", 1) == 0) {
+ /* Form y := alpha*A'*x + y. */
+ jy = ky;
+ if (incx == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ temp = comp_zero;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ cc_mult(&temp1, &Aval[i], &x[irow]);
+ c_add(&temp, &temp, &temp1);
+ }
+ cc_mult(&temp1, &alpha, &temp);
+ c_add(&y[jy], &y[jy], &temp1);
+ jy += incy;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ } else { /* trans == 'C' or 'c' */
+ /* Form y := alpha * conj(A) * x + y. */
+ complex temp2;
+ jy = ky;
+ if (incx == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ temp = comp_zero;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ temp2.r = Aval[i].r;
+ temp2.i = -Aval[i].i; /* conjugation */
+ cc_mult(&temp1, &temp2, &x[irow]);
+ c_add(&temp, &temp, &temp1);
+ }
+ cc_mult(&temp1, &alpha, &temp);
+ c_add(&y[jy], &y[jy], &temp1);
+ jy += incy;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ }
+
+ return 0;
+} /* sp_cgemv */
+
diff --git a/SuperLU_5.2.0/SRC/csp_blas3.c b/SuperLU_5.2.0/SRC/csp_blas3.c
new file mode 100644
index 0000000..1f3023d
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/csp_blas3.c
@@ -0,0 +1,137 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * Purpose: Sparse BLAS3, using some dense BLAS3 operations.
+ */
+
+#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)
+{
+ int incx = 1, incy = 1;
+ int j;
+
+ for (j = 0; j < n; ++j) {
+ sp_cgemv(transa, alpha, A, &b[ldb*j], incx, beta, &c[ldc*j], incy);
+ }
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/cutil.c b/SuperLU_5.2.0/SRC/cutil.c
new file mode 100644
index 0000000..6c58d30
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/cutil.c
@@ -0,0 +1,485 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * 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>
+ */
+
+
+#include <math.h>
+#include "slu_cdefs.h"
+
+void
+cCreate_CompCol_Matrix(SuperMatrix *A, int m, int n, int nnz,
+ complex *nzval, int *rowind, int *colptr,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ NCformat *Astore;
+
+ A->Stype = stype;
+ A->Dtype = dtype;
+ A->Mtype = mtype;
+ A->nrow = m;
+ A->ncol = n;
+ A->Store = (void *) SUPERLU_MALLOC( sizeof(NCformat) );
+ if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
+ Astore = A->Store;
+ Astore->nnz = nnz;
+ Astore->nzval = nzval;
+ Astore->rowind = rowind;
+ Astore->colptr = colptr;
+}
+
+void
+cCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
+ complex *nzval, int *colind, int *rowptr,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ NRformat *Astore;
+
+ A->Stype = stype;
+ A->Dtype = dtype;
+ A->Mtype = mtype;
+ A->nrow = m;
+ A->ncol = n;
+ A->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat) );
+ if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
+ Astore = A->Store;
+ Astore->nnz = nnz;
+ Astore->nzval = nzval;
+ Astore->colind = colind;
+ Astore->rowptr = rowptr;
+}
+
+/*! \brief Copy matrix A into matrix B. */
+void
+cCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
+{
+ NCformat *Astore, *Bstore;
+ int ncol, nnz, i;
+
+ B->Stype = A->Stype;
+ B->Dtype = A->Dtype;
+ B->Mtype = A->Mtype;
+ B->nrow = A->nrow;;
+ B->ncol = ncol = A->ncol;
+ Astore = (NCformat *) A->Store;
+ Bstore = (NCformat *) B->Store;
+ Bstore->nnz = nnz = Astore->nnz;
+ for (i = 0; i < nnz; ++i)
+ ((complex *)Bstore->nzval)[i] = ((complex *)Astore->nzval)[i];
+ for (i = 0; i < nnz; ++i) Bstore->rowind[i] = Astore->rowind[i];
+ for (i = 0; i <= ncol; ++i) Bstore->colptr[i] = Astore->colptr[i];
+}
+
+
+void
+cCreate_Dense_Matrix(SuperMatrix *X, int m, int n, complex *x, int ldx,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ DNformat *Xstore;
+
+ X->Stype = stype;
+ X->Dtype = dtype;
+ X->Mtype = mtype;
+ X->nrow = m;
+ X->ncol = n;
+ X->Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
+ if ( !(X->Store) ) ABORT("SUPERLU_MALLOC fails for X->Store");
+ Xstore = (DNformat *) X->Store;
+ Xstore->lda = ldx;
+ Xstore->nzval = (complex *) x;
+}
+
+void
+cCopy_Dense_Matrix(int M, int N, complex *X, int ldx,
+ complex *Y, int ldy)
+{
+/*! \brief Copies a two-dimensional matrix X to another matrix Y.
+ */
+ int i, j;
+
+ for (j = 0; j < N; ++j)
+ for (i = 0; i < M; ++i)
+ Y[i + j*ldy] = X[i + j*ldx];
+}
+
+void
+cCreate_SuperNode_Matrix(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)
+{
+ SCformat *Lstore;
+
+ L->Stype = stype;
+ L->Dtype = dtype;
+ L->Mtype = mtype;
+ L->nrow = m;
+ L->ncol = n;
+ L->Store = (void *) SUPERLU_MALLOC( sizeof(SCformat) );
+ if ( !(L->Store) ) ABORT("SUPERLU_MALLOC fails for L->Store");
+ Lstore = L->Store;
+ Lstore->nnz = nnz;
+ Lstore->nsuper = col_to_sup[n];
+ Lstore->nzval = nzval;
+ Lstore->nzval_colptr = nzval_colptr;
+ Lstore->rowind = rowind;
+ Lstore->rowind_colptr = rowind_colptr;
+ Lstore->col_to_sup = col_to_sup;
+ Lstore->sup_to_col = sup_to_col;
+
+}
+
+
+/*! \brief Convert a row compressed storage into a column compressed storage.
+ */
+void
+cCompRow_to_CompCol(int m, int n, int nnz,
+ complex *a, int *colind, int *rowptr,
+ complex **at, int **rowind, int **colptr)
+{
+ register int i, j, col, relpos;
+ int *marker;
+
+ /* Allocate storage for another copy of the matrix. */
+ *at = (complex *) complexMalloc(nnz);
+ *rowind = (int *) intMalloc(nnz);
+ *colptr = (int *) intMalloc(n+1);
+ marker = (int *) intCalloc(n);
+
+ /* Get counts of each column of A, and set up column pointers */
+ for (i = 0; i < m; ++i)
+ for (j = rowptr[i]; j < rowptr[i+1]; ++j) ++marker[colind[j]];
+ (*colptr)[0] = 0;
+ for (j = 0; j < n; ++j) {
+ (*colptr)[j+1] = (*colptr)[j] + marker[j];
+ marker[j] = (*colptr)[j];
+ }
+
+ /* Transfer the matrix into the compressed column storage. */
+ for (i = 0; i < m; ++i) {
+ for (j = rowptr[i]; j < rowptr[i+1]; ++j) {
+ col = colind[j];
+ relpos = marker[col];
+ (*rowind)[relpos] = i;
+ (*at)[relpos] = a[j];
+ ++marker[col];
+ }
+ }
+
+ SUPERLU_FREE(marker);
+}
+
+
+void
+cPrint_CompCol_Matrix(char *what, SuperMatrix *A)
+{
+ NCformat *Astore;
+ register int i,n;
+ float *dp;
+
+ printf("\nCompCol matrix %s:\n", what);
+ printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
+ n = A->ncol;
+ Astore = (NCformat *) A->Store;
+ dp = (float *) Astore->nzval;
+ printf("nrow %d, ncol %d, nnz %d\n", A->nrow,A->ncol,Astore->nnz);
+ printf("nzval: ");
+ for (i = 0; i < 2*Astore->colptr[n]; ++i) printf("%f ", dp[i]);
+ printf("\nrowind: ");
+ for (i = 0; i < Astore->colptr[n]; ++i) printf("%d ", Astore->rowind[i]);
+ printf("\ncolptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->colptr[i]);
+ printf("\n");
+ fflush(stdout);
+}
+
+void
+cPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
+{
+ SCformat *Astore;
+ register int i, j, k, c, d, n, nsup;
+ float *dp;
+ int *col_to_sup, *sup_to_col, *rowind, *rowind_colptr;
+
+ printf("\nSuperNode matrix %s:\n", what);
+ printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
+ n = A->ncol;
+ Astore = (SCformat *) A->Store;
+ dp = (float *) Astore->nzval;
+ col_to_sup = Astore->col_to_sup;
+ sup_to_col = Astore->sup_to_col;
+ rowind_colptr = Astore->rowind_colptr;
+ rowind = Astore->rowind;
+ printf("nrow %d, ncol %d, nnz %d, nsuper %d\n",
+ A->nrow,A->ncol,Astore->nnz,Astore->nsuper);
+ printf("nzval:\n");
+ for (k = 0; k <= Astore->nsuper; ++k) {
+ c = sup_to_col[k];
+ nsup = sup_to_col[k+1] - c;
+ for (j = c; j < c + nsup; ++j) {
+ d = Astore->nzval_colptr[j];
+ for (i = rowind_colptr[c]; i < rowind_colptr[c+1]; ++i) {
+ printf("%d\t%d\t%e\t%e\n", rowind[i], j, dp[d], dp[d+1]);
+ d += 2;
+ }
+ }
+ }
+#if 0
+ for (i = 0; i < 2*Astore->nzval_colptr[n]; ++i) printf("%f ", dp[i]);
+#endif
+ printf("\nnzval_colptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->nzval_colptr[i]);
+ printf("\nrowind: ");
+ for (i = 0; i < Astore->rowind_colptr[n]; ++i)
+ printf("%d ", Astore->rowind[i]);
+ printf("\nrowind_colptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->rowind_colptr[i]);
+ printf("\ncol_to_sup: ");
+ for (i = 0; i < n; ++i) printf("%d ", col_to_sup[i]);
+ printf("\nsup_to_col: ");
+ for (i = 0; i <= Astore->nsuper+1; ++i)
+ printf("%d ", sup_to_col[i]);
+ printf("\n");
+ fflush(stdout);
+}
+
+void
+cPrint_Dense_Matrix(char *what, SuperMatrix *A)
+{
+ 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);
+ dp = (float *) Astore->nzval;
+ printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
+ printf("\nnzval: ");
+ for (j = 0; j < A->ncol; ++j) {
+ for (i = 0; i < 2*A->nrow; ++i) printf("%f ", dp[i + j*2*lda]);
+ printf("\n");
+ }
+ printf("\n");
+ fflush(stdout);
+}
+
+/*! \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)
+{
+ int i, k, fsupc;
+ int *xsup, *supno;
+ int *xlsub, *lsub;
+ complex *lusup;
+ int *xlusup;
+ complex *ucol;
+ int *usub, *xusub;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (complex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+ ucol = (complex *) Glu->ucol;
+ usub = Glu->usub;
+ xusub = Glu->xusub;
+
+ printf("%s", msg);
+ printf("col %d: pivrow %d, supno %d, xprune %d\n",
+ jcol, pivrow, supno[jcol], xprune[jcol]);
+
+ printf("\tU-col:\n");
+ for (i = xusub[jcol]; i < xusub[jcol+1]; i++)
+ printf("\t%d%10.4f, %10.4f\n", usub[i], ucol[i].r, ucol[i].i);
+ printf("\tL-col in rectangular snode:\n");
+ fsupc = xsup[supno[jcol]]; /* first col of the snode */
+ i = xlsub[fsupc];
+ k = xlusup[jcol];
+ while ( i < xlsub[fsupc+1] && k < xlusup[jcol+1] ) {
+ printf("\t%d\t%10.4f, %10.4f\n", lsub[i], lusup[k].r, lusup[k].i);
+ i++; k++;
+ }
+ fflush(stdout);
+}
+
+
+/*! \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)
+{
+ int i;
+
+ for (i = 0; i < n; i++) {
+ if ((tempv[i].r != 0.0) || (tempv[i].i != 0.0))
+ {
+ fprintf(stderr,"tempv[%d] = {%f, %f}\n", i, tempv[i].r, tempv[i].i);
+ ABORT("ccheck_tempv");
+ }
+ }
+}
+
+
+void
+cGenXtrue(int n, int nrhs, complex *x, int ldx)
+{
+ int i, j;
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < n; ++i) {
+ x[i + j*ldx].r = 1.0;
+ x[i + j*ldx].i = 0.0;
+ }
+}
+
+/*! \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,
+ SuperMatrix *A, SuperMatrix *B)
+{
+ NCformat *Astore;
+ complex *Aval;
+ DNformat *Bstore;
+ complex *rhs;
+ complex one = {1.0, 0.0};
+ complex zero = {0.0, 0.0};
+ int ldc;
+ char transc[1];
+
+ Astore = A->Store;
+ Aval = (complex *) Astore->nzval;
+ Bstore = B->Store;
+ rhs = Bstore->nzval;
+ ldc = Bstore->lda;
+
+ if ( trans == NOTRANS ) *(unsigned char *)transc = 'N';
+ else *(unsigned char *)transc = 'T';
+
+ sp_cgemm(transc, "N", A->nrow, nrhs, A->ncol, one, A,
+ x, ldx, zero, rhs, ldc);
+
+}
+
+/*! \brief Fills a complex precision array with a given value.
+ */
+void
+cfill(complex *a, int alen, complex dval)
+{
+ register int i;
+ for (i = 0; i < alen; i++) a[i] = dval;
+}
+
+
+
+/*! \brief Check the inf-norm of the error vector
+ */
+void cinf_norm_error(int nrhs, SuperMatrix *X, complex *xtrue)
+{
+ DNformat *Xstore;
+ float err, xnorm;
+ complex *Xmat, *soln_work;
+ complex temp;
+ int i, j;
+
+ Xstore = X->Store;
+ Xmat = Xstore->nzval;
+
+ for (j = 0; j < nrhs; j++) {
+ soln_work = &Xmat[j*Xstore->lda];
+ err = xnorm = 0.0;
+ for (i = 0; i < X->nrow; i++) {
+ c_sub(&temp, &soln_work[i], &xtrue[i]);
+ err = SUPERLU_MAX(err, c_abs(&temp));
+ xnorm = SUPERLU_MAX(xnorm, c_abs(&soln_work[i]));
+ }
+ err = err / xnorm;
+ printf("||X - Xtrue||/||X|| = %e\n", err);
+ }
+}
+
+
+
+/*! \brief Print performance of the code. */
+void
+cPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
+ float rpg, float rcond, float *ferr,
+ float *berr, char *equed, SuperLUStat_t *stat)
+{
+ SCformat *Lstore;
+ NCformat *Ustore;
+ double *utime;
+ flops_t *ops;
+
+ utime = stat->utime;
+ ops = stat->ops;
+
+ if ( utime[FACT] != 0. )
+ printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
+ ops[FACT]*1e-6/utime[FACT]);
+ printf("Identify relaxed snodes = %8.2f\n", utime[RELAX]);
+ if ( utime[SOLVE] != 0. )
+ printf("Solve flops = %.0f, Mflops = %8.2f\n", ops[SOLVE],
+ ops[SOLVE]*1e-6/utime[SOLVE]);
+
+ Lstore = (SCformat *) L->Store;
+ Ustore = (NCformat *) U->Store;
+ printf("\tNo of nonzeros in factor L = %d\n", Lstore->nnz);
+ 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\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",
+ utime[FACT], ops[FACT]*1e-6/utime[FACT],
+ utime[SOLVE], ops[SOLVE]*1e-6/utime[SOLVE],
+ utime[ETREE], utime[EQUIL], utime[RCOND], utime[REFINE]);
+
+ printf("\tRpg\t\tRcond\t\tFerr\t\tBerr\t\tEquil?\n");
+ printf("NUM:\t%e\t%e\t%e\t%e\t%s\n",
+ rpg, rcond, ferr[0], berr[0], equed);
+
+}
+
+
+
+
+print_complex_vec(char *what, int n, complex *vec)
+{
+ int i;
+ printf("%s: n %d\n", what, n);
+ for (i = 0; i < n; ++i) printf("%d\t%f%f\n", i, vec[i].r, vec[i].i);
+ return 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/dcolumn_bmod.c b/SuperLU_5.2.0/SRC/dcolumn_bmod.c
new file mode 100644
index 0000000..19fd425
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dcolumn_bmod.c
@@ -0,0 +1,362 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * </pre>
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "slu_ddefs.h"
+
+/*
+ * Function prototypes
+ */
+void dusolve(int, int, double*, double*);
+void dlsolve(int, int, double*, double*);
+void dmatvec(int, int, int, double*, double*, double*);
+
+
+
+/*! \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 (
+ const int jcol, /* in */
+ const int nseg, /* in */
+ double *dense, /* in */
+ double *tempv, /* working array */
+ int *segrep, /* in */
+ int *repfnz, /* in */
+ int fpanelc, /* in -- first column in the current panel */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ double alpha, beta;
+
+ /* krep = representative of current k-th supernode
+ * fsupc = first supernodal column
+ * nsupc = no of columns in supernode
+ * nsupr = no of rows in supernode (used as leading dimension)
+ * luptr = location of supernodal LU-block in storage
+ * kfnz = first nonz in the k-th supernodal segment
+ * no_zeros = no of leading zeros in a supernodal U-segment
+ */
+ double ukj, ukj1, ukj2;
+ int luptr, luptr1, luptr2;
+ int fsupc, nsupc, nsupr, segsze;
+ int nrow; /* No of rows in the matrix of matrix-vector */
+ int jcolp1, jsupno, k, ksub, krep, krep_ind, ksupno;
+ register int lptr, kfnz, isub, irow, i;
+ register int no_zeros, new_next;
+ int ufirst, nextlu;
+ int fst_col; /* First column within small LU update */
+ int d_fsupc; /* Distance between the first column of the current
+ panel and the first column of the current snode. */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ double *lusup;
+ int *xlusup;
+ int nzlumax;
+ double *tempv1;
+ double zero = 0.0;
+ double one = 1.0;
+ double none = -1.0;
+ int mem_error;
+ flops_t *ops = stat->ops;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (double *) Glu->lusup;
+ xlusup = Glu->xlusup;
+ nzlumax = Glu->nzlumax;
+ jcolp1 = jcol + 1;
+ jsupno = supno[jcol];
+
+ /*
+ * For each nonz supernode segment of U[*,j] in topological order
+ */
+ k = nseg - 1;
+ for (ksub = 0; ksub < nseg; ksub++) {
+
+ krep = segrep[k];
+ k--;
+ ksupno = supno[krep];
+ if ( jsupno != ksupno ) { /* Outside the rectangular supernode */
+
+ fsupc = xsup[ksupno];
+ fst_col = SUPERLU_MAX ( fsupc, fpanelc );
+
+ /* Distance from the current supernode to the current panel;
+ d_fsupc=0 if fsupc > fpanelc. */
+ d_fsupc = fst_col - fsupc;
+
+ luptr = xlusup[fst_col] + d_fsupc;
+ lptr = xlsub[fsupc] + d_fsupc;
+
+ kfnz = repfnz[krep];
+ kfnz = SUPERLU_MAX ( kfnz, fpanelc );
+
+ segsze = krep - kfnz + 1;
+ nsupc = krep - fst_col + 1;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
+ nrow = nsupr - d_fsupc - nsupc;
+ krep_ind = lptr + nsupc - 1;
+
+ ops[TRSV] += segsze * (segsze - 1);
+ ops[GEMV] += 2 * nrow * segsze;
+
+
+ /*
+ * Case 1: Update U-segment of size 1 -- col-col update
+ */
+ if ( segsze == 1 ) {
+ ukj = dense[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ dense[irow] -= ukj*lusup[luptr];
+ luptr++;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ ukj1 = dense[lsub[krep_ind - 1]];
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) { /* Case 2: 2cols-col update */
+ ukj -= ukj1 * lusup[luptr1];
+ dense[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++;
+ luptr1++;
+ dense[irow] -= ( ukj*lusup[luptr]
+ + ukj1*lusup[luptr1] );
+ }
+ } else { /* Case 3: 3cols-col update */
+ ukj2 = dense[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ ukj1 -= ukj2 * lusup[luptr2-1];
+ ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
+ dense[lsub[krep_ind]] = ukj;
+ dense[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++;
+ luptr1++;
+ luptr2++;
+ dense[irow] -= ( ukj*lusup[luptr]
+ + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
+ }
+ }
+
+
+
+ } else {
+ /*
+ * Case: sup-col update
+ * Perform a triangular solve and block update,
+ * then scatter the result of sup-col update to dense
+ */
+
+ no_zeros = kfnz - fst_col;
+
+ /* Copy U[*,j] segment from dense[*] to tempv[*] */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ tempv[i] = dense[irow];
+ ++isub;
+ }
+
+ /* Dense triangular solve -- start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#else
+ dtrsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#endif
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ SGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#else
+ dgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#endif
+#else
+ dlsolve ( nsupr, segsze, &lusup[luptr], tempv );
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ dmatvec (nsupr, nrow , segsze, &lusup[luptr], tempv, tempv1);
+#endif
+
+
+ /* Scatter tempv[] into SPA dense[] as a temporary storage */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense[irow] = tempv[i];
+ tempv[i] = zero;
+ ++isub;
+ }
+
+ /* Scatter tempv1[] into SPA dense[] */
+ for (i = 0; i < nrow; i++) {
+ irow = lsub[isub];
+ dense[irow] -= tempv1[i];
+ tempv1[i] = zero;
+ ++isub;
+ }
+ }
+
+ } /* if jsupno ... */
+
+ } /* for each segment... */
+
+ /*
+ * Process the supernodal portion of L\U[*,j]
+ */
+ nextlu = xlusup[jcol];
+ fsupc = xsup[jsupno];
+
+ /* Copy the SPA dense into L\U[*,j] */
+ new_next = nextlu + xlsub[fsupc+1] - xlsub[fsupc];
+ while ( new_next > nzlumax ) {
+ if (mem_error = dLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, Glu))
+ return (mem_error);
+ lusup = (double *) Glu->lusup;
+ lsub = Glu->lsub;
+ }
+
+ for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
+ irow = lsub[isub];
+ lusup[nextlu] = dense[irow];
+ dense[irow] = zero;
+ ++nextlu;
+ }
+
+ xlusup[jcolp1] = nextlu; /* Close L\U[*,jcol] */
+
+ /* For more updates within the panel (also within the current supernode),
+ * should start from the first column of the panel, or the first column
+ * of the supernode, whichever is bigger. There are 2 cases:
+ * 1) fsupc < fpanelc, then fst_col := fpanelc
+ * 2) fsupc >= fpanelc, then fst_col := fsupc
+ */
+ fst_col = SUPERLU_MAX ( fsupc, fpanelc );
+
+ if ( fst_col < jcol ) {
+
+ /* Distance between the current supernode and the current panel.
+ d_fsupc=0 if fsupc >= fpanelc. */
+ d_fsupc = fst_col - fsupc;
+
+ lptr = xlsub[fsupc] + d_fsupc;
+ luptr = xlusup[fst_col] + d_fsupc;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
+ nsupc = jcol - fst_col; /* Excluding jcol */
+ nrow = nsupr - d_fsupc - nsupc;
+
+ /* Points to the beginning of jcol in snode L\U(jsupno) */
+ ufirst = xlusup[jcol] + d_fsupc;
+
+ ops[TRSV] += nsupc * (nsupc - 1);
+ ops[GEMV] += 2 * nrow * nsupc;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr],
+ &nsupr, &lusup[ufirst], &incx );
+#else
+ dtrsv_( "L", "N", "U", &nsupc, &lusup[luptr],
+ &nsupr, &lusup[ufirst], &incx );
+#endif
+
+ alpha = none; beta = one; /* y := beta*y + alpha*A*x */
+
+#ifdef _CRAY
+ SGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#else
+ dgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#endif
+#else
+ dlsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
+
+ dmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
+ &lusup[ufirst], tempv );
+
+ /* Copy updates from tempv[*] into lusup[*] */
+ isub = ufirst + nsupc;
+ for (i = 0; i < nrow; i++) {
+ lusup[isub] -= tempv[i];
+ tempv[i] = 0.0;
+ ++isub;
+ }
+
+#endif
+
+
+ } /* if fst_col < jcol ... */
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/dcolumn_dfs.c b/SuperLU_5.2.0/SRC/dcolumn_dfs.c
new file mode 100644
index 0000000..96c1409
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dcolumn_dfs.c
@@ -0,0 +1,281 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * </pre>
+*/
+
+#include "slu_ddefs.h"
+
+/*! \brief What type of supernodes we want */
+#define T2_SUPER
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ * 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
+ * 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 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.
+ *
+ * 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.
+ *
+ * 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
+ *
+ * Return value
+ * ============
+ * 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 */
+ int fsupc; /* First column of a snode */
+ int myfnz; /* First nonz column of a U-segment */
+ int chperm, chmark, chrep, kchild;
+ int xdfs, maxdfs, kpar, oldrep;
+ int jptr, jm1ptr;
+ int ito, ifrom, istop; /* Used to compress row subscripts */
+ int mem_error;
+ int *xsup, *supno, *lsub, *xlsub;
+ int nzlmax;
+ int maxsuper;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ nzlmax = Glu->nzlmax;
+
+ maxsuper = sp_ienv(3);
+ jcolp1 = jcol + 1;
+ jcolm1 = jcol - 1;
+ nsuper = supno[jcol];
+ jsuper = nsuper;
+ nextl = xlsub[jcol];
+ marker2 = &marker[2*m];
+
+ /* For each nonzero in A[*,jcol] do dfs */
+ for (k = 0; lsub_col[k] != EMPTY; k++) {
+
+ krow = lsub_col[k];
+ lsub_col[k] = EMPTY;
+ kmark = marker2[krow];
+
+ /* krow was visited before, go to the next nonz */
+ if ( kmark == jcol ) continue;
+
+ /* For each unmarked nbr krow of jcol
+ * krow is in L: place it in structure of L[*,jcol]
+ */
+ marker2[krow] = jcol;
+ kperm = perm_r[krow];
+
+ if ( kperm == EMPTY ) {
+ lsub[nextl++] = krow; /* krow is indexed into A */
+ if ( nextl >= nzlmax ) {
+ 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 {
+ /* krow is in U: if its supernode-rep krep
+ * has been explored, update repfnz[*]
+ */
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz[krep];
+
+ if ( myfnz != EMPTY ) { /* Visited before */
+ 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];
+
+ do {
+ /*
+ * For each unmarked kchild of krep
+ */
+ while ( xdfs < maxdfs ) {
+
+ kchild = lsub[xdfs];
+ xdfs++;
+ chmark = marker2[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;
+ if ( nextl >= nzlmax ) {
+ 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 */
+ if ( myfnz > 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) */
+ parent[krep] = oldrep;
+ repfnz[krep] = chperm;
+ xdfs = xlsub[krep];
+ maxdfs = xprune[krep];
+ } /* else */
+
+ } /* else */
+
+ } /* if */
+
+ } /* while */
+
+ /* krow has no more unexplored nbrs;
+ * place supernode-rep krep in postorder DFS.
+ * backtrack dfs to its parent
+ */
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ kpar = parent[krep]; /* Pop from stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ maxdfs = xprune[krep];
+
+ } while ( kpar != EMPTY ); /* Until empty stack */
+
+ } /* else */
+
+ } /* else */
+
+ } /* for each nonzero ... */
+
+ /* Check to see if j belongs in the same supernode as j-1 */
+ if ( jcol == 0 ) { /* Do nothing for column 0 */
+ nsuper = supno[0] = 0;
+ } else {
+ fsupc = xsup[nsuper];
+ jptr = xlsub[jcol]; /* Not compressed yet */
+ jm1ptr = xlsub[jcolm1];
+
+#ifdef T2_SUPER
+ if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
+#endif
+ /* 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)
+ */
+ if ( jsuper == EMPTY ) { /* starts a new supernode */
+ if ( (fsupc < jcolm1-1) ) { /* >= 3 columns in nsuper */
+#ifdef CHK_COMPRESS
+ printf(" Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
+#endif
+ 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)
+ lsub[ito] = lsub[ifrom];
+ nextl = ito; /* = istop + length(jcol) */
+ }
+ nsuper++;
+ supno[jcol] = nsuper;
+ } /* if a new supernode */
+
+ } /* 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/SuperLU_5.2.0/SRC/dcomplex.c b/SuperLU_5.2.0/SRC/dcomplex.c
new file mode 100644
index 0000000..0da48a9
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dcomplex.c
@@ -0,0 +1,157 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+
+/*! \brief Complex Division c = a/b */
+void z_div(doublecomplex *c, doublecomplex *a, doublecomplex *b)
+{
+ double ratio, den;
+ double abr, abi, cr, ci;
+
+ if( (abr = b->r) < 0.)
+ abr = - abr;
+ if( (abi = b->i) < 0.)
+ abi = - abi;
+ if( abr <= abi ) {
+ if (abi == 0) {
+ fprintf(stderr, "z_div.c: division by zero\n");
+ exit(-1);
+ }
+ ratio = b->r / b->i ;
+ den = b->i * (1 + ratio*ratio);
+ cr = (a->r*ratio + a->i) / den;
+ ci = (a->i*ratio - a->r) / den;
+ } else {
+ ratio = b->i / b->r ;
+ den = b->r * (1 + ratio*ratio);
+ cr = (a->r + a->i*ratio) / den;
+ ci = (a->i - a->r*ratio) / den;
+ }
+ c->r = cr;
+ c->i = ci;
+}
+
+
+/*! \brief Returns sqrt(z.r^2 + z.i^2) */
+double z_abs(doublecomplex *z)
+{
+ double temp;
+ double real = z->r;
+ double imag = z->i;
+
+ if (real < 0) real = -real;
+ if (imag < 0) imag = -imag;
+ if (imag > real) {
+ temp = real;
+ real = imag;
+ imag = temp;
+ }
+ if ((real+imag) == real) return(real);
+
+ temp = imag/real;
+ temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/
+ return (temp);
+}
+
+
+/*! \brief Approximates the abs. Returns abs(z.r) + abs(z.i) */
+double z_abs1(doublecomplex *z)
+{
+ double real = z->r;
+ double imag = z->i;
+
+ if (real < 0) real = -real;
+ if (imag < 0) imag = -imag;
+
+ return (real + imag);
+}
+
+/*! \brief Return the exponentiation */
+void z_exp(doublecomplex *r, doublecomplex *z)
+{
+ double expx;
+
+ expx = exp(z->r);
+ r->r = expx * cos(z->i);
+ r->i = expx * sin(z->i);
+}
+
+/*! \brief Return the complex conjugate */
+void d_cnjg(doublecomplex *r, doublecomplex *z)
+{
+ r->r = z->r;
+ r->i = -z->i;
+}
+
+/*! \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/SuperLU_5.2.0/SRC/dcopy_to_ucol.c b/SuperLU_5.2.0/SRC/dcopy_to_ucol.c
new file mode 100644
index 0000000..d56f71c
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dcopy_to_ucol.c
@@ -0,0 +1,113 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_ddefs.h"
+
+int
+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 */
+ GlobalLU_t *Glu /* modified */
+ )
+{
+/*
+ * 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;
+ double zero = 0.0;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ ucol = (double *) Glu->ucol;
+ usub = Glu->usub;
+ xusub = Glu->xusub;
+ nzumax = Glu->nzumax;
+
+ 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))
+ return (mem_error);
+ ucol = (double *) Glu->ucol;
+ if (mem_error = dLUMemXpand(jcol, nextu, USUB, &nzumax, Glu))
+ return (mem_error);
+ usub = Glu->usub;
+ lsub = Glu->lsub;
+ }
+
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ usub[nextu] = perm_r[irow];
+ ucol[nextu] = dense[irow];
+ dense[irow] = zero;
+ nextu++;
+ isub++;
+ }
+
+ }
+
+ }
+
+ } /* for each segment... */
+
+ xusub[jcol + 1] = nextu; /* Close U[*,jcol] */
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/ddiagonal.c b/SuperLU_5.2.0/SRC/ddiagonal.c
new file mode 100644
index 0000000..98c7990
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ddiagonal.c
@@ -0,0 +1,139 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/dgscon.c b/SuperLU_5.2.0/SRC/dgscon.c
new file mode 100644
index 0000000..d51f24c
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dgscon.c
@@ -0,0 +1,168 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file dgscon.c
+ * \brief Estimates reciprocal of the condition number of a general matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * July 25, 2015
+ *
+ * Modified from lapack routines DGECON.
+ * </pre>
+ */
+
+/*
+ * File name: dgscon.c
+ * History: Modified from lapack routines DGECON.
+ */
+#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)
+{
+
+
+ /* Local variables */
+ int kase, kase1, onenrm, i;
+ double ainvnm;
+ double *work;
+ int *iwork;
+ int isave[3];
+ extern int drscl_(int *, double *, double *, int *);
+
+ extern int dlacon2_(int *, double *, double *, int *, double *, int *, int []);
+
+
+ /* Test the input parameters. */
+ *info = 0;
+ onenrm = *(unsigned char *)norm == '1' || strncmp(norm, "O", 1)==0;
+ if (! onenrm && ! strncmp(norm, "I", 1)==0) *info = -1;
+ else if (L->nrow < 0 || L->nrow != L->ncol ||
+ L->Stype != SLU_SC || L->Dtype != SLU_D || L->Mtype != SLU_TRLU)
+ *info = -2;
+ else if (U->nrow < 0 || U->nrow != U->ncol ||
+ U->Stype != SLU_NC || U->Dtype != SLU_D || U->Mtype != SLU_TRU)
+ *info = -3;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("dgscon", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ *rcond = 0.;
+ if ( L->nrow == 0 || U->nrow == 0) {
+ *rcond = 1.;
+ return;
+ }
+
+ work = doubleCalloc( 3*L->nrow );
+ iwork = intMalloc( L->nrow );
+
+
+ if ( !work || !iwork )
+ ABORT("Malloc fails for work arrays in dgscon.");
+
+ /* Estimate the norm of inv(A). */
+ ainvnm = 0.;
+ if ( onenrm ) kase1 = 1;
+ else kase1 = 2;
+ kase = 0;
+
+ do {
+ dlacon2_(&L->nrow, &work[L->nrow], &work[0], &iwork[0], &ainvnm, &kase, isave);
+
+ if (kase == 0) break;
+
+ if (kase == kase1) {
+ /* Multiply by inv(L). */
+ sp_dtrsv("L", "No trans", "Unit", L, U, &work[0], stat, info);
+
+ /* Multiply by inv(U). */
+ sp_dtrsv("U", "No trans", "Non-unit", L, U, &work[0], stat, info);
+
+ } else {
+
+ /* Multiply by inv(U'). */
+ sp_dtrsv("U", "Transpose", "Non-unit", L, U, &work[0], stat, info);
+
+ /* Multiply by inv(L'). */
+ sp_dtrsv("L", "Transpose", "Unit", L, U, &work[0], stat, info);
+
+ }
+
+ } while ( kase != 0 );
+
+ /* Compute the estimate of the reciprocal condition number. */
+ if (ainvnm != 0.) *rcond = (1. / ainvnm) / anorm;
+
+ SUPERLU_FREE (work);
+ SUPERLU_FREE (iwork);
+ return;
+
+} /* dgscon */
+
diff --git a/SuperLU_5.2.0/SRC/dgsequ.c b/SuperLU_5.2.0/SRC/dgsequ.c
new file mode 100644
index 0000000..8de29dc
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dgsequ.c
@@ -0,0 +1,205 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from LAPACK routine DGEEQU
+ */
+#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)
+{
+
+
+ /* Local variables */
+ NCformat *Astore;
+ double *Aval;
+ int i, j, irow;
+ double rcmin, rcmax;
+ double bignum, smlnum;
+ extern double dmach(char *);
+
+ /* Test the input parameters. */
+ *info = 0;
+ if ( A->nrow < 0 || A->ncol < 0 ||
+ A->Stype != SLU_NC || A->Dtype != SLU_D || A->Mtype != SLU_GE )
+ *info = -1;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("dgsequ", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ if ( A->nrow == 0 || A->ncol == 0 ) {
+ *rowcnd = 1.;
+ *colcnd = 1.;
+ *amax = 0.;
+ return;
+ }
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Get machine constants. */
+ smlnum = dmach("S"); /* slamch_("S"); */
+ bignum = 1. / smlnum;
+
+ /* Compute row scale factors. */
+ for (i = 0; i < A->nrow; ++i) r[i] = 0.;
+
+ /* Find the maximum element in each row. */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ r[irow] = SUPERLU_MAX( r[irow], fabs(Aval[i]) );
+ }
+
+ /* Find the maximum and minimum scale factors. */
+ rcmin = bignum;
+ rcmax = 0.;
+ for (i = 0; i < A->nrow; ++i) {
+ rcmax = SUPERLU_MAX(rcmax, r[i]);
+ rcmin = SUPERLU_MIN(rcmin, r[i]);
+ }
+ *amax = rcmax;
+
+ if (rcmin == 0.) {
+ /* Find the first zero scale factor and return an error code. */
+ for (i = 0; i < A->nrow; ++i)
+ if (r[i] == 0.) {
+ *info = i + 1;
+ return;
+ }
+ } else {
+ /* Invert the scale factors. */
+ for (i = 0; i < A->nrow; ++i)
+ r[i] = 1. / SUPERLU_MIN( SUPERLU_MAX( r[i], smlnum ), bignum );
+ /* Compute ROWCND = min(R(I)) / max(R(I)) */
+ *rowcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
+ }
+
+ /* Compute column scale factors */
+ for (j = 0; j < A->ncol; ++j) c[j] = 0.;
+
+ /* Find the maximum element in each column, assuming the row
+ scalings computed above. */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ c[j] = SUPERLU_MAX( c[j], fabs(Aval[i]) * r[irow] );
+ }
+
+ /* Find the maximum and minimum scale factors. */
+ rcmin = bignum;
+ rcmax = 0.;
+ for (j = 0; j < A->ncol; ++j) {
+ rcmax = SUPERLU_MAX(rcmax, c[j]);
+ rcmin = SUPERLU_MIN(rcmin, c[j]);
+ }
+
+ if (rcmin == 0.) {
+ /* Find the first zero scale factor and return an error code. */
+ for (j = 0; j < A->ncol; ++j)
+ if ( c[j] == 0. ) {
+ *info = A->nrow + j + 1;
+ return;
+ }
+ } else {
+ /* Invert the scale factors. */
+ for (j = 0; j < A->ncol; ++j)
+ c[j] = 1. / SUPERLU_MIN( SUPERLU_MAX( c[j], smlnum ), bignum);
+ /* Compute COLCND = min(C(J)) / max(C(J)) */
+ *colcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
+ }
+
+ return;
+
+} /* dgsequ */
+
+
diff --git a/SuperLU_5.2.0/SRC/dgsisx.c b/SuperLU_5.2.0/SRC/dgsisx.c
new file mode 100644
index 0000000..17651db
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dgsisx.c
@@ -0,0 +1,738 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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,
+ GlobalLU_t *Glu, 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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ smlnum = dmach("Safe minimum"); /* lamch_("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 || strncmp(equed, "N", 1)==0) )
+ *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);
+ input_error("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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ }
+ 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, Glu, 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 ( *rcond < dmach("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/SuperLU_5.2.0/SRC/dgsitrf.c b/SuperLU_5.2.0/SRC/dgsitrf.c
new file mode 100644
index 0000000..d95b228
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dgsitrf.c
@@ -0,0 +1,663 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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,
+ GlobalLU_t *Glu, /* persistent to facilitate multiple factorizations */
+ 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 */
+ 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]++;
+ ((double *) 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 = (double *) 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 = (double *) Glu->ucol;
+ ((NCformat *)U->Store)->rowind = Glu->usub;
+ ((NCformat *)U->Store)->colptr = Glu->xusub;
+ } else {
+ dCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL,
+ (double *) 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,
+ (double *) 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/SuperLU_5.2.0/SRC/dgsrfs.c b/SuperLU_5.2.0/SRC/dgsrfs.c
new file mode 100644
index 0000000..d372260
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dgsrfs.c
@@ -0,0 +1,468 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file dgsrfs.c
+ * \brief Improves computed solution to a system of inear equations
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Modified from lapack routine DGERFS
+ * Last modified: December 3, 2015
+ * </pre>
+ */
+/*
+ * File name: dgsrfs.c
+ * History: Modified from lapack routine DGERFS
+ */
+#include <math.h>
+#include "slu_ddefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * DGSRFS improves the computed solution to a system of linear
+ * equations and provides error bounds and backward error estimates for
+ * the solution.
+ *
+ * If equilibration was performed, the system becomes:
+ * (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * 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)
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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_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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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 dgstrs().
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See 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
+ *
+ * Internal Parameters
+ * ===================
+ *
+ * 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
+
+ /* Table of constant values */
+ int ione = 1;
+ double ndone = -1.;
+ double done = 1.;
+
+ /* Local variables */
+ NCformat *Astore;
+ double *Aval;
+ SuperMatrix Bjcol;
+ DNformat *Bstore, *Xstore, *Bjcol_store;
+ double *Bmat, *Xmat, *Bptr, *Xptr;
+ int kase;
+ double safe1, safe2;
+ int i, j, k, irow, nz, count, notran, rowequ, colequ;
+ int ldb, ldx, nrhs;
+ double s, xk, lstres, eps, safmin;
+ char transc[1];
+ trans_t transt;
+ double *work;
+ double *rwork;
+ int *iwork;
+ int isave[3];
+
+ extern int dlacon2_(int *, double *, double *, int *, double *, int *, int []);
+#ifdef _CRAY
+ extern int SCOPY(int *, double *, int *, double *, int *);
+ extern int SSAXPY(int *, double *, double *, int *, double *, int *);
+#else
+ extern int dcopy_(int *, double *, int *, double *, int *);
+ extern int daxpy_(int *, double *, double *, int *, double *, int *);
+#endif
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+ Bstore = B->Store;
+ Xstore = X->Store;
+ Bmat = Bstore->nzval;
+ Xmat = Xstore->nzval;
+ ldb = Bstore->lda;
+ ldx = Xstore->lda;
+ nrhs = B->ncol;
+
+ /* Test the input parameters */
+ *info = 0;
+ notran = (trans == NOTRANS);
+ if ( !notran && trans != TRANS && trans != CONJ ) *info = -1;
+ else if ( A->nrow != A->ncol || A->nrow < 0 ||
+ A->Stype != SLU_NC || A->Dtype != SLU_D || A->Mtype != SLU_GE )
+ *info = -2;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ||
+ L->Stype != SLU_SC || L->Dtype != SLU_D || L->Mtype != SLU_TRLU )
+ *info = -3;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ||
+ U->Stype != SLU_NC || U->Dtype != SLU_D || U->Mtype != SLU_TRU )
+ *info = -4;
+ else if ( ldb < SUPERLU_MAX(0, A->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_D || B->Mtype != SLU_GE )
+ *info = -10;
+ else if ( ldx < SUPERLU_MAX(0, A->nrow) ||
+ X->Stype != SLU_DN || X->Dtype != SLU_D || X->Mtype != SLU_GE )
+ *info = -11;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("dgsrfs", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ if ( A->nrow == 0 || nrhs == 0) {
+ for (j = 0; j < nrhs; ++j) {
+ ferr[j] = 0.;
+ berr[j] = 0.;
+ }
+ return;
+ }
+
+ rowequ = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+
+ /* Allocate working space */
+ work = doubleMalloc(2*A->nrow);
+ rwork = (double *) SUPERLU_MALLOC( A->nrow * sizeof(double) );
+ iwork = intMalloc(2*A->nrow);
+ if ( !work || !rwork || !iwork )
+ ABORT("Malloc fails for work/rwork/iwork.");
+
+ if ( notran ) {
+ *(unsigned char *)transc = 'N';
+ transt = TRANS;
+ } else if ( trans == TRANS ) {
+ *(unsigned char *)transc = 'T';
+ transt = NOTRANS;
+ } else if ( trans == CONJ ) {
+ *(unsigned char *)transc = 'C';
+ transt = NOTRANS;
+ }
+
+ /* NZ = maximum number of nonzero elements in each row of A, plus 1 */
+ nz = A->ncol + 1;
+ eps = dmach("Epsilon");
+ safmin = dmach("Safe minimum");
+
+ /* Set SAFE1 essentially to be the underflow threshold times the
+ number of additions in each row. */
+ safe1 = nz * safmin;
+ safe2 = safe1 / eps;
+
+ /* Compute the number of nonzeros in each row (or column) of A */
+ for (i = 0; i < A->nrow; ++i) iwork[i] = 0;
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k)
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ ++iwork[Astore->rowind[i]];
+ } else {
+ for (k = 0; k < A->ncol; ++k)
+ iwork[k] = Astore->colptr[k+1] - Astore->colptr[k];
+ }
+
+ /* Copy one column of RHS B into Bjcol. */
+ Bjcol.Stype = B->Stype;
+ Bjcol.Dtype = B->Dtype;
+ Bjcol.Mtype = B->Mtype;
+ Bjcol.nrow = B->nrow;
+ Bjcol.ncol = 1;
+ Bjcol.Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
+ if ( !Bjcol.Store ) ABORT("SUPERLU_MALLOC fails for Bjcol.Store");
+ Bjcol_store = Bjcol.Store;
+ Bjcol_store->lda = ldb;
+ Bjcol_store->nzval = work; /* address aliasing */
+
+ /* Do for each right hand side ... */
+ for (j = 0; j < nrhs; ++j) {
+ count = 0;
+ lstres = 3.;
+ Bptr = &Bmat[j*ldb];
+ Xptr = &Xmat[j*ldx];
+
+ while (1) { /* Loop until stopping criterion is satisfied. */
+
+ /* Compute residual R = B - op(A) * X,
+ where op(A) = A, A**T, or A**H, depending on TRANS. */
+
+#ifdef _CRAY
+ SCOPY(&A->nrow, Bptr, &ione, work, &ione);
+#else
+ dcopy_(&A->nrow, Bptr, &ione, work, &ione);
+#endif
+ sp_dgemv(transc, ndone, A, Xptr, ione, done, work, ione);
+
+ /* Compute componentwise relative backward error from formula
+ max(i) ( abs(R(i)) / ( abs(op(A))*abs(X) + abs(B) )(i) )
+ 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 before dividing. */
+
+ for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
+
+ /* Compute abs(op(A))*abs(X) + abs(B). */
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k) {
+ xk = fabs( Xptr[k] );
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ rwork[Astore->rowind[i]] += fabs(Aval[i]) * xk;
+ }
+ } else { /* trans = TRANS or CONJ */
+ for (k = 0; k < A->ncol; ++k) {
+ s = 0.;
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+ irow = Astore->rowind[i];
+ s += fabs(Aval[i]) * fabs(Xptr[irow]);
+ }
+ rwork[k] += s;
+ }
+ }
+ s = 0.;
+ for (i = 0; i < A->nrow; ++i) {
+ if (rwork[i] > safe2) {
+ s = SUPERLU_MAX( s, fabs(work[i]) / rwork[i] );
+ } 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;
+
+ /* Test stopping criterion. Continue iterating if
+ 1) The residual BERR(J) is larger than machine epsilon, and
+ 2) BERR(J) decreased by at least a factor of 2 during the
+ last iteration, and
+ 3) At most ITMAX iterations tried. */
+
+ if (berr[j] > eps && berr[j] * 2. <= lstres && count < ITMAX) {
+ /* Update solution and try again. */
+ dgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+#ifdef _CRAY
+ SAXPY(&A->nrow, &done, work, &ione,
+ &Xmat[j*ldx], &ione);
+#else
+ daxpy_(&A->nrow, &done, work, &ione,
+ &Xmat[j*ldx], &ione);
+#endif
+ lstres = berr[j];
+ ++count;
+ } else {
+ break;
+ }
+
+ } /* end while */
+
+ stat->RefineSteps = count;
+
+ /* Bound error from formula:
+ norm(X - XTRUE) / norm(X) .le. FERR = norm( abs(inv(op(A)))*
+ ( abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) / norm(X)
+ where
+ norm(Z) is the magnitude of the largest component of Z
+ inv(op(A)) is the inverse of op(A)
+ abs(Z) is the componentwise absolute value of the matrix or
+ vector Z
+ NZ is the maximum number of nonzeros in any row of A, plus 1
+ EPS is machine epsilon
+
+ The i-th component of abs(R)+NZ*EPS*(abs(op(A))*abs(X)+abs(B))
+ is incremented by SAFE1 if the i-th component of
+ abs(op(A))*abs(X) + abs(B) is less than SAFE2.
+
+ Use DLACON2 to estimate the infinity-norm of the matrix
+ inv(op(A)) * diag(W),
+ where W = abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) */
+
+ for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
+
+ /* Compute abs(op(A))*abs(X) + abs(B). */
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k) {
+ xk = fabs( Xptr[k] );
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ rwork[Astore->rowind[i]] += fabs(Aval[i]) * xk;
+ }
+ } else { /* trans == TRANS or CONJ */
+ for (k = 0; k < A->ncol; ++k) {
+ s = 0.;
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+ irow = Astore->rowind[i];
+ xk = fabs( Xptr[irow] );
+ s += fabs(Aval[i]) * xk;
+ }
+ rwork[k] += s;
+ }
+ }
+
+ for (i = 0; i < A->nrow; ++i)
+ if (rwork[i] > safe2)
+ rwork[i] = fabs(work[i]) + (iwork[i]+1)*eps*rwork[i];
+ else
+ rwork[i] = fabs(work[i])+(iwork[i]+1)*eps*rwork[i]+safe1;
+
+ kase = 0;
+
+ do {
+ dlacon2_(&A->nrow, &work[A->nrow], work,
+ &iwork[A->nrow], &ferr[j], &kase, isave);
+ if (kase == 0) break;
+
+ if (kase == 1) {
+ /* Multiply by diag(W)*inv(op(A)**T)*(diag(C) or diag(R)). */
+ if ( notran && colequ )
+ for (i = 0; i < A->ncol; ++i) work[i] *= C[i];
+ else if ( !notran && rowequ )
+ for (i = 0; i < A->nrow; ++i) work[i] *= R[i];
+
+ dgstrs (transt, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+ for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i];
+ } else {
+ /* Multiply by (diag(C) or diag(R))*inv(op(A))*diag(W). */
+ for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i];
+
+ dgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+ if ( notran && colequ )
+ for (i = 0; i < A->ncol; ++i) work[i] *= C[i];
+ else if ( !notran && rowequ )
+ for (i = 0; i < A->ncol; ++i) work[i] *= R[i];
+ }
+
+ } while ( kase != 0 );
+
+
+ /* Normalize error. */
+ lstres = 0.;
+ if ( notran && colequ ) {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, C[i] * fabs( Xptr[i]) );
+ } else if ( !notran && rowequ ) {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, R[i] * fabs( Xptr[i]) );
+ } else {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, fabs( Xptr[i]) );
+ }
+ if ( lstres != 0. )
+ ferr[j] /= lstres;
+
+ } /* for each RHS j ... */
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(rwork);
+ SUPERLU_FREE(iwork);
+ SUPERLU_FREE(Bjcol.Store);
+
+ return;
+
+} /* dgsrfs */
diff --git a/SuperLU_5.2.0/SRC/dgssv.c b/SuperLU_5.2.0/SRC/dgssv.c
new file mode 100644
index 0000000..a41d6f0
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dgssv.c
@@ -0,0 +1,238 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * DGSSV solves the system of linear equations A*X=B, using the
+ * LU factorization from DGSTRF. It performs the following steps:
+ *
+ * 1. If A is stored column-wise (A->Stype = SLU_NC):
+ *
+ * 1.1. Permute the columns of A, forming A*Pc, where Pc
+ * is a permutation matrix. For more details of this step,
+ * see sp_preorder.c.
+ *
+ * 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.
+ *
+ * 1.3. Solve the system of equations A*X=B using the factored
+ * form of A.
+ *
+ * 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ * above algorithm to the transpose of A:
+ *
+ * 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 sp_preorder.c.
+ *
+ * 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.
+ *
+ * 2.3. Solve the system of equations A*X=B using the factored
+ * form of A.
+ *
+ * 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) 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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->RowPerm = MY_PERMR or
+ * options->Fact = SamePattern_SameRowPerm, perm_r is an
+ * input argument.
+ * otherwise it is an output argument.
+ *
+ * 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.
+ *
+ * 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;
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See util.h for the definition of 'SuperLUStat_t'.
+ *
+ * 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>
+ */
+
+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;
+ GlobalLU_t Glu; /* Not needed on return. */
+
+ /* Set default values for some parameters */
+ int panel_size; /* panel size */
+ int relax; /* no of columns in a relaxed snodes */
+ int permc_spec;
+ trans_t trans = NOTRANS;
+ double *utime;
+ double t; /* Temporary time */
+
+ /* Test the input parameters ... */
+ *info = 0;
+ Bstore = B->Store;
+ if ( options->Fact != DOFACT ) *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 ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_D || B->Mtype != SLU_GE )
+ *info = -7;
+ if ( *info != 0 ) {
+ i = -(*info);
+ input_error("dgssv", &i);
+ return;
+ }
+
+ 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);
+ trans = TRANS;
+ } else {
+ if ( A->Stype == SLU_NC ) AA = A;
+ }
+
+ t = SuperLU_timer_();
+ /*
+ * Get 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_() - t;
+
+ etree = intMalloc(A->ncol);
+
+ t = SuperLU_timer_();
+ sp_preorder(options, AA, perm_c, etree, &AC);
+ utime[ETREE] = SuperLU_timer_() - t;
+
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+
+ /*printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
+ relax, panel_size, sp_ienv(3), sp_ienv(4));*/
+ t = SuperLU_timer_();
+ /* Compute the LU factorization of A. */
+ dgstrf(options, &AC, relax, panel_size, etree,
+ NULL, lwork, perm_c, perm_r, L, U, &Glu, stat, info);
+ utime[FACT] = SuperLU_timer_() - t;
+
+ t = SuperLU_timer_();
+ if ( *info == 0 ) {
+ /* Solve the system A*X=B, overwriting B with X. */
+ dgstrs (trans, L, U, perm_c, perm_r, B, stat, info);
+ }
+ utime[SOLVE] = SuperLU_timer_() - t;
+
+ SUPERLU_FREE (etree);
+ Destroy_CompCol_Permuted(&AC);
+ if ( A->Stype == SLU_NR ) {
+ Destroy_SuperMatrix_Store(AA);
+ SUPERLU_FREE(AA);
+ }
+
+}
diff --git a/SuperLU_5.2.0/SRC/dgssvx.c b/SuperLU_5.2.0/SRC/dgssvx.c
new file mode 100644
index 0000000..e48d73e
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dgssvx.c
@@ -0,0 +1,646 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * DGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ * the LU factorization from dgstrf(). Error bounds on the solution and
+ * a condition estimate are also provided. It performs the following steps:
+ *
+ * 1. If A is stored column-wise (A->Stype = SLU_NC):
+ *
+ * 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).
+ *
+ * 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 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.
+ *
+ * 1.6. The system of equations is solved for X using the factored form
+ * of A.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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, 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 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.
+ *
+ * 2.6. The system of equations is solved for X using the factored form
+ * of transpose(A).
+ *
+ * 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.
+ *
+ * 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.
+ * 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).
+ *
+ * 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_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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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: 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>
+ */
+
+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,
+ GlobalLU_t *Glu, mem_usage_t *mem_usage, SuperLUStat_t *stat, int *info )
+{
+
+
+ DNformat *Bstore, *Xstore;
+ double *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;
+ 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;
+
+ /* 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;
+
+ *info = 0;
+ nofact = (options->Fact != FACTORED);
+ equil = (options->Equil == YES);
+ notran = (options->Trans == NOTRANS);
+ if ( nofact ) {
+ *(unsigned char *)equed = 'N';
+ rowequ = FALSE;
+ colequ = FALSE;
+ } else {
+ rowequ = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ smlnum = dmach("Safe minimum"); /* lamch_("Safe minimum"); */
+ bignum = 1. / smlnum;
+ }
+
+#if 0
+printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
+ options->Fact, options->Trans, *equed);
+#endif
+
+ /* 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 || strncmp(equed, "N", 1)==0) )
+ *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 ) *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;
+ }
+ 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) {
+ i = -(*info);
+ input_error("dgssvx", &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 && equil ) {
+ 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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ }
+ 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;
+
+/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
+ relax, panel_size, sp_ienv(3), sp_ienv(4));
+ fflush(stdout); */
+
+ /* Compute the LU factorization of A*Pc. */
+ t0 = SuperLU_timer_();
+ dgstrf(options, &AC, relax, panel_size, etree,
+ work, lwork, perm_c, perm_r, L, U, Glu, stat, info);
+ utime[FACT] = SuperLU_timer_() - t0;
+
+ if ( lwork == -1 ) {
+ mem_usage->total_needed = *info - A->ncol;
+ return;
+ }
+ }
+
+ if ( *info > 0 ) {
+ if ( *info <= A->ncol ) {
+ /* Compute the reciprocal pivot growth factor of the leading
+ rank-deficient (*info) columns of A. */
+ *recip_pivot_growth = dPivotGrowth(*info, AA, perm_c, L, U);
+ }
+ return;
+ }
+
+ /* *info == 0 at this point. */
+
+ if ( options->PivotGrowth ) {
+ /* 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 ) {
+ /* 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++)
+ 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;
+
+ /* Use iterative refinement to improve the computed solution and compute
+ error bounds and backward error estimates for it. */
+ t0 = SuperLU_timer_();
+ if ( options->IterRefine != NOREFINE ) {
+ dgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
+ X, ferr, berr, stat, &info1);
+ } else {
+ for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
+ }
+ utime[REFINE] = 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 < 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)
+ Xmat[i + j*ldx] *= R[i];
+ }
+ } /* 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 = A->ncol + 1;*/
+ if ( *rcond < dmach("E") ) *info = A->ncol + 1;
+ }
+
+ if ( nofact ) {
+ dQuerySpace(L, U, mem_usage);
+ Destroy_CompCol_Permuted(&AC);
+ }
+ if ( A->Stype == SLU_NR ) {
+ Destroy_SuperMatrix_Store(AA);
+ SUPERLU_FREE(AA);
+ }
+
+}
diff --git a/SuperLU_5.2.0/SRC/dgstrf.c b/SuperLU_5.2.0/SRC/dgstrf.c
new file mode 100644
index 0000000..25fdf5a
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dgstrf.c
@@ -0,0 +1,459 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_ddefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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: 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.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ * m = number of rows in the matrix
+ * n = number of columns in the matrix
+ *
+ * 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.
+ *
+ * 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 dpanel_dfs.c; marker2 is used for inner-factorization,
+ * see dcolumn_dfs.c.
+ *
+ * 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_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,
+ GlobalLU_t *Glu, /* persistent to facilitate multiple factorizations */
+ 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 *iwork;
+ double *dwork;
+ int *segrep, *repfnz, *parent, *xplore;
+ int *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+ int *xprune;
+ int *marker;
+ double *dense, *tempv;
+ int *relax_end;
+ double *a;
+ int *asub;
+ int *xa_begin, *xa_end;
+ int *xsup, *supno;
+ int *xlsub, *xlusup, *xusub;
+ int nzlumax;
+ double fill_ratio = sp_ienv(6); /* estimated fill ratio */
+
+ /* Local scalars */
+ fact_t fact = options->Fact;
+ double diag_pivot_thresh = options->DiagPivotThresh;
+ 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;
+
+ 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, fill_ratio, 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, &xprune, &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;
+
+ /* Identify relaxed snodes */
+ relax_end = (int *) intMalloc(n);
+ if ( options->SymmetricMode == YES ) {
+ heap_relax_snode(n, etree, relax, marker, relax_end);
+ } else {
+ relax_snode(n, etree, relax, marker, relax_end);
+ }
+
+ 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;
+
+ /*
+ * 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]++;
+
+ /* --------------------------------------
+ * Factorize the relaxed supernode(jcol:kcol)
+ * -------------------------------------- */
+ /* Determine the union of the row structure of the snode */
+ if ( (*info = dsnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+ xprune, 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;
+
+ /* Scatter into SPA dense[*] */
+ for (k = xa_begin[icol]; k < xa_end[icol]; k++)
+ dense[asub[k]] = a[k];
+
+ /* Numeric update within the snode */
+ dsnode_bmod(icol, jsupno, fsupc, dense, tempv, Glu, stat);
+
+ if ( (*info = dpivotL(icol, diag_pivot_thresh, &usepr, perm_r,
+ iperm_r, iperm_c, &pivrow, Glu, stat)) )
+ if ( iinfo == 0 ) iinfo = *info;
+
+#ifdef DEBUG
+ dprint_lu_col("[1]: ", icol, pivrow, xprune, Glu);
+#endif
+
+ }
+
+ jcol = icol;
+
+ } 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 */
+ dpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+ dense, panel_lsub, segrep, repfnz, xprune,
+ 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 */
+
+ if ((*info = dcolumn_dfs(m, jj, perm_r, &nseg, &panel_lsub[k],
+ segrep, &repfnz[k], xprune, marker,
+ parent, xplore, Glu)) != 0) return;
+
+ /* Numeric updates */
+ if ((*info = dcolumn_bmod(jj, (nseg - nseg1), &dense[k],
+ tempv, &segrep[nseg1], &repfnz[k],
+ jcol, Glu, stat)) != 0) return;
+
+ /* Copy the U-segments to ucol[*] */
+ if ((*info = dcopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+ perm_r, &dense[k], Glu)) != 0)
+ return;
+
+ if ( (*info = dpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+ iperm_r, iperm_c, &pivrow, Glu, stat)) )
+ if ( iinfo == 0 ) iinfo = *info;
+
+ /* Prune columns (0:jj-1) using column jj */
+ dpruneL(jj, perm_r, pivrow, nseg, segrep,
+ &repfnz[k], xprune, Glu);
+
+ /* Reset repfnz[] for this column */
+ resetrep_col (nseg, segrep, &repfnz[k]);
+
+#ifdef DEBUG
+ dprint_lu_col("[2]: ", jj, pivrow, xprune, Glu);
+#endif
+
+ }
+
+ 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;
+ }
+ }
+
+ countnz(min_mn, xprune, &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 = (double *) 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 = (double *) Glu->ucol;
+ ((NCformat *)U->Store)->rowind = Glu->usub;
+ ((NCformat *)U->Store)->colptr = Glu->xusub;
+ } else {
+ dCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL,
+ (double *) 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,
+ (double *) 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);
+
+}
diff --git a/SuperLU_5.2.0/SRC/dgstrs.c b/SuperLU_5.2.0/SRC/dgstrs.c
new file mode 100644
index 0000000..8482c65
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dgstrs.c
@@ -0,0 +1,347 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_ddefs.h"
+
+
+/*
+ * Function prototypes
+ */
+void dusolve(int, int, double*, double*);
+void dlsolve(int, int, double*, double*);
+void dmatvec(int, int, int, double*, double*, double*);
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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.
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * 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)
+ *
+ * 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_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.
+ *
+ * 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;
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See 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
+ * </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
+ int incx = 1, incy = 1;
+#ifdef USE_VENDOR_BLAS
+ double alpha = 1.0, beta = 1.0;
+ double *work_col;
+#endif
+ DNformat *Bstore;
+ double *Bmat;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ double *Lval, *Uval;
+ int fsupc, nrow, nsupr, nsupc, luptr, istart, irow;
+ int i, j, k, iptr, jcol, n, ldb, nrhs;
+ double *work, *rhs_work, *soln;
+ flops_t solve_ops;
+ void dprint_soln();
+
+ /* Test input parameters ... */
+ *info = 0;
+ Bstore = B->Store;
+ ldb = Bstore->lda;
+ nrhs = B->ncol;
+ if ( trans != NOTRANS && trans != TRANS && trans != CONJ ) *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 ( U->nrow != U->ncol || U->nrow < 0 ||
+ U->Stype != SLU_NC || U->Dtype != SLU_D || U->Mtype != SLU_TRU )
+ *info = -3;
+ else if ( ldb < SUPERLU_MAX(0, L->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_D || B->Mtype != SLU_GE )
+ *info = -6;
+ if ( *info ) {
+ i = -(*info);
+ input_error("dgstrs", &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;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+ solve_ops = 0;
+
+ if ( trans == NOTRANS ) {
+ /* 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
+
+ /*
+ * Back solve Ux=y.
+ */
+ for (k = Lstore->nsuper; k >= 0; 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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += nsupc * (nsupc + 1) * nrhs;
+
+ if ( nsupc == 1 ) {
+ rhs_work = &Bmat[0];
+ for (j = 0; j < nrhs; j++) {
+ rhs_work[fsupc] /= Lval[luptr];
+ rhs_work += ldb;
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd("U", strlen("U"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ STRSM( ftcs1, ftcs2, ftcs3, ftcs3, &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+#else
+ dtrsm_("L", "U", "N", "N", &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+#endif
+#else
+ for (j = 0; j < nrhs; j++)
+ dusolve ( nsupr, nsupc, &Lval[luptr], &Bmat[fsupc+j*ldb] );
+#endif
+ }
+
+ for (j = 0; j < nrhs; ++j) {
+ rhs_work = &Bmat[j*ldb];
+ for (jcol = fsupc; jcol < fsupc + nsupc; jcol++) {
+ solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++ ){
+ irow = U_SUB(i);
+ rhs_work[irow] -= rhs_work[jcol] * Uval[i];
+ }
+ }
+ }
+
+ } /* for U-solve */
+
+#ifdef DEBUG
+ printf("After U-solve: x=\n");
+ dprint_soln(n, nrhs, Bmat);
+#endif
+
+ /* Compute the final solution X := Pc*X. */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[k] = rhs_work[perm_c[k]];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ stat->ops[SOLVE] = solve_ops;
+
+ } else { /* Solve A'*X=B or CONJ(A)*X=B */
+ /* Permute right hand sides to form Pc'*B. */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[perm_c[k]] = rhs_work[k];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ stat->ops[SOLVE] = 0;
+ for (k = 0; k < nrhs; ++k) {
+
+ /* Multiply by inv(U'). */
+ sp_dtrsv("U", "T", "N", L, U, &Bmat[k*ldb], stat, info);
+
+ /* Multiply by inv(L'). */
+ sp_dtrsv("L", "T", "U", L, U, &Bmat[k*ldb], stat, info);
+
+ }
+ /* Compute the final solution X := Pr'*X (=inv(Pr)*X) */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[k] = rhs_work[perm_r[k]];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ }
+
+ 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/SuperLU_5.2.0/SRC/dlacon.c b/SuperLU_5.2.0/SRC/dlacon.c
new file mode 100644
index 0000000..ab79a54
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dlacon.c
@@ -0,0 +1,247 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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)
+
+{
+
+
+ /* Table of constant values */
+ int c__1 = 1;
+ double zero = 0.0;
+ double one = 1.0;
+
+ /* Local variables */
+ static int jump;
+ int iter;
+ int jlast;
+ double altsgn, estold;
+ int i, j;
+ double temp;
+#ifdef _CRAY
+ extern int ISAMAX(int *, double *, int *);
+ extern double SASUM(int *, double *, int *);
+ extern int SCOPY(int *, double *, int *, double *, int *);
+#else
+ extern int idamax_(int *, double *, int *);
+ extern double dasum_(int *, double *, int *);
+ extern int dcopy_(int *, double *, int *, double *, int *);
+#endif
+#define d_sign(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */
+#define i_dnnt(a) \
+ ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */
+
+ if ( *kase == 0 ) {
+ for (i = 0; i < *n; ++i) {
+ x[i] = 1. / (double) (*n);
+ }
+ *kase = 1;
+ jump = 1;
+ return 0;
+ }
+
+ switch (jump) {
+ case 1: goto L20;
+ case 2: goto L40;
+ case 3: goto L70;
+ case 4: goto L110;
+ case 5: goto L140;
+ }
+
+ /* ................ ENTRY (JUMP = 1)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
+ L20:
+ if (*n == 1) {
+ v[0] = x[0];
+ *est = fabs(v[0]);
+ /* ... QUIT */
+ goto L150;
+ }
+#ifdef _CRAY
+ *est = SASUM(n, x, &c__1);
+#else
+ *est = dasum_(n, x, &c__1);
+#endif
+
+ for (i = 0; i < *n; ++i) {
+ x[i] = d_sign(one, x[i]);
+ isgn[i] = i_dnnt(x[i]);
+ }
+ *kase = 2;
+ jump = 2;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 2)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
+L40:
+#ifdef _CRAY
+ j = ISAMAX(n, &x[0], &c__1);
+#else
+ j = idamax_(n, &x[0], &c__1);
+#endif
+ --j;
+ iter = 2;
+
+ /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
+L50:
+ for (i = 0; i < *n; ++i) x[i] = zero;
+ x[j] = one;
+ *kase = 1;
+ jump = 3;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 3)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L70:
+#ifdef _CRAY
+ SCOPY(n, x, &c__1, v, &c__1);
+#else
+ dcopy_(n, x, &c__1, v, &c__1);
+#endif
+ estold = *est;
+#ifdef _CRAY
+ *est = SASUM(n, v, &c__1);
+#else
+ *est = dasum_(n, v, &c__1);
+#endif
+
+ for (i = 0; i < *n; ++i)
+ if (i_dnnt(d_sign(one, x[i])) != isgn[i])
+ goto L90;
+
+ /* REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED. */
+ goto L120;
+
+L90:
+ /* TEST FOR CYCLING. */
+ if (*est <= estold) goto L120;
+
+ for (i = 0; i < *n; ++i) {
+ x[i] = d_sign(one, x[i]);
+ isgn[i] = i_dnnt(x[i]);
+ }
+ *kase = 2;
+ jump = 4;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 4)
+ X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
+L110:
+ jlast = j;
+#ifdef _CRAY
+ j = ISAMAX(n, &x[0], &c__1);
+#else
+ j = idamax_(n, &x[0], &c__1);
+#endif
+ --j;
+ if (x[jlast] != fabs(x[j]) && iter < 5) {
+ ++iter;
+ goto L50;
+ }
+
+ /* ITERATION COMPLETE. FINAL STAGE. */
+L120:
+ altsgn = 1.;
+ for (i = 1; i <= *n; ++i) {
+ x[i-1] = altsgn * ((double)(i - 1) / (double)(*n - 1) + 1.);
+ altsgn = -altsgn;
+ }
+ *kase = 1;
+ jump = 5;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 5)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L140:
+#ifdef _CRAY
+ temp = SASUM(n, x, &c__1) / (double)(*n * 3) * 2.;
+#else
+ temp = dasum_(n, x, &c__1) / (double)(*n * 3) * 2.;
+#endif
+ if (temp > *est) {
+#ifdef _CRAY
+ SCOPY(n, &x[0], &c__1, &v[0], &c__1);
+#else
+ dcopy_(n, &x[0], &c__1, &v[0], &c__1);
+#endif
+ *est = temp;
+ }
+
+L150:
+ *kase = 0;
+ return 0;
+
+} /* dlacon_ */
diff --git a/SuperLU_5.2.0/SRC/dlacon2.c b/SuperLU_5.2.0/SRC/dlacon2.c
new file mode 100644
index 0000000..1855b11
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dlacon2.c
@@ -0,0 +1,254 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file dlacon2.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * July 25, 2015
+ * </pre>
+ */
+#include <math.h>
+#include "slu_Cnames.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * DLACON2 estimates the 1-norm of a square matrix A.
+ * Reverse communication is used for evaluating matrix-vector products.
+ *
+ * This is a thread safe version of DLACON, which uses the array ISAVE
+ * in place of a STATIC variables, as follows:
+ *
+ * DLACON DLACON2
+ * jump isave[0]
+ * j isave[1]
+ * iter isave[2]
+ *
+ *
+ * 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.
+ *
+ * isave (input/output) int [3]
+ * ISAVE is INTEGER array, dimension (3)
+ * ISAVE is used to save variables between calls to DLACON2
+ *
+ * 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
+dlacon2_(int *n, double *v, double *x, int *isgn, double *est, int *kase, int isave[3])
+{
+ /* Table of constant values */
+ int c__1 = 1;
+ double zero = 0.0;
+ double one = 1.0;
+
+ /* Local variables */
+ int jlast;
+ double altsgn, estold;
+ int i;
+ double temp;
+#ifdef _CRAY
+ extern int ISAMAX(int *, double *, int *);
+ extern double SASUM(int *, double *, int *);
+ extern int SCOPY(int *, double *, int *, double *, int *);
+#else
+ extern int idamax_(int *, double *, int *);
+ extern double dasum_(int *, double *, int *);
+ extern int dcopy_(int *, double *, int *, double *, int *);
+#endif
+#define d_sign(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */
+#define i_dnnt(a) \
+ ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */
+
+ if ( *kase == 0 ) {
+ for (i = 0; i < *n; ++i) {
+ x[i] = 1. / (double) (*n);
+ }
+ *kase = 1;
+ isave[0] = 1; /* jump = 1; */
+ return 0;
+ }
+
+ switch (isave[0]) {
+ case 1: goto L20;
+ case 2: goto L40;
+ case 3: goto L70;
+ case 4: goto L110;
+ case 5: goto L140;
+ }
+
+ /* ................ ENTRY (isave[0] = 1)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
+ L20:
+ if (*n == 1) {
+ v[0] = x[0];
+ *est = fabs(v[0]);
+ /* ... QUIT */
+ goto L150;
+ }
+#ifdef _CRAY
+ *est = SASUM(n, x, &c__1);
+#else
+ *est = dasum_(n, x, &c__1);
+#endif
+
+ for (i = 0; i < *n; ++i) {
+ x[i] = d_sign(one, x[i]);
+ isgn[i] = i_dnnt(x[i]);
+ }
+ *kase = 2;
+ isave[0] = 2; /* jump = 2; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 2)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
+L40:
+#ifdef _CRAY
+ isave[1] = ISAMAX(n, &x[0], &c__1); /* j */
+#else
+ isave[1] = idamax_(n, &x[0], &c__1); /* j */
+#endif
+ --isave[1]; /* --j; */
+ isave[2] = 2; /* iter = 2; */
+
+ /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
+L50:
+ for (i = 0; i < *n; ++i) x[i] = zero;
+ x[isave[1]] = one;
+ *kase = 1;
+ isave[0] = 3; /* jump = 3; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 3)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L70:
+#ifdef _CRAY
+ SCOPY(n, x, &c__1, v, &c__1);
+#else
+ dcopy_(n, x, &c__1, v, &c__1);
+#endif
+ estold = *est;
+#ifdef _CRAY
+ *est = SASUM(n, v, &c__1);
+#else
+ *est = dasum_(n, v, &c__1);
+#endif
+
+ for (i = 0; i < *n; ++i)
+ if (i_dnnt(d_sign(one, x[i])) != isgn[i])
+ goto L90;
+
+ /* REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED. */
+ goto L120;
+
+L90:
+ /* TEST FOR CYCLING. */
+ if (*est <= estold) goto L120;
+
+ for (i = 0; i < *n; ++i) {
+ x[i] = d_sign(one, x[i]);
+ isgn[i] = i_dnnt(x[i]);
+ }
+ *kase = 2;
+ isave[0] = 4; /* jump = 4; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 4)
+ X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
+L110:
+ jlast = isave[1]; /* j; */
+#ifdef _CRAY
+ isave[1] = ISAMAX(n, &x[0], &c__1); /* j */
+#else
+ isave[1] = idamax_(n, &x[0], &c__1); /* j */
+#endif
+ isave[1] = isave[1] - 1; /* --j; */
+ if (x[jlast] != fabs(x[isave[1]]) && isave[2] < 5) {
+ isave[2] = isave[2] + 1; /* ++iter; */
+ goto L50;
+ }
+
+ /* ITERATION COMPLETE. FINAL STAGE. */
+L120:
+ altsgn = 1.;
+ for (i = 1; i <= *n; ++i) {
+ x[i-1] = altsgn * ((double)(i - 1) / (double)(*n - 1) + 1.);
+ altsgn = -altsgn;
+ }
+ *kase = 1;
+ isave[0] = 5; /* jump = 5; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 5)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L140:
+#ifdef _CRAY
+ temp = SASUM(n, x, &c__1) / (double)(*n * 3) * 2.;
+#else
+ temp = dasum_(n, x, &c__1) / (double)(*n * 3) * 2.;
+#endif
+ if (temp > *est) {
+#ifdef _CRAY
+ SCOPY(n, &x[0], &c__1, &v[0], &c__1);
+#else
+ dcopy_(n, &x[0], &c__1, &v[0], &c__1);
+#endif
+ *est = temp;
+ }
+
+L150:
+ *kase = 0;
+ return 0;
+
+} /* dlacon_ */
diff --git a/SuperLU_5.2.0/SRC/dlangs.c b/SuperLU_5.2.0/SRC/dlangs.c
new file mode 100644
index 0000000..013fde6
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dlangs.c
@@ -0,0 +1,129 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from lapack routine DLANGE
+ */
+#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)
+{
+
+ /* Local variables */
+ NCformat *Astore;
+ double *Aval;
+ int i, j, irow;
+ double value, sum;
+ double *rwork;
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ if ( SUPERLU_MIN(A->nrow, A->ncol) == 0) {
+ value = 0.;
+
+ } else if (strncmp(norm, "M", 1)==0) {
+ /* Find max(abs(A(i,j))). */
+ value = 0.;
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
+ value = SUPERLU_MAX( value, fabs( Aval[i]) );
+
+ } else if (strncmp(norm, "O", 1)==0 || *(unsigned char *)norm == '1') {
+ /* Find norm1(A). */
+ value = 0.;
+ for (j = 0; j < A->ncol; ++j) {
+ sum = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
+ sum += fabs(Aval[i]);
+ value = SUPERLU_MAX(value,sum);
+ }
+
+ } else if (strncmp(norm, "I", 1)==0) {
+ /* Find normI(A). */
+ if ( !(rwork = (double *) SUPERLU_MALLOC(A->nrow * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for rwork.");
+ for (i = 0; i < A->nrow; ++i) rwork[i] = 0.;
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++) {
+ irow = Astore->rowind[i];
+ rwork[irow] += fabs(Aval[i]);
+ }
+ value = 0.;
+ for (i = 0; i < A->nrow; ++i)
+ value = SUPERLU_MAX(value, rwork[i]);
+
+ SUPERLU_FREE (rwork);
+
+ } else if (strncmp(norm, "F", 1)==0 || strncmp(norm, "E", 1)==0) {
+ /* Find normF(A). */
+ ABORT("Not implemented.");
+ } else
+ ABORT("Illegal norm specified.");
+
+ return (value);
+
+} /* dlangs */
+
diff --git a/SuperLU_5.2.0/SRC/dlaqgs.c b/SuperLU_5.2.0/SRC/dlaqgs.c
new file mode 100644
index 0000000..5a85288
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dlaqgs.c
@@ -0,0 +1,155 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from LAPACK routine DLAQGE
+ */
+#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)
+{
+
+
+#define THRESH (0.1)
+
+ /* Local variables */
+ NCformat *Astore;
+ double *Aval;
+ int i, j, irow;
+ double large, small, cj;
+
+
+ /* Quick return if possible */
+ if (A->nrow <= 0 || A->ncol <= 0) {
+ *(unsigned char *)equed = 'N';
+ return;
+ }
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Initialize LARGE and SMALL. */
+ small = dmach("Safe minimum") / dmach("Precision");
+ large = 1. / small;
+
+ if (rowcnd >= THRESH && amax >= small && amax <= large) {
+ if (colcnd >= THRESH)
+ *(unsigned char *)equed = 'N';
+ else {
+ /* Column scaling */
+ for (j = 0; j < A->ncol; ++j) {
+ cj = c[j];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ Aval[i] *= cj;
+ }
+ }
+ *(unsigned char *)equed = 'C';
+ }
+ } else if (colcnd >= THRESH) {
+ /* Row scaling, no column scaling */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ Aval[i] *= r[irow];
+ }
+ *(unsigned char *)equed = 'R';
+ } else {
+ /* Row and column scaling */
+ for (j = 0; j < A->ncol; ++j) {
+ cj = c[j];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ Aval[i] *= cj * r[irow];
+ }
+ }
+ *(unsigned char *)equed = 'B';
+ }
+
+ return;
+
+} /* dlaqgs */
+
diff --git a/SuperLU_5.2.0/SRC/dldperm.c b/SuperLU_5.2.0/SRC/dldperm.c
new file mode 100644
index 0000000..3995f7a
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dldperm.c
@@ -0,0 +1,175 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/dmach.c b/SuperLU_5.2.0/SRC/dmach.c
new file mode 100644
index 0000000..73beacb
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dmach.c
@@ -0,0 +1,93 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+#include <float.h>
+#include <math.h>
+#include <stdio.h>
+
+double dmach(char *cmach)
+{
+/* -- SuperLU auxiliary routine (version 5.0) --
+ This uses C99 standard constants, and is thread safe.
+
+ Must be compiled with -std=c99 flag.
+
+
+ Purpose
+ =======
+
+ DMACH returns double precision machine parameters.
+
+ Arguments
+ =========
+
+ CMACH (input) CHARACTER*1
+ Specifies the value to be returned by DMACH:
+ = 'E' or 'e', DMACH := eps
+ = 'S' or 's , DMACH := sfmin
+ = 'B' or 'b', DMACH := base
+ = 'P' or 'p', DMACH := eps*base
+ = 'N' or 'n', DMACH := t
+ = 'R' or 'r', DMACH := rnd
+ = 'M' or 'm', DMACH := emin
+ = 'U' or 'u', DMACH := rmin
+ = 'L' or 'l', DMACH := emax
+ = 'O' or 'o', DMACH := rmax
+
+ where
+
+ 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)
+
+ =====================================================================
+*/
+
+ double sfmin, small, rmach;
+
+ if (strncmp(cmach, "E", 1)==0) {
+ rmach = DBL_EPSILON * 0.5;
+ } else if (strncmp(cmach, "S", 1)==0) {
+ sfmin = DBL_MIN;
+ small = 1. / DBL_MAX;
+ if (small >= sfmin) {
+ /* Use SMALL plus a bit, to avoid the possibility of rounding
+ causing overflow when computing 1/sfmin. */
+ sfmin = small * (DBL_EPSILON*0.5 + 1.);
+ }
+ rmach = sfmin;
+ } else if (strncmp(cmach, "B", 1)==0) {
+ rmach = FLT_RADIX;
+ } else if (strncmp(cmach, "P", 1)==0) {
+ rmach = DBL_EPSILON * 0.5 * FLT_RADIX;
+ } else if (strncmp(cmach, "N", 1)==0) {
+ rmach = DBL_MANT_DIG;
+ } else if (strncmp(cmach, "R", 1)==0) {
+ rmach = FLT_ROUNDS;
+ } else if (strncmp(cmach, "M", 1)==0) {
+ rmach = DBL_MIN_EXP;
+ } else if (strncmp(cmach, "U", 1)==0) {
+ rmach = DBL_MIN;
+ } else if (strncmp(cmach, "L", 1)==0) {
+ rmach = DBL_MAX_EXP;
+ } else if (strncmp(cmach, "O", 1)==0) {
+ rmach = DBL_MAX;
+ }
+
+ return rmach;
+
+} /* end dmach */
diff --git a/SuperLU_5.2.0/SRC/dmemory.c b/SuperLU_5.2.0/SRC/dmemory.c
new file mode 100644
index 0000000..bd9a38b
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dmemory.c
@@ -0,0 +1,710 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file dmemory.c
+ * \brief Memory details
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+#include "slu_ddefs.h"
+
+
+/* Internal prototypes */
+void *dexpand (int *, MemType,int, int, GlobalLU_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, GlobalLU_t *);
+void *duser_malloc (int, int, GlobalLU_t *);
+void duser_free (int, int, GlobalLU_t *);
+
+/* External prototypes (in memory.c - prec-independent) */
+extern void copy_mem_int (int, void *, void *);
+extern void user_bcopy (char *, char *, int);
+
+
+/* Macros to manipulate stack */
+#define StackFull(x) ( x + Glu->stack.used >= Glu->stack.size )
+#define NotDoubleAlign(addr) ( (intptr_t)addr & 7 )
+#define DoubleAlign(addr) ( ((intptr_t)addr + 7) & ~7L )
+#define TempSpace(m, w) ( (2*w + 4 + NO_MARKER) * m * sizeof(int) + \
+ (w + 1) * m * sizeof(double) )
+#define Reduce(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */
+
+
+
+
+/*! \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, GlobalLU_t *Glu)
+{
+ if ( lwork == 0 ) {
+ Glu->MemModel = SYSTEM; /* malloc/free */
+ } else if ( lwork > 0 ) {
+ 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, GlobalLU_t *Glu)
+{
+ void *buf;
+
+ if ( StackFull(bytes) ) return (NULL);
+
+ if ( which_end == HEAD ) {
+ buf = (char*) Glu->stack.array + Glu->stack.top1;
+ Glu->stack.top1 += bytes;
+ } else {
+ Glu->stack.top2 -= bytes;
+ buf = (char*) Glu->stack.array + Glu->stack.top2;
+ }
+
+ Glu->stack.used += bytes;
+ return buf;
+}
+
+
+void duser_free(int bytes, int which_end, GlobalLU_t *Glu)
+{
+ if ( which_end == HEAD ) {
+ Glu->stack.top1 -= bytes;
+ } else {
+ Glu->stack.top2 += 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.
+ * </pre>
+ */
+int dQuerySpace(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(double);
+
+ /* For LU factors */
+ 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.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
+ (panel_size + 1.0) * n * dword );
+
+ return 0;
+} /* dQuerySpace */
+
+
+/*! \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, double fill_ratio, SuperMatrix *L, SuperMatrix *U,
+ GlobalLU_t *Glu, int **iwork, double **dwork)
+{
+ int info, iword, dword;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ double *lusup;
+ int *xlusup;
+ double *ucol;
+ int *usub, *xusub;
+ int nzlmax, nzumax, nzlumax;
+
+ iword = sizeof(int);
+ dword = sizeof(double);
+ Glu->n = n;
+ Glu->num_expansions = 0;
+
+ 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_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);
+ }
+
+#if ( PRNTlevel >= 1 )
+ printf("dLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n",
+ fill_ratio, 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 *)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 );
+ ucol = (double *) dexpand( &nzumax, UCOL, 0, 0, Glu );
+ lsub = (int *) dexpand( &nzlmax, LSUB, 0, 0, Glu );
+ usub = (int *) dexpand( &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 {
+ duser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
+ HEAD, Glu);
+ }
+ nzlumax /= 2;
+ nzumax /= 2;
+ nzlmax /= 2;
+ if ( nzlumax < annz ) {
+ printf("Not enough memory to perform factorization.\n");
+ return (dmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
+ }
+#if ( PRNTlevel >= 1)
+ printf("dLUMemInit() reduce size: nzlmax %ld, nzumax %ld\n",
+ nzlmax, nzumax);
+ fflush(stdout);
+#endif
+ lusup = (double *) dexpand( &nzlumax, LUSUP, 0, 0, Glu );
+ ucol = (double *) dexpand( &nzumax, UCOL, 0, 0, Glu );
+ lsub = (int *) dexpand( &nzlmax, LSUB, 0, 0, Glu );
+ usub = (int *) dexpand( &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;
+ Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
+ Glu->stack.size = Glu->stack.top2;
+ }
+
+ 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;
+ Glu->supno = supno;
+ Glu->lsub = lsub;
+ Glu->xlsub = xlsub;
+ Glu->lusup = (void *) lusup;
+ Glu->xlusup = xlusup;
+ Glu->ucol = (void *) ucol;
+ Glu->usub = usub;
+ Glu->xusub = xusub;
+ Glu->nzlmax = nzlmax;
+ Glu->nzumax = nzumax;
+ Glu->nzlumax = nzlumax;
+
+ info = dLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
+ if ( info )
+ return ( info + dmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
+
+ ++Glu->num_expansions;
+ return 0;
+
+} /* dLUMemInit */
+
+/*! \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, GlobalLU_t *Glu)
+{
+ int isize, dsize, extra;
+ double *old_ptr;
+ 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 ( Glu->MemModel == SYSTEM )
+ *iworkptr = (int *) intCalloc(isize/sizeof(int));
+ else
+ *iworkptr = (int *) duser_malloc(isize, TAIL, Glu);
+ if ( ! *iworkptr ) {
+ fprintf(stderr, "dLUWorkInit: malloc fails for local iworkptr[]\n");
+ return (isize + n);
+ }
+
+ if ( Glu->MemModel == SYSTEM )
+ *dworkptr = (double *) SUPERLU_MALLOC(dsize);
+ else {
+ *dworkptr = (double *) duser_malloc(dsize, TAIL, Glu);
+ if ( NotDoubleAlign(*dworkptr) ) {
+ old_ptr = *dworkptr;
+ *dworkptr = (double*) DoubleAlign(*dworkptr);
+ *dworkptr = (double*) ((double*)*dworkptr - 1);
+ extra = (char*)old_ptr - (char*)*dworkptr;
+#ifdef DEBUG
+ printf("dLUWorkInit: not aligned, extra %d\n", extra);
+#endif
+ Glu->stack.top2 -= extra;
+ Glu->stack.used += extra;
+ }
+ }
+ if ( ! *dworkptr ) {
+ fprintf(stderr, "malloc fails for local dworkptr[].");
+ return (isize + dsize + n);
+ }
+
+ return 0;
+}
+
+
+/*! \brief Set up pointers for real working arrays.
+ */
+void
+dSetRWork(int m, int panel_size, double *dworkptr,
+ double **dense, double **tempv)
+{
+ double zero = 0.0;
+
+ int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
+ rowblk = sp_ienv(4);
+ *dense = dworkptr;
+ *tempv = *dense + panel_size*m;
+ dfill (*dense, m * panel_size, zero);
+ dfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);
+}
+
+/*! \brief Free the working storage used by factor routines.
+ */
+void dLUWorkFree(int *iwork, double *dwork, GlobalLU_t *Glu)
+{
+ if ( Glu->MemModel == SYSTEM ) {
+ SUPERLU_FREE (iwork);
+ SUPERLU_FREE (dwork);
+ } else {
+ Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
+ Glu->stack.top2 = Glu->stack.size;
+/* dStackCompress(Glu); */
+ }
+
+ SUPERLU_FREE (Glu->expanders);
+ Glu->expanders = NULL;
+}
+
+/*! \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,
+ 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("dLUMemXpand(): jcol %d, next %d, maxlen %d, MemType %d\n",
+ jcol, next, *maxlen, mem_type);
+#endif
+
+ if (mem_type == USUB)
+ new_mem = dexpand(maxlen, mem_type, next, 1, Glu);
+ else
+ new_mem = dexpand(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 (dmemory_usage(nzlmax, nzumax, nzlumax, Glu->n) + Glu->n);
+ }
+
+ switch ( mem_type ) {
+ case LUSUP:
+ Glu->lusup = (void *) new_mem;
+ Glu->nzlumax = *maxlen;
+ break;
+ case UCOL:
+ Glu->ucol = (void *) 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_double(int howmany, void *old, void *new)
+{
+ register int i;
+ double *dold = old;
+ double *dnew = new;
+ for (i = 0; i < howmany; i++) dnew[i] = dold[i];
+}
+
+/*! \brief Expand the existing storage to accommodate more fill-ins.
+ */
+void
+*dexpand (
+ 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;
+ ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
+
+ alpha = EXPAND;
+
+ if ( Glu->num_expansions == 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(double);
+
+ if ( Glu->MemModel == SYSTEM ) {
+ new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
+ if ( Glu->num_expansions != 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((size_t)new_len * lword);
+ }
+ }
+ if ( type == LSUB || type == USUB ) {
+ copy_mem_int(len_to_copy, expanders[type].mem, new_mem);
+ } else {
+ copy_mem_double(len_to_copy, expanders[type].mem, new_mem);
+ }
+ SUPERLU_FREE (expanders[type].mem);
+ }
+ expanders[type].mem = (void *) new_mem;
+
+ } else { /* MemModel == USER */
+ 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;
+ new_mem = (void *)DoubleAlign(new_mem);
+ extra = (char*)new_mem - (char*)old_mem;
+#ifdef DEBUG
+ printf("expand(): not aligned, extra %d\n", extra);
+#endif
+ Glu->stack.top1 += extra;
+ Glu->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*)Glu->stack.array + Glu->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);
+ }
+ Glu->stack.top1 += extra;
+ Glu->stack.used += extra;
+ if ( type == UCOL ) {
+ Glu->stack.top1 += extra; /* Add same amount for USUB */
+ Glu->stack.used += extra;
+ }
+
+ } /* if ... */
+
+ } /* else ... */
+ }
+
+ expanders[type].size = new_len;
+ *prev_len = new_len;
+ if ( Glu->num_expansions ) ++Glu->num_expansions;
+
+ return (void *) expanders[type].mem;
+
+} /* dexpand */
+
+
+/*! \brief Compress the work[] array to remove fragmentation.
+ */
+void
+dStackCompress(GlobalLU_t *Glu)
+{
+ register int iword, dword, ndim;
+ char *last, *fragment;
+ int *ifrom, *ito;
+ double *dfrom, *dto;
+ int *xlsub, *lsub, *xusub, *usub, *xlusup;
+ double *ucol, *lusup;
+
+ iword = sizeof(int);
+ dword = sizeof(double);
+ 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 = (double *)((char*)lusup + xlusup[ndim] * dword);
+ copy_mem_double(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*)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;
+ Glu->usub = usub;
+
+#ifdef DEBUG
+ printf("dStackCompress: fragment %d\n", fragment);
+ /* for (last = 0; last < ndim; ++last)
+ print_lu_col("After compress:", last, 0);*/
+#endif
+
+}
+
+/*! \brief Allocate storage for original matrix A
+ */
+void
+dallocateA(int n, int nnz, double **a, int **asub, int **xa)
+{
+ *a = (double *) doubleMalloc(nnz);
+ *asub = (int *) intMalloc(nnz);
+ *xa = (int *) intMalloc(n+1);
+}
+
+
+double *doubleMalloc(int n)
+{
+ double *buf;
+ buf = (double *) SUPERLU_MALLOC((size_t)n * sizeof(double));
+ if ( !buf ) {
+ ABORT("SUPERLU_MALLOC failed for buf in doubleMalloc()\n");
+ }
+ return (buf);
+}
+
+double *doubleCalloc(int n)
+{
+ double *buf;
+ register int i;
+ double zero = 0.0;
+ buf = (double *) SUPERLU_MALLOC((size_t)n * sizeof(double));
+ if ( !buf ) {
+ ABORT("SUPERLU_MALLOC failed for buf in doubleCalloc()\n");
+ }
+ for (i = 0; i < n; ++i) buf[i] = zero;
+ return (buf);
+}
+
+
+int dmemory_usage(const int nzlmax, const int nzumax,
+ const int nzlumax, const int n)
+{
+ register int iword, dword;
+
+ iword = sizeof(int);
+ dword = sizeof(double);
+
+ return (10 * n * iword +
+ nzlmax * iword + nzumax * (iword + dword) + nzlumax * dword);
+
+}
diff --git a/SuperLU_5.2.0/SRC/dmyblas2.c b/SuperLU_5.2.0/SRC/dmyblas2.c
new file mode 100644
index 0000000..e435727
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dmyblas2.c
@@ -0,0 +1,240 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * </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: 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.
+ */
+void dlsolve ( int ldm, int ncol, double *M, double *rhs )
+{
+ int k;
+ double x0, x1, x2, x3, x4, x5, x6, x7;
+ double *M0;
+ register double *Mki0, *Mki1, *Mki2, *Mki3, *Mki4, *Mki5, *Mki6, *Mki7;
+ register int firstcol = 0;
+
+ M0 = &M[0];
+
+ while ( firstcol < ncol - 7 ) { /* Do 8 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+ Mki2 = Mki1 + ldm + 1;
+ Mki3 = Mki2 + ldm + 1;
+ Mki4 = Mki3 + ldm + 1;
+ Mki5 = Mki4 + ldm + 1;
+ Mki6 = Mki5 + ldm + 1;
+ Mki7 = Mki6 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ x1 = rhs[firstcol+1] - x0 * *Mki0++;
+ x2 = rhs[firstcol+2] - x0 * *Mki0++ - x1 * *Mki1++;
+ x3 = rhs[firstcol+3] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++;
+ x4 = rhs[firstcol+4] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
+ - x3 * *Mki3++;
+ x5 = rhs[firstcol+5] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
+ - x3 * *Mki3++ - x4 * *Mki4++;
+ x6 = rhs[firstcol+6] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
+ - x3 * *Mki3++ - x4 * *Mki4++ - x5 * *Mki5++;
+ x7 = rhs[firstcol+7] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
+ - x3 * *Mki3++ - x4 * *Mki4++ - x5 * *Mki5++
+ - x6 * *Mki6++;
+
+ rhs[++firstcol] = x1;
+ rhs[++firstcol] = x2;
+ rhs[++firstcol] = x3;
+ rhs[++firstcol] = x4;
+ rhs[++firstcol] = x5;
+ rhs[++firstcol] = x6;
+ rhs[++firstcol] = x7;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++)
+ rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++
+ - x2 * *Mki2++ - x3 * *Mki3++
+ - x4 * *Mki4++ - x5 * *Mki5++
+ - x6 * *Mki6++ - x7 * *Mki7++;
+
+ M0 += 8 * ldm + 8;
+ }
+
+ while ( firstcol < ncol - 3 ) { /* Do 4 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+ Mki2 = Mki1 + ldm + 1;
+ Mki3 = Mki2 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ x1 = rhs[firstcol+1] - x0 * *Mki0++;
+ x2 = rhs[firstcol+2] - x0 * *Mki0++ - x1 * *Mki1++;
+ x3 = rhs[firstcol+3] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++;
+
+ rhs[++firstcol] = x1;
+ rhs[++firstcol] = x2;
+ rhs[++firstcol] = x3;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++)
+ rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++
+ - x2 * *Mki2++ - x3 * *Mki3++;
+
+ M0 += 4 * ldm + 4;
+ }
+
+ if ( firstcol < ncol - 1 ) { /* Do 2 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ x1 = rhs[firstcol+1] - x0 * *Mki0++;
+
+ rhs[++firstcol] = x1;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++)
+ rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++;
+
+ }
+
+}
+
+/*! \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.
+ */
+void
+dusolve ( ldm, ncol, M, rhs )
+int ldm; /* in */
+int ncol; /* in */
+double *M; /* in */
+double *rhs; /* modified */
+{
+ double xj;
+ int jcol, j, irow;
+
+ jcol = ncol - 1;
+
+ for (j = 0; j < ncol; j++) {
+
+ xj = rhs[jcol] / M[jcol + jcol*ldm]; /* M(jcol, jcol) */
+ rhs[jcol] = xj;
+
+ for (irow = 0; irow < jcol; irow++)
+ rhs[irow] -= xj * M[irow + jcol*ldm]; /* M(irow, jcol) */
+
+ jcol--;
+
+ }
+}
+
+
+/*! \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 )
+
+int ldm; /* in -- leading dimension of M */
+int nrow; /* in */
+int ncol; /* in */
+double *M; /* in */
+double *vec; /* in */
+double *Mxvec; /* in/out */
+
+{
+ double vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7;
+ double *M0;
+ register double *Mki0, *Mki1, *Mki2, *Mki3, *Mki4, *Mki5, *Mki6, *Mki7;
+ register int firstcol = 0;
+ int k;
+
+ M0 = &M[0];
+ while ( firstcol < ncol - 7 ) { /* Do 8 columns */
+
+ Mki0 = M0;
+ Mki1 = Mki0 + ldm;
+ Mki2 = Mki1 + ldm;
+ Mki3 = Mki2 + ldm;
+ Mki4 = Mki3 + ldm;
+ Mki5 = Mki4 + ldm;
+ Mki6 = Mki5 + ldm;
+ Mki7 = Mki6 + ldm;
+
+ vi0 = vec[firstcol++];
+ vi1 = vec[firstcol++];
+ vi2 = vec[firstcol++];
+ vi3 = vec[firstcol++];
+ vi4 = vec[firstcol++];
+ vi5 = vec[firstcol++];
+ vi6 = vec[firstcol++];
+ vi7 = vec[firstcol++];
+
+ for (k = 0; k < nrow; k++)
+ Mxvec[k] += vi0 * *Mki0++ + vi1 * *Mki1++
+ + vi2 * *Mki2++ + vi3 * *Mki3++
+ + vi4 * *Mki4++ + vi5 * *Mki5++
+ + vi6 * *Mki6++ + vi7 * *Mki7++;
+
+ M0 += 8 * ldm;
+ }
+
+ while ( firstcol < ncol - 3 ) { /* Do 4 columns */
+
+ Mki0 = M0;
+ Mki1 = Mki0 + ldm;
+ Mki2 = Mki1 + ldm;
+ Mki3 = Mki2 + ldm;
+
+ vi0 = vec[firstcol++];
+ vi1 = vec[firstcol++];
+ vi2 = vec[firstcol++];
+ vi3 = vec[firstcol++];
+ for (k = 0; k < nrow; k++)
+ Mxvec[k] += vi0 * *Mki0++ + vi1 * *Mki1++
+ + vi2 * *Mki2++ + vi3 * *Mki3++ ;
+
+ M0 += 4 * ldm;
+ }
+
+ while ( firstcol < ncol ) { /* Do 1 column */
+
+ Mki0 = M0;
+ vi0 = vec[firstcol++];
+ for (k = 0; k < nrow; k++)
+ Mxvec[k] += vi0 * *Mki0++;
+
+ M0 += ldm;
+ }
+
+}
+
diff --git a/SuperLU_5.2.0/SRC/dpanel_bmod.c b/SuperLU_5.2.0/SRC/dpanel_bmod.c
new file mode 100644
index 0000000..2d7c016
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dpanel_bmod.c
@@ -0,0 +1,466 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+/*
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "slu_ddefs.h"
+
+/*
+ * Function prototypes
+ */
+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 */
+ const int w, /* in */
+ const int jcol, /* in */
+ const int nseg, /* in */
+ double *dense, /* out, of size n by w */
+ double *tempv, /* working array */
+ int *segrep, /* in */
+ int *repfnz, /* in, of size n by w */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ double alpha, beta;
+#endif
+
+ register int k, ksub;
+ int fsupc, nsupc, nsupr, nrow;
+ int krep, krep_ind;
+ double ukj, ukj1, ukj2;
+ int luptr, luptr1, luptr2;
+ int segsze;
+ int block_nrow; /* no of rows in a block row */
+ register int lptr; /* Points to the row subscripts of a supernode */
+ int kfnz, irow, no_zeros;
+ register int isub, isub1, i;
+ register int jj; /* Index through each column in the panel */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ double *lusup;
+ int *xlusup;
+ int *repfnz_col; /* repfnz[] for a column in the panel */
+ double *dense_col; /* dense[] for a column in the panel */
+ double *tempv1; /* Used in 1-D update */
+ double *TriTmp, *MatvecTmp; /* used in 2-D update */
+ double zero = 0.0;
+ double one = 1.0;
+ register int ldaTmp;
+ register int r_ind, r_hi;
+ int maxsuper, rowblk, colblk;
+ flops_t *ops = stat->ops;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (double *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
+ rowblk = sp_ienv(4);
+ colblk = sp_ienv(5);
+ ldaTmp = maxsuper + rowblk;
+
+ /*
+ * For each nonz supernode segment of U[*,j] in topological order
+ */
+ k = nseg - 1;
+ for (ksub = 0; ksub < nseg; ksub++) { /* for each updating supernode */
+
+ /* krep = representative of current k-th supernode
+ * fsupc = first supernodal column
+ * nsupc = no of columns in a supernode
+ * nsupr = no of rows in a supernode
+ */
+ krep = segrep[k--];
+ fsupc = xsup[supno[krep]];
+ nsupc = krep - fsupc + 1;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc];
+ nrow = nsupr - nsupc;
+ lptr = xlsub[fsupc];
+ krep_ind = lptr + nsupc - 1;
+
+ repfnz_col = repfnz;
+ dense_col = dense;
+
+ if ( nsupc >= colblk && nrow > rowblk ) { /* 2-D block update */
+
+ TriTmp = tempv;
+
+ /* Sequence through each column in panel -- triangular solves */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp ) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ luptr = xlusup[fsupc];
+
+ ops[TRSV] += segsze * (segsze - 1);
+ ops[GEMV] += 2 * nrow * segsze;
+
+ /* Case 1: Update U-segment of size 1 -- col-col update */
+ if ( segsze == 1 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
+ irow = lsub[i];
+ dense_col[irow] -= ukj * lusup[luptr];
+ ++luptr;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ ukj1 = dense_col[lsub[krep_ind - 1]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) {
+ ukj -= ukj1 * lusup[luptr1];
+ dense_col[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++; luptr1++;
+ dense_col[irow] -= (ukj*lusup[luptr]
+ + ukj1*lusup[luptr1]);
+ }
+ } else {
+ ukj2 = dense_col[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ ukj1 -= ukj2 * lusup[luptr2-1];
+ ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
+ dense_col[lsub[krep_ind]] = ukj;
+ dense_col[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++; luptr1++; luptr2++;
+ dense_col[irow] -= ( ukj*lusup[luptr]
+ + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
+ }
+ }
+
+ } else { /* segsze >= 4 */
+
+ /* Copy U[*,j] segment from dense[*] to TriTmp[*], which
+ holds the result of triangular solves. */
+ no_zeros = kfnz - fsupc;
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; ++i) {
+ irow = lsub[isub];
+ TriTmp[i] = dense_col[irow]; /* Gather */
+ ++isub;
+ }
+
+ /* start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, TriTmp, &incx );
+#else
+ dtrsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, TriTmp, &incx );
+#endif
+#else
+ dlsolve ( nsupr, segsze, &lusup[luptr], TriTmp );
+#endif
+
+
+ } /* else ... */
+
+ } /* for jj ... end tri-solves */
+
+ /* Block row updates; push all the way into dense[*] block */
+ for ( r_ind = 0; r_ind < nrow; r_ind += rowblk ) {
+
+ r_hi = SUPERLU_MIN(nrow, r_ind + rowblk);
+ block_nrow = SUPERLU_MIN(rowblk, r_hi - r_ind);
+ luptr = xlusup[fsupc] + nsupc + r_ind;
+ isub1 = lptr + nsupc + r_ind;
+
+ repfnz_col = repfnz;
+ TriTmp = tempv;
+ dense_col = dense;
+
+ /* Sequence through each column in panel -- matrix-vector */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ if ( segsze <= 3 ) continue; /* skip unrolled cases */
+
+ /* Perform a block update, and scatter the result of
+ matrix-vector to dense[]. */
+ no_zeros = kfnz - fsupc;
+ luptr1 = luptr + nsupr * no_zeros;
+ MatvecTmp = &TriTmp[maxsuper];
+
+#ifdef USE_VENDOR_BLAS
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ SGEMV(ftcs2, &block_nrow, &segsze, &alpha, &lusup[luptr1],
+ &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
+#else
+ dgemv_("N", &block_nrow, &segsze, &alpha, &lusup[luptr1],
+ &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
+#endif
+#else
+ dmatvec(nsupr, block_nrow, segsze, &lusup[luptr1],
+ TriTmp, MatvecTmp);
+#endif
+
+ /* Scatter MatvecTmp[*] into SPA dense[*] temporarily
+ * such that MatvecTmp[*] can be re-used for the
+ * the next blok row update. dense[] will be copied into
+ * global store after the whole panel has been finished.
+ */
+ isub = isub1;
+ for (i = 0; i < block_nrow; i++) {
+ irow = lsub[isub];
+ dense_col[irow] -= MatvecTmp[i];
+ MatvecTmp[i] = zero;
+ ++isub;
+ }
+
+ } /* for jj ... */
+
+ } /* for each block row ... */
+
+ /* Scatter the triangular solves into SPA dense[*] */
+ repfnz_col = repfnz;
+ TriTmp = tempv;
+ dense_col = dense;
+
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ if ( segsze <= 3 ) continue; /* skip unrolled cases */
+
+ no_zeros = kfnz - fsupc;
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense_col[irow] = TriTmp[i];
+ TriTmp[i] = zero;
+ ++isub;
+ }
+
+ } /* for jj ... */
+
+ } else { /* 1-D block modification */
+
+
+ /* Sequence through each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ luptr = xlusup[fsupc];
+
+ ops[TRSV] += segsze * (segsze - 1);
+ ops[GEMV] += 2 * nrow * segsze;
+
+ /* Case 1: Update U-segment of size 1 -- col-col update */
+ if ( segsze == 1 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
+ irow = lsub[i];
+ dense_col[irow] -= ukj * lusup[luptr];
+ ++luptr;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ ukj1 = dense_col[lsub[krep_ind - 1]];
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) {
+ ukj -= ukj1 * lusup[luptr1];
+ dense_col[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ ++luptr; ++luptr1;
+ dense_col[irow] -= (ukj*lusup[luptr]
+ + ukj1*lusup[luptr1]);
+ }
+ } else {
+ ukj2 = dense_col[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ ukj1 -= ukj2 * lusup[luptr2-1];
+ ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
+ dense_col[lsub[krep_ind]] = ukj;
+ dense_col[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ ++luptr; ++luptr1; ++luptr2;
+ dense_col[irow] -= ( ukj*lusup[luptr]
+ + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
+ }
+ }
+
+ } else { /* segsze >= 4 */
+ /*
+ * Perform a triangular solve and block update,
+ * then scatter the result of sup-col update to dense[].
+ */
+ no_zeros = kfnz - fsupc;
+
+ /* Copy U[*,j] segment from dense[*] to tempv[*]:
+ * The result of triangular solve is in tempv[*];
+ * The result of matrix vector update is in dense_col[*]
+ */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; ++i) {
+ irow = lsub[isub];
+ tempv[i] = dense_col[irow]; /* Gather */
+ ++isub;
+ }
+
+ /* start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#else
+ dtrsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#endif
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ SGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#else
+ dgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#endif
+#else
+ dlsolve ( nsupr, segsze, &lusup[luptr], tempv );
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ dmatvec (nsupr, nrow, segsze, &lusup[luptr], tempv, tempv1);
+#endif
+
+ /* Scatter tempv[*] into SPA dense[*] temporarily, such
+ * that tempv[*] can be used for the triangular solve of
+ * the next column of the panel. They will be copied into
+ * ucol[*] after the whole panel has been finished.
+ */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense_col[irow] = tempv[i];
+ tempv[i] = zero;
+ isub++;
+ }
+
+ /* Scatter the update from tempv1[*] into SPA dense[*] */
+ /* Start dense rectangular L */
+ for (i = 0; i < nrow; i++) {
+ irow = lsub[isub];
+ dense_col[irow] -= tempv1[i];
+ tempv1[i] = zero;
+ ++isub;
+ }
+
+ } /* else segsze>=4 ... */
+
+ } /* for each column in the panel... */
+
+ } /* else 1-D update ... */
+
+ } /* for each updating supernode ... */
+
+}
+
+
+
diff --git a/SuperLU_5.2.0/SRC/dpanel_dfs.c b/SuperLU_5.2.0/SRC/dpanel_dfs.c
new file mode 100644
index 0000000..c1aa11a
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dpanel_dfs.c
@@ -0,0 +1,264 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_ddefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
+ *
+ * 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 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.
+ *
+ * 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;
+ *
+ * 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>
+ */
+
+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;
+ int *xa_begin, *xa_end;
+ 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 *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;
+
+ /* Initialize pointers */
+ Astore = A->Store;
+ a = Astore->nzval;
+ asub = Astore->rowind;
+ xa_begin = Astore->colbeg;
+ xa_end = Astore->colend;
+ marker1 = marker + m;
+ repfnz_col = repfnz;
+ dense_col = dense;
+ *nseg = 0;
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+
+ /* For each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++) {
+ nextl_col = (jj - jcol) * m;
+
+#ifdef CHK_DFS
+ printf("\npanel col %d: ", jj);
+#endif
+
+ /* 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 )
+ continue; /* krow visited before, go to the next nonzero */
+
+ /* For each unmarked nbr krow of jj
+ * krow is in L: place it in structure of L[*,jj]
+ */
+ 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[*]
+ */
+ else {
+
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz_col[krep];
+
+#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 > kperm ) repfnz_col[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz_col[krep] = kperm;
+ xdfs = xlsub[krep];
+ maxdfs = xprune[krep];
+
+#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
+ */
+ 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
+ * been explored, update its repfnz[*]
+ */
+ else {
+
+ chrep = xsup[supno[chperm]+1] - 1;
+ myfnz = repfnz_col[chrep];
+#ifdef CHK_DFS
+ printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
+#endif
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > chperm )
+ repfnz_col[chrep] = chperm;
+ }
+ else {
+ /* Cont. dfs at snode-rep of kchild */
+ 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
+ printf(" xdfs %d, maxdfs %d: ", xdfs, maxdfs);
+ 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
+ * segment is seen for the first time. (Note that
+ * "repfnz[krep]" may change later.)
+ * Backtrack dfs to its parent.
+ */
+ if ( marker1[krep] < jcol ) {
+ segrep[*nseg] = krep;
+ ++(*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
+ 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;
+
+ } /* for jj ... */
+
+}
diff --git a/SuperLU_5.2.0/SRC/dpivotL.c b/SuperLU_5.2.0/SRC/dpivotL.c
new file mode 100644
index 0000000..e3fd651
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dpivotL.c
@@ -0,0 +1,194 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_ddefs.h"
+
+#undef DEBUG
+
+/*! \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
+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 */
+ int lptr; /* points to the starting subscript of the supernode */
+ int pivptr, old_pivptr, diag, diagind;
+ double pivmax, rtemp, thresh;
+ double temp;
+ double *lu_sup_ptr;
+ double *lu_col_ptr;
+ int *lsub_ptr;
+ int isub, icol, k, itemp;
+ int *lsub, *xlsub;
+ double *lusup;
+ int *xlusup;
+ flops_t *ops = stat->ops;
+
+ /* Initialize pointers */
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (double *) 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 */
+
+#ifdef DEBUG
+if ( jcol == MIN_COL ) {
+ printf("Before cdiv: col %d\n", jcol);
+ for (k = nsupc; k < nsupr; k++)
+ printf(" lu[%d] %f\n", lsub_ptr[k], lu_col_ptr[k]);
+}
+#endif
+
+ /* Determine the largest abs numerical value for partial pivoting;
+ Also search for user-specified pivot, and diagonal element. */
+ if ( *usepr ) *pivrow = iperm_r[jcol];
+ diagind = iperm_c[jcol];
+ pivmax = 0.0;
+ pivptr = nsupc;
+ diag = EMPTY;
+ old_pivptr = nsupc;
+ for (isub = nsupc; isub < nsupr; ++isub) {
+ rtemp = fabs (lu_col_ptr[isub]);
+ if ( rtemp > pivmax ) {
+ pivmax = rtemp;
+ pivptr = isub;
+ }
+ if ( *usepr && lsub_ptr[isub] == *pivrow ) old_pivptr = isub;
+ if ( lsub_ptr[isub] == diagind ) diag = isub;
+ }
+
+ /* 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);
+ }
+
+ thresh = u * pivmax;
+
+ /* Choose appropriate pivotal element by our policy. */
+ if ( *usepr ) {
+ rtemp = fabs (lu_col_ptr[old_pivptr]);
+ if ( rtemp != 0.0 && rtemp >= thresh )
+ pivptr = old_pivptr;
+ else
+ *usepr = 0;
+ }
+ if ( *usepr == 0 ) {
+ /* Use diagonal pivot? */
+ if ( diag >= 0 ) { /* diagonal exists */
+ rtemp = fabs (lu_col_ptr[diag]);
+ if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
+ }
+ *pivrow = lsub_ptr[pivptr];
+ }
+
+ /* Record pivot row */
+ perm_r[*pivrow] = jcol;
+
+ /* 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 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/dpivotgrowth.c b/SuperLU_5.2.0/SRC/dpivotgrowth.c
new file mode 100644
index 0000000..2329341
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dpivotgrowth.c
@@ -0,0 +1,123 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Compute the reciprocal pivot growth factor of the leading ncols columns
+ * of the matrix, using the formula:
+ * min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )
+ *
+ * Arguments
+ * =========
+ *
+ * ncols (input) int
+ * The number of columns of matrices A, L and U.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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>
+ */
+
+double
+dPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
+ SuperMatrix *L, SuperMatrix *U)
+{
+
+ NCformat *Astore;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ double *Aval, *Lval, *Uval;
+ int fsupc, nsupr, luptr, nz_in_U;
+ int i, j, k, oldcol;
+ int *inv_perm_c;
+ double rpg, maxaj, maxuj;
+ double smlnum;
+ double *luval;
+
+ /* Get machine constants. */
+ smlnum = dmach("S");
+ rpg = 1. / smlnum;
+
+ Astore = A->Store;
+ Lstore = L->Store;
+ Ustore = U->Store;
+ Aval = Astore->nzval;
+ Lval = Lstore->nzval;
+ Uval = Ustore->nzval;
+
+ inv_perm_c = (int *) SUPERLU_MALLOC(A->ncol*sizeof(int));
+ for (j = 0; j < A->ncol; ++j) inv_perm_c[perm_c[j]] = j;
+
+ for (k = 0; k <= Lstore->nsuper; ++k) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ luptr = L_NZ_START(fsupc);
+ luval = &Lval[luptr];
+ nz_in_U = 1;
+
+ for (j = fsupc; j < L_FST_SUPC(k+1) && j < ncols; ++j) {
+ maxaj = 0.;
+ oldcol = inv_perm_c[j];
+ for (i = Astore->colptr[oldcol]; i < Astore->colptr[oldcol+1]; ++i)
+ maxaj = SUPERLU_MAX( maxaj, fabs(Aval[i]) );
+
+ maxuj = 0.;
+ for (i = Ustore->colptr[j]; i < Ustore->colptr[j+1]; i++)
+ maxuj = SUPERLU_MAX( maxuj, fabs(Uval[i]) );
+
+ /* Supernode */
+ for (i = 0; i < nz_in_U; ++i)
+ maxuj = SUPERLU_MAX( maxuj, fabs(luval[i]) );
+
+ ++nz_in_U;
+ luval += nsupr;
+
+ if ( maxuj == 0. )
+ rpg = SUPERLU_MIN( rpg, 1.);
+ else
+ rpg = SUPERLU_MIN( rpg, maxaj / maxuj );
+ }
+
+ if ( j >= ncols ) break;
+ }
+
+ SUPERLU_FREE(inv_perm_c);
+ return (rpg);
+}
diff --git a/SuperLU_5.2.0/SRC/dpruneL.c b/SuperLU_5.2.0/SRC/dpruneL.c
new file mode 100644
index 0000000..77d68e8
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dpruneL.c
@@ -0,0 +1,164 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#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 */
+ const int *perm_r, /* in */
+ const int pivrow, /* in */
+ const int nseg, /* in */
+ const int *segrep, /* in */
+ const int *repfnz, /* in */
+ int *xprune, /* out */
+ GlobalLU_t *Glu /* modified - global LU data structures */
+ )
+{
+
+ double utemp;
+ int jsupno, irep, irep1, kmin, kmax, krow, movnum;
+ int i, ktemp, minloc, maxloc;
+ int do_prune; /* logical variable */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ double *lusup;
+ int *xlusup;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (double *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ /*
+ * For each supernode-rep irep in U[*,j]
+ */
+ jsupno = supno[jcol];
+ for (i = 0; i < nseg; i++) {
+
+ irep = segrep[i];
+ irep1 = irep + 1;
+ do_prune = FALSE;
+
+ /* Don't prune with a zero U-segment */
+ if ( repfnz[irep] == EMPTY )
+ continue;
+
+ /* If a snode overlaps with the next panel, then the U-segment
+ * is fragmented into two parts -- irep and irep1. We should let
+ * pruning occur at the rep-column in irep1's snode.
+ */
+ if ( supno[irep] == supno[irep1] ) /* Don't prune */
+ continue;
+
+ /*
+ * If it has not been pruned & it has a nonz in row L[pivrow,i]
+ */
+ if ( supno[irep] != jsupno ) {
+ if ( xprune[irep] >= xlsub[irep1] ) {
+ kmin = xlsub[irep];
+ kmax = xlsub[irep1] - 1;
+ for (krow = kmin; krow <= kmax; krow++)
+ if ( lsub[krow] == pivrow ) {
+ do_prune = TRUE;
+ break;
+ }
+ }
+
+ if ( do_prune ) {
+
+ /* Do a quicksort-type partition
+ * movnum=TRUE means that the num values have to be exchanged.
+ */
+ movnum = FALSE;
+ if ( irep == xsup[supno[irep]] ) /* Snode of size 1 */
+ movnum = TRUE;
+
+ while ( kmin <= kmax ) {
+
+ if ( perm_r[lsub[kmax]] == EMPTY )
+ kmax--;
+ else if ( perm_r[lsub[kmin]] != EMPTY )
+ kmin++;
+ else { /* kmin below pivrow (not yet pivoted), and kmax
+ * above pivrow: interchange the two subscripts
+ */
+ ktemp = lsub[kmin];
+ lsub[kmin] = lsub[kmax];
+ lsub[kmax] = ktemp;
+
+ /* 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.
+ */
+ if ( movnum ) {
+ minloc = xlusup[irep] + (kmin - xlsub[irep]);
+ maxloc = xlusup[irep] + (kmax - xlsub[irep]);
+ utemp = lusup[minloc];
+ lusup[minloc] = lusup[maxloc];
+ lusup[maxloc] = utemp;
+ }
+
+ kmin++;
+ kmax--;
+
+ }
+
+ } /* while */
+
+ xprune[irep] = kmin; /* Pruning */
+
+#ifdef CHK_PRUNE
+ printf(" After dpruneL(),using col %d: xprune[%d] = %d\n",
+ jcol, irep, kmin);
+#endif
+ } /* if do_prune */
+
+ } /* if */
+
+ } /* for each U-segment... */
+}
diff --git a/SuperLU_5.2.0/SRC/dreadhb.c b/SuperLU_5.2.0/SRC/dreadhb.c
new file mode 100644
index 0000000..a46bd99
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dreadhb.c
@@ -0,0 +1,369 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+
+/*! \brief Eat up the rest of the current line */
+int dDumpLine(FILE *fp)
+{
+ register int c;
+ while ((c = fgetc(fp)) != '\n') ;
+ return 0;
+}
+
+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;
+}
+
+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;
+}
+
+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;
+}
+
+
+/*! \brief
+ *
+ * <pre>
+ * On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+ * matrix. On exit, it represents the full matrix with lower and upper parts.
+ * </pre>
+ */
+static void
+FormFullA(int n, int *nonz, double **nzval, int **rowind, int **colptr)
+{
+ register int i, j, k, col, new_nnz;
+ int *t_rowind, *t_colptr, *al_rowind, *al_colptr, *a_rowind, *a_colptr;
+ int *marker;
+ double *t_val, *al_val, *a_val;
+
+ al_rowind = *rowind;
+ al_colptr = *colptr;
+ al_val = *nzval;
+
+ if ( !(marker =(int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC t_colptr[]");
+ if ( !(t_rowind = (int *) SUPERLU_MALLOC( *nonz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_rowind[]");
+ if ( !(t_val = (double*) SUPERLU_MALLOC( *nonz * sizeof(double)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_val[]");
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < n; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i)
+ ++marker[al_rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < n; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose matrix A to T */
+ for (j = 0; j < n; ++j)
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ col = al_rowind[i];
+ t_rowind[marker[col]] = j;
+ t_val[marker[col]] = al_val[i];
+ ++marker[col];
+ }
+
+ new_nnz = *nonz * 2 - n;
+ if ( !(a_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC a_colptr[]");
+ if ( !(a_rowind = (int *) SUPERLU_MALLOC( new_nnz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_rowind[]");
+ if ( !(a_val = (double*) SUPERLU_MALLOC( new_nnz * sizeof(double)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_val[]");
+
+ a_colptr[0] = 0;
+ k = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ if ( t_rowind[i] != j ) { /* not diagonal */
+ a_rowind[k] = t_rowind[i];
+ a_val[k] = t_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+ }
+
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ a_rowind[k] = al_rowind[i];
+ a_val[k] = al_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+
+ a_colptr[j+1] = k;
+ }
+
+ printf("FormFullA: new_nnz = %d, k = %d\n", new_nnz, k);
+
+ SUPERLU_FREE(al_val);
+ SUPERLU_FREE(al_rowind);
+ SUPERLU_FREE(al_colptr);
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_val);
+ SUPERLU_FREE(t_rowind);
+ SUPERLU_FREE(t_colptr);
+
+ *nzval = a_val;
+ *rowind = a_rowind;
+ *colptr = a_colptr;
+ *nonz = new_nnz;
+}
+
+void
+dreadhb(FILE *fp, int *nrow, int *ncol, int *nonz,
+ double **nzval, int **rowind, int **colptr)
+{
+
+ register int i, numer_lines = 0, rhscrd = 0;
+ int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
+ char buf[100], type[4], key[10];
+ int sym;
+
+ /* Line 1 */
+ fgets(buf, 100, fp);
+ fputs(buf, stdout);
+#if 0
+ fscanf(fp, "%72c", buf); buf[72] = 0;
+ printf("Title: %s", buf);
+ fscanf(fp, "%8c", key); key[8] = 0;
+ printf("Key: %s\n", key);
+ dDumpLine(fp);
+#endif
+
+ /* Line 2 */
+ for (i=0; i<5; i++) {
+ fscanf(fp, "%14c", buf); buf[14] = 0;
+ sscanf(buf, "%d", &tmp);
+ if (i == 3) numer_lines = tmp;
+ if (i == 4 && tmp) rhscrd = 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);
+ fscanf(fp, "%20c", buf);
+ dDumpLine(fp);
+
+ /* Line 5: right-hand side */
+ if ( rhscrd ) dDumpLine(fp); /* skip RHSFMT */
+
+#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);
+ }
+
+ sym = (type[1] == 'S' || type[1] == 's');
+ if ( sym ) {
+ FormFullA(*ncol, nonz, nzval, rowind, colptr);
+ }
+
+ fclose(fp);
+}
+
diff --git a/SuperLU_5.2.0/SRC/dreadrb.c b/SuperLU_5.2.0/SRC/dreadrb.c
new file mode 100644
index 0000000..1270dc7
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dreadrb.c
@@ -0,0 +1,356 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 <stdio.h>
+#include <stdlib.h>
+#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;
+}
+
+
+
+/*! \brief
+ *
+ * <pre>
+ * On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+ * matrix. On exit, it represents the full matrix with lower and upper parts.
+ * </pre>
+ */
+static void
+FormFullA(int n, int *nonz, double **nzval, int **rowind, int **colptr)
+{
+ register int i, j, k, col, new_nnz;
+ int *t_rowind, *t_colptr, *al_rowind, *al_colptr, *a_rowind, *a_colptr;
+ int *marker;
+ double *t_val, *al_val, *a_val;
+
+ al_rowind = *rowind;
+ al_colptr = *colptr;
+ al_val = *nzval;
+
+ if ( !(marker =(int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC t_colptr[]");
+ if ( !(t_rowind = (int *) SUPERLU_MALLOC( *nonz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_rowind[]");
+ if ( !(t_val = (double*) SUPERLU_MALLOC( *nonz * sizeof(double)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_val[]");
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < n; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i)
+ ++marker[al_rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < n; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose matrix A to T */
+ for (j = 0; j < n; ++j)
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ col = al_rowind[i];
+ t_rowind[marker[col]] = j;
+ t_val[marker[col]] = al_val[i];
+ ++marker[col];
+ }
+
+ new_nnz = *nonz * 2 - n;
+ if ( !(a_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC a_colptr[]");
+ if ( !(a_rowind = (int *) SUPERLU_MALLOC( new_nnz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_rowind[]");
+ if ( !(a_val = (double*) SUPERLU_MALLOC( new_nnz * sizeof(double)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_val[]");
+
+ a_colptr[0] = 0;
+ k = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ if ( t_rowind[i] != j ) { /* not diagonal */
+ a_rowind[k] = t_rowind[i];
+ a_val[k] = t_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+ }
+
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ a_rowind[k] = al_rowind[i];
+ a_val[k] = al_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+
+ a_colptr[j+1] = k;
+ }
+
+ printf("FormFullA: new_nnz = %d, k = %d\n", new_nnz, k);
+
+ SUPERLU_FREE(al_val);
+ SUPERLU_FREE(al_rowind);
+ SUPERLU_FREE(al_colptr);
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_val);
+ SUPERLU_FREE(t_rowind);
+ SUPERLU_FREE(t_colptr);
+
+ *nzval = a_val;
+ *rowind = a_rowind;
+ *colptr = a_colptr;
+ *nonz = new_nnz;
+}
+
+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];
+ int sym;
+ 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);
+ }
+
+ sym = (type[1] == 'S' || type[1] == 's');
+ if ( sym ) {
+ FormFullA(*ncol, nonz, nzval, rowind, colptr);
+ }
+
+ fclose(fp);
+}
diff --git a/SuperLU_5.2.0/SRC/dreadtriple.c b/SuperLU_5.2.0/SRC/dreadtriple.c
new file mode 100644
index 0000000..3e2451f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dreadtriple.c
@@ -0,0 +1,150 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+dreadtriple(int *m, int *n, int *nonz,
+ double **nzval, int **rowind, int **colptr)
+{
+/*
+ * Output parameters
+ * =================
+ * (a,asub,xa): asub[*] contains the row subscripts of nonzeros
+ * in columns of matrix A; a[*] the numerical values;
+ * row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
+ *
+ */
+ int j, k, jsize, nnz, nz;
+ double *a, *val;
+ int *asub, *xa, *row, *col;
+ int zero_base = 0;
+
+ /* Matrix format:
+ * First line: #rows, #cols, #non-zero
+ * Triplet in the rest of lines:
+ * row, col, value
+ */
+
+ 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 */
+ a = *nzval;
+ asub = *rowind;
+ xa = *colptr;
+
+ val = (double *) SUPERLU_MALLOC(*nonz * sizeof(double));
+ 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 (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
+ scanf("%d%d%lf\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",
+ nz, row[nz], col[nz], val[nz]);
+ exit(-1);
+ } else {
+ ++xa[col[nz]];
+ ++nz;
+ }
+ }
+
+ *nonz = nz;
+
+ /* Initialize the array of column pointers */
+ k = 0;
+ jsize = xa[0];
+ xa[0] = 0;
+ for (j = 1; j < *n; ++j) {
+ k += jsize;
+ jsize = xa[j];
+ xa[j] = k;
+ }
+
+ /* Copy the triplets into the column oriented storage */
+ for (nz = 0; nz < *nonz; ++nz) {
+ j = col[nz];
+ k = xa[j];
+ asub[k] = row[nz];
+ a[k] = val[nz];
+ ++xa[j];
+ }
+
+ /* Reset the column pointers to the beginning of each column */
+ for (j = *n; j > 0; --j)
+ xa[j] = xa[j-1];
+ xa[0] = 0;
+
+ SUPERLU_FREE(val);
+ SUPERLU_FREE(row);
+ SUPERLU_FREE(col);
+
+#ifdef CHK_INPUT
+ {
+ 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)
+{
+ 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\n", &b[i]);
+
+ /* readpair_(j, &b[i]);*/
+ fclose(fp);
+}
diff --git a/SuperLU_5.2.0/SRC/dsnode_bmod.c b/SuperLU_5.2.0/SRC/dsnode_bmod.c
new file mode 100644
index 0000000..b4a8b8b
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dsnode_bmod.c
@@ -0,0 +1,128 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_ddefs.h"
+
+
+/*! \brief Performs numeric block updates within the relaxed snode.
+ */
+int
+dsnode_bmod (
+ const int jcol, /* in */
+ const int jsupno, /* in */
+ const int fsupc, /* in */
+ double *dense, /* in */
+ double *tempv, /* working array */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ double alpha = -1.0, beta = 1.0;
+#endif
+
+ int luptr, nsupc, nsupr, nrow;
+ int isub, irow, i, iptr;
+ register int ufirst, nextlu;
+ int *lsub, *xlsub;
+ double *lusup;
+ int *xlusup;
+ flops_t *ops = stat->ops;
+
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (double *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ nextlu = xlusup[jcol];
+
+ /*
+ * Process the supernodal portion of L\U[*,j]
+ */
+ for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
+ irow = lsub[isub];
+ lusup[nextlu] = dense[irow];
+ dense[irow] = 0;
+ ++nextlu;
+ }
+
+ xlusup[jcol + 1] = nextlu; /* Initialize xlusup for next column */
+
+ if ( fsupc < jcol ) {
+
+ luptr = xlusup[fsupc];
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc];
+ nsupc = jcol - fsupc; /* Excluding jcol */
+ ufirst = xlusup[jcol]; /* Points to the beginning of column
+ jcol in supernode L\U(jsupno). */
+ nrow = nsupr - nsupc;
+
+ ops[TRSV] += nsupc * (nsupc - 1);
+ ops[GEMV] += 2 * nrow * nsupc;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr], &nsupr,
+ &lusup[ufirst], &incx );
+ SGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#else
+ dtrsv_( "L", "N", "U", &nsupc, &lusup[luptr], &nsupr,
+ &lusup[ufirst], &incx );
+ dgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#endif
+#else
+ dlsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
+ dmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
+ &lusup[ufirst], &tempv[0] );
+
+ /* Scatter tempv[*] into lusup[*] */
+ iptr = ufirst + nsupc;
+ for (i = 0; i < nrow; i++) {
+ lusup[iptr++] -= tempv[i];
+ tempv[i] = 0.0;
+ }
+#endif
+
+ }
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/dsnode_dfs.c b/SuperLU_5.2.0/SRC/dsnode_dfs.c
new file mode 100644
index 0000000..155f42f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dsnode_dfs.c
@@ -0,0 +1,122 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#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 */
+ const int kcol, /* in - end of the supernode */
+ const int *asub, /* in */
+ const int *xa_begin, /* in */
+ const int *xa_end, /* in */
+ int *xprune, /* out */
+ int *marker, /* modified */
+ GlobalLU_t *Glu /* modified */
+ )
+{
+
+ register int i, k, ifrom, ito, nextl, new_next;
+ 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) )
+ return (mem_error);
+ lsub = Glu->lsub;
+ }
+ }
+ }
+ supno[i] = nsuper;
+ }
+
+ /* Supernode > 1, then make a copy of the subscripts for pruning */
+ if ( jcol < kcol ) {
+ new_next = nextl + (nextl - xlsub[jcol]);
+ while ( new_next > nzlmax ) {
+ if ( mem_error = dLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
+ return (mem_error);
+ lsub = Glu->lsub;
+ }
+ ito = nextl;
+ for (ifrom = xlsub[jcol]; ifrom < nextl; )
+ lsub[ito++] = lsub[ifrom++];
+ for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
+ nextl = ito;
+ }
+
+ xsup[nsuper+1] = kcol + 1;
+ supno[kcol+1] = nsuper;
+ xprune[kcol] = nextl;
+ xlsub[kcol+1] = nextl;
+
+ return 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/dsp_blas2.c b/SuperLU_5.2.0/SRC/dsp_blas2.c
new file mode 100644
index 0000000..4b632d3
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dsp_blas2.c
@@ -0,0 +1,490 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file dsp_blas2.c
+ * \brief Sparse BLAS 2, using some dense BLAS 2 operations
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: December 3, 2015
+ * </pre>
+ */
+/*
+ * File name: dsp_blas2.c
+ * Purpose: Sparse BLAS 2, using some dense BLAS 2 operations.
+ */
+
+#include "slu_ddefs.h"
+
+/*
+ * Function prototypes
+ */
+void dusolve(int, int, double*, double*);
+void dlsolve(int, int, double*, double*);
+void dmatvec(int, int, int, double*, double*, double*);
+
+/*! \brief Solves one of the systems of equations A*x = b, or A'*x = b
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * sp_dtrsv() 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.
+ *
+ * Parameters
+ * ==========
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * U - (input) SuperMatrix*
+ * The factor U from the factorization Pr*A*Pc=L*U.
+ * U has types: Stype = NC, Dtype = SLU_D, Mtype = TRU.
+ *
+ * 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.
+ *
+ * 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")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ SCformat *Lstore;
+ NCformat *Ustore;
+ double *Lval, *Uval;
+ int incx = 1, incy = 1;
+ double alpha = 1.0, beta = 1.0;
+ int nrow;
+ int fsupc, nsupr, nsupc, luptr, istart, irow;
+ int i, k, iptr, jcol;
+ double *work;
+ flops_t solve_ops;
+
+ /* Test the input parameters */
+ *info = 0;
+ if ( strncmp(uplo,"L", 1)!=0 && strncmp(uplo, "U", 1)!=0 ) *info = -1;
+ else if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0) *info = -2;
+ else if ( strncmp(diag, "U", 1)!=0 && strncmp(diag, "N", 1)!=0 )
+ *info = -3;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ) *info = -4;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ) *info = -5;
+ if ( *info ) {
+ i = -(*info);
+ input_error("sp_dtrsv", &i);
+ return 0;
+ }
+
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+ solve_ops = 0;
+
+ if ( !(work = doubleCalloc(L->nrow)) )
+ ABORT("Malloc fails for work in sp_dtrsv().");
+
+ if ( strncmp(trans, "N", 1)==0 ) { /* Form x := inv(A)*x. */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := inv(L)*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ 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;
+ luptr = L_NZ_START(fsupc);
+ nrow = nsupr - nsupc;
+
+ solve_ops += nsupc * (nsupc - 1);
+ solve_ops += 2 * nrow * nsupc;
+
+ if ( nsupc == 1 ) {
+ for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
+ irow = L_SUB(iptr);
+ ++luptr;
+ x[irow] -= x[fsupc] * Lval[luptr];
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+
+ SGEMV(ftcs2, &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
+ &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
+#else
+ dtrsv_("L", "N", "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+
+ dgemv_("N", &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
+ &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
+#endif
+#else
+ dlsolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc]);
+
+ dmatvec ( nsupr, nsupr-nsupc, nsupc, &Lval[luptr+nsupc],
+ &x[fsupc], &work[0] );
+#endif
+
+ iptr = istart + nsupc;
+ for (i = 0; i < nrow; ++i, ++iptr) {
+ irow = L_SUB(iptr);
+ x[irow] -= work[i]; /* Scatter */
+ work[i] = 0.0;
+
+ }
+ }
+ } /* for k ... */
+
+ } else {
+ /* Form x := inv(U)*x */
+
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; k--) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += nsupc * (nsupc + 1);
+
+ if ( nsupc == 1 ) {
+ x[fsupc] /= Lval[luptr];
+ for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
+ irow = U_SUB(i);
+ x[irow] -= x[fsupc] * Uval[i];
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV(ftcs3, ftcs2, ftcs2, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ dtrsv_("U", "N", "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+#else
+ dusolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
+#endif
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1);
+ i++) {
+ irow = U_SUB(i);
+ x[irow] -= x[jcol] * Uval[i];
+ }
+ }
+ }
+ } /* for k ... */
+
+ }
+ } else { /* Form x := inv(A')*x */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := inv(L')*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; --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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += 2 * (nsupr - nsupc) * nsupc;
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ iptr = istart + nsupc;
+ for (i = L_NZ_START(jcol) + nsupc;
+ i < L_NZ_START(jcol+1); i++) {
+ irow = L_SUB(iptr);
+ x[jcol] -= x[irow] * Lval[i];
+ iptr++;
+ }
+ }
+
+ if ( nsupc > 1 ) {
+ solve_ops += nsupc * (nsupc - 1);
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd("T", strlen("T"));
+ ftcs3 = _cptofcd("U", strlen("U"));
+ STRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ dtrsv_("L", "T", "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ }
+ } else {
+ /* Form x := inv(U')*x */
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = 0; k <= Lstore->nsuper; k++) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
+ irow = U_SUB(i);
+ x[jcol] -= x[irow] * Uval[i];
+ }
+ }
+
+ solve_ops += nsupc * (nsupc + 1);
+
+ if ( nsupc == 1 ) {
+ x[fsupc] /= Lval[luptr];
+ } else {
+#ifdef _CRAY
+ ftcs1 = _cptofcd("U", strlen("U"));
+ ftcs2 = _cptofcd("T", strlen("T"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ dtrsv_("U", "T", "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ } /* for k ... */
+ }
+ }
+
+ stat->ops[SOLVE] += solve_ops;
+ SUPERLU_FREE(work);
+ return 0;
+}
+
+
+
+/*! \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)
+{
+ /* Local variables */
+ NCformat *Astore;
+ double *Aval;
+ int info;
+ double temp;
+ int lenx, leny, i, j, irow;
+ int iy, jx, jy, kx, ky;
+ int notran;
+
+ notran = ( strncmp(trans, "N", 1)==0 || strncmp(trans, "n", 1)==0 );
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Test the input parameters */
+ info = 0;
+ if ( !notran && strncmp(trans, "T", 1)!=0 && strncmp(trans, "C", 1)!=0 )
+ info = 1;
+ else if ( A->nrow < 0 || A->ncol < 0 ) info = 3;
+ else if (incx == 0) info = 5;
+ else if (incy == 0) info = 8;
+ if (info != 0) {
+ input_error("sp_dgemv ", &info);
+ return 0;
+ }
+
+ /* Quick return if possible. */
+ if (A->nrow == 0 || A->ncol == 0 || (alpha == 0. && beta == 1.))
+ return 0;
+
+ /* Set LENX and LENY, the lengths of the vectors x and y, and set
+ up the start points in X and Y. */
+ if (strncmp(trans, "N", 1)==0) {
+ lenx = A->ncol;
+ leny = A->nrow;
+ } else {
+ lenx = A->nrow;
+ leny = A->ncol;
+ }
+ if (incx > 0) kx = 0;
+ else kx = - (lenx - 1) * incx;
+ if (incy > 0) ky = 0;
+ else ky = - (leny - 1) * incy;
+
+ /* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+ /* First form y := beta*y. */
+ if (beta != 1.) {
+ if (incy == 1) {
+ if (beta == 0.)
+ for (i = 0; i < leny; ++i) y[i] = 0.;
+ else
+ for (i = 0; i < leny; ++i) y[i] = beta * y[i];
+ } else {
+ iy = ky;
+ if (beta == 0.)
+ for (i = 0; i < leny; ++i) {
+ y[iy] = 0.;
+ iy += incy;
+ }
+ else
+ for (i = 0; i < leny; ++i) {
+ y[iy] = beta * y[iy];
+ iy += incy;
+ }
+ }
+ }
+
+ if (alpha == 0.) return 0;
+
+ if ( notran ) {
+ /* Form y := alpha*A*x + y. */
+ jx = kx;
+ if (incy == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ if (x[jx] != 0.) {
+ temp = alpha * x[jx];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ y[irow] += temp * Aval[i];
+ }
+ }
+ jx += incx;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ } else {
+ /* Form y := alpha*A'*x + y. */
+ jy = ky;
+ if (incx == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ temp = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ temp += Aval[i] * x[irow];
+ }
+ y[jy] += alpha * temp;
+ jy += incy;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ }
+
+ return 0;
+} /* sp_dgemv */
+
diff --git a/SuperLU_5.2.0/SRC/dsp_blas3.c b/SuperLU_5.2.0/SRC/dsp_blas3.c
new file mode 100644
index 0000000..127d590
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dsp_blas3.c
@@ -0,0 +1,137 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * Purpose: Sparse BLAS3, using some dense BLAS3 operations.
+ */
+
+#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)
+{
+ int incx = 1, incy = 1;
+ int j;
+
+ for (j = 0; j < n; ++j) {
+ sp_dgemv(transa, alpha, A, &b[ldb*j], incx, beta, &c[ldc*j], incy);
+ }
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/dutil.c b/SuperLU_5.2.0/SRC/dutil.c
new file mode 100644
index 0000000..1ed1e96
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dutil.c
@@ -0,0 +1,481 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * 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>
+ */
+
+
+#include <math.h>
+#include "slu_ddefs.h"
+
+void
+dCreate_CompCol_Matrix(SuperMatrix *A, int m, int n, int nnz,
+ double *nzval, int *rowind, int *colptr,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ NCformat *Astore;
+
+ A->Stype = stype;
+ A->Dtype = dtype;
+ A->Mtype = mtype;
+ A->nrow = m;
+ A->ncol = n;
+ A->Store = (void *) SUPERLU_MALLOC( sizeof(NCformat) );
+ if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
+ Astore = A->Store;
+ Astore->nnz = nnz;
+ Astore->nzval = nzval;
+ Astore->rowind = rowind;
+ Astore->colptr = colptr;
+}
+
+void
+dCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
+ double *nzval, int *colind, int *rowptr,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ NRformat *Astore;
+
+ A->Stype = stype;
+ A->Dtype = dtype;
+ A->Mtype = mtype;
+ A->nrow = m;
+ A->ncol = n;
+ A->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat) );
+ if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
+ Astore = A->Store;
+ Astore->nnz = nnz;
+ Astore->nzval = nzval;
+ Astore->colind = colind;
+ Astore->rowptr = rowptr;
+}
+
+/*! \brief Copy matrix A into matrix B. */
+void
+dCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
+{
+ NCformat *Astore, *Bstore;
+ int ncol, nnz, i;
+
+ B->Stype = A->Stype;
+ B->Dtype = A->Dtype;
+ B->Mtype = A->Mtype;
+ B->nrow = A->nrow;;
+ B->ncol = ncol = A->ncol;
+ Astore = (NCformat *) A->Store;
+ Bstore = (NCformat *) B->Store;
+ Bstore->nnz = nnz = Astore->nnz;
+ for (i = 0; i < nnz; ++i)
+ ((double *)Bstore->nzval)[i] = ((double *)Astore->nzval)[i];
+ for (i = 0; i < nnz; ++i) Bstore->rowind[i] = Astore->rowind[i];
+ for (i = 0; i <= ncol; ++i) Bstore->colptr[i] = Astore->colptr[i];
+}
+
+
+void
+dCreate_Dense_Matrix(SuperMatrix *X, int m, int n, double *x, int ldx,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ DNformat *Xstore;
+
+ X->Stype = stype;
+ X->Dtype = dtype;
+ X->Mtype = mtype;
+ X->nrow = m;
+ X->ncol = n;
+ X->Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
+ if ( !(X->Store) ) ABORT("SUPERLU_MALLOC fails for X->Store");
+ Xstore = (DNformat *) X->Store;
+ Xstore->lda = ldx;
+ Xstore->nzval = (double *) x;
+}
+
+void
+dCopy_Dense_Matrix(int M, int N, double *X, int ldx,
+ double *Y, int ldy)
+{
+/*! \brief Copies a two-dimensional matrix X to another matrix Y.
+ */
+ int i, j;
+
+ for (j = 0; j < N; ++j)
+ for (i = 0; i < M; ++i)
+ Y[i + j*ldy] = X[i + j*ldx];
+}
+
+void
+dCreate_SuperNode_Matrix(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)
+{
+ SCformat *Lstore;
+
+ L->Stype = stype;
+ L->Dtype = dtype;
+ L->Mtype = mtype;
+ L->nrow = m;
+ L->ncol = n;
+ L->Store = (void *) SUPERLU_MALLOC( sizeof(SCformat) );
+ if ( !(L->Store) ) ABORT("SUPERLU_MALLOC fails for L->Store");
+ Lstore = L->Store;
+ Lstore->nnz = nnz;
+ Lstore->nsuper = col_to_sup[n];
+ Lstore->nzval = nzval;
+ Lstore->nzval_colptr = nzval_colptr;
+ Lstore->rowind = rowind;
+ Lstore->rowind_colptr = rowind_colptr;
+ Lstore->col_to_sup = col_to_sup;
+ Lstore->sup_to_col = sup_to_col;
+
+}
+
+
+/*! \brief Convert a row compressed storage into a column compressed storage.
+ */
+void
+dCompRow_to_CompCol(int m, int n, int nnz,
+ double *a, int *colind, int *rowptr,
+ double **at, int **rowind, int **colptr)
+{
+ register int i, j, col, relpos;
+ int *marker;
+
+ /* Allocate storage for another copy of the matrix. */
+ *at = (double *) doubleMalloc(nnz);
+ *rowind = (int *) intMalloc(nnz);
+ *colptr = (int *) intMalloc(n+1);
+ marker = (int *) intCalloc(n);
+
+ /* Get counts of each column of A, and set up column pointers */
+ for (i = 0; i < m; ++i)
+ for (j = rowptr[i]; j < rowptr[i+1]; ++j) ++marker[colind[j]];
+ (*colptr)[0] = 0;
+ for (j = 0; j < n; ++j) {
+ (*colptr)[j+1] = (*colptr)[j] + marker[j];
+ marker[j] = (*colptr)[j];
+ }
+
+ /* Transfer the matrix into the compressed column storage. */
+ for (i = 0; i < m; ++i) {
+ for (j = rowptr[i]; j < rowptr[i+1]; ++j) {
+ col = colind[j];
+ relpos = marker[col];
+ (*rowind)[relpos] = i;
+ (*at)[relpos] = a[j];
+ ++marker[col];
+ }
+ }
+
+ SUPERLU_FREE(marker);
+}
+
+
+void
+dPrint_CompCol_Matrix(char *what, SuperMatrix *A)
+{
+ NCformat *Astore;
+ register int i,n;
+ double *dp;
+
+ printf("\nCompCol matrix %s:\n", what);
+ printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
+ n = A->ncol;
+ Astore = (NCformat *) A->Store;
+ dp = (double *) Astore->nzval;
+ printf("nrow %d, ncol %d, nnz %d\n", A->nrow,A->ncol,Astore->nnz);
+ printf("nzval: ");
+ for (i = 0; i < Astore->colptr[n]; ++i) printf("%f ", dp[i]);
+ printf("\nrowind: ");
+ for (i = 0; i < Astore->colptr[n]; ++i) printf("%d ", Astore->rowind[i]);
+ printf("\ncolptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->colptr[i]);
+ printf("\n");
+ fflush(stdout);
+}
+
+void
+dPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
+{
+ SCformat *Astore;
+ register int i, j, k, c, d, n, nsup;
+ double *dp;
+ int *col_to_sup, *sup_to_col, *rowind, *rowind_colptr;
+
+ printf("\nSuperNode matrix %s:\n", what);
+ printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
+ n = A->ncol;
+ Astore = (SCformat *) A->Store;
+ dp = (double *) Astore->nzval;
+ col_to_sup = Astore->col_to_sup;
+ sup_to_col = Astore->sup_to_col;
+ rowind_colptr = Astore->rowind_colptr;
+ rowind = Astore->rowind;
+ printf("nrow %d, ncol %d, nnz %d, nsuper %d\n",
+ A->nrow,A->ncol,Astore->nnz,Astore->nsuper);
+ printf("nzval:\n");
+ for (k = 0; k <= Astore->nsuper; ++k) {
+ c = sup_to_col[k];
+ nsup = sup_to_col[k+1] - c;
+ for (j = c; j < c + nsup; ++j) {
+ d = Astore->nzval_colptr[j];
+ for (i = rowind_colptr[c]; i < rowind_colptr[c+1]; ++i) {
+ printf("%d\t%d\t%e\n", rowind[i], j, dp[d++]);
+ }
+ }
+ }
+#if 0
+ for (i = 0; i < Astore->nzval_colptr[n]; ++i) printf("%f ", dp[i]);
+#endif
+ printf("\nnzval_colptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->nzval_colptr[i]);
+ printf("\nrowind: ");
+ for (i = 0; i < Astore->rowind_colptr[n]; ++i)
+ printf("%d ", Astore->rowind[i]);
+ printf("\nrowind_colptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->rowind_colptr[i]);
+ printf("\ncol_to_sup: ");
+ for (i = 0; i < n; ++i) printf("%d ", col_to_sup[i]);
+ printf("\nsup_to_col: ");
+ for (i = 0; i <= Astore->nsuper+1; ++i)
+ printf("%d ", sup_to_col[i]);
+ printf("\n");
+ fflush(stdout);
+}
+
+void
+dPrint_Dense_Matrix(char *what, SuperMatrix *A)
+{
+ 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);
+ dp = (double *) Astore->nzval;
+ printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
+ printf("\nnzval: ");
+ for (j = 0; j < A->ncol; ++j) {
+ for (i = 0; i < A->nrow; ++i) printf("%f ", dp[i + j*lda]);
+ printf("\n");
+ }
+ printf("\n");
+ fflush(stdout);
+}
+
+/*! \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)
+{
+ int i, k, fsupc;
+ int *xsup, *supno;
+ int *xlsub, *lsub;
+ double *lusup;
+ int *xlusup;
+ double *ucol;
+ int *usub, *xusub;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (double *) Glu->lusup;
+ xlusup = Glu->xlusup;
+ ucol = (double *) Glu->ucol;
+ usub = Glu->usub;
+ xusub = Glu->xusub;
+
+ printf("%s", msg);
+ printf("col %d: pivrow %d, supno %d, xprune %d\n",
+ jcol, pivrow, supno[jcol], xprune[jcol]);
+
+ printf("\tU-col:\n");
+ for (i = xusub[jcol]; i < xusub[jcol+1]; i++)
+ printf("\t%d%10.4f\n", usub[i], ucol[i]);
+ printf("\tL-col in rectangular snode:\n");
+ fsupc = xsup[supno[jcol]]; /* first col of the snode */
+ i = xlsub[fsupc];
+ k = xlusup[jcol];
+ while ( i < xlsub[fsupc+1] && k < xlusup[jcol+1] ) {
+ printf("\t%d\t%10.4f\n", lsub[i], lusup[k]);
+ i++; k++;
+ }
+ fflush(stdout);
+}
+
+
+/*! \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)
+{
+ int i;
+
+ for (i = 0; i < n; i++) {
+ if (tempv[i] != 0.0)
+ {
+ fprintf(stderr,"tempv[%d] = %f\n", i,tempv[i]);
+ ABORT("dcheck_tempv");
+ }
+ }
+}
+
+
+void
+dGenXtrue(int n, int nrhs, double *x, int ldx)
+{
+ int i, j;
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < n; ++i) {
+ x[i + j*ldx] = 1.0;/* + (double)(i+1.)/n;*/
+ }
+}
+
+/*! \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,
+ SuperMatrix *A, SuperMatrix *B)
+{
+ NCformat *Astore;
+ double *Aval;
+ DNformat *Bstore;
+ double *rhs;
+ double one = 1.0;
+ double zero = 0.0;
+ int ldc;
+ char transc[1];
+
+ Astore = A->Store;
+ Aval = (double *) Astore->nzval;
+ Bstore = B->Store;
+ rhs = Bstore->nzval;
+ ldc = Bstore->lda;
+
+ if ( trans == NOTRANS ) *(unsigned char *)transc = 'N';
+ else *(unsigned char *)transc = 'T';
+
+ sp_dgemm(transc, "N", A->nrow, nrhs, A->ncol, one, A,
+ x, ldx, zero, rhs, ldc);
+
+}
+
+/*! \brief Fills a double precision array with a given value.
+ */
+void
+dfill(double *a, int alen, double dval)
+{
+ register int i;
+ for (i = 0; i < alen; i++) a[i] = dval;
+}
+
+
+
+/*! \brief Check the inf-norm of the error vector
+ */
+void dinf_norm_error(int nrhs, SuperMatrix *X, double *xtrue)
+{
+ DNformat *Xstore;
+ double err, xnorm;
+ double *Xmat, *soln_work;
+ int i, j;
+
+ Xstore = X->Store;
+ Xmat = Xstore->nzval;
+
+ for (j = 0; j < nrhs; j++) {
+ soln_work = &Xmat[j*Xstore->lda];
+ err = xnorm = 0.0;
+ for (i = 0; i < X->nrow; i++) {
+ err = SUPERLU_MAX(err, fabs(soln_work[i] - xtrue[i]));
+ xnorm = SUPERLU_MAX(xnorm, fabs(soln_work[i]));
+ }
+ err = err / xnorm;
+ printf("||X - Xtrue||/||X|| = %e\n", err);
+ }
+}
+
+
+
+/*! \brief Print performance of the code. */
+void
+dPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
+ double rpg, double rcond, double *ferr,
+ double *berr, char *equed, SuperLUStat_t *stat)
+{
+ SCformat *Lstore;
+ NCformat *Ustore;
+ double *utime;
+ flops_t *ops;
+
+ utime = stat->utime;
+ ops = stat->ops;
+
+ if ( utime[FACT] != 0. )
+ printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
+ ops[FACT]*1e-6/utime[FACT]);
+ printf("Identify relaxed snodes = %8.2f\n", utime[RELAX]);
+ if ( utime[SOLVE] != 0. )
+ printf("Solve flops = %.0f, Mflops = %8.2f\n", ops[SOLVE],
+ ops[SOLVE]*1e-6/utime[SOLVE]);
+
+ Lstore = (SCformat *) L->Store;
+ Ustore = (NCformat *) U->Store;
+ printf("\tNo of nonzeros in factor L = %d\n", Lstore->nnz);
+ 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\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",
+ utime[FACT], ops[FACT]*1e-6/utime[FACT],
+ utime[SOLVE], ops[SOLVE]*1e-6/utime[SOLVE],
+ utime[ETREE], utime[EQUIL], utime[RCOND], utime[REFINE]);
+
+ printf("\tRpg\t\tRcond\t\tFerr\t\tBerr\t\tEquil?\n");
+ printf("NUM:\t%e\t%e\t%e\t%e\t%s\n",
+ rpg, rcond, ferr[0], berr[0], equed);
+
+}
+
+
+
+
+print_double_vec(char *what, int n, double *vec)
+{
+ int i;
+ printf("%s: n %d\n", what, n);
+ for (i = 0; i < n; ++i) printf("%d\t%f\n", i, vec[i]);
+ return 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/dzsum1.c b/SuperLU_5.2.0/SRC/dzsum1.c
new file mode 100644
index 0000000..8037bbd
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/dzsum1.c
@@ -0,0 +1,104 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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"
+
+/*! \brief
+
+ <pre>
+ Purpose
+ =======
+
+ DZSUM1 takes the sum of the absolute values of a complex
+ vector and returns a double precision result.
+
+ Based on DZASUM from the Level 1 BLAS.
+ The change is to use the 'genuine' absolute value.
+
+ Contributed by Nick Higham for use with ZLACON.
+
+ Arguments
+ =========
+
+ N (input) INT
+ The number of elements in the vector CX.
+
+ CX (input) COMPLEX*16 array, dimension (N)
+ The vector whose elements will be summed.
+
+ INCX (input) INT
+ The spacing between successive values of CX. INCX > 0.
+
+ =====================================================================
+</pre>
+*/
+double dzsum1_slu(int *n, doublecomplex *cx, int *incx)
+{
+
+ /* Builtin functions */
+ double z_abs(doublecomplex *);
+
+ /* Local variables */
+ int i, nincx;
+ double stemp;
+
+
+#define CX(I) cx[(I)-1]
+
+ stemp = 0.;
+ if (*n <= 0) {
+ return stemp;
+ }
+ if (*incx == 1) {
+ goto L20;
+ }
+
+ /* CODE FOR INCREMENT NOT EQUAL TO 1 */
+
+ nincx = *n * *incx;
+ for (i = 1; *incx < 0 ? i >= nincx : i <= nincx; i += *incx) {
+
+ /* NEXT LINE MODIFIED. */
+
+ stemp += z_abs(&CX(i));
+/* L10: */
+ }
+
+ return stemp;
+
+ /* CODE FOR INCREMENT EQUAL TO 1 */
+
+L20:
+ for (i = 1; i <= *n; ++i) {
+
+ /* NEXT LINE MODIFIED. */
+
+ stemp += z_abs(&CX(i));
+/* L30: */
+ }
+
+ return stemp;
+
+ /* End of DZSUM1 */
+
+} /* dzsum1_slu */
+
diff --git a/SuperLU_5.2.0/SRC/get_perm_c.c b/SuperLU_5.2.0/SRC/get_perm_c.c
new file mode 100644
index 0000000..728f8cd
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/get_perm_c.c
@@ -0,0 +1,467 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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.
+ * August 1, 2008
+ * </pre>
+ */
+#include "slu_ddefs.h"
+#include "colamd.h"
+
+extern int genmmd_(int *, int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
+
+void
+get_colamd(
+ const int m, /* number of rows in matrix A. */
+ const int n, /* number of columns in matrix A. */
+ const int nnz,/* 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 *perm_c /* out - the column permutation vector. */
+ )
+{
+ int Alen, *A, i, info, *p;
+ double knobs[COLAMD_KNOBS];
+ int stats[COLAMD_STATS];
+
+ Alen = colamd_recommended(nnz, m, n);
+
+ colamd_set_defaults(knobs);
+
+ if (!(A = (int *) SUPERLU_MALLOC(Alen * sizeof(int))) )
+ ABORT("Malloc fails for A[]");
+ if (!(p = (int *) SUPERLU_MALLOC((n+1) * sizeof(int))) )
+ ABORT("Malloc fails for p[]");
+ for (i = 0; i <= n; ++i) p[i] = colptr[i];
+ for (i = 0; i < nnz; ++i) A[i] = rowind[i];
+ info = colamd(m, n, Alen, A, p, knobs, stats);
+ if ( info == FALSE ) ABORT("COLAMD failed");
+
+ for (i = 0; i < n; ++i) perm_c[p[i]] = i;
+
+ SUPERLU_FREE(A);
+ SUPERLU_FREE(p);
+}
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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).
+ *
+ * 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.
+ *
+ * Questions
+ * =========
+ * 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;
+ int *t_colptr, *t_rowind; /* a column oriented form of T = A' */
+
+ if ( !(marker = (int*) SUPERLU_MALLOC((SUPERLU_MAX(m,n)+1)*sizeof(int))) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int*) SUPERLU_MALLOC((m+1) * sizeof(int))) )
+ ABORT("SUPERLU_MALLOC t_colptr[]");
+ if ( !(t_rowind = (int*) SUPERLU_MALLOC(nz * sizeof(int))) )
+ ABORT("SUPERLU_MALLOC fails for t_rowind[]");
+
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < m; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = colptr[j]; i < colptr[j+1]; ++i)
+ ++marker[rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < m; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose the matrix from A to T */
+ for (j = 0; j < n; ++j)
+ for (i = colptr[j]; i < colptr[j+1]; ++i) {
+ col = rowind[i];
+ t_rowind[marker[col]] = j;
+ ++marker[col];
+ }
+
+
+ /* ----------------------------------------------------------------
+ compute B = T * A, where column j of B is:
+
+ Struct (B_*j) = UNION ( Struct (T_*k) )
+ A_kj != 0
+
+ do not include the diagonal entry
+
+ ( Partition A as: A = (A_*1, ..., A_*n)
+ Then B = T * A = (T * A_*1, ..., T * A_*n), where
+ T * A_*j = (T_*1, ..., T_*m) * A_*j. )
+ ---------------------------------------------------------------- */
+
+ /* Zero the diagonal flag */
+ for (i = 0; i < n; ++i) marker[i] = -1;
+
+ /* First pass determines number of nonzeros in B */
+ num_nz = 0;
+ for (j = 0; j < n; ++j) {
+ /* Flag the diagonal so it's not included in the B matrix */
+ marker[j] = j;
+
+ for (i = colptr[j]; i < colptr[j+1]; ++i) {
+ /* A_kj is nonzero, add pattern of column T_*k to B_*j */
+ k = rowind[i];
+ for (ti = t_colptr[k]; ti < t_colptr[k+1]; ++ti) {
+ trow = t_rowind[ti];
+ if ( marker[trow] != j ) {
+ marker[trow] = j;
+ num_nz++;
+ }
+ }
+ }
+ }
+ *atanz = num_nz;
+
+ /* Allocate storage for A'*A */
+ if ( !(*ata_colptr = (int*) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for ata_colptr[]");
+ if ( *atanz ) {
+ if ( !(*ata_rowind = (int*) SUPERLU_MALLOC( *atanz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for ata_rowind[]");
+ }
+ b_colptr = *ata_colptr; /* aliasing */
+ b_rowind = *ata_rowind;
+
+ /* Zero the diagonal flag */
+ for (i = 0; i < n; ++i) marker[i] = -1;
+
+ /* Compute each column of B, one at a time */
+ num_nz = 0;
+ for (j = 0; j < n; ++j) {
+ b_colptr[j] = num_nz;
+
+ /* Flag the diagonal so it's not included in the B matrix */
+ marker[j] = j;
+
+ for (i = colptr[j]; i < colptr[j+1]; ++i) {
+ /* A_kj is nonzero, add pattern of column T_*k to B_*j */
+ k = rowind[i];
+ for (ti = t_colptr[k]; ti < t_colptr[k+1]; ++ti) {
+ trow = t_rowind[ti];
+ if ( marker[trow] != j ) {
+ marker[trow] = j;
+ b_rowind[num_nz++] = trow;
+ }
+ }
+ }
+ }
+ b_colptr[n] = num_nz;
+
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_colptr);
+ SUPERLU_FREE(t_rowind);
+}
+
+
+/*! \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. */
+ 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 *bnz, /* out - on exit, returns the actual number of
+ nonzeros in matrix A'*A. */
+ int **b_colptr, /* out - size n+1 */
+ int **b_rowind /* out - size *bnz */
+ )
+{
+ register int i, j, k, col, num_nz;
+ int *t_colptr, *t_rowind; /* a column oriented form of T = A' */
+ int *marker;
+
+ if ( !(marker = (int*) SUPERLU_MALLOC( n * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int*) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_colptr[]");
+ if ( !(t_rowind = (int*) SUPERLU_MALLOC( nz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails t_rowind[]");
+
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < n; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = colptr[j]; i < colptr[j+1]; ++i)
+ ++marker[rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < n; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose the matrix from A to T */
+ for (j = 0; j < n; ++j)
+ for (i = colptr[j]; i < colptr[j+1]; ++i) {
+ col = rowind[i];
+ t_rowind[marker[col]] = j;
+ ++marker[col];
+ }
+
+
+ /* ----------------------------------------------------------------
+ compute B = A + T, where column j of B is:
+
+ Struct (B_*j) = Struct (A_*k) UNION Struct (T_*k)
+
+ do not include the diagonal entry
+ ---------------------------------------------------------------- */
+
+ /* Zero the diagonal flag */
+ for (i = 0; i < n; ++i) marker[i] = -1;
+
+ /* First pass determines number of nonzeros in B */
+ num_nz = 0;
+ for (j = 0; j < n; ++j) {
+ /* Flag the diagonal so it's not included in the B matrix */
+ marker[j] = j;
+
+ /* Add pattern of column A_*k to B_*j */
+ for (i = colptr[j]; i < colptr[j+1]; ++i) {
+ k = rowind[i];
+ if ( marker[k] != j ) {
+ marker[k] = j;
+ ++num_nz;
+ }
+ }
+
+ /* Add pattern of column T_*k to B_*j */
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ k = t_rowind[i];
+ if ( marker[k] != j ) {
+ marker[k] = j;
+ ++num_nz;
+ }
+ }
+ }
+ *bnz = num_nz;
+
+ /* Allocate storage for A+A' */
+ if ( !(*b_colptr = (int*) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for b_colptr[]");
+ if ( *bnz) {
+ if ( !(*b_rowind = (int*) SUPERLU_MALLOC( *bnz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for b_rowind[]");
+ }
+
+ /* Zero the diagonal flag */
+ for (i = 0; i < n; ++i) marker[i] = -1;
+
+ /* Compute each column of B, one at a time */
+ num_nz = 0;
+ for (j = 0; j < n; ++j) {
+ (*b_colptr)[j] = num_nz;
+
+ /* Flag the diagonal so it's not included in the B matrix */
+ marker[j] = j;
+
+ /* Add pattern of column A_*k to B_*j */
+ for (i = colptr[j]; i < colptr[j+1]; ++i) {
+ k = rowind[i];
+ if ( marker[k] != j ) {
+ marker[k] = j;
+ (*b_rowind)[num_nz++] = k;
+ }
+ }
+
+ /* Add pattern of column T_*k to B_*j */
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ k = t_rowind[i];
+ if ( marker[k] != j ) {
+ marker[k] = j;
+ (*b_rowind)[num_nz++] = k;
+ }
+ }
+ }
+ (*b_colptr)[n] = num_nz;
+
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_colptr);
+ SUPERLU_FREE(t_rowind);
+}
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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.
+ *
+ * Arguments
+ * =========
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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>
+ */
+void
+get_perm_c(int ispec, SuperMatrix *A, int *perm_c)
+{
+ NCformat *Astore = A->Store;
+ int m, n, bnz = 0, *b_colptr, i;
+ int delta, maxint, nofsub, *invp;
+ int *b_rowind, *dhead, *qsize, *llist, *marker;
+ double t, SuperLU_timer_();
+
+ m = A->nrow;
+ n = A->ncol;
+
+ t = SuperLU_timer_();
+ switch ( ispec ) {
+ case (NATURAL): /* Natural ordering */
+ for (i = 0; i < n; ++i) perm_c[i] = i;
+#if ( PRNTlevel>=1 )
+ printf("Use natural column ordering.\n");
+#endif
+ 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");
+#endif
+ 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");
+#endif
+ 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");
+#endif
+ return;
+ default:
+ ABORT("Invalid ISPEC");
+ }
+
+ if ( bnz != 0 ) {
+ t = SuperLU_timer_();
+
+ /* Initialize and allocate storage for GENMMD. */
+ 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));
+ if ( !invp ) ABORT("SUPERLU_MALLOC fails for invp.");
+ dhead = (int *) SUPERLU_MALLOC((n+delta)*sizeof(int));
+ if ( !dhead ) ABORT("SUPERLU_MALLOC fails for dhead.");
+ qsize = (int *) SUPERLU_MALLOC((n+delta)*sizeof(int));
+ if ( !qsize ) ABORT("SUPERLU_MALLOC fails for qsize.");
+ llist = (int *) SUPERLU_MALLOC(n*sizeof(int));
+ if ( !llist ) ABORT("SUPERLU_MALLOC fails for llist.");
+ marker = (int *) SUPERLU_MALLOC(n*sizeof(int));
+ if ( !marker ) ABORT("SUPERLU_MALLOC fails for marker.");
+
+ /* Transform adjacency list into 1-based indexing required by GENMMD.*/
+ for (i = 0; i <= n; ++i) ++b_colptr[i];
+ for (i = 0; i < bnz; ++i) ++b_rowind[i];
+
+ genmmd_(&n, b_colptr, b_rowind, perm_c, invp, &delta, dhead,
+ qsize, llist, marker, &maxint, &nofsub);
+
+ /* Transform perm_c into 0-based indexing. */
+ for (i = 0; i < n; ++i) --perm_c[i];
+
+ SUPERLU_FREE(invp);
+ SUPERLU_FREE(dhead);
+ SUPERLU_FREE(qsize);
+ SUPERLU_FREE(llist);
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(b_rowind);
+
+ t = SuperLU_timer_() - t;
+ /* printf("call GENMMD time = %8.3f\n", t);*/
+
+ } else { /* Empty adjacency structure */
+ for (i = 0; i < n; ++i) perm_c[i] = i;
+ }
+
+ SUPERLU_FREE(b_colptr);
+}
diff --git a/SuperLU_5.2.0/SRC/heap_relax_snode.c b/SuperLU_5.2.0/SRC/heap_relax_snode.c
new file mode 100644
index 0000000..6271355
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/heap_relax_snode.c
@@ -0,0 +1,134 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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>
+ */
+
+#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,
+ 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 */
+ )
+{
+ register int i, j, k, l, 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);
+ if ( !iwork ) ABORT("SUPERLU_MALLOC fails for iwork[]");
+ inv_post = iwork + n+1;
+ et_save = inv_post + n+1;
+
+ /* Post order etree */
+ post = (int *) TreePostorder(n, et);
+ for (i = 0; i < n+1; ++i) inv_post[post[i]] = i;
+
+ /* Renumber etree in postorder */
+ for (i = 0; i < n; ++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);
+ for (j = 0; j < n; j++) descendants[j] = 0;
+ 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 = 0; j < n; ) {
+ parent = et[j];
+ snode_start = j;
+ while ( parent != n && descendants[parent] < relax_columns ) {
+ j = parent;
+ parent = et[j];
+ }
+ /* Found a supernode in postordered etree; j is the last column. */
+ ++nsuper_et_post;
+ k = n;
+ for (i = snode_start; i <= j; ++i)
+ k = SUPERLU_MIN(k, inv_post[i]);
+ l = inv_post[j];
+ if ( (l - k) == (j - snode_start) ) {
+ /* It's also a supernode in the original etree */
+ relax_end[k] = l; /* Last column is recorded */
+ ++nsuper_et;
+ } else {
+ for (i = snode_start; i <= j; ++i) {
+ l = inv_post[i];
+ if ( descendants[i] == 0 ) {
+ relax_end[l] = l;
+ ++nsuper_et;
+ }
+ }
+ }
+ j++;
+ /* Search for a new leaf */
+ while ( descendants[j] != 0 && j < n ) j++;
+ }
+
+#if ( PRNTlevel>=1 )
+ printf(".. heap_snode_relax:\n"
+ "\tNo of relaxed snodes in postordered etree:\t%d\n"
+ "\tNo of relaxed snodes in original etree:\t%d\n",
+ nsuper_et_post, nsuper_et);
+#endif
+
+ /* Recover the original etree */
+ for (i = 0; i < n; ++i) et[i] = et_save[i];
+
+ SUPERLU_FREE(post);
+ SUPERLU_FREE(iwork);
+}
+
+
diff --git a/SuperLU_5.2.0/SRC/html_mainpage.h b/SuperLU_5.2.0/SRC/html_mainpage.h
new file mode 100644
index 0000000..73152c8
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/html_mainpage.h
@@ -0,0 +1,31 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! \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/SuperLU_5.2.0/SRC/icmax1.c b/SuperLU_5.2.0/SRC/icmax1.c
new file mode 100644
index 0000000..41e949d
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/icmax1.c
@@ -0,0 +1,126 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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"
+
+/*! \brief
+
+ <pre>
+ Purpose
+ =======
+
+ ICMAX1 finds the index of the element whose real part has maximum
+ absolute value.
+
+ Based on ICAMAX from Level 1 BLAS.
+ The change is to use the 'genuine' absolute value.
+
+ Contributed by Nick Higham for use with CLACON.
+
+ Arguments
+ =========
+
+ N (input) INT
+ The number of elements in the vector CX.
+
+ CX (input) COMPLEX array, dimension (N)
+ The vector whose elements will be summed.
+
+ INCX (input) INT
+ The spacing between successive values of CX. INCX >= 1.
+
+ =====================================================================
+ </pre>
+*/
+int icmax1_slu(int *n, complex *cx, int *incx)
+{
+/*
+ NEXT LINE IS THE ONLY MODIFICATION.
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ int ret_val, i__1, i__2;
+ float r__1;
+ /* Local variables */
+ static float smax;
+ static int i, ix;
+
+
+#define CX(I) cx[(I)-1]
+
+
+ ret_val = 0;
+ if (*n < 1) {
+ return ret_val;
+ }
+ ret_val = 1;
+ if (*n == 1) {
+ return ret_val;
+ }
+ if (*incx == 1) {
+ goto L30;
+ }
+
+/* CODE FOR INCREMENT NOT EQUAL TO 1 */
+
+ ix = 1;
+ smax = (r__1 = CX(1).r, fabs(r__1));
+ ix += *incx;
+ i__1 = *n;
+ for (i = 2; i <= *n; ++i) {
+ i__2 = ix;
+ if ((r__1 = CX(ix).r, fabs(r__1)) <= smax) {
+ goto L10;
+ }
+ ret_val = i;
+ i__2 = ix;
+ smax = (r__1 = CX(ix).r, fabs(r__1));
+L10:
+ ix += *incx;
+/* L20: */
+ }
+ return ret_val;
+
+/* CODE FOR INCREMENT EQUAL TO 1 */
+
+L30:
+ smax = (r__1 = CX(1).r, fabs(r__1));
+ i__1 = *n;
+ for (i = 2; i <= *n; ++i) {
+ i__2 = i;
+ if ((r__1 = CX(i).r, fabs(r__1)) <= smax) {
+ goto L40;
+ }
+ ret_val = i;
+ i__2 = i;
+ smax = (r__1 = CX(i).r, fabs(r__1));
+L40:
+ ;
+ }
+ return ret_val;
+
+/* End of ICMAX1 */
+
+} /* icmax1_slu */
+
diff --git a/SuperLU_5.2.0/SRC/ilu_ccolumn_dfs.c b/SuperLU_5.2.0/SRC/ilu_ccolumn_dfs.c
new file mode 100644
index 0000000..6c902dd
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_ccolumn_dfs.c
@@ -0,0 +1,265 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file ilu_ccolumn_dfs.c
+ * \brief Performs a symbolic factorization
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+*/
+
+#include "slu_cdefs.h"
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ * 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
+ * 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 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.
+ *
+ * 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.
+ *
+ * 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
+ *
+ * Return value
+ * ============
+ * 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 myfnz; /* First nonz column of a U-segment */
+ int chperm, chmark, chrep, kchild;
+ int xdfs, maxdfs, kpar, oldrep;
+ int jptr, jm1ptr;
+ int ito, ifrom; /* Used to compress row subscripts */
+ int mem_error;
+ int *xsup, *supno, *lsub, *xlsub;
+ int nzlmax;
+ int maxsuper;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ nzlmax = Glu->nzlmax;
+
+ maxsuper = sp_ienv(7);
+ jcolp1 = jcol + 1;
+ jcolm1 = jcol - 1;
+ nsuper = supno[jcol];
+ jsuper = nsuper;
+ nextl = xlsub[jcol];
+ marker2 = &marker[2*m];
+
+
+ /* For each nonzero in A[*,jcol] do dfs */
+ for (k = 0; lsub_col[k] != EMPTY; k++) {
+
+ krow = lsub_col[k];
+ lsub_col[k] = EMPTY;
+ kmark = marker2[krow];
+
+ /* 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]
+ */
+ marker2[krow] = jcol;
+ kperm = perm_r[krow];
+
+ if ( kperm == EMPTY ) {
+ lsub[nextl++] = krow; /* krow is indexed into A */
+ if ( nextl >= nzlmax ) {
+ 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 {
+ /* krow is in U: if its supernode-rep krep
+ * has been explored, update repfnz[*]
+ */
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz[krep];
+
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > kperm ) repfnz[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz[krep] = kperm;
+ xdfs = xlsub[xsup[supno[krep]]];
+ maxdfs = xlsub[krep + 1];
+
+ do {
+ /*
+ * For each unmarked kchild of krep
+ */
+ while ( xdfs < maxdfs ) {
+
+ kchild = lsub[xdfs];
+ xdfs++;
+ chmark = marker2[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;
+ if ( nextl >= nzlmax ) {
+ 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 */
+ if ( myfnz > 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) */
+ parent[krep] = oldrep;
+ repfnz[krep] = chperm;
+ xdfs = xlsub[xsup[supno[krep]]];
+ maxdfs = xlsub[krep + 1];
+ } /* else */
+
+ } /* else */
+
+ } /* if */
+
+ } /* while */
+
+ /* krow has no more unexplored nbrs;
+ * place supernode-rep krep in postorder DFS.
+ * backtrack dfs to its parent
+ */
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ kpar = parent[krep]; /* Pop from stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ maxdfs = xlsub[krep + 1];
+
+ } while ( kpar != EMPTY ); /* Until empty stack */
+
+ } /* else */
+
+ } /* else */
+
+ } /* for each nonzero ... */
+
+ /* Check to see if j belongs in the same supernode as j-1 */
+ if ( jcol == 0 ) { /* Do nothing for column 0 */
+ nsuper = supno[0] = 0;
+ } else {
+ fsupc = xsup[nsuper];
+ jptr = xlsub[jcol]; /* Not compressed yet */
+ jm1ptr = xlsub[jcolm1];
+
+ if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
+
+ /* 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 columns of the supernode.
+ */
+ if ( jsuper == EMPTY ) { /* starts a new supernode */
+ 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];
+ xlsub[jcolm1] = ito;
+ xlsub[jcol] = ito;
+ for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
+ lsub[ito] = lsub[ifrom];
+ nextl = ito;
+ }
+ nsuper++;
+ supno[jcol] = nsuper;
+ } /* if a new supernode */
+
+ } /* else: jcol > 0 */
+
+ /* Tidy up the pointers before exit */
+ xsup[nsuper+1] = jcolp1;
+ supno[jcolp1] = nsuper;
+ xlsub[jcolp1] = nextl;
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/ilu_ccopy_to_ucol.c b/SuperLU_5.2.0/SRC/ilu_ccopy_to_ucol.c
new file mode 100644
index 0000000..a5eb0b6
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_ccopy_to_ucol.c
@@ -0,0 +1,221 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 / smach("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 = (complex *) 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/SuperLU_5.2.0/SRC/ilu_cdrop_row.c b/SuperLU_5.2.0/SRC/ilu_cdrop_row.c
new file mode 100644
index 0000000..4987548
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_cdrop_row.c
@@ -0,0 +1,349 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 = (complex *) 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/SuperLU_5.2.0/SRC/ilu_cpanel_dfs.c b/SuperLU_5.2.0/SRC/ilu_cpanel_dfs.c
new file mode 100644
index 0000000..394088f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_cpanel_dfs.c
@@ -0,0 +1,258 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_cdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
+ *
+ * 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 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.
+ *
+ * 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;
+ *
+ * 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>
+ */
+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 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 *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;
+ 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;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+
+ /* For each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++) {
+ nextl_col = (jj - jcol) * m;
+
+#ifdef CHK_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];
+ 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
+ * krow is in L: place it in structure of L[*,jj]
+ */
+ 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[*]
+ */
+ else {
+
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz_col[krep];
+
+#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 > kperm ) repfnz_col[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz_col[krep] = kperm;
+ 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
+ */
+ 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
+ * been explored, update its repfnz[*]
+ */
+ else {
+
+ chrep = xsup[supno[chperm]+1] - 1;
+ myfnz = repfnz_col[chrep];
+#ifdef CHK_DFS
+ printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
+#endif
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > chperm )
+ repfnz_col[chrep] = chperm;
+ }
+ else {
+ /* Cont. dfs at snode-rep of kchild */
+ xplore[krep] = xdfs;
+ oldrep = krep;
+ krep = chrep; /* Go deeper down G(L) */
+ parent[krep] = oldrep;
+ repfnz_col[krep] = chperm;
+ 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
+ } /* else */
+
+ } /* else */
+
+ } /* if... */
+
+ } /* while xdfs < maxdfs */
+
+ /* krow has no more unexplored nbrs:
+ * 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.
+ */
+ if ( marker1[krep] < jcol ) {
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ marker1[krep] = jj;
+ }
+
+ kpar = parent[krep]; /* Pop stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ 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;
+ amax_col++;
+
+ } /* for jj ... */
+
+}
diff --git a/SuperLU_5.2.0/SRC/ilu_cpivotL.c b/SuperLU_5.2.0/SRC/ilu_cpivotL.c
new file mode 100644
index 0000000..4f96de8
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_cpivotL.c
@@ -0,0 +1,284 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 = (complex *) 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/SuperLU_5.2.0/SRC/ilu_csnode_dfs.c b/SuperLU_5.2.0/SRC/ilu_csnode_dfs.c
new file mode 100644
index 0000000..c67aa9b
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_csnode_dfs.c
@@ -0,0 +1,100 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/ilu_dcolumn_dfs.c b/SuperLU_5.2.0/SRC/ilu_dcolumn_dfs.c
new file mode 100644
index 0000000..5cd0453
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_dcolumn_dfs.c
@@ -0,0 +1,265 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file ilu_dcolumn_dfs.c
+ * \brief Performs a symbolic factorization
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+*/
+
+#include "slu_ddefs.h"
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ * 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
+ * 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 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.
+ *
+ * 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.
+ *
+ * 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
+ *
+ * Return value
+ * ============
+ * 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 myfnz; /* First nonz column of a U-segment */
+ int chperm, chmark, chrep, kchild;
+ int xdfs, maxdfs, kpar, oldrep;
+ int jptr, jm1ptr;
+ int ito, ifrom; /* Used to compress row subscripts */
+ int mem_error;
+ int *xsup, *supno, *lsub, *xlsub;
+ int nzlmax;
+ int maxsuper;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ nzlmax = Glu->nzlmax;
+
+ maxsuper = sp_ienv(7);
+ jcolp1 = jcol + 1;
+ jcolm1 = jcol - 1;
+ nsuper = supno[jcol];
+ jsuper = nsuper;
+ nextl = xlsub[jcol];
+ marker2 = &marker[2*m];
+
+
+ /* For each nonzero in A[*,jcol] do dfs */
+ for (k = 0; lsub_col[k] != EMPTY; k++) {
+
+ krow = lsub_col[k];
+ lsub_col[k] = EMPTY;
+ kmark = marker2[krow];
+
+ /* 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]
+ */
+ marker2[krow] = jcol;
+ kperm = perm_r[krow];
+
+ if ( kperm == EMPTY ) {
+ lsub[nextl++] = krow; /* krow is indexed into A */
+ if ( nextl >= nzlmax ) {
+ 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 {
+ /* krow is in U: if its supernode-rep krep
+ * has been explored, update repfnz[*]
+ */
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz[krep];
+
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > kperm ) repfnz[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz[krep] = kperm;
+ xdfs = xlsub[xsup[supno[krep]]];
+ maxdfs = xlsub[krep + 1];
+
+ do {
+ /*
+ * For each unmarked kchild of krep
+ */
+ while ( xdfs < maxdfs ) {
+
+ kchild = lsub[xdfs];
+ xdfs++;
+ chmark = marker2[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;
+ if ( nextl >= nzlmax ) {
+ 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 */
+ if ( myfnz > 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) */
+ parent[krep] = oldrep;
+ repfnz[krep] = chperm;
+ xdfs = xlsub[xsup[supno[krep]]];
+ maxdfs = xlsub[krep + 1];
+ } /* else */
+
+ } /* else */
+
+ } /* if */
+
+ } /* while */
+
+ /* krow has no more unexplored nbrs;
+ * place supernode-rep krep in postorder DFS.
+ * backtrack dfs to its parent
+ */
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ kpar = parent[krep]; /* Pop from stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ maxdfs = xlsub[krep + 1];
+
+ } while ( kpar != EMPTY ); /* Until empty stack */
+
+ } /* else */
+
+ } /* else */
+
+ } /* for each nonzero ... */
+
+ /* Check to see if j belongs in the same supernode as j-1 */
+ if ( jcol == 0 ) { /* Do nothing for column 0 */
+ nsuper = supno[0] = 0;
+ } else {
+ fsupc = xsup[nsuper];
+ jptr = xlsub[jcol]; /* Not compressed yet */
+ jm1ptr = xlsub[jcolm1];
+
+ if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
+
+ /* 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 columns of the supernode.
+ */
+ if ( jsuper == EMPTY ) { /* starts a new supernode */
+ 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];
+ xlsub[jcolm1] = ito;
+ xlsub[jcol] = ito;
+ for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
+ lsub[ito] = lsub[ifrom];
+ nextl = ito;
+ }
+ nsuper++;
+ supno[jcol] = nsuper;
+ } /* if a new supernode */
+
+ } /* else: jcol > 0 */
+
+ /* Tidy up the pointers before exit */
+ xsup[nsuper+1] = jcolp1;
+ supno[jcolp1] = nsuper;
+ xlsub[jcolp1] = nextl;
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/ilu_dcopy_to_ucol.c b/SuperLU_5.2.0/SRC/ilu_dcopy_to_ucol.c
new file mode 100644
index 0000000..2bb889c
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_dcopy_to_ucol.c
@@ -0,0 +1,217 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 / dmach("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 = (double *) 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/SuperLU_5.2.0/SRC/ilu_ddrop_row.c b/SuperLU_5.2.0/SRC/ilu_ddrop_row.c
new file mode 100644
index 0000000..f25b508
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_ddrop_row.c
@@ -0,0 +1,339 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 = (double *) 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/SuperLU_5.2.0/SRC/ilu_dpanel_dfs.c b/SuperLU_5.2.0/SRC/ilu_dpanel_dfs.c
new file mode 100644
index 0000000..0d14b3c
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_dpanel_dfs.c
@@ -0,0 +1,258 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_ddefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
+ *
+ * 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 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.
+ *
+ * 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;
+ *
+ * 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>
+ */
+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 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 *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;
+ 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;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+
+ /* For each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++) {
+ nextl_col = (jj - jcol) * m;
+
+#ifdef CHK_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];
+ 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
+ * krow is in L: place it in structure of L[*,jj]
+ */
+ 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[*]
+ */
+ else {
+
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz_col[krep];
+
+#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 > kperm ) repfnz_col[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz_col[krep] = kperm;
+ 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
+ */
+ 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
+ * been explored, update its repfnz[*]
+ */
+ else {
+
+ chrep = xsup[supno[chperm]+1] - 1;
+ myfnz = repfnz_col[chrep];
+#ifdef CHK_DFS
+ printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
+#endif
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > chperm )
+ repfnz_col[chrep] = chperm;
+ }
+ else {
+ /* Cont. dfs at snode-rep of kchild */
+ xplore[krep] = xdfs;
+ oldrep = krep;
+ krep = chrep; /* Go deeper down G(L) */
+ parent[krep] = oldrep;
+ repfnz_col[krep] = chperm;
+ 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
+ } /* else */
+
+ } /* else */
+
+ } /* if... */
+
+ } /* while xdfs < maxdfs */
+
+ /* krow has no more unexplored nbrs:
+ * 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.
+ */
+ if ( marker1[krep] < jcol ) {
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ marker1[krep] = jj;
+ }
+
+ kpar = parent[krep]; /* Pop stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ 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;
+ amax_col++;
+
+ } /* for jj ... */
+
+}
diff --git a/SuperLU_5.2.0/SRC/ilu_dpivotL.c b/SuperLU_5.2.0/SRC/ilu_dpivotL.c
new file mode 100644
index 0000000..7afc630
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_dpivotL.c
@@ -0,0 +1,276 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 = (double *) 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/SuperLU_5.2.0/SRC/ilu_dsnode_dfs.c b/SuperLU_5.2.0/SRC/ilu_dsnode_dfs.c
new file mode 100644
index 0000000..afcea29
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_dsnode_dfs.c
@@ -0,0 +1,100 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/ilu_heap_relax_snode.c b/SuperLU_5.2.0/SRC/ilu_heap_relax_snode.c
new file mode 100644
index 0000000..eccc08e
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_heap_relax_snode.c
@@ -0,0 +1,130 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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>
+ */
+
+#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
+ilu_heap_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 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);
+ if ( !iwork ) ABORT("SUPERLU_MALLOC fails for iwork[]");
+ inv_post = iwork + n+1;
+ et_save = inv_post + n+1;
+
+ /* Post order etree */
+ post = (int *) TreePostorder(n, et);
+ for (i = 0; i < n+1; ++i) inv_post[post[i]] = i;
+
+ /* Renumber etree in postorder */
+ for (i = 0; i < n; ++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];
+ if ( parent != n ) /* not the dummy root */
+ descendants[parent] += descendants[j] + 1;
+ }
+
+ /* Identify the relaxed supernodes by postorder traversal of the etree. */
+ for ( f = j = 0; j < n; ) {
+ parent = et[j];
+ snode_start = j;
+ while ( parent != n && descendants[parent] < relax_columns ) {
+ j = parent;
+ parent = et[j];
+ }
+ /* Found a supernode in postordered etree; j is the last column. */
+ ++nsuper_et_post;
+ k = n;
+ for (i = snode_start; i <= j; ++i)
+ k = SUPERLU_MIN(k, inv_post[i]);
+ l = inv_post[j];
+ 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;
+ relax_fsupc[f++] = l;
+ ++nsuper_et;
+ }
+ }
+ }
+ j++;
+ /* Search for a new leaf */
+ while ( descendants[j] != 0 && j < n ) j++;
+ }
+
+#if ( PRNTlevel>=1 )
+ printf(".. heap_snode_relax:\n"
+ "\tNo of relaxed snodes in postordered etree:\t%d\n"
+ "\tNo of relaxed snodes in original etree:\t%d\n",
+ nsuper_et_post, nsuper_et);
+#endif
+
+ /* Recover the original etree */
+ for (i = 0; i < n; ++i) et[i] = et_save[i];
+
+ SUPERLU_FREE(post);
+ SUPERLU_FREE(iwork);
+}
diff --git a/SuperLU_5.2.0/SRC/ilu_relax_snode.c b/SuperLU_5.2.0/SRC/ilu_relax_snode.c
new file mode 100644
index 0000000..0cfd030
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_relax_snode.c
@@ -0,0 +1,79 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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/SuperLU_5.2.0/SRC/ilu_scolumn_dfs.c b/SuperLU_5.2.0/SRC/ilu_scolumn_dfs.c
new file mode 100644
index 0000000..d767a07
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_scolumn_dfs.c
@@ -0,0 +1,265 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file ilu_scolumn_dfs.c
+ * \brief Performs a symbolic factorization
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+*/
+
+#include "slu_sdefs.h"
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ * 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
+ * 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 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.
+ *
+ * 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.
+ *
+ * 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
+ *
+ * Return value
+ * ============
+ * 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 myfnz; /* First nonz column of a U-segment */
+ int chperm, chmark, chrep, kchild;
+ int xdfs, maxdfs, kpar, oldrep;
+ int jptr, jm1ptr;
+ int ito, ifrom; /* Used to compress row subscripts */
+ int mem_error;
+ int *xsup, *supno, *lsub, *xlsub;
+ int nzlmax;
+ int maxsuper;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ nzlmax = Glu->nzlmax;
+
+ maxsuper = sp_ienv(7);
+ jcolp1 = jcol + 1;
+ jcolm1 = jcol - 1;
+ nsuper = supno[jcol];
+ jsuper = nsuper;
+ nextl = xlsub[jcol];
+ marker2 = &marker[2*m];
+
+
+ /* For each nonzero in A[*,jcol] do dfs */
+ for (k = 0; lsub_col[k] != EMPTY; k++) {
+
+ krow = lsub_col[k];
+ lsub_col[k] = EMPTY;
+ kmark = marker2[krow];
+
+ /* 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]
+ */
+ marker2[krow] = jcol;
+ kperm = perm_r[krow];
+
+ if ( kperm == EMPTY ) {
+ lsub[nextl++] = krow; /* krow is indexed into A */
+ if ( nextl >= nzlmax ) {
+ 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 {
+ /* krow is in U: if its supernode-rep krep
+ * has been explored, update repfnz[*]
+ */
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz[krep];
+
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > kperm ) repfnz[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz[krep] = kperm;
+ xdfs = xlsub[xsup[supno[krep]]];
+ maxdfs = xlsub[krep + 1];
+
+ do {
+ /*
+ * For each unmarked kchild of krep
+ */
+ while ( xdfs < maxdfs ) {
+
+ kchild = lsub[xdfs];
+ xdfs++;
+ chmark = marker2[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;
+ if ( nextl >= nzlmax ) {
+ 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 */
+ if ( myfnz > 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) */
+ parent[krep] = oldrep;
+ repfnz[krep] = chperm;
+ xdfs = xlsub[xsup[supno[krep]]];
+ maxdfs = xlsub[krep + 1];
+ } /* else */
+
+ } /* else */
+
+ } /* if */
+
+ } /* while */
+
+ /* krow has no more unexplored nbrs;
+ * place supernode-rep krep in postorder DFS.
+ * backtrack dfs to its parent
+ */
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ kpar = parent[krep]; /* Pop from stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ maxdfs = xlsub[krep + 1];
+
+ } while ( kpar != EMPTY ); /* Until empty stack */
+
+ } /* else */
+
+ } /* else */
+
+ } /* for each nonzero ... */
+
+ /* Check to see if j belongs in the same supernode as j-1 */
+ if ( jcol == 0 ) { /* Do nothing for column 0 */
+ nsuper = supno[0] = 0;
+ } else {
+ fsupc = xsup[nsuper];
+ jptr = xlsub[jcol]; /* Not compressed yet */
+ jm1ptr = xlsub[jcolm1];
+
+ if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
+
+ /* 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 columns of the supernode.
+ */
+ if ( jsuper == EMPTY ) { /* starts a new supernode */
+ 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];
+ xlsub[jcolm1] = ito;
+ xlsub[jcol] = ito;
+ for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
+ lsub[ito] = lsub[ifrom];
+ nextl = ito;
+ }
+ nsuper++;
+ supno[jcol] = nsuper;
+ } /* if a new supernode */
+
+ } /* else: jcol > 0 */
+
+ /* Tidy up the pointers before exit */
+ xsup[nsuper+1] = jcolp1;
+ supno[jcolp1] = nsuper;
+ xlsub[jcolp1] = nextl;
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/ilu_scopy_to_ucol.c b/SuperLU_5.2.0/SRC/ilu_scopy_to_ucol.c
new file mode 100644
index 0000000..6dc0460
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_scopy_to_ucol.c
@@ -0,0 +1,217 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 / smach("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 = (float *) 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/SuperLU_5.2.0/SRC/ilu_sdrop_row.c b/SuperLU_5.2.0/SRC/ilu_sdrop_row.c
new file mode 100644
index 0000000..836ee54
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_sdrop_row.c
@@ -0,0 +1,339 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 = (float *) 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/SuperLU_5.2.0/SRC/ilu_spanel_dfs.c b/SuperLU_5.2.0/SRC/ilu_spanel_dfs.c
new file mode 100644
index 0000000..8a6bf6f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_spanel_dfs.c
@@ -0,0 +1,258 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_sdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
+ *
+ * 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 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.
+ *
+ * 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;
+ *
+ * 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>
+ */
+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 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 *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;
+ 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;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+
+ /* For each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++) {
+ nextl_col = (jj - jcol) * m;
+
+#ifdef CHK_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];
+ 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
+ * krow is in L: place it in structure of L[*,jj]
+ */
+ 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[*]
+ */
+ else {
+
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz_col[krep];
+
+#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 > kperm ) repfnz_col[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz_col[krep] = kperm;
+ 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
+ */
+ 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
+ * been explored, update its repfnz[*]
+ */
+ else {
+
+ chrep = xsup[supno[chperm]+1] - 1;
+ myfnz = repfnz_col[chrep];
+#ifdef CHK_DFS
+ printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
+#endif
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > chperm )
+ repfnz_col[chrep] = chperm;
+ }
+ else {
+ /* Cont. dfs at snode-rep of kchild */
+ xplore[krep] = xdfs;
+ oldrep = krep;
+ krep = chrep; /* Go deeper down G(L) */
+ parent[krep] = oldrep;
+ repfnz_col[krep] = chperm;
+ 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
+ } /* else */
+
+ } /* else */
+
+ } /* if... */
+
+ } /* while xdfs < maxdfs */
+
+ /* krow has no more unexplored nbrs:
+ * 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.
+ */
+ if ( marker1[krep] < jcol ) {
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ marker1[krep] = jj;
+ }
+
+ kpar = parent[krep]; /* Pop stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ 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;
+ amax_col++;
+
+ } /* for jj ... */
+
+}
diff --git a/SuperLU_5.2.0/SRC/ilu_spivotL.c b/SuperLU_5.2.0/SRC/ilu_spivotL.c
new file mode 100644
index 0000000..f0db8da
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_spivotL.c
@@ -0,0 +1,276 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 = (float *) 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/SuperLU_5.2.0/SRC/ilu_ssnode_dfs.c b/SuperLU_5.2.0/SRC/ilu_ssnode_dfs.c
new file mode 100644
index 0000000..33ea02b
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_ssnode_dfs.c
@@ -0,0 +1,100 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/ilu_zcolumn_dfs.c b/SuperLU_5.2.0/SRC/ilu_zcolumn_dfs.c
new file mode 100644
index 0000000..bc0d68e
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_zcolumn_dfs.c
@@ -0,0 +1,265 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file ilu_zcolumn_dfs.c
+ * \brief Performs a symbolic factorization
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory
+ * June 30, 2009
+ * </pre>
+*/
+
+#include "slu_zdefs.h"
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ * 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
+ * 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 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.
+ *
+ * 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.
+ *
+ * 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
+ *
+ * Return value
+ * ============
+ * 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 myfnz; /* First nonz column of a U-segment */
+ int chperm, chmark, chrep, kchild;
+ int xdfs, maxdfs, kpar, oldrep;
+ int jptr, jm1ptr;
+ int ito, ifrom; /* Used to compress row subscripts */
+ int mem_error;
+ int *xsup, *supno, *lsub, *xlsub;
+ int nzlmax;
+ int maxsuper;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ nzlmax = Glu->nzlmax;
+
+ maxsuper = sp_ienv(7);
+ jcolp1 = jcol + 1;
+ jcolm1 = jcol - 1;
+ nsuper = supno[jcol];
+ jsuper = nsuper;
+ nextl = xlsub[jcol];
+ marker2 = &marker[2*m];
+
+
+ /* For each nonzero in A[*,jcol] do dfs */
+ for (k = 0; lsub_col[k] != EMPTY; k++) {
+
+ krow = lsub_col[k];
+ lsub_col[k] = EMPTY;
+ kmark = marker2[krow];
+
+ /* 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]
+ */
+ marker2[krow] = jcol;
+ kperm = perm_r[krow];
+
+ if ( kperm == EMPTY ) {
+ lsub[nextl++] = krow; /* krow is indexed into A */
+ if ( nextl >= nzlmax ) {
+ 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 {
+ /* krow is in U: if its supernode-rep krep
+ * has been explored, update repfnz[*]
+ */
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz[krep];
+
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > kperm ) repfnz[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz[krep] = kperm;
+ xdfs = xlsub[xsup[supno[krep]]];
+ maxdfs = xlsub[krep + 1];
+
+ do {
+ /*
+ * For each unmarked kchild of krep
+ */
+ while ( xdfs < maxdfs ) {
+
+ kchild = lsub[xdfs];
+ xdfs++;
+ chmark = marker2[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;
+ if ( nextl >= nzlmax ) {
+ 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 */
+ if ( myfnz > 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) */
+ parent[krep] = oldrep;
+ repfnz[krep] = chperm;
+ xdfs = xlsub[xsup[supno[krep]]];
+ maxdfs = xlsub[krep + 1];
+ } /* else */
+
+ } /* else */
+
+ } /* if */
+
+ } /* while */
+
+ /* krow has no more unexplored nbrs;
+ * place supernode-rep krep in postorder DFS.
+ * backtrack dfs to its parent
+ */
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ kpar = parent[krep]; /* Pop from stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ maxdfs = xlsub[krep + 1];
+
+ } while ( kpar != EMPTY ); /* Until empty stack */
+
+ } /* else */
+
+ } /* else */
+
+ } /* for each nonzero ... */
+
+ /* Check to see if j belongs in the same supernode as j-1 */
+ if ( jcol == 0 ) { /* Do nothing for column 0 */
+ nsuper = supno[0] = 0;
+ } else {
+ fsupc = xsup[nsuper];
+ jptr = xlsub[jcol]; /* Not compressed yet */
+ jm1ptr = xlsub[jcolm1];
+
+ if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
+
+ /* 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 columns of the supernode.
+ */
+ if ( jsuper == EMPTY ) { /* starts a new supernode */
+ 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];
+ xlsub[jcolm1] = ito;
+ xlsub[jcol] = ito;
+ for (ifrom = jptr; ifrom < nextl; ++ifrom, ++ito)
+ lsub[ito] = lsub[ifrom];
+ nextl = ito;
+ }
+ nsuper++;
+ supno[jcol] = nsuper;
+ } /* if a new supernode */
+
+ } /* else: jcol > 0 */
+
+ /* Tidy up the pointers before exit */
+ xsup[nsuper+1] = jcolp1;
+ supno[jcolp1] = nsuper;
+ xlsub[jcolp1] = nextl;
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/ilu_zcopy_to_ucol.c b/SuperLU_5.2.0/SRC/ilu_zcopy_to_ucol.c
new file mode 100644
index 0000000..afe4a7e
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_zcopy_to_ucol.c
@@ -0,0 +1,221 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 / dmach("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 = (doublecomplex *) 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/SuperLU_5.2.0/SRC/ilu_zdrop_row.c b/SuperLU_5.2.0/SRC/ilu_zdrop_row.c
new file mode 100644
index 0000000..f434dd9
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_zdrop_row.c
@@ -0,0 +1,349 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 = (doublecomplex *) 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/SuperLU_5.2.0/SRC/ilu_zpanel_dfs.c b/SuperLU_5.2.0/SRC/ilu_zpanel_dfs.c
new file mode 100644
index 0000000..a13e74b
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_zpanel_dfs.c
@@ -0,0 +1,258 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_zdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
+ *
+ * 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 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.
+ *
+ * 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;
+ *
+ * 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>
+ */
+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 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 *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;
+ 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;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+
+ /* For each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++) {
+ nextl_col = (jj - jcol) * m;
+
+#ifdef CHK_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];
+ 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
+ * krow is in L: place it in structure of L[*,jj]
+ */
+ 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[*]
+ */
+ else {
+
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz_col[krep];
+
+#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 > kperm ) repfnz_col[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz_col[krep] = kperm;
+ 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
+ */
+ 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
+ * been explored, update its repfnz[*]
+ */
+ else {
+
+ chrep = xsup[supno[chperm]+1] - 1;
+ myfnz = repfnz_col[chrep];
+#ifdef CHK_DFS
+ printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
+#endif
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > chperm )
+ repfnz_col[chrep] = chperm;
+ }
+ else {
+ /* Cont. dfs at snode-rep of kchild */
+ xplore[krep] = xdfs;
+ oldrep = krep;
+ krep = chrep; /* Go deeper down G(L) */
+ parent[krep] = oldrep;
+ repfnz_col[krep] = chperm;
+ 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
+ } /* else */
+
+ } /* else */
+
+ } /* if... */
+
+ } /* while xdfs < maxdfs */
+
+ /* krow has no more unexplored nbrs:
+ * 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.
+ */
+ if ( marker1[krep] < jcol ) {
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ marker1[krep] = jj;
+ }
+
+ kpar = parent[krep]; /* Pop stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ 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;
+ amax_col++;
+
+ } /* for jj ... */
+
+}
diff --git a/SuperLU_5.2.0/SRC/ilu_zpivotL.c b/SuperLU_5.2.0/SRC/ilu_zpivotL.c
new file mode 100644
index 0000000..a558a80
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_zpivotL.c
@@ -0,0 +1,284 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 = (doublecomplex *) 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/SuperLU_5.2.0/SRC/ilu_zsnode_dfs.c b/SuperLU_5.2.0/SRC/ilu_zsnode_dfs.c
new file mode 100644
index 0000000..5ab3333
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ilu_zsnode_dfs.c
@@ -0,0 +1,100 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/input_error.c b/SuperLU_5.2.0/SRC/input_error.c
new file mode 100644
index 0000000..4d37de8
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/input_error.c
@@ -0,0 +1,50 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+#include <stdio.h>
+#include "slu_Cnames.h"
+
+/*! @file input_error.c
+ * \brief Error handler for input parameters.
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.4) --
+ * Lawrence Berkeley National Lab, Univ. of California Berkeley.
+ * November 20, 2012
+ * </pre>
+ */
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * INPUT_ERROR is called if an input parameter has an
+ * invalid value. A message is printed and execution stops.
+ *
+ * Arguments
+ * =========
+ *
+ * srname (input) character*6
+ * The name of the routine which called INPUT_ERROR.
+ *
+ * info (input) int
+ * The position of the invalid parameter in the parameter list
+ * of the calling routine.
+ *
+ * </pre>
+ */
+int input_error(char *srname, int *info)
+{
+ printf("** On entry to %6s, parameter number %2d had an illegal value\n",
+ srname, *info);
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/izmax1.c b/SuperLU_5.2.0/SRC/izmax1.c
new file mode 100644
index 0000000..308447d
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/izmax1.c
@@ -0,0 +1,123 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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_dcomplex.h"
+#include "slu_Cnames.h"
+
+/*! \brief
+
+<pre>
+ Purpose
+ =======
+
+ IZMAX1 finds the index of the element whose real part has maximum
+ absolute value.
+
+ Based on IZAMAX from Level 1 BLAS.
+ The change is to use the 'genuine' absolute value.
+
+ Contributed by Nick Higham for use with ZLACON.
+
+ Arguments
+ =========
+
+ N (input) INT
+ The number of elements in the vector CX.
+
+ CX (input) COMPLEX*16 array, dimension (N)
+ The vector whose elements will be summed.
+
+ INCX (input) INT
+ The spacing between successive values of CX. INCX >= 1.
+
+ =====================================================================
+</pre>
+*/
+
+int
+izmax1_slu(int *n, doublecomplex *cx, int *incx)
+{
+
+
+ /* System generated locals */
+ int ret_val, i__1, i__2;
+ double d__1;
+
+ /* Local variables */
+ double smax;
+ int i, ix;
+
+#define CX(I) cx[(I)-1]
+
+ ret_val = 0;
+ if (*n < 1) {
+ return ret_val;
+ }
+ ret_val = 1;
+ if (*n == 1) {
+ return ret_val;
+ }
+ if (*incx == 1) {
+ goto L30;
+ }
+
+/* CODE FOR INCREMENT NOT EQUAL TO 1 */
+
+ ix = 1;
+ smax = (d__1 = CX(1).r, fabs(d__1));
+ ix += *incx;
+ i__1 = *n;
+ for (i = 2; i <= *n; ++i) {
+ i__2 = ix;
+ if ((d__1 = CX(ix).r, fabs(d__1)) <= smax) {
+ goto L10;
+ }
+ ret_val = i;
+ i__2 = ix;
+ smax = (d__1 = CX(ix).r, fabs(d__1));
+L10:
+ ix += *incx;
+/* L20: */
+ }
+ return ret_val;
+
+/* CODE FOR INCREMENT EQUAL TO 1 */
+
+L30:
+ smax = (d__1 = CX(1).r, fabs(d__1));
+ i__1 = *n;
+ for (i = 2; i <= *n; ++i) {
+ i__2 = i;
+ if ((d__1 = CX(i).r, fabs(d__1)) <= smax) {
+ goto L40;
+ }
+ ret_val = i;
+ i__2 = i;
+ smax = (d__1 = CX(i).r, fabs(d__1));
+L40:
+ ;
+ }
+ return ret_val;
+
+/* End of IZMAX1 */
+
+} /* izmax1_slu */
+
diff --git a/SuperLU_5.2.0/SRC/mark_relax.c b/SuperLU_5.2.0/SRC/mark_relax.c
new file mode 100644
index 0000000..73014aa
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/mark_relax.c
@@ -0,0 +1,57 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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/SuperLU_5.2.0/SRC/mc64ad.c b/SuperLU_5.2.0/SRC/mc64ad.c
new file mode 100644
index 0000000..d9ffdae
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/mc64ad.c
@@ -0,0 +1,2645 @@
+/* mc64ad.f -- translated by f2c (version 20100827).
+ You must link the resulting object file with libf2c:
+ on Microsoft Windows system, link with libf2c.lib;
+ on Linux or Unix systems, link with .../path/to/libf2c.a -lm
+ or, if you install libf2c.a in a standard place, with -lf2c -lm
+ -- in that order, at the end of the command line, as in
+ cc *.o -lf2c -lm
+ Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
+
+ http://www.netlib.org/f2c/libf2c.zip
+*/
+
+#include "slu_ddefs.h"
+
+#define abs(a) ((a) >= 0) ? (a) : -(a)
+#define min(a,b) ((a) < (b)) ? (a) : (b)
+
+#if 0
+/* Table of constant values */
+static int_t c__1 = 1;
+static int_t c__2 = 2;
+#endif
+
+/* CCCC COPYRIGHT (c) 1999 Council for the Central Laboratory of the */
+/* CCCC Research Councils. All rights reserved. */
+/* CCCC PACKAGE MC64A/AD */
+/* CCCC AUTHORS Iain Duff (i.duff at rl.ac.uk) and Jacko Koster (jak at ii.uib.no) */
+/* CCCC LAST UPDATE 20/09/99 */
+/* CCCC */
+/* *** Conditions on external use *** */
+
+/* The user shall acknowledge the contribution of this */
+/* package in any publication of material dependent upon the use of */
+/* the package. The user shall use reasonable endeavours to notify */
+/* the authors of the package of this publication. */
+
+/* The user can modify this code but, at no time */
+/* shall the right or title to all or any part of this package pass */
+/* to the user. The user shall make available free of charge */
+/* to the authors for any purpose all information relating to any */
+/* alteration or addition made to this package for the purposes of */
+/* extending the capabilities or enhancing the performance of this */
+/* package. */
+
+/* The user shall not pass this code directly to a third party without the */
+/* express prior consent of the authors. Users wanting to licence their */
+/* own copy of these routines should send email to hsl at stfc.ac.uk */
+
+/* None of the comments from the Copyright notice up to and including this */
+/* one shall be removed or altered in any way. */
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64id_(int_t *icntl)
+{
+ int_t i__;
+
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* Purpose */
+/* ======= */
+
+/* The components of the array ICNTL control the action of MC64A/AD. */
+/* Default values for these are set in this subroutine. */
+
+/* Parameters */
+/* ========== */
+
+
+/* Local variables */
+
+/* ICNTL(1) has default value 6. */
+/* It is the output stream for error messages. If it */
+/* is negative, these messages will be suppressed. */
+
+/* ICNTL(2) has default value 6. */
+/* It is the output stream for warning messages. */
+/* If it is negative, these messages are suppressed. */
+
+/* ICNTL(3) has default value -1. */
+/* It is the output stream for monitoring printing. */
+/* If it is negative, these messages are suppressed. */
+
+/* ICNTL(4) has default value 0. */
+/* If left at the defaut value, the incoming data is checked for */
+/* out-of-range indices and duplicates. Setting ICNTL(4) to any */
+/* other will avoid the checks but is likely to cause problems */
+/* later if out-of-range indices or duplicates are present. */
+/* The user should only set ICNTL(4) non-zero, if the data is */
+/* known to avoid these problems. */
+
+/* ICNTL(5) to ICNTL(10) are not used by MC64A/AD but are set to */
+/* zero in this routine. */
+/* Initialization of the ICNTL array. */
+ /* Parameter adjustments */
+ --icntl;
+
+ /* Function Body */
+ icntl[1] = 6;
+ icntl[2] = 6;
+ icntl[3] = -1;
+ for (i__ = 4; i__ <= 10; ++i__) {
+ icntl[i__] = 0;
+/* L10: */
+ }
+ return 0;
+} /* mc64id_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64ad_(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)
+{
+ /* System generated locals */
+ int_t i__1, i__2;
+ double d__1, d__2;
+
+ /* Builtin functions */
+ double log(double);
+
+ /* Local variables */
+ 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_(
+ int_t *, int_t *, int_t *, int_t *, double *, int_t
+ *, 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 *);
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* Purpose */
+/* ======= */
+
+/* This subroutine attempts to find a column permutation for an NxN */
+/* sparse matrix A = {a_ij} that makes the permuted matrix have N */
+/* entries on its diagonal. */
+/* If the matrix is structurally nonsingular, the subroutine optionally */
+/* returns a column permutation that maximizes the smallest element */
+/* on the diagonal, maximizes the sum of the diagonal entries, or */
+/* maximizes the product of the diagonal entries of the permuted matrix. */
+/* For the latter option, the subroutine also finds scaling factors */
+/* that may be used 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. */
+/* The natural logarithms of the scaling factors u(i), i=1..N, for the */
+/* rows and v(j), j=1..N, for the columns are returned so that the */
+/* scaled matrix B = {b_ij} has entries b_ij = a_ij * EXP(u_i + v_j). */
+
+/* Parameters */
+/* ========== */
+
+
+/* JOB is an INT_T variable which must be set by the user to */
+/* control the action. It is not altered by the subroutine. */
+/* Possible values for JOB are: */
+/* 1 Compute a column 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. See [1]. */
+/* 2 Compute a column permutation of the matrix so that the smallest */
+/* value on the diagonal of the permuted matrix is maximized. */
+/* See [3]. */
+/* 3 Compute a column 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. See [2]. */
+/* 4 Compute a column permutation of the matrix so that the sum */
+/* of the diagonal entries of the permuted matrix is maximized. */
+/* See [3]. */
+/* 5 Compute a column 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. See [3]. */
+/* Restriction: 1 <= JOB <= 5. */
+
+/* N is an INT_T variable which must be set by the user to the */
+/* order of the matrix A. It is not altered by the subroutine. */
+/* Restriction: N >= 1. */
+
+/* NE is an INT_T variable which must be set by the user to the */
+/* number of entries in the matrix. It is not altered by the */
+/* subroutine. */
+/* Restriction: NE >= 1. */
+
+/* IP is an INT_T array of length N+1. */
+/* IP(J), J=1..N, must be set by the user to the position in array IRN */
+/* of the first row index of an entry in column J. IP(N+1) must be set */
+/* to NE+1. It is not altered by the subroutine. */
+
+/* IRN is an INT_T array of length NE. */
+/* IRN(K), K=1..NE, must be set by the user to hold the row indices of */
+/* the entries of the matrix. Those belonging to column J must be */
+/* stored contiguously in the positions IP(J)..IP(J+1)-1. The ordering */
+/* of the row indices within each column is unimportant. Repeated */
+/* entries are not allowed. The array IRN is not altered by the */
+/* subroutine. */
+
+/* A is a REAL (DOUBLE PRECISION in the D-version) array of length NE. */
+/* The user must set A(K), K=1..NE, to the numerical value of the */
+/* entry that corresponds to IRN(K). */
+/* It is not used by the subroutine when JOB = 1. */
+/* It is not altered by the subroutine. */
+
+/* NUM is an INT_T variable that need not be set by the user. */
+/* On successful exit, NUM will be the number of entries on the */
+/* diagonal of the permuted matrix. */
+/* If NUM < N, the matrix is structurally singular. */
+
+/* CPERM is an INT_T array of length N that need not be set by the */
+/* user. On successful exit, CPERM contains the column permutation. */
+/* Column CPERM(J) of the original matrix is column J in the permuted */
+/* matrix, J=1..N. */
+
+/* LIW is an INT_T variable that must be set by the user to */
+/* the dimension of array IW. It is not altered by the subroutine. */
+/* Restriction: */
+/* JOB = 1 : LIW >= 5N */
+/* JOB = 2 : LIW >= 4N */
+/* JOB = 3 : LIW >= 10N + NE */
+/* JOB = 4 : LIW >= 5N */
+/* JOB = 5 : LIW >= 5N */
+
+/* IW is an INT_T array of length LIW that is used for workspace. */
+
+/* LDW is an INT_T variable that must be set by the user to the */
+/* dimension of array DW. It is not altered by the subroutine. */
+/* Restriction: */
+/* JOB = 1 : LDW is not used */
+/* JOB = 2 : LDW >= N */
+/* JOB = 3 : LDW >= NE */
+/* JOB = 4 : LDW >= 2N + NE */
+/* JOB = 5 : LDW >= 3N + NE */
+
+/* DW is a REAL (DOUBLE PRECISION in the D-version) array of length LDW */
+/* that is used for workspace. If JOB = 5, on return, */
+/* DW(i) contains u_i, i=1..N, and DW(N+j) contains v_j, j=1..N. */
+
+/* ICNTL is an INT_T array of length 10. Its components control the */
+/* output of MC64A/AD and must be set by the user before calling */
+/* MC64A/AD. They are not altered by the subroutine. */
+
+/* ICNTL(1) must be set to specify the output stream for */
+/* error messages. If ICNTL(1) < 0, messages are suppressed. */
+/* The default value set by MC46I/ID is 6. */
+
+/* ICNTL(2) must be set by the user to specify the output stream for */
+/* warning messages. If ICNTL(2) < 0, messages are suppressed. */
+/* The default value set by MC46I/ID is 6. */
+
+/* ICNTL(3) must be set by the user to specify the output stream for */
+/* diagnostic messages. If ICNTL(3) < 0, messages are suppressed. */
+/* The default value set by MC46I/ID is -1. */
+
+/* ICNTL(4) must be set by the user to a value other than 0 to avoid */
+/* checking of the input data. */
+/* The default value set by MC46I/ID is 0. */
+
+/* INFO is an INT_T array of length 10 which need not be set by the */
+/* user. INFO(1) is set non-negative to indicate success. A negative */
+/* value is returned if an error occurred, a positive value if a */
+/* warning occurred. INFO(2) holds further information on the error. */
+/* On exit from the subroutine, INFO(1) will take one of the */
+/* following values: */
+/* 0 : successful entry (for structurally nonsingular matrix). */
+/* +1 : successful entry (for structurally singular matrix). */
+/* +2 : the returned scaling factors are large and may cause */
+/* overflow when used to scale the matrix. */
+/* (For JOB = 5 entry only.) */
+/* -1 : JOB < 1 or JOB > 5. Value of JOB held in INFO(2). */
+/* -2 : N < 1. Value of N held in INFO(2). */
+/* -3 : NE < 1. Value of NE held in INFO(2). */
+/* -4 : the defined length LIW violates the restriction on LIW. */
+/* Value of LIW required given by INFO(2). */
+/* -5 : the defined length LDW violates the restriction on LDW. */
+/* Value of LDW required given by INFO(2). */
+/* -6 : entries are found whose row indices are out of range. INFO(2) */
+/* contains the index of a column in which such an entry is found. */
+/* -7 : repeated entries are found. INFO(2) contains the index of a */
+/* column in which such entries are found. */
+/* INFO(3) to INFO(10) are not currently used and are set to zero by */
+/* the routine. */
+
+/* References: */
+/* [1] I. S. Duff, (1981), */
+/* "Algorithm 575. Permutations for a zero-free diagonal", */
+/* ACM Trans. Math. Software 7(3), 387-390. */
+/* [2] I. S. Duff and J. Koster, (1998), */
+/* "The design and use of algorithms for permuting large */
+/* entries to the diagonal of sparse matrices", */
+/* SIAM J. Matrix Anal. Appl., vol. 20, no. 4, pp. 889-901. */
+/* [3] I. S. Duff and J. Koster, (1999), */
+/* "On algorithms for permuting large entries to the diagonal */
+/* of sparse matrices", */
+/* Technical Report RAL-TR-1999-030, RAL, Oxfordshire, England. */
+/* Local variables and parameters */
+/* External routines and functions */
+/* EXTERNAL FD05AD */
+/* DOUBLE PRECISION FD05AD */
+/* Intrinsic functions */
+/* Set RINF to largest positive real number (infinity) */
+/* XSL RINF = FD05AD(5) */
+ /* Parameter adjustments */
+ --cperm;
+ --ip;
+ --a;
+ --irn;
+ --iw;
+ --dw;
+ --icntl;
+ --info;
+
+ /* Function Body */
+ rinf = dmach("Overflow");
+/* Check value of JOB */
+ if (*job < 1 || *job > 5) {
+ info[1] = -1;
+ info[2] = *job;
+ if (icntl[1] >= 0) {
+ printf(" ****** Error in MC64A/AD. INFO(1) = %2d"
+ " because JOB = %d\n", info[1], *job);
+ }
+ goto L99;
+ }
+/* Check value of N */
+ if (*n < 1) {
+ info[1] = -2;
+ info[2] = *n;
+ if (icntl[1] >= 0) {
+ printf(" ****** Error in MC64A/AD. INFO(1) = %2d"
+ " because N = %d\n", info[1], *job);
+ }
+ goto L99;
+ }
+/* Check value of NE */
+ if (*ne < 1) {
+ info[1] = -3;
+ info[2] = *ne;
+ if (icntl[1] >= 0) {
+ printf(" ****** Error in MC64A/AD. INFO(1) = %2d"
+ " because NE = %d\n", info[1], *job);
+ }
+ goto L99;
+ }
+/* Check LIW */
+ if (*job == 1) {
+ k = *n * 5;
+ }
+ if (*job == 2) {
+ k = *n << 2;
+ }
+ if (*job == 3) {
+ k = *n * 10 + *ne;
+ }
+ if (*job == 4) {
+ k = *n * 5;
+ }
+ if (*job == 5) {
+ k = *n * 5;
+ }
+ if (*liw < k) {
+ info[1] = -4;
+ info[2] = k;
+ if (icntl[1] >= 0) {
+ printf(" ****** Error in MC64A/AD. INFO(1) = %2d"
+ " LIW too small, must be at least %8d\n", info[1], k);
+ }
+ goto L99;
+ }
+/* Check LDW */
+/* If JOB = 1, do not check */
+ if (*job > 1) {
+ if (*job == 2) {
+ k = *n;
+ }
+ if (*job == 3) {
+ k = *ne;
+ }
+ if (*job == 4) {
+ k = (*n << 1) + *ne;
+ }
+ if (*job == 5) {
+ k = *n * 3 + *ne;
+ }
+ if (*ldw < k) {
+ info[1] = -5;
+ info[2] = k;
+ if (icntl[1] >= 0) {
+ printf(" ****** Error in MC64A/AD. INFO(1) = %2d"
+ " LDW too small, must be at least %8d\n", info[1], k);
+ }
+ goto L99;
+ }
+ }
+ if (icntl[4] == 0) {
+/* Check row indices. Use IW(1:N) as workspace */
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ iw[i__] = 0;
+/* L3: */
+ }
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ i__ = irn[k];
+/* Check for row indices that are out of range */
+ if (i__ < 1 || i__ > *n) {
+ info[1] = -6;
+ info[2] = j;
+ if (icntl[1] >= 0) {
+ printf(" ****** Error in MC64A/AD. INFO(1) = %2d Column %8d"
+ " contains an entry with invalid row index %8d\n",
+ info[1], j, i__);
+ }
+ goto L99;
+ }
+/* Check for repeated row indices within a column */
+ if (iw[i__] == j) {
+ info[1] = -7;
+ info[2] = j;
+ if (icntl[1] >= 0) {
+ printf(" ****** Error in MC64A/AD. INFO(1) = %2d"
+ " Column %8d"
+ " contains two or more entries with row index %8d\n",
+ info[1], j, i__);
+ }
+ goto L99;
+ } else {
+ iw[i__] = j;
+ }
+/* L4: */
+ }
+/* L6: */
+ }
+ }
+/* Print diagnostics on input */
+ if (icntl[3] >= 0) {
+ 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");
+ }
+ }
+/* Set components of INFO to zero */
+ for (i__ = 1; i__ <= 10; ++i__) {
+ info[i__] = 0;
+/* L8: */
+ }
+/* Compute maximum matching with MC21A/AD */
+ if (*job == 1) {
+/* Put length of column J in IW(J) */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ iw[j] = ip[j + 1] - ip[j];
+/* L10: */
+ }
+/* IW(N+1:5N) is workspace */
+#if 0
+ mc21ad_(n, &irn[1], ne, &ip[1], &iw[1], &cperm[1], num, &iw[*n+1]);
+#else
+ printf(" ****** Warning from MC64A/AD. Need to link mc21ad.\n");
+#endif
+ goto L90;
+ }
+/* Compute bottleneck matching */
+ if (*job == 2) {
+/* IW(1:5N), DW(1:N) are workspaces */
+ mc64bd_(n, ne, &ip[1], &irn[1], &a[1], &cperm[1], num, &iw[1], &iw[*n
+ + 1], &iw[(*n << 1) + 1], &iw[*n * 3 + 1], &dw[1]);
+ goto L90;
+ }
+/* Compute bottleneck matching */
+ if (*job == 3) {
+/* Copy IRN(K) into IW(K), ABS(A(K)) into DW(K), K=1..NE */
+ i__1 = *ne;
+ for (k = 1; k <= i__1; ++k) {
+ iw[k] = irn[k];
+ dw[k] = (d__1 = a[k], abs(d__1));
+/* L20: */
+ }
+/* Sort entries in each column by decreasing value. */
+ mc64rd_(n, ne, &ip[1], &iw[1], &dw[1]);
+/* IW(NE+1:NE+10N) is workspace */
+ mc64sd_(n, ne, &ip[1], &iw[1], &dw[1], &cperm[1], num, &iw[*ne + 1], &
+ iw[*ne + *n + 1], &iw[*ne + (*n << 1) + 1], &iw[*ne + *n * 3
+ + 1], &iw[*ne + (*n << 2) + 1], &iw[*ne + *n * 5 + 1], &iw[*
+ ne + *n * 6 + 1]);
+ goto L90;
+ }
+ if (*job == 4) {
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ fact = 0.;
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ if ((d__1 = a[k], abs(d__1)) > fact) {
+ fact = (d__2 = a[k], abs(d__2));
+ }
+/* L30: */
+ }
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ dw[(*n << 1) + k] = fact - (d__1 = a[k], abs(d__1));
+/* L40: */
+ }
+/* L50: */
+ }
+/* B = DW(2N+1:2N+NE); IW(1:5N) and DW(1:2N) are workspaces */
+ mc64wd_(n, ne, &ip[1], &irn[1], &dw[(*n << 1) + 1], &cperm[1], num, &
+ iw[1], &iw[*n + 1], &iw[(*n << 1) + 1], &iw[*n * 3 + 1], &iw[(
+ *n << 2) + 1], &dw[1], &dw[*n + 1]);
+ goto L90;
+ }
+ if (*job == 5) {
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ fact = 0.;
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ dw[*n * 3 + k] = (d__1 = a[k], abs(d__1));
+ if (dw[*n * 3 + k] > fact) {
+ fact = dw[*n * 3 + k];
+ }
+/* L60: */
+ }
+ dw[(*n << 1) + j] = fact;
+ if (fact != 0.) {
+ fact = log(fact);
+ } else {
+ fact = rinf / *n;
+ }
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ if (dw[*n * 3 + k] != 0.) {
+ dw[*n * 3 + k] = fact - log(dw[*n * 3 + k]);
+ } else {
+ dw[*n * 3 + k] = rinf / *n;
+ }
+/* L70: */
+ }
+/* L75: */
+ }
+/* B = DW(3N+1:3N+NE); IW(1:5N) and DW(1:2N) are workspaces */
+ mc64wd_(n, ne, &ip[1], &irn[1], &dw[*n * 3 + 1], &cperm[1], num, &iw[
+ 1], &iw[*n + 1], &iw[(*n << 1) + 1], &iw[*n * 3 + 1], &iw[(*n
+ << 2) + 1], &dw[1], &dw[*n + 1]);
+ if (*num == *n) {
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ if (dw[(*n << 1) + j] != 0.) {
+ dw[*n + j] -= log(dw[(*n << 1) + j]);
+ } else {
+ dw[*n + j] = 0.;
+ }
+/* L80: */
+ }
+ }
+/* Check size of scaling factors */
+ fact = log(rinf) * .5f;
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ if (dw[j] < fact && dw[*n + j] < fact) {
+ goto L86;
+ }
+ info[1] = 2;
+ goto L90;
+L86:
+ ;
+ }
+/* GO TO 90 */
+ }
+L90:
+ if (info[1] == 0 && *num < *n) {
+/* Matrix is structurally singular, return with warning */
+ info[1] = 1;
+ if (icntl[2] >= 0) {
+ printf(" ****** Warning from MC64A/AD. INFO(1) = %2d"
+ " The matrix is structurally singular.\n", info[1]);
+ }
+ }
+ if (info[1] == 2) {
+/* Scaling factors are large, return with warning */
+ if (icntl[2] >= 0) {
+ printf(" ****** Warning from MC64A/AD. INFO(1) = %2d\n"
+ " Some scaling factors may be too large.\n", info[1]);
+ }
+ }
+/* Print diagnostics on output */
+ if (icntl[3] >= 0) {
+ printf(" ****** Output parameters for MC64A/AD: INFO(1:2) = %8d%8d\n",
+ info[1], info[2]);
+ printf(" NUM = %8d", *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");
+ }
+ }
+/* Return from subroutine. */
+L99:
+ return 0;
+} /* mc64ad_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64bd_(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__)
+{
+ /* System generated locals */
+ int_t i__1, i__2, i__3;
+ double d__1, d__2, d__3;
+ int_t c__1 = 1;
+
+ /* Local variables */
+ 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_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 *);
+
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* N, NE, IP, IRN are described in MC64A/AD. */
+/* A is a REAL (DOUBLE PRECISION in the D-version) array of length */
+/* NE. A(K), K=1..NE, must be set to the value of the entry */
+/* that corresponds to IRN(K). It is not altered. */
+/* IPERM is an INT_T array of length N. On exit, it contains the */
+/* matching: IPERM(I) = 0 or row I is matched to column IPERM(I). */
+/* NUM is INT_T variable. On exit, it contains the cardinality of the */
+/* matching stored in IPERM. */
+/* IW is an INT_T work array of length 4N. */
+/* DW is a REAL (DOUBLE PRECISION in D-version) work array of length N. */
+/* Local variables */
+/* Local parameters */
+/* Intrinsic functions */
+/* External subroutines and/or functions */
+/* EXTERNAL FD05AD,MC64DD,MC64ED,MC64FD, DMACH */
+/* DOUBLE PRECISION FD05AD, DMACH */
+/* Set RINF to largest positive real number */
+/* XSL RINF = FD05AD(5) */
+ /* Parameter adjustments */
+ --d__;
+ --l;
+ --q;
+ --pr;
+ --jperm;
+ --iperm;
+ --ip;
+ --a;
+ --irn;
+
+ /* Function Body */
+ rinf = dmach("Overflow");
+/* Initialization */
+ *num = 0;
+ bv = rinf;
+ i__1 = *n;
+ for (k = 1; k <= i__1; ++k) {
+ iperm[k] = 0;
+ jperm[k] = 0;
+ pr[k] = ip[k];
+ d__[k] = 0.;
+/* L10: */
+ }
+/* Scan columns of matrix; */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ a0 = -1.;
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ i__ = irn[k];
+ ai = (d__1 = a[k], abs(d__1));
+ if (ai > d__[i__]) {
+ d__[i__] = ai;
+ }
+ if (jperm[j] != 0) {
+ goto L30;
+ }
+ if (ai >= bv) {
+ a0 = bv;
+ if (iperm[i__] != 0) {
+ goto L30;
+ }
+ jperm[j] = i__;
+ iperm[i__] = j;
+ ++(*num);
+ } else {
+ if (ai <= a0) {
+ goto L30;
+ }
+ a0 = ai;
+ i0 = i__;
+ }
+L30:
+ ;
+ }
+ if (a0 != -1. && a0 < bv) {
+ bv = a0;
+ if (iperm[i0] != 0) {
+ goto L20;
+ }
+ iperm[i0] = j;
+ jperm[j] = i0;
+ ++(*num);
+ }
+L20:
+ ;
+ }
+/* Update BV with smallest of all the largest maximum absolute values */
+/* of the rows. */
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+/* Computing MIN */
+ d__1 = bv, d__2 = d__[i__];
+ bv = min(d__1,d__2);
+/* L25: */
+ }
+ if (*num == *n) {
+ goto L1000;
+ }
+/* Rescan unassigned columns; improve initial assignment */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ if (jperm[j] != 0) {
+ goto L95;
+ }
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ i__ = irn[k];
+ ai = (d__1 = a[k], abs(d__1));
+ if (ai < bv) {
+ goto L50;
+ }
+ if (iperm[i__] == 0) {
+ goto L90;
+ }
+ jj = iperm[i__];
+ kk1 = pr[jj];
+ kk2 = ip[jj + 1] - 1;
+ if (kk1 > kk2) {
+ goto L50;
+ }
+ i__3 = kk2;
+ for (kk = kk1; kk <= i__3; ++kk) {
+ ii = irn[kk];
+ if (iperm[ii] != 0) {
+ goto L70;
+ }
+ if ((d__1 = a[kk], abs(d__1)) >= bv) {
+ goto L80;
+ }
+L70:
+ ;
+ }
+ pr[jj] = kk2 + 1;
+L50:
+ ;
+ }
+ goto L95;
+L80:
+ jperm[jj] = ii;
+ iperm[ii] = jj;
+ pr[jj] = kk + 1;
+L90:
+ ++(*num);
+ jperm[j] = i__;
+ iperm[i__] = j;
+ pr[j] = k + 1;
+L95:
+ ;
+ }
+ if (*num == *n) {
+ goto L1000;
+ }
+/* Prepare for main loop */
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ d__[i__] = -1.;
+ l[i__] = 0;
+/* L99: */
+ }
+/* Main loop ... each pass round this loop is similar to Dijkstra's */
+/* algorithm for solving the single source shortest path problem */
+ i__1 = *n;
+ for (jord = 1; jord <= i__1; ++jord) {
+ if (jperm[jord] != 0) {
+ goto L100;
+ }
+ qlen = 0;
+ low = *n + 1;
+ up = *n + 1;
+/* CSP is cost of shortest path to any unassigned row */
+/* ISP is matrix position of unassigned row element in shortest path */
+/* JSP is column index of unassigned row element in shortest path */
+ csp = -1.;
+/* Build shortest path tree starting from unassigned column JORD */
+ j = jord;
+ pr[j] = -1;
+/* Scan column J */
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ i__ = irn[k];
+ dnew = (d__1 = a[k], abs(d__1));
+ if (csp >= dnew) {
+ goto L115;
+ }
+ if (iperm[i__] == 0) {
+/* Row I is unassigned; update shortest path info */
+ csp = dnew;
+ isp = i__;
+ jsp = j;
+ if (csp >= bv) {
+ goto L160;
+ }
+ } else {
+ d__[i__] = dnew;
+ if (dnew >= bv) {
+/* Add row I to Q2 */
+ --low;
+ q[low] = i__;
+ } else {
+/* Add row I to Q, and push it */
+ ++qlen;
+ l[i__] = qlen;
+ mc64dd_(&i__, n, &q[1], &d__[1], &l[1], &c__1);
+ }
+ jj = iperm[i__];
+ pr[jj] = j;
+ }
+L115:
+ ;
+ }
+ i__2 = *num;
+ for (jdum = 1; jdum <= i__2; ++jdum) {
+/* If Q2 is empty, extract new rows from Q */
+ if (low == up) {
+ if (qlen == 0) {
+ goto L160;
+ }
+ i__ = q[1];
+ if (csp >= d__[i__]) {
+ goto L160;
+ }
+ bv = d__[i__];
+ i__3 = *n;
+ for (idum = 1; idum <= i__3; ++idum) {
+ mc64ed_(&qlen, n, &q[1], &d__[1], &l[1], &c__1);
+ l[i__] = 0;
+ --low;
+ q[low] = i__;
+ if (qlen == 0) {
+ goto L153;
+ }
+ i__ = q[1];
+ if (d__[i__] != bv) {
+ goto L153;
+ }
+/* L152: */
+ }
+/* End of dummy loop; this point is never reached */
+ }
+/* Move row Q0 */
+L153:
+ --up;
+ q0 = q[up];
+ dq0 = d__[q0];
+ l[q0] = up;
+/* Scan column that matches with row Q0 */
+ j = iperm[q0];
+ i__3 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__3; ++k) {
+ i__ = irn[k];
+/* Update D(I) */
+ if (l[i__] >= up) {
+ goto L155;
+ }
+/* Computing MIN */
+ d__2 = dq0, d__3 = (d__1 = a[k], abs(d__1));
+ dnew = min(d__2,d__3);
+ if (csp >= dnew) {
+ goto L155;
+ }
+ if (iperm[i__] == 0) {
+/* Row I is unassigned; update shortest path info */
+ csp = dnew;
+ isp = i__;
+ jsp = j;
+ if (csp >= bv) {
+ goto L160;
+ }
+ } else {
+ di = d__[i__];
+ if (di >= bv || di >= dnew) {
+ goto L155;
+ }
+ d__[i__] = dnew;
+ if (dnew >= bv) {
+/* Delete row I from Q (if necessary); add row I to Q2 */
+ if (di != -1.) {
+ mc64fd_(&l[i__], &qlen, n, &q[1], &d__[1], &l[1],
+ &c__1);
+ }
+ l[i__] = 0;
+ --low;
+ q[low] = i__;
+ } else {
+/* Add row I to Q (if necessary); push row I up Q */
+ if (di == -1.) {
+ ++qlen;
+ l[i__] = qlen;
+ }
+ mc64dd_(&i__, n, &q[1], &d__[1], &l[1], &c__1);
+ }
+/* Update tree */
+ jj = iperm[i__];
+ pr[jj] = j;
+ }
+L155:
+ ;
+ }
+/* L150: */
+ }
+/* If CSP = MINONE, no augmenting path is found */
+L160:
+ if (csp == -1.) {
+ goto L190;
+ }
+/* Update bottleneck value */
+ bv = min(bv,csp);
+/* Find augmenting path by tracing backward in PR; update IPERM,JPERM */
+ ++(*num);
+ i__ = isp;
+ j = jsp;
+ i__2 = *num + 1;
+ for (jdum = 1; jdum <= i__2; ++jdum) {
+ i0 = jperm[j];
+ jperm[j] = i__;
+ iperm[i__] = j;
+ j = pr[j];
+ if (j == -1) {
+ goto L190;
+ }
+ i__ = i0;
+/* L170: */
+ }
+/* End of dummy loop; this point is never reached */
+L190:
+ i__2 = *n;
+ for (kk = up; kk <= i__2; ++kk) {
+ i__ = q[kk];
+ d__[i__] = -1.;
+ l[i__] = 0;
+/* L191: */
+ }
+ i__2 = up - 1;
+ for (kk = low; kk <= i__2; ++kk) {
+ i__ = q[kk];
+ d__[i__] = -1.;
+/* L192: */
+ }
+ i__2 = qlen;
+ for (kk = 1; kk <= i__2; ++kk) {
+ i__ = q[kk];
+ d__[i__] = -1.;
+ l[i__] = 0;
+/* L193: */
+ }
+L100:
+ ;
+ }
+/* End of main loop */
+/* BV is bottleneck value of final matching */
+ if (*num == *n) {
+ goto L1000;
+ }
+/* Matrix is structurally singular, complete IPERM. */
+/* JPERM, PR are work arrays */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ jperm[j] = 0;
+/* L300: */
+ }
+ k = 0;
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ if (iperm[i__] == 0) {
+ ++k;
+ pr[k] = i__;
+ } else {
+ j = iperm[i__];
+ jperm[j] = i__;
+ }
+/* L310: */
+ }
+ k = 0;
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ if (jperm[i__] != 0) {
+ goto L320;
+ }
+ ++k;
+ jdum = pr[k];
+ iperm[jdum] = i__;
+L320:
+ ;
+ }
+L1000:
+ return 0;
+} /* mc64bd_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64dd_(int_t *i__, int_t *n, int_t *q, double
+ *d__, int_t *l, int_t *iway)
+{
+ /* System generated locals */
+ int_t i__1;
+ int_t c__1 = 1;
+
+ /* Local variables */
+ double di;
+ int_t qk, pos, idum, posk;
+
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* Variables N,Q,D,L are described in MC64B/BD */
+/* IF IWAY is equal to 1, then */
+/* node I is pushed from its current position upwards */
+/* IF IWAY is not equal to 1, then */
+/* node I is pushed from its current position downwards */
+/* Local variables and parameters */
+ /* Parameter adjustments */
+ --l;
+ --d__;
+ --q;
+
+ /* Function Body */
+ di = d__[*i__];
+ pos = l[*i__];
+/* POS is index of current position of I in the tree */
+ if (*iway == 1) {
+ i__1 = *n;
+ for (idum = 1; idum <= i__1; ++idum) {
+ if (pos <= 1) {
+ goto L20;
+ }
+ posk = pos / 2;
+ qk = q[posk];
+ if (di <= d__[qk]) {
+ goto L20;
+ }
+ q[pos] = qk;
+ l[qk] = pos;
+ pos = posk;
+/* L10: */
+ }
+/* End of dummy loop; this point is never reached */
+ } else {
+ i__1 = *n;
+ for (idum = 1; idum <= i__1; ++idum) {
+ if (pos <= 1) {
+ goto L20;
+ }
+ posk = pos / 2;
+ qk = q[posk];
+ if (di >= d__[qk]) {
+ goto L20;
+ }
+ q[pos] = qk;
+ l[qk] = pos;
+ pos = posk;
+/* L15: */
+ }
+/* End of dummy loop; this point is never reached */
+ }
+/* End of dummy if; this point is never reached */
+L20:
+ q[pos] = *i__;
+ l[*i__] = pos;
+ return 0;
+} /* mc64dd_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64ed_(int_t *qlen, int_t *n, int_t *q,
+ double *d__, int_t *l, int_t *iway)
+{
+ /* System generated locals */
+ int_t i__1;
+
+ /* Local variables */
+ int_t i__;
+ double di, dk, dr;
+ int_t pos, idum, posk;
+
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* Variables QLEN,N,Q,D,L are described in MC64B/BD (IWAY = 1) or */
+/* MC64W/WD (IWAY = 2) */
+/* The root node is deleted from the binary heap. */
+/* Local variables and parameters */
+/* Move last element to begin of Q */
+ /* Parameter adjustments */
+ --l;
+ --d__;
+ --q;
+
+ /* Function Body */
+ i__ = q[*qlen];
+ di = d__[i__];
+ --(*qlen);
+ pos = 1;
+ if (*iway == 1) {
+ i__1 = *n;
+ for (idum = 1; idum <= i__1; ++idum) {
+ posk = pos << 1;
+ if (posk > *qlen) {
+ goto L20;
+ }
+ dk = d__[q[posk]];
+ if (posk < *qlen) {
+ dr = d__[q[posk + 1]];
+ if (dk < dr) {
+ ++posk;
+ dk = dr;
+ }
+ }
+ if (di >= dk) {
+ goto L20;
+ }
+/* Exchange old last element with larger priority child */
+ q[pos] = q[posk];
+ l[q[pos]] = pos;
+ pos = posk;
+/* L10: */
+ }
+/* End of dummy loop; this point is never reached */
+ } else {
+ i__1 = *n;
+ for (idum = 1; idum <= i__1; ++idum) {
+ posk = pos << 1;
+ if (posk > *qlen) {
+ goto L20;
+ }
+ dk = d__[q[posk]];
+ if (posk < *qlen) {
+ dr = d__[q[posk + 1]];
+ if (dk > dr) {
+ ++posk;
+ dk = dr;
+ }
+ }
+ if (di <= dk) {
+ goto L20;
+ }
+/* Exchange old last element with smaller child */
+ q[pos] = q[posk];
+ l[q[pos]] = pos;
+ pos = posk;
+/* L15: */
+ }
+/* End of dummy loop; this point is never reached */
+ }
+/* End of dummy if; this point is never reached */
+L20:
+ q[pos] = i__;
+ l[i__] = pos;
+ return 0;
+} /* mc64ed_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64fd_(int_t *pos0, int_t *qlen, int_t *n,
+ int_t *q, double *d__, int_t *l, int_t *iway)
+{
+ /* System generated locals */
+ int_t i__1;
+
+ /* Local variables */
+ int_t i__;
+ double di, dk, dr;
+ int_t qk, pos, idum, posk;
+
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* Variables QLEN,N,Q,D,L are described in MC64B/BD (IWAY = 1) or */
+/* MC64WD (IWAY = 2). */
+/* Move last element in the heap */
+/* Quick return, if possible */
+ /* Parameter adjustments */
+ --l;
+ --d__;
+ --q;
+
+ /* Function Body */
+ if (*qlen == *pos0) {
+ --(*qlen);
+ return 0;
+ }
+/* Move last element from queue Q to position POS0 */
+/* POS is current position of node I in the tree */
+ i__ = q[*qlen];
+ di = d__[i__];
+ --(*qlen);
+ pos = *pos0;
+ if (*iway == 1) {
+ i__1 = *n;
+ for (idum = 1; idum <= i__1; ++idum) {
+ if (pos <= 1) {
+ goto L20;
+ }
+ posk = pos / 2;
+ qk = q[posk];
+ if (di <= d__[qk]) {
+ goto L20;
+ }
+ q[pos] = qk;
+ l[qk] = pos;
+ pos = posk;
+/* L10: */
+ }
+/* End of dummy loop; this point is never reached */
+L20:
+ q[pos] = i__;
+ l[i__] = pos;
+ i__1 = *n;
+ for (idum = 1; idum <= i__1; ++idum) {
+ posk = pos << 1;
+ if (posk > *qlen) {
+ goto L40;
+ }
+ dk = d__[q[posk]];
+ if (posk < *qlen) {
+ dr = d__[q[posk + 1]];
+ if (dk < dr) {
+ ++posk;
+ dk = dr;
+ }
+ }
+ if (di >= dk) {
+ goto L40;
+ }
+ qk = q[posk];
+ q[pos] = qk;
+ l[qk] = pos;
+ pos = posk;
+/* L30: */
+ }
+/* End of dummy loop; this point is never reached */
+ } else {
+ i__1 = *n;
+ for (idum = 1; idum <= i__1; ++idum) {
+ if (pos <= 1) {
+ goto L34;
+ }
+ posk = pos / 2;
+ qk = q[posk];
+ if (di >= d__[qk]) {
+ goto L34;
+ }
+ q[pos] = qk;
+ l[qk] = pos;
+ pos = posk;
+/* L32: */
+ }
+/* End of dummy loop; this point is never reached */
+L34:
+ q[pos] = i__;
+ l[i__] = pos;
+ i__1 = *n;
+ for (idum = 1; idum <= i__1; ++idum) {
+ posk = pos << 1;
+ if (posk > *qlen) {
+ goto L40;
+ }
+ dk = d__[q[posk]];
+ if (posk < *qlen) {
+ dr = d__[q[posk + 1]];
+ if (dk > dr) {
+ ++posk;
+ dk = dr;
+ }
+ }
+ if (di <= dk) {
+ goto L40;
+ }
+ qk = q[posk];
+ q[pos] = qk;
+ l[qk] = pos;
+ pos = posk;
+/* L36: */
+ }
+/* End of dummy loop; this point is never reached */
+ }
+/* End of dummy if; this point is never reached */
+L40:
+ q[pos] = i__;
+ l[i__] = pos;
+ return 0;
+} /* mc64fd_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64rd_(int_t *n, int_t *ne, int_t *ip, int_t *
+ irn, double *a)
+{
+ /* System generated locals */
+ int_t i__1, i__2, i__3;
+
+ /* Local variables */
+ int_t j, k, r__, s;
+ double ha;
+ int_t hi, td, mid, len, ipj;
+ double key;
+ int_t last, todo[50], first;
+
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* This subroutine sorts the entries in each column of the */
+/* sparse matrix (defined by N,NE,IP,IRN,A) by decreasing */
+/* numerical value. */
+/* Local constants */
+/* Local variables */
+/* Local arrays */
+ /* Parameter adjustments */
+ --ip;
+ --a;
+ --irn;
+
+ /* Function Body */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ len = ip[j + 1] - ip[j];
+ if (len <= 1) {
+ goto L100;
+ }
+ ipj = ip[j];
+/* Sort array roughly with partial quicksort */
+ if (len < 15) {
+ goto L400;
+ }
+ todo[0] = ipj;
+ todo[1] = ipj + len;
+ td = 2;
+L500:
+ first = todo[td - 2];
+ last = todo[td - 1];
+/* KEY is the smallest of two values present in interval [FIRST,LAST) */
+ key = a[(first + last) / 2];
+ i__2 = last - 1;
+ for (k = first; k <= i__2; ++k) {
+ ha = a[k];
+ if (ha == key) {
+ goto L475;
+ }
+ if (ha > key) {
+ goto L470;
+ }
+ key = ha;
+ goto L470;
+L475:
+ ;
+ }
+/* Only one value found in interval, so it is already sorted */
+ td += -2;
+ goto L425;
+/* Reorder interval [FIRST,LAST) such that entries before MID are gt KEY */
+L470:
+ mid = first;
+ i__2 = last - 1;
+ for (k = first; k <= i__2; ++k) {
+ if (a[k] <= key) {
+ goto L450;
+ }
+ ha = a[mid];
+ a[mid] = a[k];
+ a[k] = ha;
+ hi = irn[mid];
+ irn[mid] = irn[k];
+ irn[k] = hi;
+ ++mid;
+L450:
+ ;
+ }
+/* Both subintervals [FIRST,MID), [MID,LAST) are nonempty */
+/* Stack the longest of the two subintervals first */
+ if (mid - first >= last - mid) {
+ todo[td + 1] = last;
+ todo[td] = mid;
+ todo[td - 1] = mid;
+/* TODO(TD-1) = FIRST */
+ } else {
+ todo[td + 1] = mid;
+ todo[td] = first;
+ todo[td - 1] = last;
+ todo[td - 2] = mid;
+ }
+ td += 2;
+L425:
+ if (td == 0) {
+ goto L400;
+ }
+/* There is still work to be done */
+ if (todo[td - 1] - todo[td - 2] >= 15) {
+ goto L500;
+ }
+/* Next interval is already short enough for straightforward insertion */
+ td += -2;
+ goto L425;
+/* Complete sorting with straightforward insertion */
+L400:
+ i__2 = ipj + len - 1;
+ for (r__ = ipj + 1; r__ <= i__2; ++r__) {
+ if (a[r__ - 1] < a[r__]) {
+ ha = a[r__];
+ hi = irn[r__];
+ a[r__] = a[r__ - 1];
+ irn[r__] = irn[r__ - 1];
+ i__3 = ipj + 1;
+ for (s = r__ - 1; s >= i__3; --s) {
+ if (a[s - 1] < ha) {
+ a[s] = a[s - 1];
+ irn[s] = irn[s - 1];
+ } else {
+ a[s] = ha;
+ irn[s] = hi;
+ goto L200;
+ }
+/* L300: */
+ }
+ a[ipj] = ha;
+ irn[ipj] = hi;
+ }
+L200:
+ ;
+ }
+L100:
+ ;
+ }
+ return 0;
+} /* mc64rd_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64sd_(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)
+{
+ /* System generated locals */
+ int_t i__1, i__2, i__3, i__4;
+
+ /* Local variables */
+ 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 *,
+ int_t *, int_t *, double *, int_t *, double *),
+ mc64ud_(int_t *, int_t *, int_t *, int_t *, int_t *,
+ int_t *, int_t *, int_t *, int_t *, int_t *, int_t *,
+ int_t *, int_t *, int_t *, int_t *);
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* N, NE, IP, IRN, are described in MC64A/AD. */
+/* A is a REAL (DOUBLE PRECISION in the D-version) array of length NE. */
+/* A(K), K=1..NE, must be set to the value of the entry that */
+/* corresponds to IRN(k). The entries in each column must be */
+/* non-negative and ordered by decreasing value. */
+/* IPERM is an INT_T array of length N. On exit, it contains the */
+/* bottleneck matching: IPERM(I) - 0 or row I is matched to column */
+/* IPERM(I). */
+/* NUMX is an INT_T variable. On exit, it contains the cardinality */
+/* of the matching stored in IPERM. */
+/* IW is an INT_T work array of length 10N. */
+/* FC is an int_t array of length N that contains the list of */
+/* unmatched columns. */
+/* LEN(J), LENL(J), LENH(J) are int_t arrays of length N that point */
+/* to entries in matrix column J. */
+/* In the matrix defined by the column parts IP(J)+LENL(J) we know */
+/* a matching does not exist; in the matrix defined by the column */
+/* parts IP(J)+LENH(J) we know one exists. */
+/* LEN(J) lies between LENL(J) and LENH(J) and determines the matrix */
+/* that is tested for a maximum matching. */
+/* W is an int_t array of length N and contains the indices of the */
+/* columns for which LENL ne LENH. */
+/* WLEN is number of indices stored in array W. */
+/* IW is int_t work array of length N. */
+/* IW4 is int_t work array of length 4N used by MC64U/UD. */
+/* EXTERNAL FD05AD,MC64QD,MC64UD */
+/* DOUBLE PRECISION FD05AD */
+/* BMIN and BMAX are such that a maximum matching exists for the input */
+/* matrix in which all entries smaller than BMIN are dropped. */
+/* For BMAX, a maximum matching does not exist. */
+/* BVAL is a value between BMIN and BMAX. */
+/* CNT is the number of calls made to MC64U/UD so far. */
+/* NUM is the cardinality of last matching found. */
+/* Set RINF to largest positive real number */
+/* XSL RINF = FD05AD(5) */
+ /* Parameter adjustments */
+ --iw4;
+ --iw;
+ --fc;
+ --lenh;
+ --lenl;
+ --len;
+ --w;
+ --iperm;
+ --ip;
+ --a;
+ --irn;
+
+ /* Function Body */
+ rinf = dmach("Overflow");
+/* Compute a first maximum matching from scratch on whole matrix. */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ fc[j] = j;
+ iw[j] = 0;
+ len[j] = ip[j + 1] - ip[j];
+/* L20: */
+ }
+/* The first call to MC64U/UD */
+ cnt = 1;
+ mod = 1;
+ *numx = 0;
+ mc64ud_(&cnt, &mod, n, &irn[1], ne, &ip[1], &len[1], &fc[1], &iw[1], numx,
+ n, &iw4[1], &iw4[*n + 1], &iw4[(*n << 1) + 1], &iw4[*n * 3 + 1]);
+/* IW contains a maximum matching of length NUMX. */
+ num = *numx;
+ if (num != *n) {
+/* Matrix is structurally singular */
+ bmax = rinf;
+ } else {
+/* Matrix is structurally nonsingular, NUM=NUMX=N; */
+/* Set BMAX just above the smallest of all the maximum absolute */
+/* values of the columns */
+ bmax = rinf;
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ bval = 0.f;
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ if (a[k] > bval) {
+ bval = a[k];
+ }
+/* L25: */
+ }
+ if (bval < bmax) {
+ bmax = bval;
+ }
+/* L30: */
+ }
+ bmax *= 1.001f;
+ }
+/* Initialize BVAL,BMIN */
+ bval = 0.f;
+ bmin = 0.f;
+/* Initialize LENL,LEN,LENH,W,WLEN according to BMAX. */
+/* Set LEN(J), LENH(J) just after last entry in column J. */
+/* Set LENL(J) just after last entry in column J with value ge BMAX. */
+ wlen = 0;
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ l = ip[j + 1] - ip[j];
+ lenh[j] = l;
+ len[j] = l;
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ if (a[k] < bmax) {
+ goto L46;
+ }
+/* L45: */
+ }
+/* Column J is empty or all entries are ge BMAX */
+ k = ip[j + 1];
+L46:
+ lenl[j] = k - ip[j];
+/* Add J to W if LENL(J) ne LENH(J) */
+ if (lenl[j] == l) {
+ goto L48;
+ }
+ ++wlen;
+ w[wlen] = j;
+L48:
+ ;
+ }
+/* Main loop */
+ i__1 = *ne;
+ for (idum1 = 1; idum1 <= i__1; ++idum1) {
+ if (num == *numx) {
+/* We have a maximum matching in IW; store IW in IPERM */
+ i__2 = *n;
+ for (i__ = 1; i__ <= i__2; ++i__) {
+ iperm[i__] = iw[i__];
+/* L50: */
+ }
+/* Keep going round this loop until matching IW is no longer maximum. */
+ i__2 = *ne;
+ for (idum2 = 1; idum2 <= i__2; ++idum2) {
+ bmin = bval;
+ if (bmax == bmin) {
+ goto L99;
+ }
+/* Find splitting value BVAL */
+ mc64qd_(&ip[1], &lenl[1], &len[1], &w[1], &wlen, &a[1], &nval,
+ &bval);
+ if (nval <= 1) {
+ goto L99;
+ }
+/* Set LEN such that all matrix entries with value lt BVAL are */
+/* discarded. Store old LEN in LENH. Do this for all columns W(K). */
+/* Each step, either K is incremented or WLEN is decremented. */
+ k = 1;
+ i__3 = *n;
+ for (idum3 = 1; idum3 <= i__3; ++idum3) {
+ if (k > wlen) {
+ goto L71;
+ }
+ j = w[k];
+ i__4 = ip[j] + lenl[j];
+ for (ii = ip[j] + len[j] - 1; ii >= i__4; --ii) {
+ if (a[ii] >= bval) {
+ goto L60;
+ }
+ i__ = irn[ii];
+ if (iw[i__] != j) {
+ goto L55;
+ }
+/* Remove entry from matching */
+ iw[i__] = 0;
+ --num;
+ fc[*n - num] = j;
+L55:
+ ;
+ }
+L60:
+ lenh[j] = len[j];
+/* IP(J)+LEN(J)-1 is last entry in column ge BVAL */
+ len[j] = ii - ip[j] + 1;
+/* If LENH(J) = LENL(J), remove J from W */
+ if (lenl[j] == lenh[j]) {
+ w[k] = w[wlen];
+ --wlen;
+ } else {
+ ++k;
+ }
+/* L70: */
+ }
+L71:
+ if (num < *numx) {
+ goto L81;
+ }
+/* L80: */
+ }
+/* End of dummy loop; this point is never reached */
+/* Set mode for next call to MC64U/UD */
+L81:
+ mod = 1;
+ } else {
+/* We do not have a maximum matching in IW. */
+ bmax = bval;
+/* BMIN is the bottleneck value of a maximum matching; */
+/* for BMAX the matching is not maximum, so BMAX>BMIN */
+/* IF (BMAX .EQ. BMIN) GO TO 99 */
+/* Find splitting value BVAL */
+ mc64qd_(&ip[1], &len[1], &lenh[1], &w[1], &wlen, &a[1], &nval, &
+ bval);
+ if (nval == 0 || bval == bmin) {
+ goto L99;
+ }
+/* Set LEN such that all matrix entries with value ge BVAL are */
+/* inside matrix. Store old LEN in LENL. Do this for all columns W(K). */
+/* Each step, either K is incremented or WLEN is decremented. */
+ k = 1;
+ i__2 = *n;
+ for (idum3 = 1; idum3 <= i__2; ++idum3) {
+ if (k > wlen) {
+ goto L88;
+ }
+ j = w[k];
+ i__3 = ip[j] + lenh[j] - 1;
+ for (ii = ip[j] + len[j]; ii <= i__3; ++ii) {
+ if (a[ii] < bval) {
+ goto L86;
+ }
+/* L85: */
+ }
+L86:
+ lenl[j] = len[j];
+ len[j] = ii - ip[j];
+ if (lenl[j] == lenh[j]) {
+ w[k] = w[wlen];
+ --wlen;
+ } else {
+ ++k;
+ }
+/* L87: */
+ }
+/* End of dummy loop; this point is never reached */
+/* Set mode for next call to MC64U/UD */
+L88:
+ mod = 0;
+ }
+ ++cnt;
+ mc64ud_(&cnt, &mod, n, &irn[1], ne, &ip[1], &len[1], &fc[1], &iw[1], &
+ num, numx, &iw4[1], &iw4[*n + 1], &iw4[(*n << 1) + 1], &iw4[*
+ n * 3 + 1]);
+/* IW contains maximum matching of length NUM */
+/* L90: */
+ }
+/* End of dummy loop; this point is never reached */
+/* BMIN is bottleneck value of final matching */
+L99:
+ if (*numx == *n) {
+ goto L1000;
+ }
+/* The matrix is structurally singular, complete IPERM */
+/* W, IW are work arrays */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ w[j] = 0;
+/* L300: */
+ }
+ k = 0;
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ if (iperm[i__] == 0) {
+ ++k;
+ iw[k] = i__;
+ } else {
+ j = iperm[i__];
+ w[j] = i__;
+ }
+/* L310: */
+ }
+ k = 0;
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ if (w[j] != 0) {
+ goto L320;
+ }
+ ++k;
+ idum1 = iw[k];
+ iperm[idum1] = j;
+L320:
+ ;
+ }
+L1000:
+ return 0;
+} /* mc64sd_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64qd_(int_t *ip, int_t *lenl, int_t *lenh,
+ int_t *w, int_t *wlen, double *a, int_t *nval, double *
+ val)
+{
+ /* System generated locals */
+ int_t i__1, i__2, i__3;
+
+ /* Local variables */
+ int_t j, k, s;
+ double ha;
+ int_t ii, pos;
+ double split[10];
+
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* This routine searches for at most XX different numerical values */
+/* in the columns W(1:WLEN). XX>=2. */
+/* Each column J is scanned between IP(J)+LENL(J) and IP(J)+LENH(J)-1 */
+/* until XX values are found or all columns have been considered. */
+/* On output, NVAL is the number of different values that is found */
+/* and SPLIT(1:NVAL) contains the values in decreasing order. */
+/* If NVAL > 0, the routine returns VAL = SPLIT((NVAL+1)/2). */
+
+/* Scan columns in W(1:WLEN). For each encountered value, if value not */
+/* already present in SPLIT(1:NVAL), insert value such that SPLIT */
+/* remains sorted by decreasing value. */
+/* The sorting is done by straightforward insertion; therefore the use */
+/* of this routine should be avoided for large XX (XX < 20). */
+ /* Parameter adjustments */
+ --a;
+ --w;
+ --lenh;
+ --lenl;
+ --ip;
+
+ /* Function Body */
+ *nval = 0;
+ i__1 = *wlen;
+ for (k = 1; k <= i__1; ++k) {
+ j = w[k];
+ i__2 = ip[j] + lenh[j] - 1;
+ for (ii = ip[j] + lenl[j]; ii <= i__2; ++ii) {
+ ha = a[ii];
+ if (*nval == 0) {
+ split[0] = ha;
+ *nval = 1;
+ } else {
+/* Check presence of HA in SPLIT */
+ for (s = *nval; s >= 1; --s) {
+ if (split[s - 1] == ha) {
+ goto L15;
+ }
+ if (split[s - 1] > ha) {
+ pos = s + 1;
+ goto L21;
+ }
+/* L20: */
+ }
+ pos = 1;
+/* The insertion */
+L21:
+ i__3 = pos;
+ for (s = *nval; s >= i__3; --s) {
+ split[s] = split[s - 1];
+/* L22: */
+ }
+ split[pos - 1] = ha;
+ ++(*nval);
+ }
+/* Exit loop if XX values are found */
+ if (*nval == 10) {
+ goto L11;
+ }
+L15:
+ ;
+ }
+/* L10: */
+ }
+/* Determine VAL */
+L11:
+ if (*nval > 0) {
+ *val = split[(*nval + 1) / 2 - 1];
+ }
+ return 0;
+} /* mc64qd_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64ud_(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)
+{
+ /* System generated locals */
+ int_t i__1, i__2, i__3, i__4;
+
+ /* Local variables */
+ int_t i__, j, k, j1, ii, kk, id0, id1, in1, in2, nfc, num0, num1, num2,
+ jord, last;
+
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* PR(J) is the previous column to J in the depth first search. */
+/* Array PR is used as workspace in the sorting algorithm. */
+/* Elements (I,IPERM(I)) I=1,..,N are entries at the end of the */
+/* algorithm unless N assignments have not been made in which case */
+/* N-NUM pairs (I,IPERM(I)) will not be entries in the matrix. */
+/* CV(I) is the most recent loop number (ID+JORD) at which row I */
+/* was visited. */
+/* ARP(J) is the number of entries in column J which have been scanned */
+/* when looking for a cheap assignment. */
+/* OUT(J) is one less than the number of entries in column J which have */
+/* not been scanned during one pass through the main loop. */
+/* NUMX is maximum possible size of matching. */
+ /* Parameter adjustments */
+ --out;
+ --cv;
+ --arp;
+ --pr;
+ --iperm;
+ --fc;
+ --lenc;
+ --ip;
+ --irn;
+
+ /* Function Body */
+ if (*id == 1) {
+/* The first call to MC64U/UD. */
+/* Initialize CV and ARP; parameters MOD, NUMX are not accessed */
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ cv[i__] = 0;
+ arp[i__] = 0;
+/* L5: */
+ }
+ num1 = *n;
+ num2 = *n;
+ } else {
+/* Not the first call to MC64U/UD. */
+/* Re-initialize ARP if entries were deleted since last call to MC64U/UD */
+ if (*mod == 1) {
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ arp[i__] = 0;
+/* L8: */
+ }
+ }
+ num1 = *numx;
+ num2 = *n - *numx;
+ }
+ num0 = *num;
+/* NUM0 is size of input matching */
+/* NUM1 is maximum possible size of matching */
+/* NUM2 is maximum allowed number of unassigned rows/columns */
+/* NUM is size of current matching */
+/* Quick return if possible */
+/* IF (NUM.EQ.N) GO TO 199 */
+/* NFC is number of rows/columns that could not be assigned */
+ nfc = 0;
+/* Integers ID0+1 to ID0+N are unique numbers for call ID to MC64U/UD, */
+/* so 1st call uses 1..N, 2nd call uses N+1..2N, etc */
+ id0 = (*id - 1) * *n;
+/* Main loop. Each pass round this loop either results in a new */
+/* assignment or gives a column with no assignment */
+ i__1 = *n;
+ for (jord = num0 + 1; jord <= i__1; ++jord) {
+/* Each pass uses unique number ID1 */
+ id1 = id0 + jord;
+/* J is unmatched column */
+ j = fc[jord - num0];
+ pr[j] = -1;
+ i__2 = jord;
+ for (k = 1; k <= i__2; ++k) {
+/* Look for a cheap assignment */
+ if (arp[j] >= lenc[j]) {
+ goto L30;
+ }
+ in1 = ip[j] + arp[j];
+ in2 = ip[j] + lenc[j] - 1;
+ i__3 = in2;
+ for (ii = in1; ii <= i__3; ++ii) {
+ i__ = irn[ii];
+ if (iperm[i__] == 0) {
+ goto L80;
+ }
+/* L20: */
+ }
+/* No cheap assignment in row */
+ arp[j] = lenc[j];
+/* Begin looking for assignment chain starting with row J */
+L30:
+ out[j] = lenc[j] - 1;
+/* Inner loop. Extends chain by one or backtracks */
+ i__3 = jord;
+ for (kk = 1; kk <= i__3; ++kk) {
+ in1 = out[j];
+ if (in1 < 0) {
+ goto L50;
+ }
+ in2 = ip[j] + lenc[j] - 1;
+ in1 = in2 - in1;
+/* Forward scan */
+ i__4 = in2;
+ for (ii = in1; ii <= i__4; ++ii) {
+ i__ = irn[ii];
+ if (cv[i__] == id1) {
+ goto L40;
+ }
+/* Column J has not yet been accessed during this pass */
+ j1 = j;
+ j = iperm[i__];
+ cv[i__] = id1;
+ pr[j] = j1;
+ out[j1] = in2 - ii - 1;
+ goto L70;
+L40:
+ ;
+ }
+/* Backtracking step. */
+L50:
+ j1 = pr[j];
+ if (j1 == -1) {
+/* No augmenting path exists for column J. */
+ ++nfc;
+ fc[nfc] = j;
+ if (nfc > num2) {
+/* A matching of maximum size NUM1 is not possible */
+ last = jord;
+ goto L101;
+ }
+ goto L100;
+ }
+ j = j1;
+/* L60: */
+ }
+/* End of dummy loop; this point is never reached */
+L70:
+ ;
+ }
+/* End of dummy loop; this point is never reached */
+/* New assignment is made. */
+L80:
+ iperm[i__] = j;
+ arp[j] = ii - ip[j] + 1;
+ ++(*num);
+ i__2 = jord;
+ for (k = 1; k <= i__2; ++k) {
+ j = pr[j];
+ if (j == -1) {
+ goto L95;
+ }
+ ii = ip[j] + lenc[j] - out[j] - 2;
+ i__ = irn[ii];
+ iperm[i__] = j;
+/* L90: */
+ }
+/* End of dummy loop; this point is never reached */
+L95:
+ if (*num == num1) {
+/* A matching of maximum size NUM1 is found */
+ last = jord;
+ goto L101;
+ }
+
+L100:
+ ;
+ }
+/* All unassigned columns have been considered */
+ last = *n;
+/* Now, a transversal is computed or is not possible. */
+/* Complete FC before returning. */
+L101:
+ i__1 = *n;
+ for (jord = last + 1; jord <= i__1; ++jord) {
+ ++nfc;
+ fc[nfc] = fc[jord - num0];
+/* L110: */
+ }
+/* 199 RETURN */
+ return 0;
+} /* mc64ud_ */
+
+/* ********************************************************************** */
+/* Subroutine */ int_t mc64wd_(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__)
+{
+ /* System generated locals */
+ int_t i__1, i__2, i__3, c__2 = 2;
+
+ /* Local variables */
+ 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 *
+ , int_t *, int_t *, int_t *, double *, int_t *,
+ int_t *);
+
+
+/* *** Copyright (c) 1999 Council for the Central Laboratory of the */
+/* Research Councils *** */
+/* *** Although every effort has been made to ensure robustness and *** */
+/* *** reliability of the subroutines in this MC64 suite, we *** */
+/* *** disclaim any liability arising through the use or misuse of *** */
+/* *** any of the subroutines. *** */
+/* *** Any problems? Contact ... */
+/* Iain Duff (I.Duff at rl.ac.uk) or Jacko Koster (jak at ii.uib.no) *** */
+
+/* N, NE, IP, IRN are described in MC64A/AD. */
+/* A is a REAL (DOUBLE PRECISION in the D-version) array of length NE. */
+/* A(K), K=1..NE, must be set to the value of the entry that */
+/* corresponds to IRN(K). It is not altered. */
+/* All values A(K) must be non-negative. */
+/* IPERM is an INT_T array of length N. On exit, it contains the */
+/* weighted matching: IPERM(I) = 0 or row I is matched to column */
+/* IPERM(I). */
+/* NUM is an INT_T variable. On exit, it contains the cardinality of */
+/* the matching stored in IPERM. */
+/* IW is an INT_T work array of length 5N. */
+/* DW is a REAL (DOUBLE PRECISION in the D-version) array of length 2N. */
+/* On exit, U = D(1:N) contains the dual row variable and */
+/* V = D(N+1:2N) contains the dual column variable. If the matrix */
+/* is structurally nonsingular (NUM = N), the following holds: */
+/* U(I)+V(J) <= A(I,J) if IPERM(I) |= J */
+/* U(I)+V(J) = A(I,J) if IPERM(I) = J */
+/* U(I) = 0 if IPERM(I) = 0 */
+/* V(J) = 0 if there is no I for which IPERM(I) = J */
+/* Local variables */
+/* Local parameters */
+/* External subroutines and/or functions */
+/* EXTERNAL FD05AD,MC64DD,MC64ED,MC64FD */
+/* DOUBLE PRECISION FD05AD */
+/* Set RINF to largest positive real number */
+/* XSL RINF = FD05AD(5) */
+ /* Parameter adjustments */
+ --d__;
+ --u;
+ --l;
+ --q;
+ --pr;
+ --out;
+ --jperm;
+ --iperm;
+ --ip;
+ --a;
+ --irn;
+
+ /* Function Body */
+ rinf = dmach("Overflow");
+/* Initialization */
+ *num = 0;
+ i__1 = *n;
+ for (k = 1; k <= i__1; ++k) {
+ u[k] = rinf;
+ d__[k] = 0.;
+ iperm[k] = 0;
+ jperm[k] = 0;
+ pr[k] = ip[k];
+ l[k] = 0;
+/* L10: */
+ }
+/* Initialize U(I) */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ i__ = irn[k];
+ if (a[k] > u[i__]) {
+ goto L20;
+ }
+ u[i__] = a[k];
+ iperm[i__] = j;
+ l[i__] = k;
+L20:
+ ;
+ }
+/* L30: */
+ }
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ j = iperm[i__];
+ if (j == 0) {
+ goto L40;
+ }
+/* Row I is not empty */
+ iperm[i__] = 0;
+ if (jperm[j] != 0) {
+ goto L40;
+ }
+/* Assignment of column J to row I */
+ ++(*num);
+ iperm[i__] = j;
+ jperm[j] = l[i__];
+L40:
+ ;
+ }
+ if (*num == *n) {
+ goto L1000;
+ }
+/* Scan unassigned columns; improve assignment */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+/* JPERM(J) ne 0 iff column J is already assigned */
+ if (jperm[j] != 0) {
+ goto L95;
+ }
+ k1 = ip[j];
+ k2 = ip[j + 1] - 1;
+/* Continue only if column J is not empty */
+ if (k1 > k2) {
+ goto L95;
+ }
+ vj = rinf;
+ i__2 = k2;
+ for (k = k1; k <= i__2; ++k) {
+ i__ = irn[k];
+ di = a[k] - u[i__];
+ if (di > vj) {
+ goto L50;
+ }
+ if (di < vj || di == rinf) {
+ goto L55;
+ }
+ if (iperm[i__] != 0 || iperm[i0] == 0) {
+ goto L50;
+ }
+L55:
+ vj = di;
+ i0 = i__;
+ k0 = k;
+L50:
+ ;
+ }
+ d__[j] = vj;
+ k = k0;
+ i__ = i0;
+ if (iperm[i__] == 0) {
+ goto L90;
+ }
+ i__2 = k2;
+ for (k = k0; k <= i__2; ++k) {
+ i__ = irn[k];
+ if (a[k] - u[i__] > vj) {
+ goto L60;
+ }
+ jj = iperm[i__];
+/* Scan remaining part of assigned column JJ */
+ kk1 = pr[jj];
+ kk2 = ip[jj + 1] - 1;
+ if (kk1 > kk2) {
+ goto L60;
+ }
+ i__3 = kk2;
+ for (kk = kk1; kk <= i__3; ++kk) {
+ ii = irn[kk];
+ if (iperm[ii] > 0) {
+ goto L70;
+ }
+ if (a[kk] - u[ii] <= d__[jj]) {
+ goto L80;
+ }
+L70:
+ ;
+ }
+ pr[jj] = kk2 + 1;
+L60:
+ ;
+ }
+ goto L95;
+L80:
+ jperm[jj] = kk;
+ iperm[ii] = jj;
+ pr[jj] = kk + 1;
+L90:
+ ++(*num);
+ jperm[j] = k;
+ iperm[i__] = j;
+ pr[j] = k + 1;
+L95:
+ ;
+ }
+ if (*num == *n) {
+ goto L1000;
+ }
+/* Prepare for main loop */
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ d__[i__] = rinf;
+ l[i__] = 0;
+/* L99: */
+ }
+/* Main loop ... each pass round this loop is similar to Dijkstra's */
+/* algorithm for solving the single source shortest path problem */
+ i__1 = *n;
+ for (jord = 1; jord <= i__1; ++jord) {
+ if (jperm[jord] != 0) {
+ goto L100;
+ }
+/* JORD is next unmatched column */
+/* DMIN is the length of shortest path in the tree */
+ dmin__ = rinf;
+ qlen = 0;
+ low = *n + 1;
+ up = *n + 1;
+/* CSP is the cost of the shortest augmenting path to unassigned row */
+/* IRN(ISP). The corresponding column index is JSP. */
+ csp = rinf;
+/* Build shortest path tree starting from unassigned column (root) JORD */
+ j = jord;
+ pr[j] = -1;
+/* Scan column J */
+ i__2 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__2; ++k) {
+ i__ = irn[k];
+ dnew = a[k] - u[i__];
+ if (dnew >= csp) {
+ goto L115;
+ }
+ if (iperm[i__] == 0) {
+ csp = dnew;
+ isp = k;
+ jsp = j;
+ } else {
+ if (dnew < dmin__) {
+ dmin__ = dnew;
+ }
+ d__[i__] = dnew;
+ ++qlen;
+ q[qlen] = k;
+ }
+L115:
+ ;
+ }
+/* Initialize heap Q and Q2 with rows held in Q(1:QLEN) */
+ q0 = qlen;
+ qlen = 0;
+ i__2 = q0;
+ for (kk = 1; kk <= i__2; ++kk) {
+ k = q[kk];
+ i__ = irn[k];
+ if (csp <= d__[i__]) {
+ d__[i__] = rinf;
+ goto L120;
+ }
+ if (d__[i__] <= dmin__) {
+ --low;
+ q[low] = i__;
+ l[i__] = low;
+ } else {
+ ++qlen;
+ l[i__] = qlen;
+ mc64dd_(&i__, n, &q[1], &d__[1], &l[1], &c__2);
+ }
+/* Update tree */
+ jj = iperm[i__];
+ out[jj] = k;
+ pr[jj] = j;
+L120:
+ ;
+ }
+ i__2 = *num;
+ for (jdum = 1; jdum <= i__2; ++jdum) {
+/* If Q2 is empty, extract rows from Q */
+ if (low == up) {
+ if (qlen == 0) {
+ goto L160;
+ }
+ i__ = q[1];
+ if (d__[i__] >= csp) {
+ goto L160;
+ }
+ dmin__ = d__[i__];
+L152:
+ mc64ed_(&qlen, n, &q[1], &d__[1], &l[1], &c__2);
+ --low;
+ q[low] = i__;
+ l[i__] = low;
+ if (qlen == 0) {
+ goto L153;
+ }
+ i__ = q[1];
+ if (d__[i__] > dmin__) {
+ goto L153;
+ }
+ goto L152;
+ }
+/* Q0 is row whose distance D(Q0) to the root is smallest */
+L153:
+ q0 = q[up - 1];
+ dq0 = d__[q0];
+/* Exit loop if path to Q0 is longer than the shortest augmenting path */
+ if (dq0 >= csp) {
+ goto L160;
+ }
+ --up;
+/* Scan column that matches with row Q0 */
+ j = iperm[q0];
+ vj = dq0 - a[jperm[j]] + u[q0];
+ i__3 = ip[j + 1] - 1;
+ for (k = ip[j]; k <= i__3; ++k) {
+ i__ = irn[k];
+ if (l[i__] >= up) {
+ goto L155;
+ }
+/* DNEW is new cost */
+ dnew = vj + a[k] - u[i__];
+/* Do not update D(I) if DNEW ge cost of shortest path */
+ if (dnew >= csp) {
+ goto L155;
+ }
+ if (iperm[i__] == 0) {
+/* Row I is unmatched; update shortest path info */
+ csp = dnew;
+ isp = k;
+ jsp = j;
+ } else {
+/* Row I is matched; do not update D(I) if DNEW is larger */
+ di = d__[i__];
+ if (di <= dnew) {
+ goto L155;
+ }
+ if (l[i__] >= low) {
+ goto L155;
+ }
+ d__[i__] = dnew;
+ if (dnew <= dmin__) {
+ if (l[i__] != 0) {
+ mc64fd_(&l[i__], &qlen, n, &q[1], &d__[1], &l[1],
+ &c__2);
+ }
+ --low;
+ q[low] = i__;
+ l[i__] = low;
+ } else {
+ if (l[i__] == 0) {
+ ++qlen;
+ l[i__] = qlen;
+ }
+ mc64dd_(&i__, n, &q[1], &d__[1], &l[1], &c__2);
+ }
+/* Update tree */
+ jj = iperm[i__];
+ out[jj] = k;
+ pr[jj] = j;
+ }
+L155:
+ ;
+ }
+/* L150: */
+ }
+/* If CSP = RINF, no augmenting path is found */
+L160:
+ if (csp == rinf) {
+ goto L190;
+ }
+/* Find augmenting path by tracing backward in PR; update IPERM,JPERM */
+ ++(*num);
+ i__ = irn[isp];
+ iperm[i__] = jsp;
+ jperm[jsp] = isp;
+ j = jsp;
+ i__2 = *num;
+ for (jdum = 1; jdum <= i__2; ++jdum) {
+ jj = pr[j];
+ if (jj == -1) {
+ goto L180;
+ }
+ k = out[j];
+ i__ = irn[k];
+ iperm[i__] = jj;
+ jperm[jj] = k;
+ j = jj;
+/* L170: */
+ }
+/* End of dummy loop; this point is never reached */
+/* Update U for rows in Q(UP:N) */
+L180:
+ i__2 = *n;
+ for (kk = up; kk <= i__2; ++kk) {
+ i__ = q[kk];
+ u[i__] = u[i__] + d__[i__] - csp;
+/* L185: */
+ }
+L190:
+ i__2 = *n;
+ for (kk = low; kk <= i__2; ++kk) {
+ i__ = q[kk];
+ d__[i__] = rinf;
+ l[i__] = 0;
+/* L191: */
+ }
+ i__2 = qlen;
+ for (kk = 1; kk <= i__2; ++kk) {
+ i__ = q[kk];
+ d__[i__] = rinf;
+ l[i__] = 0;
+/* L193: */
+ }
+L100:
+ ;
+ }
+/* End of main loop */
+/* Set dual column variable in D(1:N) */
+L1000:
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ k = jperm[j];
+ if (k != 0) {
+ d__[j] = a[k] - u[irn[k]];
+ } else {
+ d__[j] = 0.;
+ }
+ if (iperm[j] == 0) {
+ u[j] = 0.;
+ }
+/* L200: */
+ }
+ if (*num == *n) {
+ goto L1100;
+ }
+/* The matrix is structurally singular, complete IPERM. */
+/* JPERM, OUT are work arrays */
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ jperm[j] = 0;
+/* L300: */
+ }
+ k = 0;
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ if (iperm[i__] == 0) {
+ ++k;
+ out[k] = i__;
+ } else {
+ j = iperm[i__];
+ jperm[j] = i__;
+ }
+/* L310: */
+ }
+ k = 0;
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ if (jperm[j] != 0) {
+ goto L320;
+ }
+ ++k;
+ jdum = out[k];
+ iperm[jdum] = j;
+L320:
+ ;
+ }
+L1100:
+ return 0;
+} /* mc64wd_ */
+
+
diff --git a/SuperLU_5.2.0/SRC/memory.c b/SuperLU_5.2.0/SRC/memory.c
new file mode 100644
index 0000000..aaba725
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/memory.c
@@ -0,0 +1,220 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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) **/
+
+#include "slu_ddefs.h"
+
+
+#if ( DEBUGlevel>=1 ) /* Debug malloc/free. */
+int superlu_malloc_total = 0;
+
+#define PAD_FACTOR 2
+#define DWORD (sizeof(double)) /* Be sure it's no smaller than double. */
+/* size_t is usually defined as 'unsigned long' */
+
+void *superlu_malloc(size_t size)
+{
+ char *buf;
+
+ buf = (char *) malloc(size + DWORD);
+ if ( !buf ) {
+ printf("superlu_malloc fails: malloc_total %.0f MB, size %ld\n",
+ superlu_malloc_total*1e-6, size);
+ ABORT("superlu_malloc: out of memory");
+ }
+
+ ((size_t_t *) buf)[0] = size;
+#if 0
+ superlu_malloc_total += size + DWORD;
+#else
+ superlu_malloc_total += size;
+#endif
+ return (void *) (buf + DWORD);
+}
+
+void superlu_free(void *addr)
+{
+ char *p = ((char *) addr) - DWORD;
+
+ if ( !addr )
+ ABORT("superlu_free: tried to free NULL pointer");
+
+ if ( !p )
+ ABORT("superlu_free: tried to free NULL+DWORD pointer");
+
+ {
+ int_t n = ((size_t *) p)[0];
+
+ if ( !n )
+ ABORT("superlu_free: tried to free a freed pointer");
+ *((size_t *) p) = 0; /* Set to zero to detect duplicate free's. */
+#if 0
+ superlu_malloc_total -= (n + DWORD);
+#else
+ superlu_malloc_total -= n;
+#endif
+
+ if ( superlu_malloc_total < 0 )
+ ABORT("superlu_malloc_total went negative!");
+
+ /*free (addr);*/
+ free (p);
+ }
+
+}
+
+#else /* production mode */
+
+void *superlu_malloc(size_t size)
+{
+ void *buf;
+ buf = (void *) malloc(size);
+ return (buf);
+}
+
+void superlu_free(void *addr)
+{
+ free (addr);
+}
+
+#endif
+
+
+/*! \brief Set up pointers for integer working arrays.
+ */
+void
+SetIWork(int m, int n, int panel_size, int *iworkptr, int **segrep,
+ int **parent, int **xplore, int **repfnz, int **panel_lsub,
+ int **xprune, int **marker)
+{
+ *segrep = iworkptr;
+ *parent = iworkptr + m;
+ *xplore = *parent + m;
+ *repfnz = *xplore + m;
+ *panel_lsub = *repfnz + panel_size * m;
+ *xprune = *panel_lsub + panel_size * m;
+ *marker = *xprune + n;
+ ifill (*repfnz, m * panel_size, EMPTY);
+ ifill (*panel_lsub, m * panel_size, EMPTY);
+}
+
+
+void
+copy_mem_int(int howmany, void *old, void *new)
+{
+ register int i;
+ int *iold = old;
+ int *inew = new;
+ for (i = 0; i < howmany; i++) inew[i] = iold[i];
+}
+
+
+void
+user_bcopy(char *src, char *dest, int bytes)
+{
+ char *s_ptr, *d_ptr;
+
+ s_ptr = src + bytes - 1;
+ d_ptr = dest + bytes - 1;
+ for (; d_ptr >= dest; --s_ptr, --d_ptr ) *d_ptr = *s_ptr;
+}
+
+
+
+int *intMalloc(int n)
+{
+ int *buf;
+ buf = (int *) SUPERLU_MALLOC((size_t) n * sizeof(int));
+ if ( !buf ) {
+ ABORT("SUPERLU_MALLOC fails for buf in intMalloc()");
+ }
+ return (buf);
+}
+
+int *intCalloc(int n)
+{
+ int *buf;
+ register int i;
+ buf = (int *) SUPERLU_MALLOC(n * sizeof(int));
+ if ( !buf ) {
+ ABORT("SUPERLU_MALLOC fails for buf in intCalloc()");
+ }
+ for (i = 0; i < n; ++i) buf[i] = 0;
+ return (buf);
+}
+
+
+
+#if 0
+check_expanders()
+{
+ int p;
+ printf("Check expanders:\n");
+ for (p = 0; p < NO_MEMTYPE; p++) {
+ printf("type %d, size %d, mem %d\n",
+ p, expanders[p].size, (int)expanders[p].mem);
+ }
+
+ return 0;
+}
+
+
+StackInfo()
+{
+ printf("Stack: size %d, used %d, top1 %d, top2 %d\n",
+ stack.size, stack.used, stack.top1, stack.top2);
+ return 0;
+}
+
+
+
+PrintStack(char *msg, GlobalLU_t *Glu)
+{
+ int i;
+ int *xlsub, *lsub, *xusub, *usub;
+
+ xlsub = Glu->xlsub;
+ lsub = Glu->lsub;
+ xusub = Glu->xusub;
+ usub = Glu->usub;
+
+ printf("%s\n", msg);
+
+/* printf("\nUCOL: ");
+ for (i = 0; i < xusub[ndim]; ++i)
+ printf("%f ", ucol[i]);
+
+ printf("\nLSUB: ");
+ for (i = 0; i < xlsub[ndim]; ++i)
+ printf("%d ", lsub[i]);
+
+ printf("\nUSUB: ");
+ for (i = 0; i < xusub[ndim]; ++i)
+ printf("%d ", usub[i]);
+
+ printf("\n");*/
+ return 0;
+}
+#endif
+
+
+
diff --git a/SuperLU_5.2.0/SRC/mmd.c b/SuperLU_5.2.0/SRC/mmd.c
new file mode 100644
index 0000000..16a7159
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/mmd.c
@@ -0,0 +1,1022 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+typedef int shortint;
+
+/* *************************************************************** */
+/* *************************************************************** */
+/* **** GENMMD ..... MULTIPLE MINIMUM EXTERNAL DEGREE **** */
+/* *************************************************************** */
+/* *************************************************************** */
+
+/* AUTHOR - JOSEPH W.H. LIU */
+/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
+
+/* PURPOSE - THIS ROUTINE IMPLEMENTS THE MINIMUM DEGREE */
+/* ALGORITHM. IT MAKES USE OF THE IMPLICIT REPRESENTATION */
+/* OF ELIMINATION GRAPHS BY QUOTIENT GRAPHS, AND THE */
+/* NOTION OF INDISTINGUISHABLE NODES. IT ALSO IMPLEMENTS */
+/* THE MODIFICATIONS BY MULTIPLE ELIMINATION AND MINIMUM */
+/* EXTERNAL DEGREE. */
+/* --------------------------------------------- */
+/* CAUTION - THE ADJACENCY VECTOR ADJNCY WILL BE */
+/* DESTROYED. */
+/* --------------------------------------------- */
+
+/* INPUT PARAMETERS - */
+/* NEQNS - NUMBER OF EQUATIONS. */
+/* (XADJ,ADJNCY) - THE ADJACENCY STRUCTURE. */
+/* DELTA - TOLERANCE VALUE FOR MULTIPLE ELIMINATION. */
+/* MAXINT - MAXIMUM MACHINE REPRESENTABLE (SHORT) INTEGER */
+/* (ANY SMALLER ESTIMATE WILL DO) FOR MARKING */
+/* NODES. */
+
+/* OUTPUT PARAMETERS - */
+/* PERM - THE MINIMUM DEGREE ORDERING. */
+/* INVP - THE INVERSE OF PERM. */
+/* NOFSUB - AN UPPER BOUND ON THE NUMBER OF NONZERO */
+/* SUBSCRIPTS FOR THE COMPRESSED STORAGE SCHEME. */
+
+/* WORKING PARAMETERS - */
+/* DHEAD - VECTOR FOR HEAD OF DEGREE LISTS. */
+/* INVP - USED TEMPORARILY FOR DEGREE FORWARD LINK. */
+/* PERM - USED TEMPORARILY FOR DEGREE BACKWARD LINK. */
+/* QSIZE - VECTOR FOR SIZE OF SUPERNODES. */
+/* LLIST - VECTOR FOR TEMPORARY LINKED LISTS. */
+/* MARKER - A TEMPORARY MARKER VECTOR. */
+
+/* PROGRAM SUBROUTINES - */
+/* MMDELM, MMDINT, MMDNUM, MMDUPD. */
+
+/* *************************************************************** */
+
+/* Subroutine */ int genmmd_(int *neqns, int *xadj, shortint *adjncy,
+ shortint *invp, shortint *perm, int *delta, shortint *dhead,
+ shortint *qsize, shortint *llist, shortint *marker, int *maxint,
+ int *nofsub)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ int mdeg, ehead, i, mdlmt, mdnode;
+ extern /* Subroutine */ int slu_mmdelm_(int *, int *, shortint *,
+ shortint *, shortint *, shortint *, shortint *, shortint *,
+ shortint *, int *, int *), slu_mmdupd_(int *, int *,
+ int *, shortint *, int *, int *, shortint *, shortint
+ *, shortint *, shortint *, shortint *, shortint *, int *,
+ int *), slu_mmdint_(int *, int *, shortint *, shortint *,
+ shortint *, shortint *, shortint *, shortint *, shortint *),
+ slu_mmdnum_(int *, shortint *, shortint *, shortint *);
+ int nextmd, tag, num;
+
+
+/* *************************************************************** */
+
+
+/* *************************************************************** */
+
+ /* Parameter adjustments */
+ --marker;
+ --llist;
+ --qsize;
+ --dhead;
+ --perm;
+ --invp;
+ --adjncy;
+ --xadj;
+
+ /* Function Body */
+ if (*neqns <= 0) {
+ return 0;
+ }
+
+/* ------------------------------------------------ */
+/* INITIALIZATION FOR THE MINIMUM DEGREE ALGORITHM. */
+/* ------------------------------------------------ */
+ *nofsub = 0;
+ slu_mmdint_(neqns, &xadj[1], &adjncy[1], &dhead[1], &invp[1], &perm[1], &
+ qsize[1], &llist[1], &marker[1]);
+
+/* ---------------------------------------------- */
+/* NUM COUNTS THE NUMBER OF ORDERED NODES PLUS 1. */
+/* ---------------------------------------------- */
+ num = 1;
+
+/* ----------------------------- */
+/* ELIMINATE ALL ISOLATED NODES. */
+/* ----------------------------- */
+ nextmd = dhead[1];
+L100:
+ if (nextmd <= 0) {
+ goto L200;
+ }
+ mdnode = nextmd;
+ nextmd = invp[mdnode];
+ marker[mdnode] = *maxint;
+ invp[mdnode] = -num;
+ ++num;
+ goto L100;
+
+L200:
+/* ---------------------------------------- */
+/* SEARCH FOR NODE OF THE MINIMUM DEGREE. */
+/* MDEG IS THE CURRENT MINIMUM DEGREE; */
+/* TAG IS USED TO FACILITATE MARKING NODES. */
+/* ---------------------------------------- */
+ if (num > *neqns) {
+ goto L1000;
+ }
+ tag = 1;
+ dhead[1] = 0;
+ mdeg = 2;
+L300:
+ if (dhead[mdeg] > 0) {
+ goto L400;
+ }
+ ++mdeg;
+ goto L300;
+L400:
+/* ------------------------------------------------- */
+/* USE VALUE OF DELTA TO SET UP MDLMT, WHICH GOVERNS */
+/* WHEN A DEGREE UPDATE IS TO BE PERFORMED. */
+/* ------------------------------------------------- */
+ mdlmt = mdeg + *delta;
+ ehead = 0;
+
+L500:
+ mdnode = dhead[mdeg];
+ if (mdnode > 0) {
+ goto L600;
+ }
+ ++mdeg;
+ if (mdeg > mdlmt) {
+ goto L900;
+ }
+ goto L500;
+L600:
+/* ---------------------------------------- */
+/* REMOVE MDNODE FROM THE DEGREE STRUCTURE. */
+/* ---------------------------------------- */
+ nextmd = invp[mdnode];
+ dhead[mdeg] = nextmd;
+ if (nextmd > 0) {
+ perm[nextmd] = -mdeg;
+ }
+ invp[mdnode] = -num;
+ *nofsub = *nofsub + mdeg + qsize[mdnode] - 2;
+ if (num + qsize[mdnode] > *neqns) {
+ goto L1000;
+ }
+/* ---------------------------------------------- */
+/* ELIMINATE MDNODE AND PERFORM QUOTIENT GRAPH */
+/* TRANSFORMATION. RESET TAG VALUE IF NECESSARY. */
+/* ---------------------------------------------- */
+ ++tag;
+ if (tag < *maxint) {
+ goto L800;
+ }
+ tag = 1;
+ i__1 = *neqns;
+ for (i = 1; i <= i__1; ++i) {
+ if (marker[i] < *maxint) {
+ marker[i] = 0;
+ }
+/* L700: */
+ }
+L800:
+ slu_mmdelm_(&mdnode, &xadj[1], &adjncy[1], &dhead[1], &invp[1], &perm[1], &
+ qsize[1], &llist[1], &marker[1], maxint, &tag);
+ num += qsize[mdnode];
+ llist[mdnode] = ehead;
+ ehead = mdnode;
+ if (*delta >= 0) {
+ goto L500;
+ }
+L900:
+/* ------------------------------------------- */
+/* UPDATE DEGREES OF THE NODES INVOLVED IN THE */
+/* MINIMUM DEGREE NODES ELIMINATION. */
+/* ------------------------------------------- */
+ if (num > *neqns) {
+ goto L1000;
+ }
+ slu_mmdupd_(&ehead, neqns, &xadj[1], &adjncy[1], delta, &mdeg, &dhead[1], &
+ invp[1], &perm[1], &qsize[1], &llist[1], &marker[1], maxint, &tag)
+ ;
+ goto L300;
+
+L1000:
+ slu_mmdnum_(neqns, &perm[1], &invp[1], &qsize[1]);
+ return 0;
+
+} /* genmmd_ */
+
+/* *************************************************************** */
+/* *************************************************************** */
+/* *** MMDINT ..... MULT MINIMUM DEGREE INITIALIZATION *** */
+/* *************************************************************** */
+/* *************************************************************** */
+
+/* AUTHOR - JOSEPH W.H. LIU */
+/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
+
+/* PURPOSE - THIS ROUTINE PERFORMS INITIALIZATION FOR THE */
+/* MULTIPLE ELIMINATION VERSION OF THE MINIMUM DEGREE */
+/* ALGORITHM. */
+
+/* INPUT PARAMETERS - */
+/* NEQNS - NUMBER OF EQUATIONS. */
+/* (XADJ,ADJNCY) - ADJACENCY STRUCTURE. */
+
+/* OUTPUT PARAMETERS - */
+/* (DHEAD,DFORW,DBAKW) - DEGREE DOUBLY LINKED STRUCTURE. */
+/* QSIZE - SIZE OF SUPERNODE (INITIALIZED TO ONE). */
+/* LLIST - LINKED LIST. */
+/* MARKER - MARKER VECTOR. */
+
+/* *************************************************************** */
+
+/* Subroutine */ int slu_mmdint_(int *neqns, int *xadj, shortint *adjncy,
+ shortint *dhead, shortint *dforw, shortint *dbakw, shortint *qsize,
+ shortint *llist, shortint *marker)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ int ndeg, node, fnode;
+
+
+/* *************************************************************** */
+
+
+/* *************************************************************** */
+
+ /* Parameter adjustments */
+ --marker;
+ --llist;
+ --qsize;
+ --dbakw;
+ --dforw;
+ --dhead;
+ --adjncy;
+ --xadj;
+
+ /* Function Body */
+ i__1 = *neqns;
+ for (node = 1; node <= i__1; ++node) {
+ dhead[node] = 0;
+ qsize[node] = 1;
+ marker[node] = 0;
+ llist[node] = 0;
+/* L100: */
+ }
+/* ------------------------------------------ */
+/* INITIALIZE THE DEGREE DOUBLY LINKED LISTS. */
+/* ------------------------------------------ */
+ i__1 = *neqns;
+ for (node = 1; node <= i__1; ++node) {
+ ndeg = xadj[node + 1] - xadj[node] + 1;
+ fnode = dhead[ndeg];
+ dforw[node] = fnode;
+ dhead[ndeg] = node;
+ if (fnode > 0) {
+ dbakw[fnode] = node;
+ }
+ dbakw[node] = -ndeg;
+/* L200: */
+ }
+ return 0;
+
+} /* slu_mmdint_ */
+
+/* *************************************************************** */
+/* *************************************************************** */
+/* ** MMDELM ..... MULTIPLE MINIMUM DEGREE ELIMINATION *** */
+/* *************************************************************** */
+/* *************************************************************** */
+
+/* AUTHOR - JOSEPH W.H. LIU */
+/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
+
+/* PURPOSE - THIS ROUTINE ELIMINATES THE NODE MDNODE OF */
+/* MINIMUM DEGREE FROM THE ADJACENCY STRUCTURE, WHICH */
+/* IS STORED IN THE QUOTIENT GRAPH FORMAT. IT ALSO */
+/* TRANSFORMS THE QUOTIENT GRAPH REPRESENTATION OF THE */
+/* ELIMINATION GRAPH. */
+
+/* INPUT PARAMETERS - */
+/* MDNODE - NODE OF MINIMUM DEGREE. */
+/* MAXINT - ESTIMATE OF MAXIMUM REPRESENTABLE (SHORT) */
+/* INT. */
+/* TAG - TAG VALUE. */
+
+/* UPDATED PARAMETERS - */
+/* (XADJ,ADJNCY) - UPDATED ADJACENCY STRUCTURE. */
+/* (DHEAD,DFORW,DBAKW) - DEGREE DOUBLY LINKED STRUCTURE. */
+/* QSIZE - SIZE OF SUPERNODE. */
+/* MARKER - MARKER VECTOR. */
+/* LLIST - TEMPORARY LINKED LIST OF ELIMINATED NABORS. */
+
+/* *************************************************************** */
+
+/* Subroutine */ int slu_mmdelm_(int *mdnode, int *xadj, shortint *adjncy,
+ shortint *dhead, shortint *dforw, shortint *dbakw, shortint *qsize,
+ shortint *llist, shortint *marker, int *maxint, int *tag)
+{
+ /* System generated locals */
+ int i__1, i__2;
+
+ /* Local variables */
+ int node, link, rloc, rlmt, i, j, nabor, rnode, elmnt, xqnbr,
+ istop, jstop, istrt, jstrt, nxnode, pvnode, nqnbrs, npv;
+
+
+/* *************************************************************** */
+
+
+/* *************************************************************** */
+
+/* ----------------------------------------------- */
+/* FIND REACHABLE SET AND PLACE IN DATA STRUCTURE. */
+/* ----------------------------------------------- */
+ /* Parameter adjustments */
+ --marker;
+ --llist;
+ --qsize;
+ --dbakw;
+ --dforw;
+ --dhead;
+ --adjncy;
+ --xadj;
+
+ /* Function Body */
+ marker[*mdnode] = *tag;
+ istrt = xadj[*mdnode];
+ istop = xadj[*mdnode + 1] - 1;
+/* ------------------------------------------------------- */
+/* ELMNT POINTS TO THE BEGINNING OF THE LIST OF ELIMINATED */
+/* NABORS OF MDNODE, AND RLOC GIVES THE STORAGE LOCATION */
+/* FOR THE NEXT REACHABLE NODE. */
+/* ------------------------------------------------------- */
+ elmnt = 0;
+ rloc = istrt;
+ rlmt = istop;
+ i__1 = istop;
+ for (i = istrt; i <= i__1; ++i) {
+ nabor = adjncy[i];
+ if (nabor == 0) {
+ goto L300;
+ }
+ if (marker[nabor] >= *tag) {
+ goto L200;
+ }
+ marker[nabor] = *tag;
+ if (dforw[nabor] < 0) {
+ goto L100;
+ }
+ adjncy[rloc] = nabor;
+ ++rloc;
+ goto L200;
+L100:
+ llist[nabor] = elmnt;
+ elmnt = nabor;
+L200:
+ ;
+ }
+L300:
+/* ----------------------------------------------------- */
+/* MERGE WITH REACHABLE NODES FROM GENERALIZED ELEMENTS. */
+/* ----------------------------------------------------- */
+ if (elmnt <= 0) {
+ goto L1000;
+ }
+ adjncy[rlmt] = -elmnt;
+ link = elmnt;
+L400:
+ jstrt = xadj[link];
+ jstop = xadj[link + 1] - 1;
+ i__1 = jstop;
+ for (j = jstrt; j <= i__1; ++j) {
+ node = adjncy[j];
+ link = -node;
+ if (node < 0) {
+ goto L400;
+ } else if (node == 0) {
+ goto L900;
+ } else {
+ goto L500;
+ }
+L500:
+ if (marker[node] >= *tag || dforw[node] < 0) {
+ goto L800;
+ }
+ marker[node] = *tag;
+/* --------------------------------- */
+/* USE STORAGE FROM ELIMINATED NODES */
+/* IF NECESSARY. */
+/* --------------------------------- */
+L600:
+ if (rloc < rlmt) {
+ goto L700;
+ }
+ link = -adjncy[rlmt];
+ rloc = xadj[link];
+ rlmt = xadj[link + 1] - 1;
+ goto L600;
+L700:
+ adjncy[rloc] = node;
+ ++rloc;
+L800:
+ ;
+ }
+L900:
+ elmnt = llist[elmnt];
+ goto L300;
+L1000:
+ if (rloc <= rlmt) {
+ adjncy[rloc] = 0;
+ }
+/* -------------------------------------------------------- */
+/* FOR EACH NODE IN THE REACHABLE SET, DO THE FOLLOWING ... */
+/* -------------------------------------------------------- */
+ link = *mdnode;
+L1100:
+ istrt = xadj[link];
+ istop = xadj[link + 1] - 1;
+ i__1 = istop;
+ for (i = istrt; i <= i__1; ++i) {
+ rnode = adjncy[i];
+ link = -rnode;
+ if (rnode < 0) {
+ goto L1100;
+ } else if (rnode == 0) {
+ goto L1800;
+ } else {
+ goto L1200;
+ }
+L1200:
+/* -------------------------------------------- */
+/* IF RNODE IS IN THE DEGREE LIST STRUCTURE ... */
+/* -------------------------------------------- */
+ pvnode = dbakw[rnode];
+ if (pvnode == 0 || pvnode == -(*maxint)) {
+ goto L1300;
+ }
+/* ------------------------------------- */
+/* THEN REMOVE RNODE FROM THE STRUCTURE. */
+/* ------------------------------------- */
+ nxnode = dforw[rnode];
+ if (nxnode > 0) {
+ dbakw[nxnode] = pvnode;
+ }
+ if (pvnode > 0) {
+ dforw[pvnode] = nxnode;
+ }
+ npv = -pvnode;
+ if (pvnode < 0) {
+ dhead[npv] = nxnode;
+ }
+L1300:
+/* ---------------------------------------- */
+/* PURGE INACTIVE QUOTIENT NABORS OF RNODE. */
+/* ---------------------------------------- */
+ jstrt = xadj[rnode];
+ jstop = xadj[rnode + 1] - 1;
+ xqnbr = jstrt;
+ i__2 = jstop;
+ for (j = jstrt; j <= i__2; ++j) {
+ nabor = adjncy[j];
+ if (nabor == 0) {
+ goto L1500;
+ }
+ if (marker[nabor] >= *tag) {
+ goto L1400;
+ }
+ adjncy[xqnbr] = nabor;
+ ++xqnbr;
+L1400:
+ ;
+ }
+L1500:
+/* ---------------------------------------- */
+/* IF NO ACTIVE NABOR AFTER THE PURGING ... */
+/* ---------------------------------------- */
+ nqnbrs = xqnbr - jstrt;
+ if (nqnbrs > 0) {
+ goto L1600;
+ }
+/* ----------------------------- */
+/* THEN MERGE RNODE WITH MDNODE. */
+/* ----------------------------- */
+ qsize[*mdnode] += qsize[rnode];
+ qsize[rnode] = 0;
+ marker[rnode] = *maxint;
+ dforw[rnode] = -(*mdnode);
+ dbakw[rnode] = -(*maxint);
+ goto L1700;
+L1600:
+/* -------------------------------------- */
+/* ELSE FLAG RNODE FOR DEGREE UPDATE, AND */
+/* ADD MDNODE AS A NABOR OF RNODE. */
+/* -------------------------------------- */
+ dforw[rnode] = nqnbrs + 1;
+ dbakw[rnode] = 0;
+ adjncy[xqnbr] = *mdnode;
+ ++xqnbr;
+ if (xqnbr <= jstop) {
+ adjncy[xqnbr] = 0;
+ }
+
+L1700:
+ ;
+ }
+L1800:
+ return 0;
+
+} /* slu_mmdelm_ */
+
+/* *************************************************************** */
+/* *************************************************************** */
+/* ***** MMDUPD ..... MULTIPLE MINIMUM DEGREE UPDATE ***** */
+/* *************************************************************** */
+/* *************************************************************** */
+
+/* AUTHOR - JOSEPH W.H. LIU */
+/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
+
+/* PURPOSE - THIS ROUTINE UPDATES THE DEGREES OF NODES */
+/* AFTER A MULTIPLE ELIMINATION STEP. */
+
+/* INPUT PARAMETERS - */
+/* EHEAD - THE BEGINNING OF THE LIST OF ELIMINATED */
+/* NODES (I.E., NEWLY FORMED ELEMENTS). */
+/* NEQNS - NUMBER OF EQUATIONS. */
+/* (XADJ,ADJNCY) - ADJACENCY STRUCTURE. */
+/* DELTA - TOLERANCE VALUE FOR MULTIPLE ELIMINATION. */
+/* MAXINT - MAXIMUM MACHINE REPRESENTABLE (SHORT) */
+/* INTEGER. */
+
+/* UPDATED PARAMETERS - */
+/* MDEG - NEW MINIMUM DEGREE AFTER DEGREE UPDATE. */
+/* (DHEAD,DFORW,DBAKW) - DEGREE DOUBLY LINKED STRUCTURE. */
+/* QSIZE - SIZE OF SUPERNODE. */
+/* LLIST - WORKING LINKED LIST. */
+/* MARKER - MARKER VECTOR FOR DEGREE UPDATE. */
+/* TAG - TAG VALUE. */
+
+/* *************************************************************** */
+
+/* Subroutine */ int slu_mmdupd_(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)
+{
+ /* System generated locals */
+ int i__1, i__2;
+
+ /* Local variables */
+ int node, mtag, link, mdeg0, i, j, enode, fnode, nabor, elmnt,
+ istop, jstop, q2head, istrt, jstrt, qxhead, iq2, deg, deg0;
+
+
+/* *************************************************************** */
+
+
+/* *************************************************************** */
+
+ /* Parameter adjustments */
+ --marker;
+ --llist;
+ --qsize;
+ --dbakw;
+ --dforw;
+ --dhead;
+ --adjncy;
+ --xadj;
+
+ /* Function Body */
+ mdeg0 = *mdeg + *delta;
+ elmnt = *ehead;
+L100:
+/* ------------------------------------------------------- */
+/* FOR EACH OF THE NEWLY FORMED ELEMENT, DO THE FOLLOWING. */
+/* (RESET TAG VALUE IF NECESSARY.) */
+/* ------------------------------------------------------- */
+ if (elmnt <= 0) {
+ return 0;
+ }
+ mtag = *tag + mdeg0;
+ if (mtag < *maxint) {
+ goto L300;
+ }
+ *tag = 1;
+ i__1 = *neqns;
+ for (i = 1; i <= i__1; ++i) {
+ if (marker[i] < *maxint) {
+ marker[i] = 0;
+ }
+/* L200: */
+ }
+ mtag = *tag + mdeg0;
+L300:
+/* --------------------------------------------- */
+/* CREATE TWO LINKED LISTS FROM NODES ASSOCIATED */
+/* WITH ELMNT: ONE WITH TWO NABORS (Q2HEAD) IN */
+/* ADJACENCY STRUCTURE, AND THE OTHER WITH MORE */
+/* THAN TWO NABORS (QXHEAD). ALSO COMPUTE DEG0, */
+/* NUMBER OF NODES IN THIS ELEMENT. */
+/* --------------------------------------------- */
+ q2head = 0;
+ qxhead = 0;
+ deg0 = 0;
+ link = elmnt;
+L400:
+ istrt = xadj[link];
+ istop = xadj[link + 1] - 1;
+ i__1 = istop;
+ for (i = istrt; i <= i__1; ++i) {
+ enode = adjncy[i];
+ link = -enode;
+ if (enode < 0) {
+ goto L400;
+ } else if (enode == 0) {
+ goto L800;
+ } else {
+ goto L500;
+ }
+
+L500:
+ if (qsize[enode] == 0) {
+ goto L700;
+ }
+ deg0 += qsize[enode];
+ marker[enode] = mtag;
+/* ---------------------------------- */
+/* IF ENODE REQUIRES A DEGREE UPDATE, */
+/* THEN DO THE FOLLOWING. */
+/* ---------------------------------- */
+ if (dbakw[enode] != 0) {
+ goto L700;
+ }
+/* ---------------------------------------
+*/
+/* PLACE EITHER IN QXHEAD OR Q2HEAD LISTS.
+*/
+/* ---------------------------------------
+*/
+ if (dforw[enode] == 2) {
+ goto L600;
+ }
+ llist[enode] = qxhead;
+ qxhead = enode;
+ goto L700;
+L600:
+ llist[enode] = q2head;
+ q2head = enode;
+L700:
+ ;
+ }
+L800:
+/* -------------------------------------------- */
+/* FOR EACH ENODE IN Q2 LIST, DO THE FOLLOWING. */
+/* -------------------------------------------- */
+ enode = q2head;
+ iq2 = 1;
+L900:
+ if (enode <= 0) {
+ goto L1500;
+ }
+ if (dbakw[enode] != 0) {
+ goto L2200;
+ }
+ ++(*tag);
+ deg = deg0;
+/* ------------------------------------------ */
+/* IDENTIFY THE OTHER ADJACENT ELEMENT NABOR. */
+/* ------------------------------------------ */
+ istrt = xadj[enode];
+ nabor = adjncy[istrt];
+ if (nabor == elmnt) {
+ nabor = adjncy[istrt + 1];
+ }
+/* ------------------------------------------------ */
+/* IF NABOR IS UNELIMINATED, INCREASE DEGREE COUNT. */
+/* ------------------------------------------------ */
+ link = nabor;
+ if (dforw[nabor] < 0) {
+ goto L1000;
+ }
+ deg += qsize[nabor];
+ goto L2100;
+L1000:
+/* -------------------------------------------- */
+/* OTHERWISE, FOR EACH NODE IN THE 2ND ELEMENT, */
+/* DO THE FOLLOWING. */
+/* -------------------------------------------- */
+ istrt = xadj[link];
+ istop = xadj[link + 1] - 1;
+ i__1 = istop;
+ for (i = istrt; i <= i__1; ++i) {
+ node = adjncy[i];
+ link = -node;
+ if (node == enode) {
+ goto L1400;
+ }
+ if (node < 0) {
+ goto L1000;
+ } else if (node == 0) {
+ goto L2100;
+ } else {
+ goto L1100;
+ }
+
+L1100:
+ if (qsize[node] == 0) {
+ goto L1400;
+ }
+ if (marker[node] >= *tag) {
+ goto L1200;
+ }
+/* -----------------------------------
+-- */
+/* CASE WHEN NODE IS NOT YET CONSIDERED
+. */
+/* -----------------------------------
+-- */
+ marker[node] = *tag;
+ deg += qsize[node];
+ goto L1400;
+L1200:
+/* ----------------------------------------
+ */
+/* CASE WHEN NODE IS INDISTINGUISHABLE FROM
+ */
+/* ENODE. MERGE THEM INTO A NEW SUPERNODE.
+ */
+/* ----------------------------------------
+ */
+ if (dbakw[node] != 0) {
+ goto L1400;
+ }
+ if (dforw[node] != 2) {
+ goto L1300;
+ }
+ qsize[enode] += qsize[node];
+ qsize[node] = 0;
+ marker[node] = *maxint;
+ dforw[node] = -enode;
+ dbakw[node] = -(*maxint);
+ goto L1400;
+L1300:
+/* --------------------------------------
+*/
+/* CASE WHEN NODE IS OUTMATCHED BY ENODE.
+*/
+/* --------------------------------------
+*/
+ if (dbakw[node] == 0) {
+ dbakw[node] = -(*maxint);
+ }
+L1400:
+ ;
+ }
+ goto L2100;
+L1500:
+/* ------------------------------------------------ */
+/* FOR EACH ENODE IN THE QX LIST, DO THE FOLLOWING. */
+/* ------------------------------------------------ */
+ enode = qxhead;
+ iq2 = 0;
+L1600:
+ if (enode <= 0) {
+ goto L2300;
+ }
+ if (dbakw[enode] != 0) {
+ goto L2200;
+ }
+ ++(*tag);
+ deg = deg0;
+/* --------------------------------- */
+/* FOR EACH UNMARKED NABOR OF ENODE, */
+/* DO THE FOLLOWING. */
+/* --------------------------------- */
+ istrt = xadj[enode];
+ istop = xadj[enode + 1] - 1;
+ i__1 = istop;
+ for (i = istrt; i <= i__1; ++i) {
+ nabor = adjncy[i];
+ if (nabor == 0) {
+ goto L2100;
+ }
+ if (marker[nabor] >= *tag) {
+ goto L2000;
+ }
+ marker[nabor] = *tag;
+ link = nabor;
+/* ------------------------------ */
+/* IF UNELIMINATED, INCLUDE IT IN */
+/* DEG COUNT. */
+/* ------------------------------ */
+ if (dforw[nabor] < 0) {
+ goto L1700;
+ }
+ deg += qsize[nabor];
+ goto L2000;
+L1700:
+/* -------------------------------
+*/
+/* IF ELIMINATED, INCLUDE UNMARKED
+*/
+/* NODES IN THIS ELEMENT INTO THE
+*/
+/* DEGREE COUNT. */
+/* -------------------------------
+*/
+ jstrt = xadj[link];
+ jstop = xadj[link + 1] - 1;
+ i__2 = jstop;
+ for (j = jstrt; j <= i__2; ++j) {
+ node = adjncy[j];
+ link = -node;
+ if (node < 0) {
+ goto L1700;
+ } else if (node == 0) {
+ goto L2000;
+ } else {
+ goto L1800;
+ }
+
+L1800:
+ if (marker[node] >= *tag) {
+ goto L1900;
+ }
+ marker[node] = *tag;
+ deg += qsize[node];
+L1900:
+ ;
+ }
+L2000:
+ ;
+ }
+L2100:
+/* ------------------------------------------- */
+/* UPDATE EXTERNAL DEGREE OF ENODE IN DEGREE */
+/* STRUCTURE, AND MDEG (MIN DEG) IF NECESSARY. */
+/* ------------------------------------------- */
+ deg = deg - qsize[enode] + 1;
+ fnode = dhead[deg];
+ dforw[enode] = fnode;
+ dbakw[enode] = -deg;
+ if (fnode > 0) {
+ dbakw[fnode] = enode;
+ }
+ dhead[deg] = enode;
+ if (deg < *mdeg) {
+ *mdeg = deg;
+ }
+L2200:
+/* ---------------------------------- */
+/* GET NEXT ENODE IN CURRENT ELEMENT. */
+/* ---------------------------------- */
+ enode = llist[enode];
+ if (iq2 == 1) {
+ goto L900;
+ }
+ goto L1600;
+L2300:
+/* ----------------------------- */
+/* GET NEXT ELEMENT IN THE LIST. */
+/* ----------------------------- */
+ *tag = mtag;
+ elmnt = llist[elmnt];
+ goto L100;
+
+} /* slu_mmdupd_ */
+
+/* *************************************************************** */
+/* *************************************************************** */
+/* ***** MMDNUM ..... MULTI MINIMUM DEGREE NUMBERING ***** */
+/* *************************************************************** */
+/* *************************************************************** */
+
+/* AUTHOR - JOSEPH W.H. LIU */
+/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */
+
+/* PURPOSE - THIS ROUTINE PERFORMS THE FINAL STEP IN */
+/* PRODUCING THE PERMUTATION AND INVERSE PERMUTATION */
+/* VECTORS IN THE MULTIPLE ELIMINATION VERSION OF THE */
+/* MINIMUM DEGREE ORDERING ALGORITHM. */
+
+/* INPUT PARAMETERS - */
+/* NEQNS - NUMBER OF EQUATIONS. */
+/* QSIZE - SIZE OF SUPERNODES AT ELIMINATION. */
+
+/* UPDATED PARAMETERS - */
+/* INVP - INVERSE PERMUTATION VECTOR. ON INPUT, */
+/* IF QSIZE(NODE)=0, THEN NODE HAS BEEN MERGED */
+/* INTO THE NODE -INVP(NODE); OTHERWISE, */
+/* -INVP(NODE) IS ITS INVERSE LABELLING. */
+
+/* OUTPUT PARAMETERS - */
+/* PERM - THE PERMUTATION VECTOR. */
+
+/* *************************************************************** */
+
+/* Subroutine */ int slu_mmdnum_(int *neqns, shortint *perm, shortint *invp,
+ shortint *qsize)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ int node, root, nextf, father, nqsize, num;
+
+
+/* *************************************************************** */
+
+
+/* *************************************************************** */
+
+ /* Parameter adjustments */
+ --qsize;
+ --invp;
+ --perm;
+
+ /* Function Body */
+ i__1 = *neqns;
+ for (node = 1; node <= i__1; ++node) {
+ nqsize = qsize[node];
+ if (nqsize <= 0) {
+ perm[node] = invp[node];
+ }
+ if (nqsize > 0) {
+ perm[node] = -invp[node];
+ }
+/* L100: */
+ }
+/* ------------------------------------------------------ */
+/* FOR EACH NODE WHICH HAS BEEN MERGED, DO THE FOLLOWING. */
+/* ------------------------------------------------------ */
+ i__1 = *neqns;
+ for (node = 1; node <= i__1; ++node) {
+ if (perm[node] > 0) {
+ goto L500;
+ }
+/* ----------------------------------------- */
+/* TRACE THE MERGED TREE UNTIL ONE WHICH HAS */
+/* NOT BEEN MERGED, CALL IT ROOT. */
+/* ----------------------------------------- */
+ father = node;
+L200:
+ if (perm[father] > 0) {
+ goto L300;
+ }
+ father = -perm[father];
+ goto L200;
+L300:
+/* ----------------------- */
+/* NUMBER NODE AFTER ROOT. */
+/* ----------------------- */
+ root = father;
+ num = perm[root] + 1;
+ invp[node] = -num;
+ perm[root] = num;
+/* ------------------------ */
+/* SHORTEN THE MERGED TREE. */
+/* ------------------------ */
+ father = node;
+L400:
+ nextf = -perm[father];
+ if (nextf <= 0) {
+ goto L500;
+ }
+ perm[father] = -root;
+ father = nextf;
+ goto L400;
+L500:
+ ;
+ }
+/* ---------------------- */
+/* READY TO COMPUTE PERM. */
+/* ---------------------- */
+ i__1 = *neqns;
+ for (node = 1; node <= i__1; ++node) {
+ num = -invp[node];
+ invp[node] = num;
+ perm[num] = node;
+/* L600: */
+ }
+ return 0;
+
+} /* slu_mmdnum_ */
+
diff --git a/SuperLU_5.2.0/SRC/qselect.c b/SuperLU_5.2.0/SRC/qselect.c
new file mode 100644
index 0000000..1525d5a
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/qselect.c
@@ -0,0 +1,84 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/relax_snode.c b/SuperLU_5.2.0/SRC/relax_snode.c
new file mode 100644
index 0000000..930e2b3
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/relax_snode.c
@@ -0,0 +1,85 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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>
+ */
+
+#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,
+ 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 */
+ )
+{
+
+ register int j, parent;
+ register int snode_start; /* beginning of a snode */
+
+ ifill (relax_end, 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 = 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++;
+ /* Search for a new leaf */
+ while ( descendants[j] != 0 && j < n ) j++;
+ }
+
+ /*printf("No of relaxed snodes: %d; relaxed columns: %d\n",
+ nsuper, no_relaxed_col); */
+}
diff --git a/SuperLU_5.2.0/SRC/scolumn_bmod.c b/SuperLU_5.2.0/SRC/scolumn_bmod.c
new file mode 100644
index 0000000..23dbf89
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/scolumn_bmod.c
@@ -0,0 +1,362 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * </pre>
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "slu_sdefs.h"
+
+/*
+ * Function prototypes
+ */
+void susolve(int, int, float*, float*);
+void slsolve(int, int, float*, float*);
+void smatvec(int, int, int, float*, float*, float*);
+
+
+
+/*! \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 (
+ const int jcol, /* in */
+ const int nseg, /* in */
+ float *dense, /* in */
+ float *tempv, /* working array */
+ int *segrep, /* in */
+ int *repfnz, /* in */
+ int fpanelc, /* in -- first column in the current panel */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ float alpha, beta;
+
+ /* krep = representative of current k-th supernode
+ * fsupc = first supernodal column
+ * nsupc = no of columns in supernode
+ * nsupr = no of rows in supernode (used as leading dimension)
+ * luptr = location of supernodal LU-block in storage
+ * kfnz = first nonz in the k-th supernodal segment
+ * no_zeros = no of leading zeros in a supernodal U-segment
+ */
+ float ukj, ukj1, ukj2;
+ int luptr, luptr1, luptr2;
+ int fsupc, nsupc, nsupr, segsze;
+ int nrow; /* No of rows in the matrix of matrix-vector */
+ int jcolp1, jsupno, k, ksub, krep, krep_ind, ksupno;
+ register int lptr, kfnz, isub, irow, i;
+ register int no_zeros, new_next;
+ int ufirst, nextlu;
+ int fst_col; /* First column within small LU update */
+ int d_fsupc; /* Distance between the first column of the current
+ panel and the first column of the current snode. */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ float *lusup;
+ int *xlusup;
+ int nzlumax;
+ float *tempv1;
+ float zero = 0.0;
+ float one = 1.0;
+ float none = -1.0;
+ int mem_error;
+ flops_t *ops = stat->ops;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (float *) Glu->lusup;
+ xlusup = Glu->xlusup;
+ nzlumax = Glu->nzlumax;
+ jcolp1 = jcol + 1;
+ jsupno = supno[jcol];
+
+ /*
+ * For each nonz supernode segment of U[*,j] in topological order
+ */
+ k = nseg - 1;
+ for (ksub = 0; ksub < nseg; ksub++) {
+
+ krep = segrep[k];
+ k--;
+ ksupno = supno[krep];
+ if ( jsupno != ksupno ) { /* Outside the rectangular supernode */
+
+ fsupc = xsup[ksupno];
+ fst_col = SUPERLU_MAX ( fsupc, fpanelc );
+
+ /* Distance from the current supernode to the current panel;
+ d_fsupc=0 if fsupc > fpanelc. */
+ d_fsupc = fst_col - fsupc;
+
+ luptr = xlusup[fst_col] + d_fsupc;
+ lptr = xlsub[fsupc] + d_fsupc;
+
+ kfnz = repfnz[krep];
+ kfnz = SUPERLU_MAX ( kfnz, fpanelc );
+
+ segsze = krep - kfnz + 1;
+ nsupc = krep - fst_col + 1;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
+ nrow = nsupr - d_fsupc - nsupc;
+ krep_ind = lptr + nsupc - 1;
+
+ ops[TRSV] += segsze * (segsze - 1);
+ ops[GEMV] += 2 * nrow * segsze;
+
+
+ /*
+ * Case 1: Update U-segment of size 1 -- col-col update
+ */
+ if ( segsze == 1 ) {
+ ukj = dense[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ dense[irow] -= ukj*lusup[luptr];
+ luptr++;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ ukj1 = dense[lsub[krep_ind - 1]];
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) { /* Case 2: 2cols-col update */
+ ukj -= ukj1 * lusup[luptr1];
+ dense[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++;
+ luptr1++;
+ dense[irow] -= ( ukj*lusup[luptr]
+ + ukj1*lusup[luptr1] );
+ }
+ } else { /* Case 3: 3cols-col update */
+ ukj2 = dense[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ ukj1 -= ukj2 * lusup[luptr2-1];
+ ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
+ dense[lsub[krep_ind]] = ukj;
+ dense[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++;
+ luptr1++;
+ luptr2++;
+ dense[irow] -= ( ukj*lusup[luptr]
+ + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
+ }
+ }
+
+
+
+ } else {
+ /*
+ * Case: sup-col update
+ * Perform a triangular solve and block update,
+ * then scatter the result of sup-col update to dense
+ */
+
+ no_zeros = kfnz - fst_col;
+
+ /* Copy U[*,j] segment from dense[*] to tempv[*] */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ tempv[i] = dense[irow];
+ ++isub;
+ }
+
+ /* Dense triangular solve -- start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#else
+ strsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#endif
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ SGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#else
+ sgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#endif
+#else
+ slsolve ( nsupr, segsze, &lusup[luptr], tempv );
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ smatvec (nsupr, nrow , segsze, &lusup[luptr], tempv, tempv1);
+#endif
+
+
+ /* Scatter tempv[] into SPA dense[] as a temporary storage */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense[irow] = tempv[i];
+ tempv[i] = zero;
+ ++isub;
+ }
+
+ /* Scatter tempv1[] into SPA dense[] */
+ for (i = 0; i < nrow; i++) {
+ irow = lsub[isub];
+ dense[irow] -= tempv1[i];
+ tempv1[i] = zero;
+ ++isub;
+ }
+ }
+
+ } /* if jsupno ... */
+
+ } /* for each segment... */
+
+ /*
+ * Process the supernodal portion of L\U[*,j]
+ */
+ nextlu = xlusup[jcol];
+ fsupc = xsup[jsupno];
+
+ /* Copy the SPA dense into L\U[*,j] */
+ new_next = nextlu + xlsub[fsupc+1] - xlsub[fsupc];
+ while ( new_next > nzlumax ) {
+ if (mem_error = sLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, Glu))
+ return (mem_error);
+ lusup = (float *) Glu->lusup;
+ lsub = Glu->lsub;
+ }
+
+ for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
+ irow = lsub[isub];
+ lusup[nextlu] = dense[irow];
+ dense[irow] = zero;
+ ++nextlu;
+ }
+
+ xlusup[jcolp1] = nextlu; /* Close L\U[*,jcol] */
+
+ /* For more updates within the panel (also within the current supernode),
+ * should start from the first column of the panel, or the first column
+ * of the supernode, whichever is bigger. There are 2 cases:
+ * 1) fsupc < fpanelc, then fst_col := fpanelc
+ * 2) fsupc >= fpanelc, then fst_col := fsupc
+ */
+ fst_col = SUPERLU_MAX ( fsupc, fpanelc );
+
+ if ( fst_col < jcol ) {
+
+ /* Distance between the current supernode and the current panel.
+ d_fsupc=0 if fsupc >= fpanelc. */
+ d_fsupc = fst_col - fsupc;
+
+ lptr = xlsub[fsupc] + d_fsupc;
+ luptr = xlusup[fst_col] + d_fsupc;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
+ nsupc = jcol - fst_col; /* Excluding jcol */
+ nrow = nsupr - d_fsupc - nsupc;
+
+ /* Points to the beginning of jcol in snode L\U(jsupno) */
+ ufirst = xlusup[jcol] + d_fsupc;
+
+ ops[TRSV] += nsupc * (nsupc - 1);
+ ops[GEMV] += 2 * nrow * nsupc;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr],
+ &nsupr, &lusup[ufirst], &incx );
+#else
+ strsv_( "L", "N", "U", &nsupc, &lusup[luptr],
+ &nsupr, &lusup[ufirst], &incx );
+#endif
+
+ alpha = none; beta = one; /* y := beta*y + alpha*A*x */
+
+#ifdef _CRAY
+ SGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#else
+ sgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#endif
+#else
+ slsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
+
+ smatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
+ &lusup[ufirst], tempv );
+
+ /* Copy updates from tempv[*] into lusup[*] */
+ isub = ufirst + nsupc;
+ for (i = 0; i < nrow; i++) {
+ lusup[isub] -= tempv[i];
+ tempv[i] = 0.0;
+ ++isub;
+ }
+
+#endif
+
+
+ } /* if fst_col < jcol ... */
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/scolumn_dfs.c b/SuperLU_5.2.0/SRC/scolumn_dfs.c
new file mode 100644
index 0000000..bec976f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/scolumn_dfs.c
@@ -0,0 +1,281 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * </pre>
+*/
+
+#include "slu_sdefs.h"
+
+/*! \brief What type of supernodes we want */
+#define T2_SUPER
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ * 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
+ * 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 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.
+ *
+ * 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.
+ *
+ * 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
+ *
+ * Return value
+ * ============
+ * 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 */
+ int fsupc; /* First column of a snode */
+ int myfnz; /* First nonz column of a U-segment */
+ int chperm, chmark, chrep, kchild;
+ int xdfs, maxdfs, kpar, oldrep;
+ int jptr, jm1ptr;
+ int ito, ifrom, istop; /* Used to compress row subscripts */
+ int mem_error;
+ int *xsup, *supno, *lsub, *xlsub;
+ int nzlmax;
+ int maxsuper;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ nzlmax = Glu->nzlmax;
+
+ maxsuper = sp_ienv(3);
+ jcolp1 = jcol + 1;
+ jcolm1 = jcol - 1;
+ nsuper = supno[jcol];
+ jsuper = nsuper;
+ nextl = xlsub[jcol];
+ marker2 = &marker[2*m];
+
+ /* For each nonzero in A[*,jcol] do dfs */
+ for (k = 0; lsub_col[k] != EMPTY; k++) {
+
+ krow = lsub_col[k];
+ lsub_col[k] = EMPTY;
+ kmark = marker2[krow];
+
+ /* krow was visited before, go to the next nonz */
+ if ( kmark == jcol ) continue;
+
+ /* For each unmarked nbr krow of jcol
+ * krow is in L: place it in structure of L[*,jcol]
+ */
+ marker2[krow] = jcol;
+ kperm = perm_r[krow];
+
+ if ( kperm == EMPTY ) {
+ lsub[nextl++] = krow; /* krow is indexed into A */
+ if ( nextl >= nzlmax ) {
+ 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 {
+ /* krow is in U: if its supernode-rep krep
+ * has been explored, update repfnz[*]
+ */
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz[krep];
+
+ if ( myfnz != EMPTY ) { /* Visited before */
+ 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];
+
+ do {
+ /*
+ * For each unmarked kchild of krep
+ */
+ while ( xdfs < maxdfs ) {
+
+ kchild = lsub[xdfs];
+ xdfs++;
+ chmark = marker2[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;
+ if ( nextl >= nzlmax ) {
+ 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 */
+ if ( myfnz > 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) */
+ parent[krep] = oldrep;
+ repfnz[krep] = chperm;
+ xdfs = xlsub[krep];
+ maxdfs = xprune[krep];
+ } /* else */
+
+ } /* else */
+
+ } /* if */
+
+ } /* while */
+
+ /* krow has no more unexplored nbrs;
+ * place supernode-rep krep in postorder DFS.
+ * backtrack dfs to its parent
+ */
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ kpar = parent[krep]; /* Pop from stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ maxdfs = xprune[krep];
+
+ } while ( kpar != EMPTY ); /* Until empty stack */
+
+ } /* else */
+
+ } /* else */
+
+ } /* for each nonzero ... */
+
+ /* Check to see if j belongs in the same supernode as j-1 */
+ if ( jcol == 0 ) { /* Do nothing for column 0 */
+ nsuper = supno[0] = 0;
+ } else {
+ fsupc = xsup[nsuper];
+ jptr = xlsub[jcol]; /* Not compressed yet */
+ jm1ptr = xlsub[jcolm1];
+
+#ifdef T2_SUPER
+ if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
+#endif
+ /* 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)
+ */
+ if ( jsuper == EMPTY ) { /* starts a new supernode */
+ if ( (fsupc < jcolm1-1) ) { /* >= 3 columns in nsuper */
+#ifdef CHK_COMPRESS
+ printf(" Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
+#endif
+ 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)
+ lsub[ito] = lsub[ifrom];
+ nextl = ito; /* = istop + length(jcol) */
+ }
+ nsuper++;
+ supno[jcol] = nsuper;
+ } /* if a new supernode */
+
+ } /* 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/SuperLU_5.2.0/SRC/scomplex.c b/SuperLU_5.2.0/SRC/scomplex.c
new file mode 100644
index 0000000..0d83372
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/scomplex.c
@@ -0,0 +1,157 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+
+/*! \brief Complex Division c = a/b */
+void c_div(complex *c, complex *a, complex *b)
+{
+ float ratio, den;
+ float abr, abi, cr, ci;
+
+ if( (abr = b->r) < 0.)
+ abr = - abr;
+ if( (abi = b->i) < 0.)
+ abi = - abi;
+ if( abr <= abi ) {
+ if (abi == 0) {
+ fprintf(stderr, "z_div.c: division by zero\n");
+ exit(-1);
+ }
+ ratio = b->r / b->i ;
+ den = b->i * (1 + ratio*ratio);
+ cr = (a->r*ratio + a->i) / den;
+ ci = (a->i*ratio - a->r) / den;
+ } else {
+ ratio = b->i / b->r ;
+ den = b->r * (1 + ratio*ratio);
+ cr = (a->r + a->i*ratio) / den;
+ ci = (a->i - a->r*ratio) / den;
+ }
+ c->r = cr;
+ c->i = ci;
+}
+
+
+/*! \brief Returns sqrt(z.r^2 + z.i^2) */
+double c_abs(complex *z)
+{
+ float temp;
+ float real = z->r;
+ float imag = z->i;
+
+ if (real < 0) real = -real;
+ if (imag < 0) imag = -imag;
+ if (imag > real) {
+ temp = real;
+ real = imag;
+ imag = temp;
+ }
+ if ((real+imag) == real) return(real);
+
+ temp = imag/real;
+ temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/
+ return (temp);
+}
+
+
+/*! \brief Approximates the abs. Returns abs(z.r) + abs(z.i) */
+double c_abs1(complex *z)
+{
+ float real = z->r;
+ float imag = z->i;
+
+ if (real < 0) real = -real;
+ if (imag < 0) imag = -imag;
+
+ return (real + imag);
+}
+
+/*! \brief Return the exponentiation */
+void c_exp(complex *r, complex *z)
+{
+ float expx;
+
+ expx = exp(z->r);
+ r->r = expx * cos(z->i);
+ r->i = expx * sin(z->i);
+}
+
+/*! \brief Return the complex conjugate */
+void r_cnjg(complex *r, complex *z)
+{
+ r->r = z->r;
+ r->i = -z->i;
+}
+
+/*! \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/SuperLU_5.2.0/SRC/scopy_to_ucol.c b/SuperLU_5.2.0/SRC/scopy_to_ucol.c
new file mode 100644
index 0000000..7bc8d96
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/scopy_to_ucol.c
@@ -0,0 +1,113 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_sdefs.h"
+
+int
+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 */
+ GlobalLU_t *Glu /* modified */
+ )
+{
+/*
+ * 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;
+ float zero = 0.0;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ ucol = (float *) Glu->ucol;
+ usub = Glu->usub;
+ xusub = Glu->xusub;
+ nzumax = Glu->nzumax;
+
+ 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))
+ return (mem_error);
+ ucol = (float *) Glu->ucol;
+ if (mem_error = sLUMemXpand(jcol, nextu, USUB, &nzumax, Glu))
+ return (mem_error);
+ usub = Glu->usub;
+ lsub = Glu->lsub;
+ }
+
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ usub[nextu] = perm_r[irow];
+ ucol[nextu] = dense[irow];
+ dense[irow] = zero;
+ nextu++;
+ isub++;
+ }
+
+ }
+
+ }
+
+ } /* for each segment... */
+
+ xusub[jcol + 1] = nextu; /* Close U[*,jcol] */
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/scsum1.c b/SuperLU_5.2.0/SRC/scsum1.c
new file mode 100644
index 0000000..48bdf79
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/scsum1.c
@@ -0,0 +1,109 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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"
+
+/*! \brief
+
+<pre>
+ Purpose
+ =======
+
+ SCSUM1 takes the sum of the absolute values of a complex
+ vector and returns a single precision result.
+
+ Based on SCASUM from the Level 1 BLAS.
+ The change is to use the 'genuine' absolute value.
+
+ Contributed by Nick Higham for use with CLACON.
+
+ Arguments
+ =========
+
+ N (input) INT
+ The number of elements in the vector CX.
+
+ CX (input) COMPLEX array, dimension (N)
+ The vector whose elements will be summed.
+
+ INCX (input) INT
+ The spacing between successive values of CX. INCX > 0.
+
+ =====================================================================
+</pre>
+*/
+double scsum1_slu(int *n, complex *cx, int *incx)
+{
+ /* System generated locals */
+ int i__1, i__2;
+ float ret_val;
+ /* Builtin functions */
+ double c_abs(complex *);
+ /* Local variables */
+ static int i, nincx;
+ static float stemp;
+
+
+#define CX(I) cx[(I)-1]
+
+
+ ret_val = 0.f;
+ stemp = 0.f;
+ if (*n <= 0) {
+ return ret_val;
+ }
+ if (*incx == 1) {
+ goto L20;
+ }
+
+/* CODE FOR INCREMENT NOT EQUAL TO 1 */
+
+ nincx = *n * *incx;
+ i__1 = nincx;
+ i__2 = *incx;
+ for (i = 1; *incx < 0 ? i >= nincx : i <= nincx; i += *incx) {
+
+/* NEXT LINE MODIFIED. */
+
+ stemp += c_abs(&CX(i));
+/* L10: */
+ }
+ ret_val = stemp;
+ return ret_val;
+
+/* CODE FOR INCREMENT EQUAL TO 1 */
+
+L20:
+ i__2 = *n;
+ for (i = 1; i <= *n; ++i) {
+
+/* NEXT LINE MODIFIED. */
+
+ stemp += c_abs(&CX(i));
+/* L30: */
+ }
+ ret_val = stemp;
+ return ret_val;
+
+/* End of SCSUM1 */
+
+} /* scsum1_slu */
+
diff --git a/SuperLU_5.2.0/SRC/sdiagonal.c b/SuperLU_5.2.0/SRC/sdiagonal.c
new file mode 100644
index 0000000..ed5fb6d
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sdiagonal.c
@@ -0,0 +1,139 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/sgscon.c b/SuperLU_5.2.0/SRC/sgscon.c
new file mode 100644
index 0000000..0554b65
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sgscon.c
@@ -0,0 +1,168 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file sgscon.c
+ * \brief Estimates reciprocal of the condition number of a general matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * July 25, 2015
+ *
+ * Modified from lapack routines SGECON.
+ * </pre>
+ */
+
+/*
+ * File name: sgscon.c
+ * History: Modified from lapack routines SGECON.
+ */
+#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)
+{
+
+
+ /* Local variables */
+ int kase, kase1, onenrm, i;
+ float ainvnm;
+ float *work;
+ int *iwork;
+ int isave[3];
+ extern int srscl_(int *, float *, float *, int *);
+
+ extern int slacon2_(int *, float *, float *, int *, float *, int *, int []);
+
+
+ /* Test the input parameters. */
+ *info = 0;
+ onenrm = *(unsigned char *)norm == '1' || strncmp(norm, "O", 1)==0;
+ if (! onenrm && ! strncmp(norm, "I", 1)==0) *info = -1;
+ else if (L->nrow < 0 || L->nrow != L->ncol ||
+ L->Stype != SLU_SC || L->Dtype != SLU_S || L->Mtype != SLU_TRLU)
+ *info = -2;
+ else if (U->nrow < 0 || U->nrow != U->ncol ||
+ U->Stype != SLU_NC || U->Dtype != SLU_S || U->Mtype != SLU_TRU)
+ *info = -3;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("sgscon", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ *rcond = 0.;
+ if ( L->nrow == 0 || U->nrow == 0) {
+ *rcond = 1.;
+ return;
+ }
+
+ work = floatCalloc( 3*L->nrow );
+ iwork = intMalloc( L->nrow );
+
+
+ if ( !work || !iwork )
+ ABORT("Malloc fails for work arrays in sgscon.");
+
+ /* Estimate the norm of inv(A). */
+ ainvnm = 0.;
+ if ( onenrm ) kase1 = 1;
+ else kase1 = 2;
+ kase = 0;
+
+ do {
+ slacon2_(&L->nrow, &work[L->nrow], &work[0], &iwork[0], &ainvnm, &kase, isave);
+
+ if (kase == 0) break;
+
+ if (kase == kase1) {
+ /* Multiply by inv(L). */
+ sp_strsv("L", "No trans", "Unit", L, U, &work[0], stat, info);
+
+ /* Multiply by inv(U). */
+ sp_strsv("U", "No trans", "Non-unit", L, U, &work[0], stat, info);
+
+ } else {
+
+ /* Multiply by inv(U'). */
+ sp_strsv("U", "Transpose", "Non-unit", L, U, &work[0], stat, info);
+
+ /* Multiply by inv(L'). */
+ sp_strsv("L", "Transpose", "Unit", L, U, &work[0], stat, info);
+
+ }
+
+ } while ( kase != 0 );
+
+ /* Compute the estimate of the reciprocal condition number. */
+ if (ainvnm != 0.) *rcond = (1. / ainvnm) / anorm;
+
+ SUPERLU_FREE (work);
+ SUPERLU_FREE (iwork);
+ return;
+
+} /* sgscon */
+
diff --git a/SuperLU_5.2.0/SRC/sgsequ.c b/SuperLU_5.2.0/SRC/sgsequ.c
new file mode 100644
index 0000000..ca1711a
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sgsequ.c
@@ -0,0 +1,205 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from LAPACK routine SGEEQU
+ */
+#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)
+{
+
+
+ /* Local variables */
+ NCformat *Astore;
+ float *Aval;
+ int i, j, irow;
+ float rcmin, rcmax;
+ float bignum, smlnum;
+ extern float smach(char *);
+
+ /* Test the input parameters. */
+ *info = 0;
+ if ( A->nrow < 0 || A->ncol < 0 ||
+ A->Stype != SLU_NC || A->Dtype != SLU_S || A->Mtype != SLU_GE )
+ *info = -1;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("sgsequ", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ if ( A->nrow == 0 || A->ncol == 0 ) {
+ *rowcnd = 1.;
+ *colcnd = 1.;
+ *amax = 0.;
+ return;
+ }
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Get machine constants. */
+ smlnum = smach("S"); /* slamch_("S"); */
+ bignum = 1. / smlnum;
+
+ /* Compute row scale factors. */
+ for (i = 0; i < A->nrow; ++i) r[i] = 0.;
+
+ /* Find the maximum element in each row. */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ r[irow] = SUPERLU_MAX( r[irow], fabs(Aval[i]) );
+ }
+
+ /* Find the maximum and minimum scale factors. */
+ rcmin = bignum;
+ rcmax = 0.;
+ for (i = 0; i < A->nrow; ++i) {
+ rcmax = SUPERLU_MAX(rcmax, r[i]);
+ rcmin = SUPERLU_MIN(rcmin, r[i]);
+ }
+ *amax = rcmax;
+
+ if (rcmin == 0.) {
+ /* Find the first zero scale factor and return an error code. */
+ for (i = 0; i < A->nrow; ++i)
+ if (r[i] == 0.) {
+ *info = i + 1;
+ return;
+ }
+ } else {
+ /* Invert the scale factors. */
+ for (i = 0; i < A->nrow; ++i)
+ r[i] = 1. / SUPERLU_MIN( SUPERLU_MAX( r[i], smlnum ), bignum );
+ /* Compute ROWCND = min(R(I)) / max(R(I)) */
+ *rowcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
+ }
+
+ /* Compute column scale factors */
+ for (j = 0; j < A->ncol; ++j) c[j] = 0.;
+
+ /* Find the maximum element in each column, assuming the row
+ scalings computed above. */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ c[j] = SUPERLU_MAX( c[j], fabs(Aval[i]) * r[irow] );
+ }
+
+ /* Find the maximum and minimum scale factors. */
+ rcmin = bignum;
+ rcmax = 0.;
+ for (j = 0; j < A->ncol; ++j) {
+ rcmax = SUPERLU_MAX(rcmax, c[j]);
+ rcmin = SUPERLU_MIN(rcmin, c[j]);
+ }
+
+ if (rcmin == 0.) {
+ /* Find the first zero scale factor and return an error code. */
+ for (j = 0; j < A->ncol; ++j)
+ if ( c[j] == 0. ) {
+ *info = A->nrow + j + 1;
+ return;
+ }
+ } else {
+ /* Invert the scale factors. */
+ for (j = 0; j < A->ncol; ++j)
+ c[j] = 1. / SUPERLU_MIN( SUPERLU_MAX( c[j], smlnum ), bignum);
+ /* Compute COLCND = min(C(J)) / max(C(J)) */
+ *colcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
+ }
+
+ return;
+
+} /* sgsequ */
+
+
diff --git a/SuperLU_5.2.0/SRC/sgsisx.c b/SuperLU_5.2.0/SRC/sgsisx.c
new file mode 100644
index 0000000..e58c8df
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sgsisx.c
@@ -0,0 +1,738 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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,
+ GlobalLU_t *Glu, 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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ smlnum = smach("Safe minimum"); /* lamch_("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 || strncmp(equed, "N", 1)==0) )
+ *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);
+ input_error("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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ }
+ 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, Glu, 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 ( *rcond < smach("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/SuperLU_5.2.0/SRC/sgsitrf.c b/SuperLU_5.2.0/SRC/sgsitrf.c
new file mode 100644
index 0000000..81bb97f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sgsitrf.c
@@ -0,0 +1,663 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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,
+ GlobalLU_t *Glu, /* persistent to facilitate multiple factorizations */
+ 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 */
+ 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]++;
+ ((float *) 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 = (float *) 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 = (float *) Glu->ucol;
+ ((NCformat *)U->Store)->rowind = Glu->usub;
+ ((NCformat *)U->Store)->colptr = Glu->xusub;
+ } else {
+ sCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL,
+ (float *) 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,
+ (float *) 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/SuperLU_5.2.0/SRC/sgsrfs.c b/SuperLU_5.2.0/SRC/sgsrfs.c
new file mode 100644
index 0000000..5faab1d
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sgsrfs.c
@@ -0,0 +1,468 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file sgsrfs.c
+ * \brief Improves computed solution to a system of inear equations
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Modified from lapack routine SGERFS
+ * Last modified: December 3, 2015
+ * </pre>
+ */
+/*
+ * File name: sgsrfs.c
+ * History: Modified from lapack routine SGERFS
+ */
+#include <math.h>
+#include "slu_sdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * SGSRFS improves the computed solution to a system of linear
+ * equations and provides error bounds and backward error estimates for
+ * the solution.
+ *
+ * If equilibration was performed, the system becomes:
+ * (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * 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)
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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 sgstrs().
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See 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
+ *
+ * Internal Parameters
+ * ===================
+ *
+ * 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
+
+ /* Table of constant values */
+ int ione = 1;
+ float ndone = -1.;
+ float done = 1.;
+
+ /* Local variables */
+ NCformat *Astore;
+ float *Aval;
+ SuperMatrix Bjcol;
+ DNformat *Bstore, *Xstore, *Bjcol_store;
+ float *Bmat, *Xmat, *Bptr, *Xptr;
+ int kase;
+ float safe1, safe2;
+ int i, j, k, irow, nz, count, notran, rowequ, colequ;
+ int ldb, ldx, nrhs;
+ float s, xk, lstres, eps, safmin;
+ char transc[1];
+ trans_t transt;
+ float *work;
+ float *rwork;
+ int *iwork;
+ int isave[3];
+
+ extern int slacon2_(int *, float *, float *, int *, float *, int *, int []);
+#ifdef _CRAY
+ extern int SCOPY(int *, float *, int *, float *, int *);
+ extern int SSAXPY(int *, float *, float *, int *, float *, int *);
+#else
+ extern int scopy_(int *, float *, int *, float *, int *);
+ extern int saxpy_(int *, float *, float *, int *, float *, int *);
+#endif
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+ Bstore = B->Store;
+ Xstore = X->Store;
+ Bmat = Bstore->nzval;
+ Xmat = Xstore->nzval;
+ ldb = Bstore->lda;
+ ldx = Xstore->lda;
+ nrhs = B->ncol;
+
+ /* Test the input parameters */
+ *info = 0;
+ notran = (trans == NOTRANS);
+ if ( !notran && trans != TRANS && trans != CONJ ) *info = -1;
+ else if ( A->nrow != A->ncol || A->nrow < 0 ||
+ A->Stype != SLU_NC || A->Dtype != SLU_S || A->Mtype != SLU_GE )
+ *info = -2;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ||
+ L->Stype != SLU_SC || L->Dtype != SLU_S || L->Mtype != SLU_TRLU )
+ *info = -3;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ||
+ U->Stype != SLU_NC || U->Dtype != SLU_S || U->Mtype != SLU_TRU )
+ *info = -4;
+ else if ( ldb < SUPERLU_MAX(0, A->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_S || B->Mtype != SLU_GE )
+ *info = -10;
+ else if ( ldx < SUPERLU_MAX(0, A->nrow) ||
+ X->Stype != SLU_DN || X->Dtype != SLU_S || X->Mtype != SLU_GE )
+ *info = -11;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("sgsrfs", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ if ( A->nrow == 0 || nrhs == 0) {
+ for (j = 0; j < nrhs; ++j) {
+ ferr[j] = 0.;
+ berr[j] = 0.;
+ }
+ return;
+ }
+
+ rowequ = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+
+ /* Allocate working space */
+ work = floatMalloc(2*A->nrow);
+ rwork = (float *) SUPERLU_MALLOC( A->nrow * sizeof(float) );
+ iwork = intMalloc(2*A->nrow);
+ if ( !work || !rwork || !iwork )
+ ABORT("Malloc fails for work/rwork/iwork.");
+
+ if ( notran ) {
+ *(unsigned char *)transc = 'N';
+ transt = TRANS;
+ } else if ( trans == TRANS ) {
+ *(unsigned char *)transc = 'T';
+ transt = NOTRANS;
+ } else if ( trans == CONJ ) {
+ *(unsigned char *)transc = 'C';
+ transt = NOTRANS;
+ }
+
+ /* NZ = maximum number of nonzero elements in each row of A, plus 1 */
+ nz = A->ncol + 1;
+ eps = smach("Epsilon");
+ safmin = smach("Safe minimum");
+
+ /* Set SAFE1 essentially to be the underflow threshold times the
+ number of additions in each row. */
+ safe1 = nz * safmin;
+ safe2 = safe1 / eps;
+
+ /* Compute the number of nonzeros in each row (or column) of A */
+ for (i = 0; i < A->nrow; ++i) iwork[i] = 0;
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k)
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ ++iwork[Astore->rowind[i]];
+ } else {
+ for (k = 0; k < A->ncol; ++k)
+ iwork[k] = Astore->colptr[k+1] - Astore->colptr[k];
+ }
+
+ /* Copy one column of RHS B into Bjcol. */
+ Bjcol.Stype = B->Stype;
+ Bjcol.Dtype = B->Dtype;
+ Bjcol.Mtype = B->Mtype;
+ Bjcol.nrow = B->nrow;
+ Bjcol.ncol = 1;
+ Bjcol.Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
+ if ( !Bjcol.Store ) ABORT("SUPERLU_MALLOC fails for Bjcol.Store");
+ Bjcol_store = Bjcol.Store;
+ Bjcol_store->lda = ldb;
+ Bjcol_store->nzval = work; /* address aliasing */
+
+ /* Do for each right hand side ... */
+ for (j = 0; j < nrhs; ++j) {
+ count = 0;
+ lstres = 3.;
+ Bptr = &Bmat[j*ldb];
+ Xptr = &Xmat[j*ldx];
+
+ while (1) { /* Loop until stopping criterion is satisfied. */
+
+ /* Compute residual R = B - op(A) * X,
+ where op(A) = A, A**T, or A**H, depending on TRANS. */
+
+#ifdef _CRAY
+ SCOPY(&A->nrow, Bptr, &ione, work, &ione);
+#else
+ scopy_(&A->nrow, Bptr, &ione, work, &ione);
+#endif
+ sp_sgemv(transc, ndone, A, Xptr, ione, done, work, ione);
+
+ /* Compute componentwise relative backward error from formula
+ max(i) ( abs(R(i)) / ( abs(op(A))*abs(X) + abs(B) )(i) )
+ 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 before dividing. */
+
+ for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
+
+ /* Compute abs(op(A))*abs(X) + abs(B). */
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k) {
+ xk = fabs( Xptr[k] );
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ rwork[Astore->rowind[i]] += fabs(Aval[i]) * xk;
+ }
+ } else { /* trans = TRANS or CONJ */
+ for (k = 0; k < A->ncol; ++k) {
+ s = 0.;
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+ irow = Astore->rowind[i];
+ s += fabs(Aval[i]) * fabs(Xptr[irow]);
+ }
+ rwork[k] += s;
+ }
+ }
+ s = 0.;
+ for (i = 0; i < A->nrow; ++i) {
+ if (rwork[i] > safe2) {
+ s = SUPERLU_MAX( s, fabs(work[i]) / rwork[i] );
+ } 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;
+
+ /* Test stopping criterion. Continue iterating if
+ 1) The residual BERR(J) is larger than machine epsilon, and
+ 2) BERR(J) decreased by at least a factor of 2 during the
+ last iteration, and
+ 3) At most ITMAX iterations tried. */
+
+ if (berr[j] > eps && berr[j] * 2. <= lstres && count < ITMAX) {
+ /* Update solution and try again. */
+ sgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+#ifdef _CRAY
+ SAXPY(&A->nrow, &done, work, &ione,
+ &Xmat[j*ldx], &ione);
+#else
+ saxpy_(&A->nrow, &done, work, &ione,
+ &Xmat[j*ldx], &ione);
+#endif
+ lstres = berr[j];
+ ++count;
+ } else {
+ break;
+ }
+
+ } /* end while */
+
+ stat->RefineSteps = count;
+
+ /* Bound error from formula:
+ norm(X - XTRUE) / norm(X) .le. FERR = norm( abs(inv(op(A)))*
+ ( abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) / norm(X)
+ where
+ norm(Z) is the magnitude of the largest component of Z
+ inv(op(A)) is the inverse of op(A)
+ abs(Z) is the componentwise absolute value of the matrix or
+ vector Z
+ NZ is the maximum number of nonzeros in any row of A, plus 1
+ EPS is machine epsilon
+
+ The i-th component of abs(R)+NZ*EPS*(abs(op(A))*abs(X)+abs(B))
+ is incremented by SAFE1 if the i-th component of
+ abs(op(A))*abs(X) + abs(B) is less than SAFE2.
+
+ Use SLACON2 to estimate the infinity-norm of the matrix
+ inv(op(A)) * diag(W),
+ where W = abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) */
+
+ for (i = 0; i < A->nrow; ++i) rwork[i] = fabs( Bptr[i] );
+
+ /* Compute abs(op(A))*abs(X) + abs(B). */
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k) {
+ xk = fabs( Xptr[k] );
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ rwork[Astore->rowind[i]] += fabs(Aval[i]) * xk;
+ }
+ } else { /* trans == TRANS or CONJ */
+ for (k = 0; k < A->ncol; ++k) {
+ s = 0.;
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+ irow = Astore->rowind[i];
+ xk = fabs( Xptr[irow] );
+ s += fabs(Aval[i]) * xk;
+ }
+ rwork[k] += s;
+ }
+ }
+
+ for (i = 0; i < A->nrow; ++i)
+ if (rwork[i] > safe2)
+ rwork[i] = fabs(work[i]) + (iwork[i]+1)*eps*rwork[i];
+ else
+ rwork[i] = fabs(work[i])+(iwork[i]+1)*eps*rwork[i]+safe1;
+
+ kase = 0;
+
+ do {
+ slacon2_(&A->nrow, &work[A->nrow], work,
+ &iwork[A->nrow], &ferr[j], &kase, isave);
+ if (kase == 0) break;
+
+ if (kase == 1) {
+ /* Multiply by diag(W)*inv(op(A)**T)*(diag(C) or diag(R)). */
+ if ( notran && colequ )
+ for (i = 0; i < A->ncol; ++i) work[i] *= C[i];
+ else if ( !notran && rowequ )
+ for (i = 0; i < A->nrow; ++i) work[i] *= R[i];
+
+ sgstrs (transt, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+ for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i];
+ } else {
+ /* Multiply by (diag(C) or diag(R))*inv(op(A))*diag(W). */
+ for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i];
+
+ sgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+ if ( notran && colequ )
+ for (i = 0; i < A->ncol; ++i) work[i] *= C[i];
+ else if ( !notran && rowequ )
+ for (i = 0; i < A->ncol; ++i) work[i] *= R[i];
+ }
+
+ } while ( kase != 0 );
+
+
+ /* Normalize error. */
+ lstres = 0.;
+ if ( notran && colequ ) {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, C[i] * fabs( Xptr[i]) );
+ } else if ( !notran && rowequ ) {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, R[i] * fabs( Xptr[i]) );
+ } else {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, fabs( Xptr[i]) );
+ }
+ if ( lstres != 0. )
+ ferr[j] /= lstres;
+
+ } /* for each RHS j ... */
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(rwork);
+ SUPERLU_FREE(iwork);
+ SUPERLU_FREE(Bjcol.Store);
+
+ return;
+
+} /* sgsrfs */
diff --git a/SuperLU_5.2.0/SRC/sgssv.c b/SuperLU_5.2.0/SRC/sgssv.c
new file mode 100644
index 0000000..9dd7096
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sgssv.c
@@ -0,0 +1,238 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * SGSSV solves the system of linear equations A*X=B, using the
+ * LU factorization from SGSTRF. It performs the following steps:
+ *
+ * 1. If A is stored column-wise (A->Stype = SLU_NC):
+ *
+ * 1.1. Permute the columns of A, forming A*Pc, where Pc
+ * is a permutation matrix. For more details of this step,
+ * see sp_preorder.c.
+ *
+ * 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.
+ *
+ * 1.3. Solve the system of equations A*X=B using the factored
+ * form of A.
+ *
+ * 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ * above algorithm to the transpose of A:
+ *
+ * 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 sp_preorder.c.
+ *
+ * 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.
+ *
+ * 2.3. Solve the system of equations A*X=B using the factored
+ * form of A.
+ *
+ * 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) 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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->RowPerm = MY_PERMR or
+ * options->Fact = SamePattern_SameRowPerm, perm_r is an
+ * input argument.
+ * otherwise it is an output argument.
+ *
+ * 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.
+ *
+ * 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;
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See util.h for the definition of 'SuperLUStat_t'.
+ *
+ * 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>
+ */
+
+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;
+ GlobalLU_t Glu; /* Not needed on return. */
+
+ /* Set default values for some parameters */
+ int panel_size; /* panel size */
+ int relax; /* no of columns in a relaxed snodes */
+ int permc_spec;
+ trans_t trans = NOTRANS;
+ double *utime;
+ double t; /* Temporary time */
+
+ /* Test the input parameters ... */
+ *info = 0;
+ Bstore = B->Store;
+ if ( options->Fact != DOFACT ) *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 ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_S || B->Mtype != SLU_GE )
+ *info = -7;
+ if ( *info != 0 ) {
+ i = -(*info);
+ input_error("sgssv", &i);
+ return;
+ }
+
+ 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);
+ trans = TRANS;
+ } else {
+ if ( A->Stype == SLU_NC ) AA = A;
+ }
+
+ t = SuperLU_timer_();
+ /*
+ * Get 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_() - t;
+
+ etree = intMalloc(A->ncol);
+
+ t = SuperLU_timer_();
+ sp_preorder(options, AA, perm_c, etree, &AC);
+ utime[ETREE] = SuperLU_timer_() - t;
+
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+
+ /*printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
+ relax, panel_size, sp_ienv(3), sp_ienv(4));*/
+ t = SuperLU_timer_();
+ /* Compute the LU factorization of A. */
+ sgstrf(options, &AC, relax, panel_size, etree,
+ NULL, lwork, perm_c, perm_r, L, U, &Glu, stat, info);
+ utime[FACT] = SuperLU_timer_() - t;
+
+ t = SuperLU_timer_();
+ if ( *info == 0 ) {
+ /* Solve the system A*X=B, overwriting B with X. */
+ sgstrs (trans, L, U, perm_c, perm_r, B, stat, info);
+ }
+ utime[SOLVE] = SuperLU_timer_() - t;
+
+ SUPERLU_FREE (etree);
+ Destroy_CompCol_Permuted(&AC);
+ if ( A->Stype == SLU_NR ) {
+ Destroy_SuperMatrix_Store(AA);
+ SUPERLU_FREE(AA);
+ }
+
+}
diff --git a/SuperLU_5.2.0/SRC/sgssvx.c b/SuperLU_5.2.0/SRC/sgssvx.c
new file mode 100644
index 0000000..c7aa79b
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sgssvx.c
@@ -0,0 +1,646 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * SGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ * the LU factorization from sgstrf(). Error bounds on the solution and
+ * a condition estimate are also provided. It performs the following steps:
+ *
+ * 1. If A is stored column-wise (A->Stype = SLU_NC):
+ *
+ * 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).
+ *
+ * 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 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.
+ *
+ * 1.6. The system of equations is solved for X using the factored form
+ * of A.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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, 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 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.
+ *
+ * 2.6. The system of equations is solved for X using the factored form
+ * of transpose(A).
+ *
+ * 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.
+ *
+ * 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.
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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: 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>
+ */
+
+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,
+ GlobalLU_t *Glu, 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;
+ 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;
+
+ /* 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);
+ if ( nofact ) {
+ *(unsigned char *)equed = 'N';
+ rowequ = FALSE;
+ colequ = FALSE;
+ } else {
+ rowequ = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ smlnum = smach("Safe minimum"); /* lamch_("Safe minimum"); */
+ bignum = 1. / smlnum;
+ }
+
+#if 0
+printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
+ options->Fact, options->Trans, *equed);
+#endif
+
+ /* 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 || strncmp(equed, "N", 1)==0) )
+ *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 ) *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;
+ }
+ 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) {
+ i = -(*info);
+ input_error("sgssvx", &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 && 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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ }
+ 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;
+
+/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
+ relax, panel_size, sp_ienv(3), sp_ienv(4));
+ fflush(stdout); */
+
+ /* Compute the LU factorization of A*Pc. */
+ t0 = SuperLU_timer_();
+ sgstrf(options, &AC, relax, panel_size, etree,
+ work, lwork, perm_c, perm_r, L, U, Glu, stat, info);
+ utime[FACT] = SuperLU_timer_() - t0;
+
+ if ( lwork == -1 ) {
+ mem_usage->total_needed = *info - A->ncol;
+ return;
+ }
+ }
+
+ if ( *info > 0 ) {
+ if ( *info <= A->ncol ) {
+ /* Compute the reciprocal pivot growth factor of the leading
+ rank-deficient (*info) columns of A. */
+ *recip_pivot_growth = sPivotGrowth(*info, AA, perm_c, L, U);
+ }
+ return;
+ }
+
+ /* *info == 0 at this point. */
+
+ if ( options->PivotGrowth ) {
+ /* 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 ) {
+ /* 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++)
+ 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;
+
+ /* Use iterative refinement to improve the computed solution and compute
+ error bounds and backward error estimates for it. */
+ t0 = SuperLU_timer_();
+ if ( options->IterRefine != NOREFINE ) {
+ sgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
+ X, ferr, berr, stat, &info1);
+ } else {
+ for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
+ }
+ utime[REFINE] = 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 < 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)
+ Xmat[i + j*ldx] *= R[i];
+ }
+ } /* 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 = A->ncol + 1;*/
+ if ( *rcond < smach("E") ) *info = A->ncol + 1;
+ }
+
+ if ( nofact ) {
+ sQuerySpace(L, U, mem_usage);
+ Destroy_CompCol_Permuted(&AC);
+ }
+ if ( A->Stype == SLU_NR ) {
+ Destroy_SuperMatrix_Store(AA);
+ SUPERLU_FREE(AA);
+ }
+
+}
diff --git a/SuperLU_5.2.0/SRC/sgstrf.c b/SuperLU_5.2.0/SRC/sgstrf.c
new file mode 100644
index 0000000..8d738bc
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sgstrf.c
@@ -0,0 +1,459 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_sdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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: 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.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ * m = number of rows in the matrix
+ * n = number of columns in the matrix
+ *
+ * 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.
+ *
+ * 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 spanel_dfs.c; marker2 is used for inner-factorization,
+ * see scolumn_dfs.c.
+ *
+ * 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 spanel_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_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,
+ GlobalLU_t *Glu, /* persistent to facilitate multiple factorizations */
+ 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 *iwork;
+ float *swork;
+ int *segrep, *repfnz, *parent, *xplore;
+ int *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+ int *xprune;
+ int *marker;
+ float *dense, *tempv;
+ int *relax_end;
+ float *a;
+ int *asub;
+ int *xa_begin, *xa_end;
+ int *xsup, *supno;
+ int *xlsub, *xlusup, *xusub;
+ int nzlumax;
+ float fill_ratio = sp_ienv(6); /* estimated fill ratio */
+
+ /* Local scalars */
+ fact_t fact = options->Fact;
+ double diag_pivot_thresh = options->DiagPivotThresh;
+ 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;
+
+ 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, fill_ratio, 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, &xprune, &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;
+
+ /* Identify relaxed snodes */
+ relax_end = (int *) intMalloc(n);
+ if ( options->SymmetricMode == YES ) {
+ heap_relax_snode(n, etree, relax, marker, relax_end);
+ } else {
+ relax_snode(n, etree, relax, marker, relax_end);
+ }
+
+ 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;
+
+ /*
+ * 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]++;
+
+ /* --------------------------------------
+ * Factorize the relaxed supernode(jcol:kcol)
+ * -------------------------------------- */
+ /* Determine the union of the row structure of the snode */
+ if ( (*info = ssnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+ xprune, 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;
+
+ /* Scatter into SPA dense[*] */
+ for (k = xa_begin[icol]; k < xa_end[icol]; k++)
+ dense[asub[k]] = a[k];
+
+ /* Numeric update within the snode */
+ ssnode_bmod(icol, jsupno, fsupc, dense, tempv, Glu, stat);
+
+ if ( (*info = spivotL(icol, diag_pivot_thresh, &usepr, perm_r,
+ iperm_r, iperm_c, &pivrow, Glu, stat)) )
+ if ( iinfo == 0 ) iinfo = *info;
+
+#ifdef DEBUG
+ sprint_lu_col("[1]: ", icol, pivrow, xprune, Glu);
+#endif
+
+ }
+
+ jcol = icol;
+
+ } 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 */
+ spanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+ dense, panel_lsub, segrep, repfnz, xprune,
+ 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 */
+
+ if ((*info = scolumn_dfs(m, jj, perm_r, &nseg, &panel_lsub[k],
+ segrep, &repfnz[k], xprune, marker,
+ parent, xplore, Glu)) != 0) return;
+
+ /* Numeric updates */
+ if ((*info = scolumn_bmod(jj, (nseg - nseg1), &dense[k],
+ tempv, &segrep[nseg1], &repfnz[k],
+ jcol, Glu, stat)) != 0) return;
+
+ /* Copy the U-segments to ucol[*] */
+ if ((*info = scopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+ perm_r, &dense[k], Glu)) != 0)
+ return;
+
+ if ( (*info = spivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+ iperm_r, iperm_c, &pivrow, Glu, stat)) )
+ if ( iinfo == 0 ) iinfo = *info;
+
+ /* Prune columns (0:jj-1) using column jj */
+ spruneL(jj, perm_r, pivrow, nseg, segrep,
+ &repfnz[k], xprune, Glu);
+
+ /* Reset repfnz[] for this column */
+ resetrep_col (nseg, segrep, &repfnz[k]);
+
+#ifdef DEBUG
+ sprint_lu_col("[2]: ", jj, pivrow, xprune, Glu);
+#endif
+
+ }
+
+ 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;
+ }
+ }
+
+ countnz(min_mn, xprune, &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 = (float *) 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 = (float *) Glu->ucol;
+ ((NCformat *)U->Store)->rowind = Glu->usub;
+ ((NCformat *)U->Store)->colptr = Glu->xusub;
+ } else {
+ sCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL,
+ (float *) 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,
+ (float *) 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);
+
+}
diff --git a/SuperLU_5.2.0/SRC/sgstrs.c b/SuperLU_5.2.0/SRC/sgstrs.c
new file mode 100644
index 0000000..b675073
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sgstrs.c
@@ -0,0 +1,347 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_sdefs.h"
+
+
+/*
+ * Function prototypes
+ */
+void susolve(int, int, float*, float*);
+void slsolve(int, int, float*, float*);
+void smatvec(int, int, int, float*, float*, float*);
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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.
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * 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)
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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_S, Mtype = SLU_GE.
+ * On entry, the right hand side matrix.
+ * On exit, the solution matrix if info = 0;
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See 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
+ * </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
+ int incx = 1, incy = 1;
+#ifdef USE_VENDOR_BLAS
+ float alpha = 1.0, beta = 1.0;
+ float *work_col;
+#endif
+ DNformat *Bstore;
+ float *Bmat;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ float *Lval, *Uval;
+ int fsupc, nrow, nsupr, nsupc, luptr, istart, irow;
+ int i, j, k, iptr, jcol, n, ldb, nrhs;
+ float *work, *rhs_work, *soln;
+ flops_t solve_ops;
+ void sprint_soln();
+
+ /* Test input parameters ... */
+ *info = 0;
+ Bstore = B->Store;
+ ldb = Bstore->lda;
+ nrhs = B->ncol;
+ if ( trans != NOTRANS && trans != TRANS && trans != CONJ ) *info = -1;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ||
+ L->Stype != SLU_SC || L->Dtype != SLU_S || L->Mtype != SLU_TRLU )
+ *info = -2;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ||
+ U->Stype != SLU_NC || U->Dtype != SLU_S || U->Mtype != SLU_TRU )
+ *info = -3;
+ else if ( ldb < SUPERLU_MAX(0, L->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_S || B->Mtype != SLU_GE )
+ *info = -6;
+ if ( *info ) {
+ i = -(*info);
+ input_error("sgstrs", &i);
+ return;
+ }
+
+ n = L->nrow;
+ work = floatCalloc(n * nrhs);
+ if ( !work ) ABORT("Malloc fails for local work[].");
+ soln = floatMalloc(n);
+ if ( !soln ) ABORT("Malloc fails for local soln[].");
+
+ Bmat = Bstore->nzval;
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+ solve_ops = 0;
+
+ if ( trans == NOTRANS ) {
+ /* 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
+ strsm_("L", "L", "N", "U", &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+
+ sgemm_( "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];
+ slsolve (nsupr, nsupc, &Lval[luptr], &rhs_work[fsupc]);
+ smatvec (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");
+ sprint_soln(n, nrhs, Bmat);
+#endif
+
+ /*
+ * Back solve Ux=y.
+ */
+ for (k = Lstore->nsuper; k >= 0; 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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += nsupc * (nsupc + 1) * nrhs;
+
+ if ( nsupc == 1 ) {
+ rhs_work = &Bmat[0];
+ for (j = 0; j < nrhs; j++) {
+ rhs_work[fsupc] /= Lval[luptr];
+ rhs_work += ldb;
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd("U", strlen("U"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ STRSM( ftcs1, ftcs2, ftcs3, ftcs3, &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+#else
+ strsm_("L", "U", "N", "N", &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+#endif
+#else
+ for (j = 0; j < nrhs; j++)
+ susolve ( nsupr, nsupc, &Lval[luptr], &Bmat[fsupc+j*ldb] );
+#endif
+ }
+
+ for (j = 0; j < nrhs; ++j) {
+ rhs_work = &Bmat[j*ldb];
+ for (jcol = fsupc; jcol < fsupc + nsupc; jcol++) {
+ solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++ ){
+ irow = U_SUB(i);
+ rhs_work[irow] -= rhs_work[jcol] * Uval[i];
+ }
+ }
+ }
+
+ } /* for U-solve */
+
+#ifdef DEBUG
+ printf("After U-solve: x=\n");
+ sprint_soln(n, nrhs, Bmat);
+#endif
+
+ /* Compute the final solution X := Pc*X. */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[k] = rhs_work[perm_c[k]];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ stat->ops[SOLVE] = solve_ops;
+
+ } else { /* Solve A'*X=B or CONJ(A)*X=B */
+ /* Permute right hand sides to form Pc'*B. */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[perm_c[k]] = rhs_work[k];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ stat->ops[SOLVE] = 0;
+ for (k = 0; k < nrhs; ++k) {
+
+ /* Multiply by inv(U'). */
+ sp_strsv("U", "T", "N", L, U, &Bmat[k*ldb], stat, info);
+
+ /* Multiply by inv(L'). */
+ sp_strsv("L", "T", "U", L, U, &Bmat[k*ldb], stat, info);
+
+ }
+ /* Compute the final solution X := Pr'*X (=inv(Pr)*X) */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[k] = rhs_work[perm_r[k]];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ }
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(soln);
+}
+
+/*
+ * Diagnostic print of the solution vector
+ */
+void
+sprint_soln(int n, int nrhs, float *soln)
+{
+ int i;
+
+ for (i = 0; i < n; i++)
+ printf("\t%d: %.4f\n", i, soln[i]);
+}
diff --git a/SuperLU_5.2.0/SRC/slacon.c b/SuperLU_5.2.0/SRC/slacon.c
new file mode 100644
index 0000000..2906efc
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slacon.c
@@ -0,0 +1,247 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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)
+
+{
+
+
+ /* Table of constant values */
+ int c__1 = 1;
+ float zero = 0.0;
+ float one = 1.0;
+
+ /* Local variables */
+ static int jump;
+ int jlast;
+ int iter;
+ float altsgn, estold;
+ int i, j;
+ float temp;
+#ifdef _CRAY
+ extern int ISAMAX(int *, float *, int *);
+ extern float SASUM(int *, float *, int *);
+ extern int SCOPY(int *, float *, int *, float *, int *);
+#else
+ extern int isamax_(int *, float *, int *);
+ extern float sasum_(int *, float *, int *);
+ extern int scopy_(int *, float *, int *, float *, int *);
+#endif
+#define d_sign(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */
+#define i_dnnt(a) \
+ ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */
+
+ if ( *kase == 0 ) {
+ for (i = 0; i < *n; ++i) {
+ x[i] = 1. / (float) (*n);
+ }
+ *kase = 1;
+ jump = 1;
+ return 0;
+ }
+
+ switch (jump) {
+ case 1: goto L20;
+ case 2: goto L40;
+ case 3: goto L70;
+ case 4: goto L110;
+ case 5: goto L140;
+ }
+
+ /* ................ ENTRY (JUMP = 1)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
+ L20:
+ if (*n == 1) {
+ v[0] = x[0];
+ *est = fabs(v[0]);
+ /* ... QUIT */
+ goto L150;
+ }
+#ifdef _CRAY
+ *est = SASUM(n, x, &c__1);
+#else
+ *est = sasum_(n, x, &c__1);
+#endif
+
+ for (i = 0; i < *n; ++i) {
+ x[i] = d_sign(one, x[i]);
+ isgn[i] = i_dnnt(x[i]);
+ }
+ *kase = 2;
+ jump = 2;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 2)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
+L40:
+#ifdef _CRAY
+ j = ISAMAX(n, &x[0], &c__1);
+#else
+ j = isamax_(n, &x[0], &c__1);
+#endif
+ --j;
+ iter = 2;
+
+ /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
+L50:
+ for (i = 0; i < *n; ++i) x[i] = zero;
+ x[j] = one;
+ *kase = 1;
+ jump = 3;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 3)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L70:
+#ifdef _CRAY
+ SCOPY(n, x, &c__1, v, &c__1);
+#else
+ scopy_(n, x, &c__1, v, &c__1);
+#endif
+ estold = *est;
+#ifdef _CRAY
+ *est = SASUM(n, v, &c__1);
+#else
+ *est = sasum_(n, v, &c__1);
+#endif
+
+ for (i = 0; i < *n; ++i)
+ if (i_dnnt(d_sign(one, x[i])) != isgn[i])
+ goto L90;
+
+ /* REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED. */
+ goto L120;
+
+L90:
+ /* TEST FOR CYCLING. */
+ if (*est <= estold) goto L120;
+
+ for (i = 0; i < *n; ++i) {
+ x[i] = d_sign(one, x[i]);
+ isgn[i] = i_dnnt(x[i]);
+ }
+ *kase = 2;
+ jump = 4;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 4)
+ X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
+L110:
+ jlast = j;
+#ifdef _CRAY
+ j = ISAMAX(n, &x[0], &c__1);
+#else
+ j = isamax_(n, &x[0], &c__1);
+#endif
+ --j;
+ if (x[jlast] != fabs(x[j]) && iter < 5) {
+ ++iter;
+ goto L50;
+ }
+
+ /* ITERATION COMPLETE. FINAL STAGE. */
+L120:
+ altsgn = 1.;
+ for (i = 1; i <= *n; ++i) {
+ x[i-1] = altsgn * ((float)(i - 1) / (float)(*n - 1) + 1.);
+ altsgn = -altsgn;
+ }
+ *kase = 1;
+ jump = 5;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 5)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L140:
+#ifdef _CRAY
+ temp = SASUM(n, x, &c__1) / (float)(*n * 3) * 2.;
+#else
+ temp = sasum_(n, x, &c__1) / (float)(*n * 3) * 2.;
+#endif
+ if (temp > *est) {
+#ifdef _CRAY
+ SCOPY(n, &x[0], &c__1, &v[0], &c__1);
+#else
+ scopy_(n, &x[0], &c__1, &v[0], &c__1);
+#endif
+ *est = temp;
+ }
+
+L150:
+ *kase = 0;
+ return 0;
+
+} /* slacon_ */
diff --git a/SuperLU_5.2.0/SRC/slacon2.c b/SuperLU_5.2.0/SRC/slacon2.c
new file mode 100644
index 0000000..7c93341
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slacon2.c
@@ -0,0 +1,254 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file slacon2.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * July 25, 2015
+ * </pre>
+ */
+#include <math.h>
+#include "slu_Cnames.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * SLACON2 estimates the 1-norm of a square matrix A.
+ * Reverse communication is used for evaluating matrix-vector products.
+ *
+ * This is a thread safe version of SLACON, which uses the array ISAVE
+ * in place of a STATIC variables, as follows:
+ *
+ * SLACON SLACON2
+ * jump isave[0]
+ * j isave[1]
+ * iter isave[2]
+ *
+ *
+ * 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.
+ *
+ * isave (input/output) int [3]
+ * ISAVE is INTEGER array, dimension (3)
+ * ISAVE is used to save variables between calls to SLACON2
+ *
+ * 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
+slacon2_(int *n, float *v, float *x, int *isgn, float *est, int *kase, int isave[3])
+{
+ /* Table of constant values */
+ int c__1 = 1;
+ float zero = 0.0;
+ float one = 1.0;
+
+ /* Local variables */
+ int jlast;
+ float altsgn, estold;
+ int i;
+ float temp;
+#ifdef _CRAY
+ extern int ISAMAX(int *, float *, int *);
+ extern float SASUM(int *, float *, int *);
+ extern int SCOPY(int *, float *, int *, float *, int *);
+#else
+ extern int isamax_(int *, float *, int *);
+ extern float sasum_(int *, float *, int *);
+ extern int scopy_(int *, float *, int *, float *, int *);
+#endif
+#define d_sign(a, b) (b >= 0 ? fabs(a) : -fabs(a)) /* Copy sign */
+#define i_dnnt(a) \
+ ( a>=0 ? floor(a+.5) : -floor(.5-a) ) /* Round to nearest integer */
+
+ if ( *kase == 0 ) {
+ for (i = 0; i < *n; ++i) {
+ x[i] = 1. / (float) (*n);
+ }
+ *kase = 1;
+ isave[0] = 1; /* jump = 1; */
+ return 0;
+ }
+
+ switch (isave[0]) {
+ case 1: goto L20;
+ case 2: goto L40;
+ case 3: goto L70;
+ case 4: goto L110;
+ case 5: goto L140;
+ }
+
+ /* ................ ENTRY (isave[0] = 1)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
+ L20:
+ if (*n == 1) {
+ v[0] = x[0];
+ *est = fabs(v[0]);
+ /* ... QUIT */
+ goto L150;
+ }
+#ifdef _CRAY
+ *est = SASUM(n, x, &c__1);
+#else
+ *est = sasum_(n, x, &c__1);
+#endif
+
+ for (i = 0; i < *n; ++i) {
+ x[i] = d_sign(one, x[i]);
+ isgn[i] = i_dnnt(x[i]);
+ }
+ *kase = 2;
+ isave[0] = 2; /* jump = 2; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 2)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
+L40:
+#ifdef _CRAY
+ isave[1] = ISAMAX(n, &x[0], &c__1); /* j */
+#else
+ isave[1] = idamax_(n, &x[0], &c__1); /* j */
+#endif
+ --isave[1]; /* --j; */
+ isave[2] = 2; /* iter = 2; */
+
+ /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
+L50:
+ for (i = 0; i < *n; ++i) x[i] = zero;
+ x[isave[1]] = one;
+ *kase = 1;
+ isave[0] = 3; /* jump = 3; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 3)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L70:
+#ifdef _CRAY
+ SCOPY(n, x, &c__1, v, &c__1);
+#else
+ scopy_(n, x, &c__1, v, &c__1);
+#endif
+ estold = *est;
+#ifdef _CRAY
+ *est = SASUM(n, v, &c__1);
+#else
+ *est = sasum_(n, v, &c__1);
+#endif
+
+ for (i = 0; i < *n; ++i)
+ if (i_dnnt(d_sign(one, x[i])) != isgn[i])
+ goto L90;
+
+ /* REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED. */
+ goto L120;
+
+L90:
+ /* TEST FOR CYCLING. */
+ if (*est <= estold) goto L120;
+
+ for (i = 0; i < *n; ++i) {
+ x[i] = d_sign(one, x[i]);
+ isgn[i] = i_dnnt(x[i]);
+ }
+ *kase = 2;
+ isave[0] = 4; /* jump = 4; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 4)
+ X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
+L110:
+ jlast = isave[1]; /* j; */
+#ifdef _CRAY
+ isave[1] = ISAMAX(n, &x[0], &c__1); /* j */
+#else
+ isave[1] = isamax_(n, &x[0], &c__1); /* j */
+#endif
+ isave[1] = isave[1] - 1; /* --j; */
+ if (x[jlast] != fabs(x[isave[1]]) && isave[2] < 5) {
+ isave[2] = isave[2] + 1; /* ++iter; */
+ goto L50;
+ }
+
+ /* ITERATION COMPLETE. FINAL STAGE. */
+L120:
+ altsgn = 1.;
+ for (i = 1; i <= *n; ++i) {
+ x[i-1] = altsgn * ((float)(i - 1) / (float)(*n - 1) + 1.);
+ altsgn = -altsgn;
+ }
+ *kase = 1;
+ isave[0] = 5; /* jump = 5; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 5)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L140:
+#ifdef _CRAY
+ temp = SASUM(n, x, &c__1) / (float)(*n * 3) * 2.;
+#else
+ temp = sasum_(n, x, &c__1) / (float)(*n * 3) * 2.;
+#endif
+ if (temp > *est) {
+#ifdef _CRAY
+ SCOPY(n, &x[0], &c__1, &v[0], &c__1);
+#else
+ scopy_(n, &x[0], &c__1, &v[0], &c__1);
+#endif
+ *est = temp;
+ }
+
+L150:
+ *kase = 0;
+ return 0;
+
+} /* slacon_ */
diff --git a/SuperLU_5.2.0/SRC/slangs.c b/SuperLU_5.2.0/SRC/slangs.c
new file mode 100644
index 0000000..9219082
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slangs.c
@@ -0,0 +1,129 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from lapack routine SLANGE
+ */
+#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)
+{
+
+ /* Local variables */
+ NCformat *Astore;
+ float *Aval;
+ int i, j, irow;
+ float value, sum;
+ float *rwork;
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ if ( SUPERLU_MIN(A->nrow, A->ncol) == 0) {
+ value = 0.;
+
+ } else if (strncmp(norm, "M", 1)==0) {
+ /* Find max(abs(A(i,j))). */
+ value = 0.;
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
+ value = SUPERLU_MAX( value, fabs( Aval[i]) );
+
+ } else if (strncmp(norm, "O", 1)==0 || *(unsigned char *)norm == '1') {
+ /* Find norm1(A). */
+ value = 0.;
+ for (j = 0; j < A->ncol; ++j) {
+ sum = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
+ sum += fabs(Aval[i]);
+ value = SUPERLU_MAX(value,sum);
+ }
+
+ } else if (strncmp(norm, "I", 1)==0) {
+ /* Find normI(A). */
+ if ( !(rwork = (float *) SUPERLU_MALLOC(A->nrow * sizeof(float))) )
+ ABORT("SUPERLU_MALLOC fails for rwork.");
+ for (i = 0; i < A->nrow; ++i) rwork[i] = 0.;
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++) {
+ irow = Astore->rowind[i];
+ rwork[irow] += fabs(Aval[i]);
+ }
+ value = 0.;
+ for (i = 0; i < A->nrow; ++i)
+ value = SUPERLU_MAX(value, rwork[i]);
+
+ SUPERLU_FREE (rwork);
+
+ } else if (strncmp(norm, "F", 1)==0 || strncmp(norm, "E", 1)==0) {
+ /* Find normF(A). */
+ ABORT("Not implemented.");
+ } else
+ ABORT("Illegal norm specified.");
+
+ return (value);
+
+} /* slangs */
+
diff --git a/SuperLU_5.2.0/SRC/slaqgs.c b/SuperLU_5.2.0/SRC/slaqgs.c
new file mode 100644
index 0000000..f6a15bb
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slaqgs.c
@@ -0,0 +1,155 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from LAPACK routine SLAQGE
+ */
+#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)
+{
+
+
+#define THRESH (0.1)
+
+ /* Local variables */
+ NCformat *Astore;
+ float *Aval;
+ int i, j, irow;
+ float large, small, cj;
+
+
+ /* Quick return if possible */
+ if (A->nrow <= 0 || A->ncol <= 0) {
+ *(unsigned char *)equed = 'N';
+ return;
+ }
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Initialize LARGE and SMALL. */
+ small = smach("Safe minimum") / smach("Precision");
+ large = 1. / small;
+
+ if (rowcnd >= THRESH && amax >= small && amax <= large) {
+ if (colcnd >= THRESH)
+ *(unsigned char *)equed = 'N';
+ else {
+ /* Column scaling */
+ for (j = 0; j < A->ncol; ++j) {
+ cj = c[j];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ Aval[i] *= cj;
+ }
+ }
+ *(unsigned char *)equed = 'C';
+ }
+ } else if (colcnd >= THRESH) {
+ /* Row scaling, no column scaling */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ Aval[i] *= r[irow];
+ }
+ *(unsigned char *)equed = 'R';
+ } else {
+ /* Row and column scaling */
+ for (j = 0; j < A->ncol; ++j) {
+ cj = c[j];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ Aval[i] *= cj * r[irow];
+ }
+ }
+ *(unsigned char *)equed = 'B';
+ }
+
+ return;
+
+} /* slaqgs */
+
diff --git a/SuperLU_5.2.0/SRC/sldperm.c b/SuperLU_5.2.0/SRC/sldperm.c
new file mode 100644
index 0000000..3b257c6
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sldperm.c
@@ -0,0 +1,178 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/slu_Cnames.h b/SuperLU_5.2.0/SRC/slu_Cnames.h
new file mode 100644
index 0000000..1d73d82
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slu_Cnames.h
@@ -0,0 +1,452 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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
+ *
+ * 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>
+ */
+#ifndef __SUPERLU_CNAMES /* allow multiple inclusions */
+#define __SUPERLU_CNAMES
+
+
+#define ADD_ 0
+#define ADD__ 1
+#define NOCHANGE 2
+#define UPCASE 3
+#define OLD_CRAY 4
+#define C_CALL 5
+
+#ifdef UpCase
+#define F77_CALL_C UPCASE
+#endif
+
+#ifdef NoChange
+#define F77_CALL_C NOCHANGE
+#endif
+
+#ifdef Add_
+#define F77_CALL_C ADD_
+#endif
+
+#ifdef 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_
+#endif
+
+
+#if (F77_CALL_C == ADD_)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine
+ * No redefinition necessary to have following Fortran to C interface:
+ * FORTRAN CALL C DECLARATION
+ * call dgemm(...) void dgemm_(...)
+ *
+ * This is the default.
+ */
+
+#endif
+
+#if (F77_CALL_C == ADD__)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine
+ * for following Fortran to C interface:
+ * FORTRAN CALL C DECLARATION
+ * call dgemm(...) void dgemm__(...)
+ */
+/* 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 saxpy_ saxpy__
+#define ssyr2_ ssyr2__
+#define srot_ srot__
+#define sgemv_ sgemv__
+#define strsv_ strsv__
+#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 caxpy_ caxpy__
+#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 zaxpy_ zaxpy__
+#define zgemv_ zgemv__
+#define ztrsv_ ztrsv__
+#define zgemm_ zgemm__
+#define ztrsm_ ztrsm__
+#define zgerc_ zgerc__
+#define zhemv_ zhemv__
+#define zher2_ zher2__
+
+/* LAPACK */
+#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 == UPCASE)
+/*
+ * 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 DGEMM(...)
+ */
+/* 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 saxpy_ SAXPY
+#define ssyr2_ SSYR2
+#define srot_ SROT
+#define sgemv_ SGEMV
+#define strsv_ STRSV
+#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 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
+#define dscal_ SSCAL
+#define dger_ SGER
+#define dnrm2_ SNRM2
+#define dsymv_ SSYMV
+#define ddot_ SDOT
+#define dsyr2_ SSYR2
+#define drot_ SROT
+#define dgemv_ SGEMV
+#define dtrsv_ STRSV
+#define dgemm_ SGEMM
+#define dtrsm_ STRSM
+
+#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
+#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 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 == NOCHANGE)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine
+ * for following Fortran to C interface:
+ * FORTRAN CALL C DECLARATION
+ * call dgemm(...) void dgemm(...)
+ */
+/* 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 saxpy_ saxpy
+#define ssyr2_ ssyr2
+#define srot_ srot
+#define sgemv_ sgemv
+#define strsv_ strsv
+#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 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
+
+
+#endif /* __SUPERLU_CNAMES */
diff --git a/SuperLU_5.2.0/SRC/slu_cdefs.h b/SuperLU_5.2.0/SRC/slu_cdefs.h
new file mode 100644
index 0000000..b1d7dd8
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slu_cdefs.h
@@ -0,0 +1,285 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * November, 2010
+ *
+ * Global data structures used in LU factorization -
+ *
+ * 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
+ *
+ * (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
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * The last column structures (for pruning) will be removed
+ * after the numercial LU factorization phase.
+ *
+ * (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.
+ *
+ * (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>
+ */
+#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>
+#endif
+
+/* Define my integer type int_t */
+typedef int int_t; /* default */
+
+#include <math.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "slu_Cnames.h"
+#include "supermatrix.h"
+#include "slu_util.h"
+#include "slu_scomplex.h"
+
+
+/* -------- Prototypes -------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! \brief Driver routines */
+extern void
+cgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
+ SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
+extern void
+cgssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
+ char *, float *, float *, SuperMatrix *, SuperMatrix *,
+ void *, int, SuperMatrix *, SuperMatrix *,
+ float *, float *, float *, float *,
+ GlobalLU_t *, 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 *,
+ GlobalLU_t *, mem_usage_t *, SuperLUStat_t *, int *);
+
+
+/*! \brief Supernodal LU factor related */
+extern void
+cCreate_CompCol_Matrix(SuperMatrix *, int, int, int, complex *,
+ int *, int *, Stype_t, Dtype_t, Mtype_t);
+extern void
+cCreate_CompRow_Matrix(SuperMatrix *, int, int, int, complex *,
+ int *, int *, Stype_t, Dtype_t, Mtype_t);
+extern void
+cCopy_CompCol_Matrix(SuperMatrix *, SuperMatrix *);
+extern void
+cCreate_Dense_Matrix(SuperMatrix *, int, int, complex *, int,
+ Stype_t, Dtype_t, Mtype_t);
+extern void
+cCreate_SuperNode_Matrix(SuperMatrix *, int, int, int, complex *,
+ int *, int *, int *, int *, int *,
+ Stype_t, Dtype_t, Mtype_t);
+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*,
+ int, int, int*, void *, int, int *, int *,
+ SuperMatrix *, SuperMatrix *, GlobalLU_t *,
+ SuperLUStat_t*, int *);
+extern int csnode_dfs (const int, const int, const int *, const int *,
+ const int *, int *, int *, GlobalLU_t *);
+extern int csnode_bmod (const int, const int, const int, complex *,
+ complex *, GlobalLU_t *, SuperLUStat_t*);
+extern void cpanel_dfs (const int, const int, const int, SuperMatrix *,
+ int *, int *, complex *, int *, int *, int *,
+ int *, int *, int *, int *, GlobalLU_t *);
+extern void cpanel_bmod (const int, const int, const int, const int,
+ complex *, complex *, int *, int *,
+ GlobalLU_t *, SuperLUStat_t*);
+extern int ccolumn_dfs (const int, const int, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *, GlobalLU_t *);
+extern int ccolumn_bmod (const int, const int, complex *,
+ complex *, int *, int *, int,
+ GlobalLU_t *, SuperLUStat_t*);
+extern int ccopy_to_ucol (int, int, int *, int *, int *,
+ complex *, GlobalLU_t *);
+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 *);
+extern void creadmt (int *, int *, int *, complex **, int **, int **);
+extern void cGenXtrue (int, int, complex *, int);
+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 *,
+ GlobalLU_t *, 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);
+
+
+/*! \brief Driver related */
+
+extern void cgsequ (SuperMatrix *, float *, float *, float *,
+ float *, float *, int *);
+extern void claqgs (SuperMatrix *, float *, float *, float,
+ float, float, char *);
+extern void cgscon (char *, SuperMatrix *, SuperMatrix *,
+ float, float *, SuperLUStat_t*, int *);
+extern float cPivotGrowth(int, SuperMatrix *, int *,
+ SuperMatrix *, SuperMatrix *);
+extern void cgsrfs (trans_t, SuperMatrix *, SuperMatrix *,
+ SuperMatrix *, int *, int *, char *, float *,
+ float *, SuperMatrix *, SuperMatrix *,
+ float *, float *, SuperLUStat_t*, int *);
+
+extern int sp_ctrsv (char *, char *, char *, SuperMatrix *,
+ SuperMatrix *, complex *, SuperLUStat_t*, int *);
+extern int sp_cgemv (char *, complex, SuperMatrix *, complex *,
+ int, complex, complex *, int);
+
+extern int sp_cgemm (char *, char *, int, int, int, complex,
+ SuperMatrix *, complex *, int, complex,
+ complex *, int);
+extern float smach(char *); /* from C99 standard, in float.h */
+
+/*! \brief Memory-related */
+extern int cLUMemInit (fact_t, void *, int, int, int, int, int,
+ 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 *);
+
+extern complex *complexMalloc(int);
+extern complex *complexCalloc(int);
+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 *);
+
+/*! \brief Auxiliary routines */
+extern void creadhb(FILE *, 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 float sqselect(int, float *, int);
+
+
+/*! \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 cprint_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern int print_double_vec(char *, int, double *);
+extern void ccheck_tempv(int, complex *);
+
+/*! \brief BLAS */
+
+extern int cgemm_(const char*, const char*, const int*, const int*, const int*,
+ const complex*, const complex*, const int*, const complex*,
+ const int*, const complex*, complex*, const int*);
+extern int ctrsv_(char*, char*, char*, int*, complex*, int*,
+ complex*, int*);
+extern int ctrsm_(char*, char*, char*, char*, int*, int*,
+ complex*, complex*, int*, complex*, int*);
+extern int cgemv_(char *, int *, int *, complex *, complex *a, int *,
+ complex *, int *, complex *, complex *, int *);
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __SUPERLU_cSP_DEFS */
+
diff --git a/SuperLU_5.2.0/SRC/slu_dcomplex.h b/SuperLU_5.2.0/SRC/slu_dcomplex.h
new file mode 100644
index 0000000..67e83bc
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slu_dcomplex.h
@@ -0,0 +1,88 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+
+
+#ifndef DCOMPLEX_INCLUDE
+#define DCOMPLEX_INCLUDE
+
+typedef struct { double r, i; } doublecomplex;
+
+
+/* Macro definitions */
+
+/*! \brief Complex Addition c = a + b */
+#define z_add(c, a, b) { (c)->r = (a)->r + (b)->r; \
+ (c)->i = (a)->i + (b)->i; }
+
+/*! \brief Complex Subtraction c = a - b */
+#define z_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \
+ (c)->i = (a)->i - (b)->i; }
+
+/*! \brief Complex-Double Multiplication */
+#define zd_mult(c, a, b) { (c)->r = (a)->r * (b); \
+ (c)->i = (a)->i * (b); }
+
+/*! \brief Complex-Complex Multiplication */
+#define zz_mult(c, a, b) { \
+ double 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; \
+ }
+
+#define zz_conj(a, b) { \
+ (a)->r = (b)->r; \
+ (a)->i = -((b)->i); \
+ }
+
+/*! \brief Complex equality testing */
+#define z_eq(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i )
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Prototypes for functions in dcomplex.c */
+void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
+double z_abs(doublecomplex *); /* exact */
+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
+ }
+#endif
+
+#endif
+
+#endif /* __SUPERLU_DCOMPLEX */
diff --git a/SuperLU_5.2.0/SRC/slu_ddefs.h b/SuperLU_5.2.0/SRC/slu_ddefs.h
new file mode 100644
index 0000000..07ea555
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slu_ddefs.h
@@ -0,0 +1,282 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * November, 2010
+ *
+ * Global data structures used in LU factorization -
+ *
+ * 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
+ *
+ * (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
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * The last column structures (for pruning) will be removed
+ * after the numercial LU factorization phase.
+ *
+ * (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.
+ *
+ * (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>
+ */
+#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>
+#endif
+
+/* Define my integer type int_t */
+typedef int int_t; /* default */
+
+#include <math.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "slu_Cnames.h"
+#include "supermatrix.h"
+#include "slu_util.h"
+
+
+/* -------- Prototypes -------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! \brief Driver routines */
+extern void
+dgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
+ SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
+extern void
+dgssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
+ char *, double *, double *, SuperMatrix *, SuperMatrix *,
+ void *, int, SuperMatrix *, SuperMatrix *,
+ double *, double *, double *, double *,
+ GlobalLU_t *, 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 *,
+ GlobalLU_t *, mem_usage_t *, SuperLUStat_t *, int *);
+
+
+/*! \brief Supernodal LU factor related */
+extern void
+dCreate_CompCol_Matrix(SuperMatrix *, int, int, int, double *,
+ int *, int *, Stype_t, Dtype_t, Mtype_t);
+extern void
+dCreate_CompRow_Matrix(SuperMatrix *, int, int, int, double *,
+ int *, int *, Stype_t, Dtype_t, Mtype_t);
+extern void
+dCopy_CompCol_Matrix(SuperMatrix *, SuperMatrix *);
+extern void
+dCreate_Dense_Matrix(SuperMatrix *, int, int, double *, int,
+ Stype_t, Dtype_t, Mtype_t);
+extern void
+dCreate_SuperNode_Matrix(SuperMatrix *, int, int, int, double *,
+ int *, int *, int *, int *, int *,
+ Stype_t, Dtype_t, Mtype_t);
+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*,
+ int, int, int*, void *, int, int *, int *,
+ SuperMatrix *, SuperMatrix *, GlobalLU_t *,
+ SuperLUStat_t*, int *);
+extern int dsnode_dfs (const int, const int, const int *, const int *,
+ const int *, int *, int *, GlobalLU_t *);
+extern int dsnode_bmod (const int, const int, const int, double *,
+ double *, GlobalLU_t *, SuperLUStat_t*);
+extern void dpanel_dfs (const int, const int, const int, SuperMatrix *,
+ int *, int *, double *, int *, int *, int *,
+ int *, int *, int *, int *, GlobalLU_t *);
+extern void dpanel_bmod (const int, const int, const int, const int,
+ double *, double *, int *, int *,
+ GlobalLU_t *, SuperLUStat_t*);
+extern int dcolumn_dfs (const int, const int, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *, GlobalLU_t *);
+extern int dcolumn_bmod (const int, const int, double *,
+ double *, int *, int *, int,
+ GlobalLU_t *, SuperLUStat_t*);
+extern int dcopy_to_ucol (int, int, int *, int *, int *,
+ double *, GlobalLU_t *);
+extern int dpivotL (const int, const double, int *, int *,
+ int *, int *, int *, GlobalLU_t *, SuperLUStat_t*);
+extern void dpruneL (const int, const int *, const int, const int,
+ const int *, const int *, int *, GlobalLU_t *);
+extern void dreadmt (int *, int *, int *, double **, int **, int **);
+extern void dGenXtrue (int, int, double *, int);
+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 *,
+ GlobalLU_t *, 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);
+
+
+/*! \brief Driver related */
+
+extern void dgsequ (SuperMatrix *, double *, double *, double *,
+ double *, double *, int *);
+extern void dlaqgs (SuperMatrix *, double *, double *, double,
+ double, double, char *);
+extern void dgscon (char *, SuperMatrix *, SuperMatrix *,
+ double, double *, SuperLUStat_t*, int *);
+extern double dPivotGrowth(int, SuperMatrix *, int *,
+ SuperMatrix *, SuperMatrix *);
+extern void dgsrfs (trans_t, SuperMatrix *, SuperMatrix *,
+ SuperMatrix *, int *, int *, char *, double *,
+ double *, SuperMatrix *, SuperMatrix *,
+ double *, double *, SuperLUStat_t*, int *);
+
+extern int sp_dtrsv (char *, char *, char *, SuperMatrix *,
+ SuperMatrix *, double *, SuperLUStat_t*, int *);
+extern int sp_dgemv (char *, double, SuperMatrix *, double *,
+ int, double, double *, int);
+
+extern int sp_dgemm (char *, char *, int, int, int, double,
+ SuperMatrix *, double *, int, double,
+ double *, int);
+extern double dmach(char *); /* from C99 standard, in float.h */
+
+/*! \brief Memory-related */
+extern int dLUMemInit (fact_t, void *, int, int, int, int, int,
+ 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 *);
+
+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 *);
+
+/*! \brief Auxiliary routines */
+extern void dreadhb(FILE *, 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 double dqselect(int, double *, int);
+
+
+/*! \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 dprint_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern int print_double_vec(char *, int, double *);
+extern void dcheck_tempv(int, double *);
+
+/*! \brief BLAS */
+
+extern int dgemm_(const char*, const char*, const int*, const int*, const int*,
+ const double*, const double*, const int*, const double*,
+ const int*, const double*, double*, const int*);
+extern int dtrsv_(char*, char*, char*, int*, double*, int*,
+ double*, int*);
+extern int dtrsm_(char*, char*, char*, char*, int*, int*,
+ double*, double*, int*, double*, int*);
+extern int dgemv_(char *, int *, int *, double *, double *a, int *,
+ double *, int *, double *, double *, int *);
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __SUPERLU_dSP_DEFS */
+
diff --git a/SuperLU_5.2.0/SRC/slu_scomplex.h b/SuperLU_5.2.0/SRC/slu_scomplex.h
new file mode 100644
index 0000000..5c9aa70
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slu_scomplex.h
@@ -0,0 +1,88 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+
+
+#ifndef SCOMPLEX_INCLUDE
+#define SCOMPLEX_INCLUDE
+
+typedef struct { float r, i; } complex;
+
+
+/* Macro definitions */
+
+/*! \brief Complex Addition c = a + b */
+#define c_add(c, a, b) { (c)->r = (a)->r + (b)->r; \
+ (c)->i = (a)->i + (b)->i; }
+
+/*! \brief Complex Subtraction c = a - b */
+#define c_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \
+ (c)->i = (a)->i - (b)->i; }
+
+/*! \brief Complex-Double Multiplication */
+#define cs_mult(c, a, b) { (c)->r = (a)->r * (b); \
+ (c)->i = (a)->i * (b); }
+
+/*! \brief Complex-Complex Multiplication */
+#define cc_mult(c, a, b) { \
+ float 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; \
+ }
+
+#define cc_conj(a, b) { \
+ (a)->r = (b)->r; \
+ (a)->i = -((b)->i); \
+ }
+
+/*! \brief Complex equality testing */
+#define c_eq(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i )
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Prototypes for functions in scomplex.c */
+void c_div(complex *, complex *, complex *);
+double c_abs(complex *); /* exact */
+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
+ }
+#endif
+
+#endif
+
+#endif /* __SUPERLU_SCOMPLEX */
diff --git a/SuperLU_5.2.0/SRC/slu_sdefs.h b/SuperLU_5.2.0/SRC/slu_sdefs.h
new file mode 100644
index 0000000..ab06370
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slu_sdefs.h
@@ -0,0 +1,282 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * November, 2010
+ *
+ * Global data structures used in LU factorization -
+ *
+ * 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
+ *
+ * (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
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * The last column structures (for pruning) will be removed
+ * after the numercial LU factorization phase.
+ *
+ * (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.
+ *
+ * (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>
+ */
+#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>
+#endif
+
+/* Define my integer type int_t */
+typedef int int_t; /* default */
+
+#include <math.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "slu_Cnames.h"
+#include "supermatrix.h"
+#include "slu_util.h"
+
+
+/* -------- Prototypes -------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! \brief Driver routines */
+extern void
+sgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
+ SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
+extern void
+sgssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
+ char *, float *, float *, SuperMatrix *, SuperMatrix *,
+ void *, int, SuperMatrix *, SuperMatrix *,
+ float *, float *, float *, float *,
+ GlobalLU_t *, 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 *,
+ GlobalLU_t *, mem_usage_t *, SuperLUStat_t *, int *);
+
+
+/*! \brief Supernodal LU factor related */
+extern void
+sCreate_CompCol_Matrix(SuperMatrix *, int, int, int, float *,
+ int *, int *, Stype_t, Dtype_t, Mtype_t);
+extern void
+sCreate_CompRow_Matrix(SuperMatrix *, int, int, int, float *,
+ int *, int *, Stype_t, Dtype_t, Mtype_t);
+extern void
+sCopy_CompCol_Matrix(SuperMatrix *, SuperMatrix *);
+extern void
+sCreate_Dense_Matrix(SuperMatrix *, int, int, float *, int,
+ Stype_t, Dtype_t, Mtype_t);
+extern void
+sCreate_SuperNode_Matrix(SuperMatrix *, int, int, int, float *,
+ int *, int *, int *, int *, int *,
+ Stype_t, Dtype_t, Mtype_t);
+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*,
+ int, int, int*, void *, int, int *, int *,
+ SuperMatrix *, SuperMatrix *, GlobalLU_t *,
+ SuperLUStat_t*, int *);
+extern int ssnode_dfs (const int, const int, const int *, const int *,
+ const int *, int *, int *, GlobalLU_t *);
+extern int ssnode_bmod (const int, const int, const int, float *,
+ float *, GlobalLU_t *, SuperLUStat_t*);
+extern void spanel_dfs (const int, const int, const int, SuperMatrix *,
+ int *, int *, float *, int *, int *, int *,
+ int *, int *, int *, int *, GlobalLU_t *);
+extern void spanel_bmod (const int, const int, const int, const int,
+ float *, float *, int *, int *,
+ GlobalLU_t *, SuperLUStat_t*);
+extern int scolumn_dfs (const int, const int, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *, GlobalLU_t *);
+extern int scolumn_bmod (const int, const int, float *,
+ float *, int *, int *, int,
+ GlobalLU_t *, SuperLUStat_t*);
+extern int scopy_to_ucol (int, int, int *, int *, int *,
+ float *, GlobalLU_t *);
+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 *);
+extern void sreadmt (int *, int *, int *, float **, int **, int **);
+extern void sGenXtrue (int, int, float *, int);
+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 *,
+ GlobalLU_t *, 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);
+
+
+/*! \brief Driver related */
+
+extern void sgsequ (SuperMatrix *, float *, float *, float *,
+ float *, float *, int *);
+extern void slaqgs (SuperMatrix *, float *, float *, float,
+ float, float, char *);
+extern void sgscon (char *, SuperMatrix *, SuperMatrix *,
+ float, float *, SuperLUStat_t*, int *);
+extern float sPivotGrowth(int, SuperMatrix *, int *,
+ SuperMatrix *, SuperMatrix *);
+extern void sgsrfs (trans_t, SuperMatrix *, SuperMatrix *,
+ SuperMatrix *, int *, int *, char *, float *,
+ float *, SuperMatrix *, SuperMatrix *,
+ float *, float *, SuperLUStat_t*, int *);
+
+extern int sp_strsv (char *, char *, char *, SuperMatrix *,
+ SuperMatrix *, float *, SuperLUStat_t*, int *);
+extern int sp_sgemv (char *, float, SuperMatrix *, float *,
+ int, float, float *, int);
+
+extern int sp_sgemm (char *, char *, int, int, int, float,
+ SuperMatrix *, float *, int, float,
+ float *, int);
+extern float smach(char *); /* from C99 standard, in float.h */
+
+/*! \brief Memory-related */
+extern int sLUMemInit (fact_t, void *, int, int, int, int, int,
+ 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 *);
+
+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 *);
+
+/*! \brief Auxiliary routines */
+extern void sreadhb(FILE *, 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 float sqselect(int, float *, int);
+
+
+/*! \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 sprint_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern int print_double_vec(char *, int, double *);
+extern void scheck_tempv(int, float *);
+
+/*! \brief BLAS */
+
+extern int sgemm_(const char*, const char*, const int*, const int*, const int*,
+ const float*, const float*, const int*, const float*,
+ const int*, const float*, float*, const int*);
+extern int strsv_(char*, char*, char*, int*, float*, int*,
+ float*, int*);
+extern int strsm_(char*, char*, char*, char*, int*, int*,
+ float*, float*, int*, float*, int*);
+extern int sgemv_(char *, int *, int *, float *, float *a, int *,
+ float *, int *, float *, float *, int *);
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __SUPERLU_sSP_DEFS */
+
diff --git a/SuperLU_5.2.0/SRC/slu_util.h b/SuperLU_5.2.0/SRC/slu_util.h
new file mode 100644
index 0000000..656ef44
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slu_util.h
@@ -0,0 +1,400 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/** @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
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+/*
+#ifndef __STDC__
+#include <malloc.h>
+#endif
+*/
+#include <assert.h>
+#include "superlu_enum_consts.h"
+
+/***********************************************************************
+ * Macros
+ ***********************************************************************/
+#define FIRSTCOL_OF_SNODE(i) (xsup[i])
+/* No of marker arrays used in the symbolic factorization,
+ each of size n */
+#define NO_MARKER 3
+#define NUM_TEMPV(m,w,t,b) ( SUPERLU_MAX(m, (t + b)*w) )
+
+#ifndef USER_ABORT
+#define USER_ABORT(msg) superlu_abort_and_exit(msg)
+#endif
+
+#define ABORT(err_msg) \
+ { char msg[256];\
+ sprintf(msg,"%s at line %d in file %s\n",err_msg,__LINE__, __FILE__);\
+ USER_ABORT(msg); }
+
+
+#ifndef USER_MALLOC
+#if 1
+#define USER_MALLOC(size) superlu_malloc(size)
+#else
+/* The following may check out some uninitialized data */
+#define USER_MALLOC(size) memset (superlu_malloc(size), '\x0F', size)
+#endif
+#endif
+
+#define SUPERLU_MALLOC(size) USER_MALLOC(size)
+
+#ifndef USER_FREE
+#define USER_FREE(addr) superlu_free(addr)
+#endif
+
+#define SUPERLU_FREE(addr) USER_FREE(addr)
+
+#define CHECK_MALLOC(where) { \
+ extern int superlu_malloc_total; \
+ printf("%s: malloc_total %d Bytes\n", \
+ where, superlu_malloc_total); \
+}
+
+#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
+ ***********************************************************************/
+#define EMPTY (-1)
+/*#define NO (-1)*/
+#define FALSE 0
+#define TRUE 1
+
+#define NO_MEMTYPE 4 /* 0: lusup;
+ 1: ucol;
+ 2: lsub;
+ 3: usub */
+
+#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
+
+
+/***********************************************************************
+ * Type definitions
+ ***********************************************************************/
+typedef float flops_t;
+typedef unsigned char Logical;
+
+/*
+ *-- This contains the options used to control the solution process.
+ *
+ * Fact (fact_t)
+ * Specifies whether or not the factored form of the matrix
+ * A is supplied on entry, and if not, how the matrix A should
+ * be factorizaed.
+ * = DOFACT: The matrix A will be factorized from scratch, and the
+ * factors will be stored in L and U.
+ * = SamePattern: The matrix A will be factorized assuming
+ * that a factorization of a matrix with the same sparsity
+ * pattern was performed prior to this one. Therefore, this
+ * factorization will reuse column permutation vector
+ * ScalePermstruct->perm_c and the column elimination tree
+ * LUstruct->etree.
+ * = SamePattern_SameRowPerm: The matrix A will be factorized
+ * assuming that a factorization of a matrix with the same
+ * sparsity pattern and similar numerical values was performed
+ * prior to this one. Therefore, this factorization will reuse
+ * both row and column scaling factors R and C, both row and
+ * column permutation vectors perm_r and perm_c, and the
+ * L & U data structures set up from the previous factorization.
+ * = FACTORED: On entry, L, U, perm_r and perm_c contain the
+ * factored form of A. If DiagScale is not NOEQUIL, the matrix
+ * A has been equilibrated with scaling factors R and C.
+ *
+ * Equil (yes_no_t)
+ * Specifies whether to equilibrate the system (scale A's row and
+ * columns to have unit norm).
+ *
+ * ColPerm (colperm_t)
+ * Specifies what type of column permutation to use to reduce fill.
+ * = NATURAL: use the natural ordering
+ * = 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 by the user
+ *
+ * Trans (trans_t)
+ * Specifies the form of the system of equations:
+ * = NOTRANS: A * X = B (No transpose)
+ * = TRANS: A**T * X = B (Transpose)
+ * = CONJ: A**H * X = B (Transpose)
+ *
+ * IterRefine (IterRefine_t)
+ * Specifies whether to perform iterative refinement.
+ * = NO: no iterative refinement
+ * = 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 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 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.
+ *
+ * SolveInitialized (yes_no_t) (only for SuperLU_DIST)
+ * Specifies whether the initialization has been performed to the
+ * triangular solve.
+ *
+ * RefineInitialized (yes_no_t) (only for SuperLU_DIST)
+ * 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;
+ yes_no_t Equil;
+ colperm_t ColPerm;
+ trans_t Trans;
+ IterRefine_t IterRefine;
+ double DiagPivotThresh;
+ yes_no_t SymmetricMode;
+ yes_no_t PivotGrowth;
+ yes_no_t ConditionNumber;
+ rowperm_t RowPerm;
+ 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;
+
+
+typedef struct {
+ int *xsup; /* supernode and column mapping */
+ int *supno;
+ int *lsub; /* compressed L subscripts */
+ int *xlsub;
+ void *lusup; /* L supernodes */
+ int *xlusup;
+ void *ucol; /* U columns */
+ int *usub;
+ int *xusub;
+ int nzlmax; /* current max size of lsub */
+ int nzumax; /* " " " ucol */
+ 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;
+
+
+
+/***********************************************************************
+ * Prototypes
+ ***********************************************************************/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int input_error(char *, int *);
+
+extern void Destroy_SuperMatrix_Store(SuperMatrix *);
+extern void Destroy_CompCol_Matrix(SuperMatrix *);
+extern void Destroy_CompRow_Matrix(SuperMatrix *);
+extern void Destroy_SuperNode_Matrix(SuperMatrix *);
+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*);
+extern void *superlu_malloc (size_t);
+extern int *intMalloc (int);
+extern int *intCalloc (int);
+extern void superlu_free (void*);
+extern void SetIWork (int, int, int, int *, 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 *);
+extern double SuperLU_timer_ ();
+extern int sp_ienv (int);
+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 int print_int_vec(char *,int, int *);
+extern int slu_PrintInt10(char *, int, int *);
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __SUPERLU_UTIL */
diff --git a/SuperLU_5.2.0/SRC/slu_zdefs.h b/SuperLU_5.2.0/SRC/slu_zdefs.h
new file mode 100644
index 0000000..577c5aa
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/slu_zdefs.h
@@ -0,0 +1,285 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * November, 2010
+ *
+ * Global data structures used in LU factorization -
+ *
+ * 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
+ *
+ * (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
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * The last column structures (for pruning) will be removed
+ * after the numercial LU factorization phase.
+ *
+ * (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.
+ *
+ * (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>
+ */
+#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>
+#endif
+
+/* Define my integer type int_t */
+typedef int int_t; /* default */
+
+#include <math.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "slu_Cnames.h"
+#include "supermatrix.h"
+#include "slu_util.h"
+#include "slu_dcomplex.h"
+
+
+/* -------- Prototypes -------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! \brief Driver routines */
+extern void
+zgssv(superlu_options_t *, SuperMatrix *, int *, int *, SuperMatrix *,
+ SuperMatrix *, SuperMatrix *, SuperLUStat_t *, int *);
+extern void
+zgssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *,
+ char *, double *, double *, SuperMatrix *, SuperMatrix *,
+ void *, int, SuperMatrix *, SuperMatrix *,
+ double *, double *, double *, double *,
+ GlobalLU_t *, 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 *,
+ GlobalLU_t *, mem_usage_t *, SuperLUStat_t *, int *);
+
+
+/*! \brief Supernodal LU factor related */
+extern void
+zCreate_CompCol_Matrix(SuperMatrix *, int, int, int, doublecomplex *,
+ int *, int *, Stype_t, Dtype_t, Mtype_t);
+extern void
+zCreate_CompRow_Matrix(SuperMatrix *, int, int, int, doublecomplex *,
+ int *, int *, Stype_t, Dtype_t, Mtype_t);
+extern void
+zCopy_CompCol_Matrix(SuperMatrix *, SuperMatrix *);
+extern void
+zCreate_Dense_Matrix(SuperMatrix *, int, int, doublecomplex *, int,
+ Stype_t, Dtype_t, Mtype_t);
+extern void
+zCreate_SuperNode_Matrix(SuperMatrix *, int, int, int, doublecomplex *,
+ int *, int *, int *, int *, int *,
+ Stype_t, Dtype_t, Mtype_t);
+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*,
+ int, int, int*, void *, int, int *, int *,
+ SuperMatrix *, SuperMatrix *, GlobalLU_t *,
+ SuperLUStat_t*, int *);
+extern int zsnode_dfs (const int, const int, const int *, const int *,
+ const int *, int *, int *, GlobalLU_t *);
+extern int zsnode_bmod (const int, const int, const int, doublecomplex *,
+ doublecomplex *, GlobalLU_t *, SuperLUStat_t*);
+extern void zpanel_dfs (const int, const int, const int, SuperMatrix *,
+ int *, int *, doublecomplex *, int *, int *, int *,
+ int *, int *, int *, int *, GlobalLU_t *);
+extern void zpanel_bmod (const int, const int, const int, const int,
+ doublecomplex *, doublecomplex *, int *, int *,
+ GlobalLU_t *, SuperLUStat_t*);
+extern int zcolumn_dfs (const int, const int, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *, GlobalLU_t *);
+extern int zcolumn_bmod (const int, const int, doublecomplex *,
+ doublecomplex *, int *, int *, int,
+ GlobalLU_t *, SuperLUStat_t*);
+extern int zcopy_to_ucol (int, int, int *, int *, int *,
+ doublecomplex *, GlobalLU_t *);
+extern int zpivotL (const int, const double, int *, int *,
+ int *, int *, int *, GlobalLU_t *, SuperLUStat_t*);
+extern void zpruneL (const int, const int *, const int, const int,
+ const int *, const int *, int *, GlobalLU_t *);
+extern void zreadmt (int *, int *, int *, doublecomplex **, int **, int **);
+extern void zGenXtrue (int, int, doublecomplex *, int);
+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 *,
+ GlobalLU_t *, 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);
+
+
+/*! \brief Driver related */
+
+extern void zgsequ (SuperMatrix *, double *, double *, double *,
+ double *, double *, int *);
+extern void zlaqgs (SuperMatrix *, double *, double *, double,
+ double, double, char *);
+extern void zgscon (char *, SuperMatrix *, SuperMatrix *,
+ double, double *, SuperLUStat_t*, int *);
+extern double zPivotGrowth(int, SuperMatrix *, int *,
+ SuperMatrix *, SuperMatrix *);
+extern void zgsrfs (trans_t, SuperMatrix *, SuperMatrix *,
+ SuperMatrix *, int *, int *, char *, double *,
+ double *, SuperMatrix *, SuperMatrix *,
+ double *, double *, SuperLUStat_t*, int *);
+
+extern int sp_ztrsv (char *, char *, char *, SuperMatrix *,
+ SuperMatrix *, doublecomplex *, SuperLUStat_t*, int *);
+extern int sp_zgemv (char *, doublecomplex, SuperMatrix *, doublecomplex *,
+ int, doublecomplex, doublecomplex *, int);
+
+extern int sp_zgemm (char *, char *, int, int, int, doublecomplex,
+ SuperMatrix *, doublecomplex *, int, doublecomplex,
+ doublecomplex *, int);
+extern double dmach(char *); /* from C99 standard, in float.h */
+
+/*! \brief Memory-related */
+extern int zLUMemInit (fact_t, void *, int, int, int, int, int,
+ 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 *);
+
+extern doublecomplex *doublecomplexMalloc(int);
+extern doublecomplex *doublecomplexCalloc(int);
+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 *);
+
+/*! \brief Auxiliary routines */
+extern void zreadhb(FILE *, 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 double dqselect(int, double *, int);
+
+
+/*! \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 zprint_lu_col(char *, int, int, int *, GlobalLU_t *);
+extern int print_double_vec(char *, int, double *);
+extern void zcheck_tempv(int, doublecomplex *);
+
+/*! \brief BLAS */
+
+extern int zgemm_(const char*, const char*, const int*, const int*, const int*,
+ const doublecomplex*, const doublecomplex*, const int*, const doublecomplex*,
+ const int*, const doublecomplex*, doublecomplex*, const int*);
+extern int ztrsv_(char*, char*, char*, int*, doublecomplex*, int*,
+ doublecomplex*, int*);
+extern int ztrsm_(char*, char*, char*, char*, int*, int*,
+ doublecomplex*, doublecomplex*, int*, doublecomplex*, int*);
+extern int zgemv_(char *, int *, int *, doublecomplex *, doublecomplex *a, int *,
+ doublecomplex *, int *, doublecomplex *, doublecomplex *, int *);
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __SUPERLU_zSP_DEFS */
+
diff --git a/SuperLU_5.2.0/SRC/smach.c b/SuperLU_5.2.0/SRC/smach.c
new file mode 100644
index 0000000..fff6c5f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/smach.c
@@ -0,0 +1,93 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+#include <float.h>
+#include <math.h>
+#include <stdio.h>
+
+float smach(char *cmach)
+{
+/* -- SuperLU auxiliary routine (version 5.0) --
+ This uses C99 standard constants, and is thread safe.
+
+ Must be compiled with "-std=c99" flag.
+
+
+ Purpose
+ =======
+
+ SMACH returns single precision machine parameters.
+
+ Arguments
+ =========
+
+ CMACH (input) CHARACTER*1
+ Specifies the value to be returned by SMACH:
+ = 'E' or 'e', SMACH := eps
+ = 'S' or 's , SMACH := sfmin
+ = 'B' or 'b', SMACH := base
+ = 'P' or 'p', SMACH := eps*base
+ = 'N' or 'n', SMACH := t
+ = 'R' or 'r', SMACH := rnd
+ = 'M' or 'm', SMACH := emin
+ = 'U' or 'u', SMACH := rmin
+ = 'L' or 'l', SMACH := emax
+ = 'O' or 'o', SMACH := rmax
+
+ where
+
+ 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)
+
+ =====================================================================
+*/
+
+ float sfmin, small, rmach;
+
+ if (strncmp(cmach, "E", 1)==0) {
+ rmach = FLT_EPSILON * 0.5;
+ } else if (strncmp(cmach, "S", 1)==0) {
+ sfmin = FLT_MIN;
+ small = 1. / FLT_MAX;
+ if (small >= sfmin) {
+ /* Use SMALL plus a bit, to avoid the possibility of rounding
+ causing overflow when computing 1/sfmin. */
+ sfmin = small * (FLT_EPSILON*0.5 + 1.);
+ }
+ rmach = sfmin;
+ } else if (strncmp(cmach, "B", 1)==0) {
+ rmach = FLT_RADIX;
+ } else if (strncmp(cmach, "P", 1)==0) {
+ rmach = FLT_EPSILON * 0.5 * FLT_RADIX;
+ } else if (strncmp(cmach, "N", 1)==0) {
+ rmach = FLT_MANT_DIG;
+ } else if (strncmp(cmach, "R", 1)==0) {
+ rmach = FLT_ROUNDS;
+ } else if (strncmp(cmach, "M", 1)==0) {
+ rmach = FLT_MIN_EXP;
+ } else if (strncmp(cmach, "U", 1)==0) {
+ rmach = FLT_MIN;
+ } else if (strncmp(cmach, "L", 1)==0) {
+ rmach = FLT_MAX_EXP;
+ } else if (strncmp(cmach, "O", 1)==0) {
+ rmach = FLT_MAX;
+ }
+
+ return rmach;
+
+} /* end smach */
diff --git a/SuperLU_5.2.0/SRC/smemory.c b/SuperLU_5.2.0/SRC/smemory.c
new file mode 100644
index 0000000..14414b5
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/smemory.c
@@ -0,0 +1,710 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file smemory.c
+ * \brief Memory details
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+#include "slu_sdefs.h"
+
+
+/* Internal prototypes */
+void *sexpand (int *, MemType,int, int, GlobalLU_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, GlobalLU_t *);
+void *suser_malloc (int, int, GlobalLU_t *);
+void suser_free (int, int, GlobalLU_t *);
+
+/* External prototypes (in memory.c - prec-independent) */
+extern void copy_mem_int (int, void *, void *);
+extern void user_bcopy (char *, char *, int);
+
+
+/* Macros to manipulate stack */
+#define StackFull(x) ( x + Glu->stack.used >= Glu->stack.size )
+#define NotDoubleAlign(addr) ( (intptr_t)addr & 7 )
+#define DoubleAlign(addr) ( ((intptr_t)addr + 7) & ~7L )
+#define TempSpace(m, w) ( (2*w + 4 + NO_MARKER) * m * sizeof(int) + \
+ (w + 1) * m * sizeof(float) )
+#define Reduce(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */
+
+
+
+
+/*! \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, GlobalLU_t *Glu)
+{
+ if ( lwork == 0 ) {
+ Glu->MemModel = SYSTEM; /* malloc/free */
+ } else if ( lwork > 0 ) {
+ 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, GlobalLU_t *Glu)
+{
+ void *buf;
+
+ if ( StackFull(bytes) ) return (NULL);
+
+ if ( which_end == HEAD ) {
+ buf = (char*) Glu->stack.array + Glu->stack.top1;
+ Glu->stack.top1 += bytes;
+ } else {
+ Glu->stack.top2 -= bytes;
+ buf = (char*) Glu->stack.array + Glu->stack.top2;
+ }
+
+ Glu->stack.used += bytes;
+ return buf;
+}
+
+
+void suser_free(int bytes, int which_end, GlobalLU_t *Glu)
+{
+ if ( which_end == HEAD ) {
+ Glu->stack.top1 -= bytes;
+ } else {
+ Glu->stack.top2 += 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.
+ * </pre>
+ */
+int sQuerySpace(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(float);
+
+ /* For LU factors */
+ 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.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
+ (panel_size + 1.0) * n * dword );
+
+ return 0;
+} /* sQuerySpace */
+
+
+/*! \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, float fill_ratio, SuperMatrix *L, SuperMatrix *U,
+ GlobalLU_t *Glu, int **iwork, float **dwork)
+{
+ int info, iword, dword;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ float *lusup;
+ int *xlusup;
+ float *ucol;
+ int *usub, *xusub;
+ int nzlmax, nzumax, nzlumax;
+
+ iword = sizeof(int);
+ dword = sizeof(float);
+ Glu->n = n;
+ Glu->num_expansions = 0;
+
+ 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_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);
+ }
+
+#if ( PRNTlevel >= 1 )
+ printf("sLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n",
+ fill_ratio, 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 *)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 );
+ ucol = (float *) sexpand( &nzumax, UCOL, 0, 0, Glu );
+ lsub = (int *) sexpand( &nzlmax, LSUB, 0, 0, Glu );
+ usub = (int *) sexpand( &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 {
+ suser_free((nzlumax+nzumax)*dword+(nzlmax+nzumax)*iword,
+ HEAD, Glu);
+ }
+ nzlumax /= 2;
+ nzumax /= 2;
+ nzlmax /= 2;
+ if ( nzlumax < annz ) {
+ printf("Not enough memory to perform factorization.\n");
+ return (smemory_usage(nzlmax, nzumax, nzlumax, n) + n);
+ }
+#if ( PRNTlevel >= 1)
+ printf("sLUMemInit() reduce size: nzlmax %ld, nzumax %ld\n",
+ nzlmax, nzumax);
+ fflush(stdout);
+#endif
+ lusup = (float *) sexpand( &nzlumax, LUSUP, 0, 0, Glu );
+ ucol = (float *) sexpand( &nzumax, UCOL, 0, 0, Glu );
+ lsub = (int *) sexpand( &nzlmax, LSUB, 0, 0, Glu );
+ usub = (int *) sexpand( &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;
+ Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
+ Glu->stack.size = Glu->stack.top2;
+ }
+
+ 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;
+ Glu->supno = supno;
+ Glu->lsub = lsub;
+ Glu->xlsub = xlsub;
+ Glu->lusup = (void *) lusup;
+ Glu->xlusup = xlusup;
+ Glu->ucol = (void *) ucol;
+ Glu->usub = usub;
+ Glu->xusub = xusub;
+ Glu->nzlmax = nzlmax;
+ Glu->nzumax = nzumax;
+ Glu->nzlumax = nzlumax;
+
+ info = sLUWorkInit(m, n, panel_size, iwork, dwork, Glu);
+ if ( info )
+ return ( info + smemory_usage(nzlmax, nzumax, nzlumax, n) + n);
+
+ ++Glu->num_expansions;
+ return 0;
+
+} /* sLUMemInit */
+
+/*! \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, GlobalLU_t *Glu)
+{
+ int isize, dsize, extra;
+ float *old_ptr;
+ 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 ( Glu->MemModel == SYSTEM )
+ *iworkptr = (int *) intCalloc(isize/sizeof(int));
+ else
+ *iworkptr = (int *) suser_malloc(isize, TAIL, Glu);
+ if ( ! *iworkptr ) {
+ fprintf(stderr, "sLUWorkInit: malloc fails for local iworkptr[]\n");
+ return (isize + n);
+ }
+
+ if ( Glu->MemModel == SYSTEM )
+ *dworkptr = (float *) SUPERLU_MALLOC(dsize);
+ else {
+ *dworkptr = (float *) suser_malloc(dsize, TAIL, Glu);
+ if ( NotDoubleAlign(*dworkptr) ) {
+ old_ptr = *dworkptr;
+ *dworkptr = (float*) DoubleAlign(*dworkptr);
+ *dworkptr = (float*) ((double*)*dworkptr - 1);
+ extra = (char*)old_ptr - (char*)*dworkptr;
+#ifdef DEBUG
+ printf("sLUWorkInit: not aligned, extra %d\n", extra);
+#endif
+ Glu->stack.top2 -= extra;
+ Glu->stack.used += extra;
+ }
+ }
+ if ( ! *dworkptr ) {
+ fprintf(stderr, "malloc fails for local dworkptr[].");
+ return (isize + dsize + n);
+ }
+
+ return 0;
+}
+
+
+/*! \brief Set up pointers for real working arrays.
+ */
+void
+sSetRWork(int m, int panel_size, float *dworkptr,
+ float **dense, float **tempv)
+{
+ float zero = 0.0;
+
+ int maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
+ rowblk = sp_ienv(4);
+ *dense = dworkptr;
+ *tempv = *dense + panel_size*m;
+ sfill (*dense, m * panel_size, zero);
+ sfill (*tempv, NUM_TEMPV(m,panel_size,maxsuper,rowblk), zero);
+}
+
+/*! \brief Free the working storage used by factor routines.
+ */
+void sLUWorkFree(int *iwork, float *dwork, GlobalLU_t *Glu)
+{
+ if ( Glu->MemModel == SYSTEM ) {
+ SUPERLU_FREE (iwork);
+ SUPERLU_FREE (dwork);
+ } else {
+ Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
+ Glu->stack.top2 = Glu->stack.size;
+/* sStackCompress(Glu); */
+ }
+
+ SUPERLU_FREE (Glu->expanders);
+ Glu->expanders = NULL;
+}
+
+/*! \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,
+ 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("sLUMemXpand(): jcol %d, next %d, maxlen %d, MemType %d\n",
+ jcol, next, *maxlen, mem_type);
+#endif
+
+ if (mem_type == USUB)
+ new_mem = sexpand(maxlen, mem_type, next, 1, Glu);
+ else
+ new_mem = sexpand(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 (smemory_usage(nzlmax, nzumax, nzlumax, Glu->n) + Glu->n);
+ }
+
+ switch ( mem_type ) {
+ case LUSUP:
+ Glu->lusup = (void *) new_mem;
+ Glu->nzlumax = *maxlen;
+ break;
+ case UCOL:
+ Glu->ucol = (void *) 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_float(int howmany, void *old, void *new)
+{
+ register int i;
+ float *dold = old;
+ float *dnew = new;
+ for (i = 0; i < howmany; i++) dnew[i] = dold[i];
+}
+
+/*! \brief Expand the existing storage to accommodate more fill-ins.
+ */
+void
+*sexpand (
+ 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;
+ ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
+
+ alpha = EXPAND;
+
+ if ( Glu->num_expansions == 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(float);
+
+ if ( Glu->MemModel == SYSTEM ) {
+ new_mem = (void *) SUPERLU_MALLOC((size_t)new_len * lword);
+ if ( Glu->num_expansions != 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((size_t)new_len * lword);
+ }
+ }
+ if ( type == LSUB || type == USUB ) {
+ copy_mem_int(len_to_copy, expanders[type].mem, new_mem);
+ } else {
+ copy_mem_float(len_to_copy, expanders[type].mem, new_mem);
+ }
+ SUPERLU_FREE (expanders[type].mem);
+ }
+ expanders[type].mem = (void *) new_mem;
+
+ } else { /* MemModel == USER */
+ 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;
+ new_mem = (void *)DoubleAlign(new_mem);
+ extra = (char*)new_mem - (char*)old_mem;
+#ifdef DEBUG
+ printf("expand(): not aligned, extra %d\n", extra);
+#endif
+ Glu->stack.top1 += extra;
+ Glu->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*)Glu->stack.array + Glu->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);
+ }
+ Glu->stack.top1 += extra;
+ Glu->stack.used += extra;
+ if ( type == UCOL ) {
+ Glu->stack.top1 += extra; /* Add same amount for USUB */
+ Glu->stack.used += extra;
+ }
+
+ } /* if ... */
+
+ } /* else ... */
+ }
+
+ expanders[type].size = new_len;
+ *prev_len = new_len;
+ if ( Glu->num_expansions ) ++Glu->num_expansions;
+
+ return (void *) expanders[type].mem;
+
+} /* sexpand */
+
+
+/*! \brief Compress the work[] array to remove fragmentation.
+ */
+void
+sStackCompress(GlobalLU_t *Glu)
+{
+ register int iword, dword, ndim;
+ char *last, *fragment;
+ int *ifrom, *ito;
+ float *dfrom, *dto;
+ int *xlsub, *lsub, *xusub, *usub, *xlusup;
+ float *ucol, *lusup;
+
+ iword = sizeof(int);
+ dword = sizeof(float);
+ 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 = (float *)((char*)lusup + xlusup[ndim] * dword);
+ copy_mem_float(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*)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;
+ Glu->usub = usub;
+
+#ifdef DEBUG
+ printf("sStackCompress: fragment %d\n", fragment);
+ /* for (last = 0; last < ndim; ++last)
+ print_lu_col("After compress:", last, 0);*/
+#endif
+
+}
+
+/*! \brief Allocate storage for original matrix A
+ */
+void
+sallocateA(int n, int nnz, float **a, int **asub, int **xa)
+{
+ *a = (float *) floatMalloc(nnz);
+ *asub = (int *) intMalloc(nnz);
+ *xa = (int *) intMalloc(n+1);
+}
+
+
+float *floatMalloc(int n)
+{
+ float *buf;
+ buf = (float *) SUPERLU_MALLOC((size_t)n * sizeof(float));
+ if ( !buf ) {
+ ABORT("SUPERLU_MALLOC failed for buf in floatMalloc()\n");
+ }
+ return (buf);
+}
+
+float *floatCalloc(int n)
+{
+ float *buf;
+ register int i;
+ float zero = 0.0;
+ buf = (float *) SUPERLU_MALLOC((size_t)n * sizeof(float));
+ if ( !buf ) {
+ ABORT("SUPERLU_MALLOC failed for buf in floatCalloc()\n");
+ }
+ for (i = 0; i < n; ++i) buf[i] = zero;
+ return (buf);
+}
+
+
+int smemory_usage(const int nzlmax, const int nzumax,
+ const int nzlumax, const int n)
+{
+ register int iword, dword;
+
+ iword = sizeof(int);
+ dword = sizeof(float);
+
+ return (10 * n * iword +
+ nzlmax * iword + nzumax * (iword + dword) + nzlumax * dword);
+
+}
diff --git a/SuperLU_5.2.0/SRC/smyblas2.c b/SuperLU_5.2.0/SRC/smyblas2.c
new file mode 100644
index 0000000..9cef200
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/smyblas2.c
@@ -0,0 +1,240 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * </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: 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.
+ */
+void slsolve ( int ldm, int ncol, float *M, float *rhs )
+{
+ int k;
+ float x0, x1, x2, x3, x4, x5, x6, x7;
+ float *M0;
+ register float *Mki0, *Mki1, *Mki2, *Mki3, *Mki4, *Mki5, *Mki6, *Mki7;
+ register int firstcol = 0;
+
+ M0 = &M[0];
+
+ while ( firstcol < ncol - 7 ) { /* Do 8 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+ Mki2 = Mki1 + ldm + 1;
+ Mki3 = Mki2 + ldm + 1;
+ Mki4 = Mki3 + ldm + 1;
+ Mki5 = Mki4 + ldm + 1;
+ Mki6 = Mki5 + ldm + 1;
+ Mki7 = Mki6 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ x1 = rhs[firstcol+1] - x0 * *Mki0++;
+ x2 = rhs[firstcol+2] - x0 * *Mki0++ - x1 * *Mki1++;
+ x3 = rhs[firstcol+3] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++;
+ x4 = rhs[firstcol+4] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
+ - x3 * *Mki3++;
+ x5 = rhs[firstcol+5] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
+ - x3 * *Mki3++ - x4 * *Mki4++;
+ x6 = rhs[firstcol+6] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
+ - x3 * *Mki3++ - x4 * *Mki4++ - x5 * *Mki5++;
+ x7 = rhs[firstcol+7] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++
+ - x3 * *Mki3++ - x4 * *Mki4++ - x5 * *Mki5++
+ - x6 * *Mki6++;
+
+ rhs[++firstcol] = x1;
+ rhs[++firstcol] = x2;
+ rhs[++firstcol] = x3;
+ rhs[++firstcol] = x4;
+ rhs[++firstcol] = x5;
+ rhs[++firstcol] = x6;
+ rhs[++firstcol] = x7;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++)
+ rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++
+ - x2 * *Mki2++ - x3 * *Mki3++
+ - x4 * *Mki4++ - x5 * *Mki5++
+ - x6 * *Mki6++ - x7 * *Mki7++;
+
+ M0 += 8 * ldm + 8;
+ }
+
+ while ( firstcol < ncol - 3 ) { /* Do 4 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+ Mki2 = Mki1 + ldm + 1;
+ Mki3 = Mki2 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ x1 = rhs[firstcol+1] - x0 * *Mki0++;
+ x2 = rhs[firstcol+2] - x0 * *Mki0++ - x1 * *Mki1++;
+ x3 = rhs[firstcol+3] - x0 * *Mki0++ - x1 * *Mki1++ - x2 * *Mki2++;
+
+ rhs[++firstcol] = x1;
+ rhs[++firstcol] = x2;
+ rhs[++firstcol] = x3;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++)
+ rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++
+ - x2 * *Mki2++ - x3 * *Mki3++;
+
+ M0 += 4 * ldm + 4;
+ }
+
+ if ( firstcol < ncol - 1 ) { /* Do 2 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ x1 = rhs[firstcol+1] - x0 * *Mki0++;
+
+ rhs[++firstcol] = x1;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++)
+ rhs[k] = rhs[k] - x0 * *Mki0++ - x1 * *Mki1++;
+
+ }
+
+}
+
+/*! \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.
+ */
+void
+susolve ( ldm, ncol, M, rhs )
+int ldm; /* in */
+int ncol; /* in */
+float *M; /* in */
+float *rhs; /* modified */
+{
+ float xj;
+ int jcol, j, irow;
+
+ jcol = ncol - 1;
+
+ for (j = 0; j < ncol; j++) {
+
+ xj = rhs[jcol] / M[jcol + jcol*ldm]; /* M(jcol, jcol) */
+ rhs[jcol] = xj;
+
+ for (irow = 0; irow < jcol; irow++)
+ rhs[irow] -= xj * M[irow + jcol*ldm]; /* M(irow, jcol) */
+
+ jcol--;
+
+ }
+}
+
+
+/*! \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 )
+
+int ldm; /* in -- leading dimension of M */
+int nrow; /* in */
+int ncol; /* in */
+float *M; /* in */
+float *vec; /* in */
+float *Mxvec; /* in/out */
+
+{
+ float vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7;
+ float *M0;
+ register float *Mki0, *Mki1, *Mki2, *Mki3, *Mki4, *Mki5, *Mki6, *Mki7;
+ register int firstcol = 0;
+ int k;
+
+ M0 = &M[0];
+ while ( firstcol < ncol - 7 ) { /* Do 8 columns */
+
+ Mki0 = M0;
+ Mki1 = Mki0 + ldm;
+ Mki2 = Mki1 + ldm;
+ Mki3 = Mki2 + ldm;
+ Mki4 = Mki3 + ldm;
+ Mki5 = Mki4 + ldm;
+ Mki6 = Mki5 + ldm;
+ Mki7 = Mki6 + ldm;
+
+ vi0 = vec[firstcol++];
+ vi1 = vec[firstcol++];
+ vi2 = vec[firstcol++];
+ vi3 = vec[firstcol++];
+ vi4 = vec[firstcol++];
+ vi5 = vec[firstcol++];
+ vi6 = vec[firstcol++];
+ vi7 = vec[firstcol++];
+
+ for (k = 0; k < nrow; k++)
+ Mxvec[k] += vi0 * *Mki0++ + vi1 * *Mki1++
+ + vi2 * *Mki2++ + vi3 * *Mki3++
+ + vi4 * *Mki4++ + vi5 * *Mki5++
+ + vi6 * *Mki6++ + vi7 * *Mki7++;
+
+ M0 += 8 * ldm;
+ }
+
+ while ( firstcol < ncol - 3 ) { /* Do 4 columns */
+
+ Mki0 = M0;
+ Mki1 = Mki0 + ldm;
+ Mki2 = Mki1 + ldm;
+ Mki3 = Mki2 + ldm;
+
+ vi0 = vec[firstcol++];
+ vi1 = vec[firstcol++];
+ vi2 = vec[firstcol++];
+ vi3 = vec[firstcol++];
+ for (k = 0; k < nrow; k++)
+ Mxvec[k] += vi0 * *Mki0++ + vi1 * *Mki1++
+ + vi2 * *Mki2++ + vi3 * *Mki3++ ;
+
+ M0 += 4 * ldm;
+ }
+
+ while ( firstcol < ncol ) { /* Do 1 column */
+
+ Mki0 = M0;
+ vi0 = vec[firstcol++];
+ for (k = 0; k < nrow; k++)
+ Mxvec[k] += vi0 * *Mki0++;
+
+ M0 += ldm;
+ }
+
+}
+
diff --git a/SuperLU_5.2.0/SRC/sp_coletree.c b/SuperLU_5.2.0/SRC/sp_coletree.c
new file mode 100644
index 0000000..8a32784
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sp_coletree.c
@@ -0,0 +1,429 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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 */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "slu_ddefs.h"
+
+/*
+ * Implementation of disjoint set union routines.
+ * Elements are integers in 0..n-1, and the
+ * names of the sets themselves are of type int.
+ *
+ * Calls are:
+ * initialize_disjoint_sets (n) initial call.
+ * s = make_set (i) returns a set containing only i.
+ * s = link (t, u) returns s = t union u, destroying t and u.
+ * s = find (i) return name of set containing i.
+ * finalize_disjoint_sets final call.
+ *
+ * This implementation uses path compression but not weighted union.
+ * See Tarjan's book for details.
+ * John Gilbert, CMI, 1987.
+ *
+ * Implemented path-halving by XSL 07/05/95.
+ */
+
+
+static
+int *mxCallocInt(int n)
+{
+ register int i;
+ int *buf;
+
+ buf = (int *) SUPERLU_MALLOC( n * sizeof(int) );
+ if ( !buf ) {
+ ABORT("SUPERLU_MALLOC fails for buf in mxCallocInt()");
+ }
+ for (i = 0; i < n; i++) buf[i] = 0;
+ return (buf);
+}
+
+static
+void initialize_disjoint_sets (
+ int n,
+ int **pp
+ )
+{
+ (*pp) = mxCallocInt(n);
+}
+
+
+static
+int make_set (
+ int i,
+ int *pp
+ )
+{
+ pp[i] = i;
+ return i;
+}
+
+
+static
+int link (
+ int s,
+ int t,
+ int *pp
+ )
+{
+ pp[s] = t;
+ return t;
+}
+
+
+/* PATH HALVING */
+static
+int find (
+ int i,
+ int *pp
+ )
+{
+ register int p, gp;
+
+ p = pp[i];
+ gp = pp[p];
+ while (gp != p) {
+ pp[i] = gp;
+ i = gp;
+ p = pp[i];
+ gp = pp[p];
+ }
+ return (p);
+}
+
+#if 0
+/* PATH COMPRESSION */
+static
+int find (
+ int i
+ )
+{
+ if (pp[i] != i)
+ pp[i] = find (pp[i]);
+ return pp[i];
+}
+#endif
+
+static
+void finalize_disjoint_sets (
+ int *pp
+ )
+{
+ SUPERLU_FREE(pp);
+}
+
+
+/*
+ * Find the elimination tree for A'*A.
+ * This uses something similar to Liu's algorithm.
+ * It runs in time O(nz(A)*log n) and does not form A'*A.
+ *
+ * Input:
+ * Sparse matrix A. Numeric values are ignored, so any
+ * explicit zeros are treated as nonzero.
+ * Output:
+ * Integer array of parents representing the elimination
+ * tree of the symbolic product A'*A. Each vertex is a
+ * column of A, and nc means a root of the elimination forest.
+ *
+ * John R. Gilbert, Xerox, 10 Dec 1990
+ * Based on code by JRG dated 1987, 1988, and 1990.
+ */
+
+/*
+ * Nonsymmetric elimination tree
+ */
+int
+sp_coletree(
+ int *acolst, int *acolend, /* column start and end past 1 */
+ int *arow, /* row indices of A */
+ int nr, int nc, /* dimension of A */
+ int *parent /* parent in elim tree */
+ )
+{
+ int *root; /* root of subtee of etree */
+ int *firstcol; /* first nonzero col in each row*/
+ int rset, cset;
+ int row, col;
+ int rroot;
+ int p;
+ int *pp;
+
+ root = mxCallocInt (nc);
+ initialize_disjoint_sets (nc, &pp);
+
+ /* Compute firstcol[row] = first nonzero column in row */
+
+ firstcol = mxCallocInt (nr);
+ for (row = 0; row < nr; firstcol[row++] = nc);
+ for (col = 0; col < nc; col++)
+ for (p = acolst[col]; p < acolend[col]; p++) {
+ row = arow[p];
+ firstcol[row] = SUPERLU_MIN(firstcol[row], col);
+ }
+
+ /* Compute etree by Liu's algorithm for symmetric matrices,
+ except use (firstcol[r],c) in place of an edge (r,c) of A.
+ Thus each row clique in A'*A is replaced by a star
+ centered at its first vertex, which has the same fill. */
+
+ for (col = 0; col < nc; 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, pp);
+ rroot = root[rset];
+ if (rroot != col) {
+ parent[rroot] = col;
+ cset = link (cset, rset, pp);
+ root[cset] = col;
+ }
+ }
+ }
+
+ SUPERLU_FREE (root);
+ SUPERLU_FREE (firstcol);
+ finalize_disjoint_sets (pp);
+ return 0;
+}
+
+/*
+ * q = TreePostorder (n, p);
+ *
+ * Postorder a tree.
+ * Input:
+ * p is a vector of parent pointers for a forest whose
+ * vertices are the integers 0 to n-1; p[root]==n.
+ * Output:
+ * q is a vector indexed by 0..n-1 such that q[i] is the
+ * i-th vertex in a postorder numbering of the tree.
+ *
+ * ( 2/7/95 modified by X.Li:
+ * q is a vector indexed by 0:n-1 such that vertex i is the
+ * q[i]-th vertex in a postorder numbering of the tree.
+ * That is, this is the inverse of the previous q. )
+ *
+ * In the child structure, lower-numbered children are represented
+ * first, so that a tree which is already numbered in postorder
+ * will not have its order changed.
+ *
+ * Written by John Gilbert, Xerox, 10 Dec 1990.
+ * Based on code written by John Gilbert at CMI in 1987.
+ */
+
+static
+/*
+ * Depth-first search from vertex v.
+ */
+void etdfs (
+ 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, first_kid, next_kid, post, postnum);
+ }
+ /* post[postnum++] = v; in Matlab */
+ 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 *first_kid, *next_kid; /* Linked list of children. */
+ int *post, postnum;
+ int v, dad;
+
+ /* Allocate storage for working arrays and results */
+ first_kid = mxCallocInt (n+1);
+ next_kid = mxCallocInt (n+1);
+ post = mxCallocInt (n+1);
+
+ /* Set up structure describing children */
+ for (v = 0; v <= n; first_kid[v++] = -1);
+ for (v = n-1; v >= 0; v--) {
+ dad = parent[v];
+ next_kid[v] = first_kid[dad];
+ first_kid[dad] = v;
+ }
+
+ /* Depth-first search from dummy root vertex #n */
+ postnum = 0;
+#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);
+ return post;
+}
+
+
+/*
+ * p = spsymetree (A);
+ *
+ * Find the elimination tree for symmetric matrix A.
+ * This uses Liu's algorithm, and runs in time O(nz*log n).
+ *
+ * Input:
+ * Square sparse matrix A. No check is made for symmetry;
+ * elements below and on the diagonal are ignored.
+ * Numeric values are ignored, so any explicit zeros are
+ * treated as nonzero.
+ * Output:
+ * Integer array of parents representing the etree, with n
+ * meaning a root of the elimination forest.
+ * Note:
+ * This routine uses only the upper triangle, while sparse
+ * Cholesky (as in spchol.c) uses only the lower. Matlab's
+ * dense Cholesky uses only the upper. This routine could
+ * be modified to use the lower triangle either by transposing
+ * the matrix or by traversing it by rows with auxiliary
+ * pointer and link arrays.
+ *
+ * John R. Gilbert, Xerox, 10 Dec 1990
+ * Based on code by JRG dated 1987, 1988, and 1990.
+ * Modified by X.S. Li, November 1999.
+ */
+
+/*
+ * Symmetric elimination tree
+ */
+int
+sp_symetree(
+ int *acolst, int *acolend, /* column starts and ends past 1 */
+ int *arow, /* row indices of A */
+ int n, /* dimension of A */
+ int *parent /* parent in elim tree */
+ )
+{
+ int *root; /* root of subtree of etree */
+ int rset, cset;
+ int row, col;
+ int rroot;
+ int p;
+ int *pp;
+
+ root = mxCallocInt (n);
+ initialize_disjoint_sets (n, &pp);
+
+ for (col = 0; col < n; 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, pp);
+ rroot = root[rset];
+ if (rroot != col) {
+ parent[rroot] = col;
+ cset = link (cset, rset, pp);
+ root[cset] = col;
+ }
+ }
+ }
+ SUPERLU_FREE (root);
+ finalize_disjoint_sets (pp);
+ return 0;
+} /* SP_SYMETREE */
diff --git a/SuperLU_5.2.0/SRC/sp_ienv.c b/SuperLU_5.2.0/SRC/sp_ienv.c
new file mode 100644
index 0000000..855d901
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sp_ienv.c
@@ -0,0 +1,89 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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"
+
+/*! \brief
+
+ <pre>
+ Purpose
+ =======
+
+ sp_ienv() is inquired to choose machine-dependent parameters for the
+ local environment. See ISPEC for a description of the parameters.
+
+ 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.
+
+ Arguments
+ =========
+
+ 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.
+
+ (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 (20);
+ case 2: return (10);
+ case 3: return (200);
+ case 4: return (200);
+ case 5: return (100);
+ case 6: return (30);
+ case 7: return (10);
+ }
+
+ /* Invalid value for ISPEC */
+ i = 1;
+ input_error("sp_ienv", &i);
+ return 0;
+
+} /* sp_ienv_ */
+
diff --git a/SuperLU_5.2.0/SRC/sp_preorder.c b/SuperLU_5.2.0/SRC/sp_preorder.c
new file mode 100644
index 0000000..c2dffbc
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sp_preorder.c
@@ -0,0 +1,220 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @file sp_preorder.c
+ * \brief Permute and performs functions on columns of orginal matrix
+ */
+#include "slu_ddefs.h"
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * sp_preorder() permutes the columns of the original matrix. It performs
+ * the following steps:
+ *
+ * 1. Apply column permutation perm_c[] to A's column pointers to form AC;
+ *
+ * 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.
+ *
+ * Arguments
+ * =========
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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>
+ */
+void
+sp_preorder(superlu_options_t *options, SuperMatrix *A, int *perm_c,
+ int *etree, SuperMatrix *AC)
+{
+ NCformat *Astore;
+ NCPformat *ACstore;
+ int *iwork, *post;
+ register int n, i;
+
+ n = A->ncol;
+
+ /* Apply column permutation perm_c to A's column pointers so to
+ obtain NCP format in AC = A*Pc. */
+ AC->Stype = SLU_NCP;
+ AC->Dtype = A->Dtype;
+ AC->Mtype = A->Mtype;
+ AC->nrow = A->nrow;
+ AC->ncol = A->ncol;
+ Astore = A->Store;
+ ACstore = AC->Store = (void *) SUPERLU_MALLOC( sizeof(NCPformat) );
+ if ( !ACstore ) ABORT("SUPERLU_MALLOC fails for ACstore");
+ ACstore->nnz = Astore->nnz;
+ ACstore->nzval = Astore->nzval;
+ ACstore->rowind = Astore->rowind;
+ ACstore->colbeg = (int*) SUPERLU_MALLOC(n*sizeof(int));
+ if ( !(ACstore->colbeg) ) ABORT("SUPERLU_MALLOC fails for ACstore->colbeg");
+ ACstore->colend = (int*) SUPERLU_MALLOC(n*sizeof(int));
+ if ( !(ACstore->colend) ) ABORT("SUPERLU_MALLOC fails for ACstore->colend");
+
+#ifdef DEBUG
+ print_int_vec("pre_order:", n, perm_c);
+ check_perm("Initial perm_c", n, perm_c);
+#endif
+
+ for (i = 0; i < n; i++) {
+ ACstore->colbeg[perm_c[i]] = Astore->colptr[i];
+ ACstore->colend[perm_c[i]] = Astore->colptr[i+1];
+ }
+
+ if ( options->Fact == DOFACT ) {
+#undef ETREE_ATplusA
+#ifdef ETREE_ATplusA
+ /*--------------------------------------------
+ COMPUTE THE ETREE OF Pc*(A'+A)*Pc'.
+ --------------------------------------------*/
+ int *b_colptr, *b_rowind, bnz, j;
+ int *c_colbeg, *c_colend;
+
+ /*printf("Use etree(A'+A)\n");*/
+
+ /* Form B = A + A'. */
+ at_plus_a(n, Astore->nnz, Astore->colptr, Astore->rowind,
+ &bnz, &b_colptr, &b_rowind);
+
+ /* Form C = Pc*B*Pc'. */
+ c_colbeg = (int*) SUPERLU_MALLOC(2*n*sizeof(int));
+ c_colend = c_colbeg + n;
+ if (!c_colbeg ) ABORT("SUPERLU_MALLOC fails for c_colbeg/c_colend");
+ for (i = 0; i < n; i++) {
+ c_colbeg[perm_c[i]] = b_colptr[i];
+ c_colend[perm_c[i]] = b_colptr[i+1];
+ }
+ for (j = 0; j < n; ++j) {
+ for (i = c_colbeg[j]; i < c_colend[j]; ++i) {
+ b_rowind[i] = perm_c[b_rowind[i]];
+ }
+ }
+
+ /* Compute etree of C. */
+ sp_symetree(c_colbeg, c_colend, b_rowind, n, etree);
+
+ SUPERLU_FREE(b_colptr);
+ if ( bnz ) SUPERLU_FREE(b_rowind);
+ SUPERLU_FREE(c_colbeg);
+
+#else
+ /*--------------------------------------------
+ COMPUTE THE COLUMN ELIMINATION TREE.
+ --------------------------------------------*/
+ sp_coletree(ACstore->colbeg, ACstore->colend, ACstore->rowind,
+ A->nrow, A->ncol, etree);
+#endif
+#ifdef DEBUG
+ print_int_vec("etree:", n, etree);
+#endif
+
+ /* In symmetric mode, do not do postorder here. */
+ if ( options->SymmetricMode == NO ) {
+ /* Post order etree */
+ post = (int *) TreePostorder(n, etree);
+ /* for (i = 0; i < n+1; ++i) inv_post[post[i]] = i;
+ iwork = post; */
+
+#ifdef DEBUG
+ print_int_vec("post:", n+1, post);
+ check_perm("post", n, post);
+#endif
+ iwork = (int*) SUPERLU_MALLOC((n+1)*sizeof(int));
+ if ( !iwork ) ABORT("SUPERLU_MALLOC fails for iwork[]");
+
+ /* Renumber etree in postorder */
+ for (i = 0; i < n; ++i) iwork[post[i]] = post[etree[i]];
+ for (i = 0; i < n; ++i) etree[i] = iwork[i];
+
+#ifdef DEBUG
+ print_int_vec("postorder etree:", n, etree);
+#endif
+
+ /* Postmultiply A*Pc by post[] */
+ for (i = 0; i < n; ++i) iwork[post[i]] = ACstore->colbeg[i];
+ for (i = 0; i < n; ++i) ACstore->colbeg[i] = iwork[i];
+ for (i = 0; i < n; ++i) iwork[post[i]] = ACstore->colend[i];
+ for (i = 0; i < n; ++i) ACstore->colend[i] = iwork[i];
+
+ for (i = 0; i < n; ++i)
+ iwork[i] = post[perm_c[i]]; /* product of perm_c and post */
+ for (i = 0; i < n; ++i) perm_c[i] = iwork[i];
+
+#ifdef DEBUG
+ print_int_vec("Pc*post:", n, perm_c);
+ check_perm("final perm_c", n, perm_c);
+#endif
+ SUPERLU_FREE (post);
+ SUPERLU_FREE (iwork);
+ } /* end postordering */
+
+ } /* if options->Fact == DOFACT ... */
+
+}
+
+int check_perm(char *what, int n, int *perm)
+{
+ register int i;
+ int *marker;
+ /*marker = (int *) calloc(n, sizeof(int));*/
+ marker = (int *) malloc(n * sizeof(int));
+ for (i = 0; i < n; ++i) marker[i] = 0;
+
+ for (i = 0; i < n; ++i) {
+ if ( marker[perm[i]] == 1 || perm[i] >= n ) {
+ printf("%s: Not a valid PERM[%d] = %d\n", what, i, perm[i]);
+ ABORT("check_perm");
+ } else {
+ marker[perm[i]] = 1;
+ }
+ }
+
+ SUPERLU_FREE(marker);
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/spanel_bmod.c b/SuperLU_5.2.0/SRC/spanel_bmod.c
new file mode 100644
index 0000000..b1e7f91
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/spanel_bmod.c
@@ -0,0 +1,466 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+/*
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "slu_sdefs.h"
+
+/*
+ * Function prototypes
+ */
+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 */
+ const int w, /* in */
+ const int jcol, /* in */
+ const int nseg, /* in */
+ float *dense, /* out, of size n by w */
+ float *tempv, /* working array */
+ int *segrep, /* in */
+ int *repfnz, /* in, of size n by w */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ float alpha, beta;
+#endif
+
+ register int k, ksub;
+ int fsupc, nsupc, nsupr, nrow;
+ int krep, krep_ind;
+ float ukj, ukj1, ukj2;
+ int luptr, luptr1, luptr2;
+ int segsze;
+ int block_nrow; /* no of rows in a block row */
+ register int lptr; /* Points to the row subscripts of a supernode */
+ int kfnz, irow, no_zeros;
+ register int isub, isub1, i;
+ register int jj; /* Index through each column in the panel */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ float *lusup;
+ int *xlusup;
+ int *repfnz_col; /* repfnz[] for a column in the panel */
+ float *dense_col; /* dense[] for a column in the panel */
+ float *tempv1; /* Used in 1-D update */
+ float *TriTmp, *MatvecTmp; /* used in 2-D update */
+ float zero = 0.0;
+ float one = 1.0;
+ register int ldaTmp;
+ register int r_ind, r_hi;
+ int maxsuper, rowblk, colblk;
+ flops_t *ops = stat->ops;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (float *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
+ rowblk = sp_ienv(4);
+ colblk = sp_ienv(5);
+ ldaTmp = maxsuper + rowblk;
+
+ /*
+ * For each nonz supernode segment of U[*,j] in topological order
+ */
+ k = nseg - 1;
+ for (ksub = 0; ksub < nseg; ksub++) { /* for each updating supernode */
+
+ /* krep = representative of current k-th supernode
+ * fsupc = first supernodal column
+ * nsupc = no of columns in a supernode
+ * nsupr = no of rows in a supernode
+ */
+ krep = segrep[k--];
+ fsupc = xsup[supno[krep]];
+ nsupc = krep - fsupc + 1;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc];
+ nrow = nsupr - nsupc;
+ lptr = xlsub[fsupc];
+ krep_ind = lptr + nsupc - 1;
+
+ repfnz_col = repfnz;
+ dense_col = dense;
+
+ if ( nsupc >= colblk && nrow > rowblk ) { /* 2-D block update */
+
+ TriTmp = tempv;
+
+ /* Sequence through each column in panel -- triangular solves */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp ) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ luptr = xlusup[fsupc];
+
+ ops[TRSV] += segsze * (segsze - 1);
+ ops[GEMV] += 2 * nrow * segsze;
+
+ /* Case 1: Update U-segment of size 1 -- col-col update */
+ if ( segsze == 1 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
+ irow = lsub[i];
+ dense_col[irow] -= ukj * lusup[luptr];
+ ++luptr;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ ukj1 = dense_col[lsub[krep_ind - 1]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) {
+ ukj -= ukj1 * lusup[luptr1];
+ dense_col[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++; luptr1++;
+ dense_col[irow] -= (ukj*lusup[luptr]
+ + ukj1*lusup[luptr1]);
+ }
+ } else {
+ ukj2 = dense_col[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ ukj1 -= ukj2 * lusup[luptr2-1];
+ ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
+ dense_col[lsub[krep_ind]] = ukj;
+ dense_col[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++; luptr1++; luptr2++;
+ dense_col[irow] -= ( ukj*lusup[luptr]
+ + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
+ }
+ }
+
+ } else { /* segsze >= 4 */
+
+ /* Copy U[*,j] segment from dense[*] to TriTmp[*], which
+ holds the result of triangular solves. */
+ no_zeros = kfnz - fsupc;
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; ++i) {
+ irow = lsub[isub];
+ TriTmp[i] = dense_col[irow]; /* Gather */
+ ++isub;
+ }
+
+ /* start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, TriTmp, &incx );
+#else
+ strsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, TriTmp, &incx );
+#endif
+#else
+ slsolve ( nsupr, segsze, &lusup[luptr], TriTmp );
+#endif
+
+
+ } /* else ... */
+
+ } /* for jj ... end tri-solves */
+
+ /* Block row updates; push all the way into dense[*] block */
+ for ( r_ind = 0; r_ind < nrow; r_ind += rowblk ) {
+
+ r_hi = SUPERLU_MIN(nrow, r_ind + rowblk);
+ block_nrow = SUPERLU_MIN(rowblk, r_hi - r_ind);
+ luptr = xlusup[fsupc] + nsupc + r_ind;
+ isub1 = lptr + nsupc + r_ind;
+
+ repfnz_col = repfnz;
+ TriTmp = tempv;
+ dense_col = dense;
+
+ /* Sequence through each column in panel -- matrix-vector */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ if ( segsze <= 3 ) continue; /* skip unrolled cases */
+
+ /* Perform a block update, and scatter the result of
+ matrix-vector to dense[]. */
+ no_zeros = kfnz - fsupc;
+ luptr1 = luptr + nsupr * no_zeros;
+ MatvecTmp = &TriTmp[maxsuper];
+
+#ifdef USE_VENDOR_BLAS
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ SGEMV(ftcs2, &block_nrow, &segsze, &alpha, &lusup[luptr1],
+ &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
+#else
+ sgemv_("N", &block_nrow, &segsze, &alpha, &lusup[luptr1],
+ &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
+#endif
+#else
+ smatvec(nsupr, block_nrow, segsze, &lusup[luptr1],
+ TriTmp, MatvecTmp);
+#endif
+
+ /* Scatter MatvecTmp[*] into SPA dense[*] temporarily
+ * such that MatvecTmp[*] can be re-used for the
+ * the next blok row update. dense[] will be copied into
+ * global store after the whole panel has been finished.
+ */
+ isub = isub1;
+ for (i = 0; i < block_nrow; i++) {
+ irow = lsub[isub];
+ dense_col[irow] -= MatvecTmp[i];
+ MatvecTmp[i] = zero;
+ ++isub;
+ }
+
+ } /* for jj ... */
+
+ } /* for each block row ... */
+
+ /* Scatter the triangular solves into SPA dense[*] */
+ repfnz_col = repfnz;
+ TriTmp = tempv;
+ dense_col = dense;
+
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ if ( segsze <= 3 ) continue; /* skip unrolled cases */
+
+ no_zeros = kfnz - fsupc;
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense_col[irow] = TriTmp[i];
+ TriTmp[i] = zero;
+ ++isub;
+ }
+
+ } /* for jj ... */
+
+ } else { /* 1-D block modification */
+
+
+ /* Sequence through each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ luptr = xlusup[fsupc];
+
+ ops[TRSV] += segsze * (segsze - 1);
+ ops[GEMV] += 2 * nrow * segsze;
+
+ /* Case 1: Update U-segment of size 1 -- col-col update */
+ if ( segsze == 1 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
+ irow = lsub[i];
+ dense_col[irow] -= ukj * lusup[luptr];
+ ++luptr;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ ukj1 = dense_col[lsub[krep_ind - 1]];
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) {
+ ukj -= ukj1 * lusup[luptr1];
+ dense_col[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ ++luptr; ++luptr1;
+ dense_col[irow] -= (ukj*lusup[luptr]
+ + ukj1*lusup[luptr1]);
+ }
+ } else {
+ ukj2 = dense_col[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ ukj1 -= ukj2 * lusup[luptr2-1];
+ ukj = ukj - ukj1*lusup[luptr1] - ukj2*lusup[luptr2];
+ dense_col[lsub[krep_ind]] = ukj;
+ dense_col[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ ++luptr; ++luptr1; ++luptr2;
+ dense_col[irow] -= ( ukj*lusup[luptr]
+ + ukj1*lusup[luptr1] + ukj2*lusup[luptr2] );
+ }
+ }
+
+ } else { /* segsze >= 4 */
+ /*
+ * Perform a triangular solve and block update,
+ * then scatter the result of sup-col update to dense[].
+ */
+ no_zeros = kfnz - fsupc;
+
+ /* Copy U[*,j] segment from dense[*] to tempv[*]:
+ * The result of triangular solve is in tempv[*];
+ * The result of matrix vector update is in dense_col[*]
+ */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; ++i) {
+ irow = lsub[isub];
+ tempv[i] = dense_col[irow]; /* Gather */
+ ++isub;
+ }
+
+ /* start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#else
+ strsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#endif
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ SGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#else
+ sgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#endif
+#else
+ slsolve ( nsupr, segsze, &lusup[luptr], tempv );
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ smatvec (nsupr, nrow, segsze, &lusup[luptr], tempv, tempv1);
+#endif
+
+ /* Scatter tempv[*] into SPA dense[*] temporarily, such
+ * that tempv[*] can be used for the triangular solve of
+ * the next column of the panel. They will be copied into
+ * ucol[*] after the whole panel has been finished.
+ */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense_col[irow] = tempv[i];
+ tempv[i] = zero;
+ isub++;
+ }
+
+ /* Scatter the update from tempv1[*] into SPA dense[*] */
+ /* Start dense rectangular L */
+ for (i = 0; i < nrow; i++) {
+ irow = lsub[isub];
+ dense_col[irow] -= tempv1[i];
+ tempv1[i] = zero;
+ ++isub;
+ }
+
+ } /* else segsze>=4 ... */
+
+ } /* for each column in the panel... */
+
+ } /* else 1-D update ... */
+
+ } /* for each updating supernode ... */
+
+}
+
+
+
diff --git a/SuperLU_5.2.0/SRC/spanel_dfs.c b/SuperLU_5.2.0/SRC/spanel_dfs.c
new file mode 100644
index 0000000..c2b736d
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/spanel_dfs.c
@@ -0,0 +1,264 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_sdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
+ *
+ * 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 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.
+ *
+ * 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;
+ *
+ * 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>
+ */
+
+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;
+ int *xa_begin, *xa_end;
+ 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 *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;
+
+ /* Initialize pointers */
+ Astore = A->Store;
+ a = Astore->nzval;
+ asub = Astore->rowind;
+ xa_begin = Astore->colbeg;
+ xa_end = Astore->colend;
+ marker1 = marker + m;
+ repfnz_col = repfnz;
+ dense_col = dense;
+ *nseg = 0;
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+
+ /* For each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++) {
+ nextl_col = (jj - jcol) * m;
+
+#ifdef CHK_DFS
+ printf("\npanel col %d: ", jj);
+#endif
+
+ /* 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 )
+ continue; /* krow visited before, go to the next nonzero */
+
+ /* For each unmarked nbr krow of jj
+ * krow is in L: place it in structure of L[*,jj]
+ */
+ 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[*]
+ */
+ else {
+
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz_col[krep];
+
+#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 > kperm ) repfnz_col[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz_col[krep] = kperm;
+ xdfs = xlsub[krep];
+ maxdfs = xprune[krep];
+
+#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
+ */
+ 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
+ * been explored, update its repfnz[*]
+ */
+ else {
+
+ chrep = xsup[supno[chperm]+1] - 1;
+ myfnz = repfnz_col[chrep];
+#ifdef CHK_DFS
+ printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
+#endif
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > chperm )
+ repfnz_col[chrep] = chperm;
+ }
+ else {
+ /* Cont. dfs at snode-rep of kchild */
+ 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
+ printf(" xdfs %d, maxdfs %d: ", xdfs, maxdfs);
+ 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
+ * segment is seen for the first time. (Note that
+ * "repfnz[krep]" may change later.)
+ * Backtrack dfs to its parent.
+ */
+ if ( marker1[krep] < jcol ) {
+ segrep[*nseg] = krep;
+ ++(*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
+ 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;
+
+ } /* for jj ... */
+
+}
diff --git a/SuperLU_5.2.0/SRC/spivotL.c b/SuperLU_5.2.0/SRC/spivotL.c
new file mode 100644
index 0000000..2c63cab
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/spivotL.c
@@ -0,0 +1,194 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_sdefs.h"
+
+#undef DEBUG
+
+/*! \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
+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 */
+ int lptr; /* points to the starting subscript of the supernode */
+ int pivptr, old_pivptr, diag, diagind;
+ float pivmax, rtemp, thresh;
+ float temp;
+ float *lu_sup_ptr;
+ float *lu_col_ptr;
+ int *lsub_ptr;
+ int isub, icol, k, itemp;
+ int *lsub, *xlsub;
+ float *lusup;
+ int *xlusup;
+ flops_t *ops = stat->ops;
+
+ /* Initialize pointers */
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (float *) 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 */
+
+#ifdef DEBUG
+if ( jcol == MIN_COL ) {
+ printf("Before cdiv: col %d\n", jcol);
+ for (k = nsupc; k < nsupr; k++)
+ printf(" lu[%d] %f\n", lsub_ptr[k], lu_col_ptr[k]);
+}
+#endif
+
+ /* Determine the largest abs numerical value for partial pivoting;
+ Also search for user-specified pivot, and diagonal element. */
+ if ( *usepr ) *pivrow = iperm_r[jcol];
+ diagind = iperm_c[jcol];
+ pivmax = 0.0;
+ pivptr = nsupc;
+ diag = EMPTY;
+ old_pivptr = nsupc;
+ for (isub = nsupc; isub < nsupr; ++isub) {
+ rtemp = fabs (lu_col_ptr[isub]);
+ if ( rtemp > pivmax ) {
+ pivmax = rtemp;
+ pivptr = isub;
+ }
+ if ( *usepr && lsub_ptr[isub] == *pivrow ) old_pivptr = isub;
+ if ( lsub_ptr[isub] == diagind ) diag = isub;
+ }
+
+ /* 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);
+ }
+
+ thresh = u * pivmax;
+
+ /* Choose appropriate pivotal element by our policy. */
+ if ( *usepr ) {
+ rtemp = fabs (lu_col_ptr[old_pivptr]);
+ if ( rtemp != 0.0 && rtemp >= thresh )
+ pivptr = old_pivptr;
+ else
+ *usepr = 0;
+ }
+ if ( *usepr == 0 ) {
+ /* Use diagonal pivot? */
+ if ( diag >= 0 ) { /* diagonal exists */
+ rtemp = fabs (lu_col_ptr[diag]);
+ if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
+ }
+ *pivrow = lsub_ptr[pivptr];
+ }
+
+ /* Record pivot row */
+ perm_r[*pivrow] = jcol;
+
+ /* 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 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/spivotgrowth.c b/SuperLU_5.2.0/SRC/spivotgrowth.c
new file mode 100644
index 0000000..e836391
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/spivotgrowth.c
@@ -0,0 +1,123 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Compute the reciprocal pivot growth factor of the leading ncols columns
+ * of the matrix, using the formula:
+ * min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )
+ *
+ * Arguments
+ * =========
+ *
+ * ncols (input) int
+ * The number of columns of matrices A, L and U.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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>
+ */
+
+float
+sPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
+ SuperMatrix *L, SuperMatrix *U)
+{
+
+ NCformat *Astore;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ float *Aval, *Lval, *Uval;
+ int fsupc, nsupr, luptr, nz_in_U;
+ int i, j, k, oldcol;
+ int *inv_perm_c;
+ float rpg, maxaj, maxuj;
+ float smlnum;
+ float *luval;
+
+ /* Get machine constants. */
+ smlnum = smach("S");
+ rpg = 1. / smlnum;
+
+ Astore = A->Store;
+ Lstore = L->Store;
+ Ustore = U->Store;
+ Aval = Astore->nzval;
+ Lval = Lstore->nzval;
+ Uval = Ustore->nzval;
+
+ inv_perm_c = (int *) SUPERLU_MALLOC(A->ncol*sizeof(int));
+ for (j = 0; j < A->ncol; ++j) inv_perm_c[perm_c[j]] = j;
+
+ for (k = 0; k <= Lstore->nsuper; ++k) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ luptr = L_NZ_START(fsupc);
+ luval = &Lval[luptr];
+ nz_in_U = 1;
+
+ for (j = fsupc; j < L_FST_SUPC(k+1) && j < ncols; ++j) {
+ maxaj = 0.;
+ oldcol = inv_perm_c[j];
+ for (i = Astore->colptr[oldcol]; i < Astore->colptr[oldcol+1]; ++i)
+ maxaj = SUPERLU_MAX( maxaj, fabs(Aval[i]) );
+
+ maxuj = 0.;
+ for (i = Ustore->colptr[j]; i < Ustore->colptr[j+1]; i++)
+ maxuj = SUPERLU_MAX( maxuj, fabs(Uval[i]) );
+
+ /* Supernode */
+ for (i = 0; i < nz_in_U; ++i)
+ maxuj = SUPERLU_MAX( maxuj, fabs(luval[i]) );
+
+ ++nz_in_U;
+ luval += nsupr;
+
+ if ( maxuj == 0. )
+ rpg = SUPERLU_MIN( rpg, 1.);
+ else
+ rpg = SUPERLU_MIN( rpg, maxaj / maxuj );
+ }
+
+ if ( j >= ncols ) break;
+ }
+
+ SUPERLU_FREE(inv_perm_c);
+ return (rpg);
+}
diff --git a/SuperLU_5.2.0/SRC/spruneL.c b/SuperLU_5.2.0/SRC/spruneL.c
new file mode 100644
index 0000000..c9b800d
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/spruneL.c
@@ -0,0 +1,164 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#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 */
+ const int *perm_r, /* in */
+ const int pivrow, /* in */
+ const int nseg, /* in */
+ const int *segrep, /* in */
+ const int *repfnz, /* in */
+ int *xprune, /* out */
+ GlobalLU_t *Glu /* modified - global LU data structures */
+ )
+{
+
+ float utemp;
+ int jsupno, irep, irep1, kmin, kmax, krow, movnum;
+ int i, ktemp, minloc, maxloc;
+ int do_prune; /* logical variable */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ float *lusup;
+ int *xlusup;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (float *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ /*
+ * For each supernode-rep irep in U[*,j]
+ */
+ jsupno = supno[jcol];
+ for (i = 0; i < nseg; i++) {
+
+ irep = segrep[i];
+ irep1 = irep + 1;
+ do_prune = FALSE;
+
+ /* Don't prune with a zero U-segment */
+ if ( repfnz[irep] == EMPTY )
+ continue;
+
+ /* If a snode overlaps with the next panel, then the U-segment
+ * is fragmented into two parts -- irep and irep1. We should let
+ * pruning occur at the rep-column in irep1's snode.
+ */
+ if ( supno[irep] == supno[irep1] ) /* Don't prune */
+ continue;
+
+ /*
+ * If it has not been pruned & it has a nonz in row L[pivrow,i]
+ */
+ if ( supno[irep] != jsupno ) {
+ if ( xprune[irep] >= xlsub[irep1] ) {
+ kmin = xlsub[irep];
+ kmax = xlsub[irep1] - 1;
+ for (krow = kmin; krow <= kmax; krow++)
+ if ( lsub[krow] == pivrow ) {
+ do_prune = TRUE;
+ break;
+ }
+ }
+
+ if ( do_prune ) {
+
+ /* Do a quicksort-type partition
+ * movnum=TRUE means that the num values have to be exchanged.
+ */
+ movnum = FALSE;
+ if ( irep == xsup[supno[irep]] ) /* Snode of size 1 */
+ movnum = TRUE;
+
+ while ( kmin <= kmax ) {
+
+ if ( perm_r[lsub[kmax]] == EMPTY )
+ kmax--;
+ else if ( perm_r[lsub[kmin]] != EMPTY )
+ kmin++;
+ else { /* kmin below pivrow (not yet pivoted), and kmax
+ * above pivrow: interchange the two subscripts
+ */
+ ktemp = lsub[kmin];
+ lsub[kmin] = lsub[kmax];
+ lsub[kmax] = ktemp;
+
+ /* 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.
+ */
+ if ( movnum ) {
+ minloc = xlusup[irep] + (kmin - xlsub[irep]);
+ maxloc = xlusup[irep] + (kmax - xlsub[irep]);
+ utemp = lusup[minloc];
+ lusup[minloc] = lusup[maxloc];
+ lusup[maxloc] = utemp;
+ }
+
+ kmin++;
+ kmax--;
+
+ }
+
+ } /* while */
+
+ xprune[irep] = kmin; /* Pruning */
+
+#ifdef CHK_PRUNE
+ printf(" After spruneL(),using col %d: xprune[%d] = %d\n",
+ jcol, irep, kmin);
+#endif
+ } /* if do_prune */
+
+ } /* if */
+
+ } /* for each U-segment... */
+}
diff --git a/SuperLU_5.2.0/SRC/sreadhb.c b/SuperLU_5.2.0/SRC/sreadhb.c
new file mode 100644
index 0000000..2b91d4e
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sreadhb.c
@@ -0,0 +1,369 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+
+/*! \brief Eat up the rest of the current line */
+int sDumpLine(FILE *fp)
+{
+ register int c;
+ while ((c = fgetc(fp)) != '\n') ;
+ return 0;
+}
+
+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;
+}
+
+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;
+}
+
+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;
+}
+
+
+/*! \brief
+ *
+ * <pre>
+ * On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+ * matrix. On exit, it represents the full matrix with lower and upper parts.
+ * </pre>
+ */
+static void
+FormFullA(int n, int *nonz, float **nzval, int **rowind, int **colptr)
+{
+ register int i, j, k, col, new_nnz;
+ int *t_rowind, *t_colptr, *al_rowind, *al_colptr, *a_rowind, *a_colptr;
+ int *marker;
+ float *t_val, *al_val, *a_val;
+
+ al_rowind = *rowind;
+ al_colptr = *colptr;
+ al_val = *nzval;
+
+ if ( !(marker =(int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC t_colptr[]");
+ if ( !(t_rowind = (int *) SUPERLU_MALLOC( *nonz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_rowind[]");
+ if ( !(t_val = (float*) SUPERLU_MALLOC( *nonz * sizeof(float)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_val[]");
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < n; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i)
+ ++marker[al_rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < n; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose matrix A to T */
+ for (j = 0; j < n; ++j)
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ col = al_rowind[i];
+ t_rowind[marker[col]] = j;
+ t_val[marker[col]] = al_val[i];
+ ++marker[col];
+ }
+
+ new_nnz = *nonz * 2 - n;
+ if ( !(a_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC a_colptr[]");
+ if ( !(a_rowind = (int *) SUPERLU_MALLOC( new_nnz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_rowind[]");
+ if ( !(a_val = (float*) SUPERLU_MALLOC( new_nnz * sizeof(float)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_val[]");
+
+ a_colptr[0] = 0;
+ k = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ if ( t_rowind[i] != j ) { /* not diagonal */
+ a_rowind[k] = t_rowind[i];
+ a_val[k] = t_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+ }
+
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ a_rowind[k] = al_rowind[i];
+ a_val[k] = al_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+
+ a_colptr[j+1] = k;
+ }
+
+ printf("FormFullA: new_nnz = %d, k = %d\n", new_nnz, k);
+
+ SUPERLU_FREE(al_val);
+ SUPERLU_FREE(al_rowind);
+ SUPERLU_FREE(al_colptr);
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_val);
+ SUPERLU_FREE(t_rowind);
+ SUPERLU_FREE(t_colptr);
+
+ *nzval = a_val;
+ *rowind = a_rowind;
+ *colptr = a_colptr;
+ *nonz = new_nnz;
+}
+
+void
+sreadhb(FILE *fp, int *nrow, int *ncol, int *nonz,
+ float **nzval, int **rowind, int **colptr)
+{
+
+ register int i, numer_lines = 0, rhscrd = 0;
+ int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
+ char buf[100], type[4], key[10];
+ int sym;
+
+ /* Line 1 */
+ fgets(buf, 100, fp);
+ fputs(buf, stdout);
+#if 0
+ fscanf(fp, "%72c", buf); buf[72] = 0;
+ printf("Title: %s", buf);
+ fscanf(fp, "%8c", key); key[8] = 0;
+ printf("Key: %s\n", key);
+ sDumpLine(fp);
+#endif
+
+ /* Line 2 */
+ for (i=0; i<5; i++) {
+ fscanf(fp, "%14c", buf); buf[14] = 0;
+ sscanf(buf, "%d", &tmp);
+ if (i == 3) numer_lines = tmp;
+ if (i == 4 && tmp) rhscrd = 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);
+ fscanf(fp, "%20c", buf);
+ sDumpLine(fp);
+
+ /* Line 5: right-hand side */
+ if ( rhscrd ) sDumpLine(fp); /* skip RHSFMT */
+
+#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);
+ }
+
+ sym = (type[1] == 'S' || type[1] == 's');
+ if ( sym ) {
+ FormFullA(*ncol, nonz, nzval, rowind, colptr);
+ }
+
+ fclose(fp);
+}
+
diff --git a/SuperLU_5.2.0/SRC/sreadrb.c b/SuperLU_5.2.0/SRC/sreadrb.c
new file mode 100644
index 0000000..57438ef
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sreadrb.c
@@ -0,0 +1,356 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 <stdio.h>
+#include <stdlib.h>
+#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;
+}
+
+
+
+/*! \brief
+ *
+ * <pre>
+ * On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+ * matrix. On exit, it represents the full matrix with lower and upper parts.
+ * </pre>
+ */
+static void
+FormFullA(int n, int *nonz, float **nzval, int **rowind, int **colptr)
+{
+ register int i, j, k, col, new_nnz;
+ int *t_rowind, *t_colptr, *al_rowind, *al_colptr, *a_rowind, *a_colptr;
+ int *marker;
+ float *t_val, *al_val, *a_val;
+
+ al_rowind = *rowind;
+ al_colptr = *colptr;
+ al_val = *nzval;
+
+ if ( !(marker =(int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC t_colptr[]");
+ if ( !(t_rowind = (int *) SUPERLU_MALLOC( *nonz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_rowind[]");
+ if ( !(t_val = (float*) SUPERLU_MALLOC( *nonz * sizeof(float)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_val[]");
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < n; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i)
+ ++marker[al_rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < n; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose matrix A to T */
+ for (j = 0; j < n; ++j)
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ col = al_rowind[i];
+ t_rowind[marker[col]] = j;
+ t_val[marker[col]] = al_val[i];
+ ++marker[col];
+ }
+
+ new_nnz = *nonz * 2 - n;
+ if ( !(a_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC a_colptr[]");
+ if ( !(a_rowind = (int *) SUPERLU_MALLOC( new_nnz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_rowind[]");
+ if ( !(a_val = (float*) SUPERLU_MALLOC( new_nnz * sizeof(float)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_val[]");
+
+ a_colptr[0] = 0;
+ k = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ if ( t_rowind[i] != j ) { /* not diagonal */
+ a_rowind[k] = t_rowind[i];
+ a_val[k] = t_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+ }
+
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ a_rowind[k] = al_rowind[i];
+ a_val[k] = al_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+
+ a_colptr[j+1] = k;
+ }
+
+ printf("FormFullA: new_nnz = %d, k = %d\n", new_nnz, k);
+
+ SUPERLU_FREE(al_val);
+ SUPERLU_FREE(al_rowind);
+ SUPERLU_FREE(al_colptr);
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_val);
+ SUPERLU_FREE(t_rowind);
+ SUPERLU_FREE(t_colptr);
+
+ *nzval = a_val;
+ *rowind = a_rowind;
+ *colptr = a_colptr;
+ *nonz = new_nnz;
+}
+
+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];
+ int sym;
+ 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);
+ }
+
+ sym = (type[1] == 'S' || type[1] == 's');
+ if ( sym ) {
+ FormFullA(*ncol, nonz, nzval, rowind, colptr);
+ }
+
+ fclose(fp);
+}
diff --git a/SuperLU_5.2.0/SRC/sreadtriple.c b/SuperLU_5.2.0/SRC/sreadtriple.c
new file mode 100644
index 0000000..a3d9233
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sreadtriple.c
@@ -0,0 +1,150 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+sreadtriple(int *m, int *n, int *nonz,
+ float **nzval, int **rowind, int **colptr)
+{
+/*
+ * Output parameters
+ * =================
+ * (a,asub,xa): asub[*] contains the row subscripts of nonzeros
+ * in columns of matrix A; a[*] the numerical values;
+ * row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
+ *
+ */
+ int j, k, jsize, nnz, nz;
+ float *a, *val;
+ int *asub, *xa, *row, *col;
+ int zero_base = 0;
+
+ /* Matrix format:
+ * First line: #rows, #cols, #non-zero
+ * Triplet in the rest of lines:
+ * row, col, value
+ */
+
+ scanf("%d%d", n, nonz);
+ *m = *n;
+ printf("m %d, n %d, nonz %d\n", *m, *n, *nonz);
+ sallocateA(*n, *nonz, nzval, rowind, colptr); /* Allocate storage */
+ a = *nzval;
+ asub = *rowind;
+ xa = *colptr;
+
+ val = (float *) SUPERLU_MALLOC(*nonz * sizeof(float));
+ 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 (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
+ 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",
+ nz, row[nz], col[nz], val[nz]);
+ exit(-1);
+ } else {
+ ++xa[col[nz]];
+ ++nz;
+ }
+ }
+
+ *nonz = nz;
+
+ /* Initialize the array of column pointers */
+ k = 0;
+ jsize = xa[0];
+ xa[0] = 0;
+ for (j = 1; j < *n; ++j) {
+ k += jsize;
+ jsize = xa[j];
+ xa[j] = k;
+ }
+
+ /* Copy the triplets into the column oriented storage */
+ for (nz = 0; nz < *nonz; ++nz) {
+ j = col[nz];
+ k = xa[j];
+ asub[k] = row[nz];
+ a[k] = val[nz];
+ ++xa[j];
+ }
+
+ /* Reset the column pointers to the beginning of each column */
+ for (j = *n; j > 0; --j)
+ xa[j] = xa[j-1];
+ xa[0] = 0;
+
+ SUPERLU_FREE(val);
+ SUPERLU_FREE(row);
+ SUPERLU_FREE(col);
+
+#ifdef CHK_INPUT
+ {
+ 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 sreadrhs(int m, float *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, "%f\n", &b[i]);
+
+ /* readpair_(j, &b[i]);*/
+ fclose(fp);
+}
diff --git a/SuperLU_5.2.0/SRC/ssnode_bmod.c b/SuperLU_5.2.0/SRC/ssnode_bmod.c
new file mode 100644
index 0000000..fd1f9c6
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ssnode_bmod.c
@@ -0,0 +1,128 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_sdefs.h"
+
+
+/*! \brief Performs numeric block updates within the relaxed snode.
+ */
+int
+ssnode_bmod (
+ const int jcol, /* in */
+ const int jsupno, /* in */
+ const int fsupc, /* in */
+ float *dense, /* in */
+ float *tempv, /* working array */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ float alpha = -1.0, beta = 1.0;
+#endif
+
+ int luptr, nsupc, nsupr, nrow;
+ int isub, irow, i, iptr;
+ register int ufirst, nextlu;
+ int *lsub, *xlsub;
+ float *lusup;
+ int *xlusup;
+ flops_t *ops = stat->ops;
+
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (float *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ nextlu = xlusup[jcol];
+
+ /*
+ * Process the supernodal portion of L\U[*,j]
+ */
+ for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
+ irow = lsub[isub];
+ lusup[nextlu] = dense[irow];
+ dense[irow] = 0;
+ ++nextlu;
+ }
+
+ xlusup[jcol + 1] = nextlu; /* Initialize xlusup for next column */
+
+ if ( fsupc < jcol ) {
+
+ luptr = xlusup[fsupc];
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc];
+ nsupc = jcol - fsupc; /* Excluding jcol */
+ ufirst = xlusup[jcol]; /* Points to the beginning of column
+ jcol in supernode L\U(jsupno). */
+ nrow = nsupr - nsupc;
+
+ ops[TRSV] += nsupc * (nsupc - 1);
+ ops[GEMV] += 2 * nrow * nsupc;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr], &nsupr,
+ &lusup[ufirst], &incx );
+ SGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#else
+ strsv_( "L", "N", "U", &nsupc, &lusup[luptr], &nsupr,
+ &lusup[ufirst], &incx );
+ sgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#endif
+#else
+ slsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
+ smatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
+ &lusup[ufirst], &tempv[0] );
+
+ /* Scatter tempv[*] into lusup[*] */
+ iptr = ufirst + nsupc;
+ for (i = 0; i < nrow; i++) {
+ lusup[iptr++] -= tempv[i];
+ tempv[i] = 0.0;
+ }
+#endif
+
+ }
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/ssnode_dfs.c b/SuperLU_5.2.0/SRC/ssnode_dfs.c
new file mode 100644
index 0000000..902cc60
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ssnode_dfs.c
@@ -0,0 +1,122 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#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 */
+ const int kcol, /* in - end of the supernode */
+ const int *asub, /* in */
+ const int *xa_begin, /* in */
+ const int *xa_end, /* in */
+ int *xprune, /* out */
+ int *marker, /* modified */
+ GlobalLU_t *Glu /* modified */
+ )
+{
+
+ register int i, k, ifrom, ito, nextl, new_next;
+ 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) )
+ return (mem_error);
+ lsub = Glu->lsub;
+ }
+ }
+ }
+ supno[i] = nsuper;
+ }
+
+ /* Supernode > 1, then make a copy of the subscripts for pruning */
+ if ( jcol < kcol ) {
+ new_next = nextl + (nextl - xlsub[jcol]);
+ while ( new_next > nzlmax ) {
+ if ( mem_error = sLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
+ return (mem_error);
+ lsub = Glu->lsub;
+ }
+ ito = nextl;
+ for (ifrom = xlsub[jcol]; ifrom < nextl; )
+ lsub[ito++] = lsub[ifrom++];
+ for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
+ nextl = ito;
+ }
+
+ xsup[nsuper+1] = kcol + 1;
+ supno[kcol+1] = nsuper;
+ xprune[kcol] = nextl;
+ xlsub[kcol+1] = nextl;
+
+ return 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/ssp_blas2.c b/SuperLU_5.2.0/SRC/ssp_blas2.c
new file mode 100644
index 0000000..91b0380
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ssp_blas2.c
@@ -0,0 +1,490 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file ssp_blas2.c
+ * \brief Sparse BLAS 2, using some dense BLAS 2 operations
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: December 3, 2015
+ * </pre>
+ */
+/*
+ * File name: ssp_blas2.c
+ * Purpose: Sparse BLAS 2, using some dense BLAS 2 operations.
+ */
+
+#include "slu_sdefs.h"
+
+/*
+ * Function prototypes
+ */
+void susolve(int, int, float*, float*);
+void slsolve(int, int, float*, float*);
+void smatvec(int, int, int, float*, float*, float*);
+
+/*! \brief Solves one of the systems of equations A*x = b, or A'*x = b
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * sp_strsv() 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.
+ *
+ * Parameters
+ * ==========
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * U - (input) SuperMatrix*
+ * The factor U from the factorization Pr*A*Pc=L*U.
+ * U has types: Stype = NC, Dtype = SLU_S, Mtype = TRU.
+ *
+ * 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.
+ *
+ * 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")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ SCformat *Lstore;
+ NCformat *Ustore;
+ float *Lval, *Uval;
+ int incx = 1, incy = 1;
+ float alpha = 1.0, beta = 1.0;
+ int nrow;
+ int fsupc, nsupr, nsupc, luptr, istart, irow;
+ int i, k, iptr, jcol;
+ float *work;
+ flops_t solve_ops;
+
+ /* Test the input parameters */
+ *info = 0;
+ if ( strncmp(uplo,"L", 1)!=0 && strncmp(uplo, "U", 1)!=0 ) *info = -1;
+ else if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0) *info = -2;
+ else if ( strncmp(diag, "U", 1)!=0 && strncmp(diag, "N", 1)!=0 )
+ *info = -3;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ) *info = -4;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ) *info = -5;
+ if ( *info ) {
+ i = -(*info);
+ input_error("sp_strsv", &i);
+ return 0;
+ }
+
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+ solve_ops = 0;
+
+ if ( !(work = floatCalloc(L->nrow)) )
+ ABORT("Malloc fails for work in sp_strsv().");
+
+ if ( strncmp(trans, "N", 1)==0 ) { /* Form x := inv(A)*x. */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := inv(L)*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ 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;
+ luptr = L_NZ_START(fsupc);
+ nrow = nsupr - nsupc;
+
+ solve_ops += nsupc * (nsupc - 1);
+ solve_ops += 2 * nrow * nsupc;
+
+ if ( nsupc == 1 ) {
+ for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
+ irow = L_SUB(iptr);
+ ++luptr;
+ x[irow] -= x[fsupc] * Lval[luptr];
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+
+ SGEMV(ftcs2, &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
+ &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
+#else
+ strsv_("L", "N", "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+
+ sgemv_("N", &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
+ &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
+#endif
+#else
+ slsolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc]);
+
+ smatvec ( nsupr, nsupr-nsupc, nsupc, &Lval[luptr+nsupc],
+ &x[fsupc], &work[0] );
+#endif
+
+ iptr = istart + nsupc;
+ for (i = 0; i < nrow; ++i, ++iptr) {
+ irow = L_SUB(iptr);
+ x[irow] -= work[i]; /* Scatter */
+ work[i] = 0.0;
+
+ }
+ }
+ } /* for k ... */
+
+ } else {
+ /* Form x := inv(U)*x */
+
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; k--) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += nsupc * (nsupc + 1);
+
+ if ( nsupc == 1 ) {
+ x[fsupc] /= Lval[luptr];
+ for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
+ irow = U_SUB(i);
+ x[irow] -= x[fsupc] * Uval[i];
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ STRSV(ftcs3, ftcs2, ftcs2, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ strsv_("U", "N", "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+#else
+ susolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
+#endif
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1);
+ i++) {
+ irow = U_SUB(i);
+ x[irow] -= x[jcol] * Uval[i];
+ }
+ }
+ }
+ } /* for k ... */
+
+ }
+ } else { /* Form x := inv(A')*x */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := inv(L')*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; --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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += 2 * (nsupr - nsupc) * nsupc;
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ iptr = istart + nsupc;
+ for (i = L_NZ_START(jcol) + nsupc;
+ i < L_NZ_START(jcol+1); i++) {
+ irow = L_SUB(iptr);
+ x[jcol] -= x[irow] * Lval[i];
+ iptr++;
+ }
+ }
+
+ if ( nsupc > 1 ) {
+ solve_ops += nsupc * (nsupc - 1);
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd("T", strlen("T"));
+ ftcs3 = _cptofcd("U", strlen("U"));
+ STRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ strsv_("L", "T", "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ }
+ } else {
+ /* Form x := inv(U')*x */
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = 0; k <= Lstore->nsuper; k++) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
+ irow = U_SUB(i);
+ x[jcol] -= x[irow] * Uval[i];
+ }
+ }
+
+ solve_ops += nsupc * (nsupc + 1);
+
+ if ( nsupc == 1 ) {
+ x[fsupc] /= Lval[luptr];
+ } else {
+#ifdef _CRAY
+ ftcs1 = _cptofcd("U", strlen("U"));
+ ftcs2 = _cptofcd("T", strlen("T"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ STRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ strsv_("U", "T", "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ } /* for k ... */
+ }
+ }
+
+ stat->ops[SOLVE] += solve_ops;
+ SUPERLU_FREE(work);
+ return 0;
+}
+
+
+
+/*! \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)
+{
+ /* Local variables */
+ NCformat *Astore;
+ float *Aval;
+ int info;
+ float temp;
+ int lenx, leny, i, j, irow;
+ int iy, jx, jy, kx, ky;
+ int notran;
+
+ notran = ( strncmp(trans, "N", 1)==0 || strncmp(trans, "n", 1)==0 );
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Test the input parameters */
+ info = 0;
+ if ( !notran && strncmp(trans, "T", 1)!=0 && strncmp(trans, "C", 1)!=0 )
+ info = 1;
+ else if ( A->nrow < 0 || A->ncol < 0 ) info = 3;
+ else if (incx == 0) info = 5;
+ else if (incy == 0) info = 8;
+ if (info != 0) {
+ input_error("sp_sgemv ", &info);
+ return 0;
+ }
+
+ /* Quick return if possible. */
+ if (A->nrow == 0 || A->ncol == 0 || (alpha == 0. && beta == 1.))
+ return 0;
+
+ /* Set LENX and LENY, the lengths of the vectors x and y, and set
+ up the start points in X and Y. */
+ if (strncmp(trans, "N", 1)==0) {
+ lenx = A->ncol;
+ leny = A->nrow;
+ } else {
+ lenx = A->nrow;
+ leny = A->ncol;
+ }
+ if (incx > 0) kx = 0;
+ else kx = - (lenx - 1) * incx;
+ if (incy > 0) ky = 0;
+ else ky = - (leny - 1) * incy;
+
+ /* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+ /* First form y := beta*y. */
+ if (beta != 1.) {
+ if (incy == 1) {
+ if (beta == 0.)
+ for (i = 0; i < leny; ++i) y[i] = 0.;
+ else
+ for (i = 0; i < leny; ++i) y[i] = beta * y[i];
+ } else {
+ iy = ky;
+ if (beta == 0.)
+ for (i = 0; i < leny; ++i) {
+ y[iy] = 0.;
+ iy += incy;
+ }
+ else
+ for (i = 0; i < leny; ++i) {
+ y[iy] = beta * y[iy];
+ iy += incy;
+ }
+ }
+ }
+
+ if (alpha == 0.) return 0;
+
+ if ( notran ) {
+ /* Form y := alpha*A*x + y. */
+ jx = kx;
+ if (incy == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ if (x[jx] != 0.) {
+ temp = alpha * x[jx];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ y[irow] += temp * Aval[i];
+ }
+ }
+ jx += incx;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ } else {
+ /* Form y := alpha*A'*x + y. */
+ jy = ky;
+ if (incx == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ temp = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ temp += Aval[i] * x[irow];
+ }
+ y[jy] += alpha * temp;
+ jy += incy;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ }
+
+ return 0;
+} /* sp_sgemv */
+
diff --git a/SuperLU_5.2.0/SRC/ssp_blas3.c b/SuperLU_5.2.0/SRC/ssp_blas3.c
new file mode 100644
index 0000000..91ae3ac
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/ssp_blas3.c
@@ -0,0 +1,137 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * Purpose: Sparse BLAS3, using some dense BLAS3 operations.
+ */
+
+#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)
+{
+ int incx = 1, incy = 1;
+ int j;
+
+ for (j = 0; j < n; ++j) {
+ sp_sgemv(transa, alpha, A, &b[ldb*j], incx, beta, &c[ldc*j], incy);
+ }
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/superlu_enum_consts.h b/SuperLU_5.2.0/SRC/superlu_enum_consts.h
new file mode 100644
index 0000000..07fb1a4
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/superlu_enum_consts.h
@@ -0,0 +1,81 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/** @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/SuperLU_5.2.0/SRC/superlu_timer.c b/SuperLU_5.2.0/SRC/superlu_timer.c
new file mode 100644
index 0000000..1d2283f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/superlu_timer.c
@@ -0,0 +1,82 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @file superlu_timer.c
+ * \brief Returns the time used
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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>
+ */
+
+
+#ifdef SUN
+/*
+ * It uses the system call gethrtime(3C), which is accurate to
+ * 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 <sys/time.h>
+#include <unistd.h>
+#endif
+
+/*! \brief Timer function
+ */
+
+double SuperLU_timer_()
+{
+#ifdef NO_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;
+ 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
+}
+
+#endif
+
diff --git a/SuperLU_5.2.0/SRC/supermatrix.h b/SuperLU_5.2.0/SRC/supermatrix.h
new file mode 100644
index 0000000..5237451
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/supermatrix.h
@@ -0,0 +1,190 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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_NCP, /* column-wise, column-permuted, no supernode
+ (The consecutive columns of nonzeros, after permutation,
+ may not be stored contiguously.) */
+ 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 {
+ SLU_S, /* single */
+ SLU_D, /* double */
+ SLU_C, /* single complex */
+ SLU_Z /* double complex */
+} Dtype_t;
+
+typedef enum {
+ SLU_GE, /* general */
+ SLU_TRLU, /* lower triangular, unit diagonal */
+ SLU_TRUU, /* upper triangular, unit diagonal */
+ SLU_TRL, /* lower triangular */
+ SLU_TRU, /* upper triangular */
+ SLU_SYL, /* symmetric, store lower half */
+ SLU_SYU, /* symmetric, store upper half */
+ SLU_HEL, /* Hermitian, store lower half */
+ SLU_HEU /* Hermitian, store upper half */
+} Mtype_t;
+
+typedef struct {
+ Stype_t Stype; /* Storage type: interprets the storage structure
+ pointed to by *Store. */
+ Dtype_t Dtype; /* Data type. */
+ Mtype_t Mtype; /* Matrix type: describes the mathematical property of
+ the matrix. */
+ int_t nrow; /* number of rows */
+ int_t ncol; /* number of columns */
+ void *Store; /* pointer to the actual storage of the matrix */
+} SuperMatrix;
+
+/***********************************************
+ * The storage schemes are defined as follows. *
+ ***********************************************/
+
+/* 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 */
+ 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[] */
+ /* Note:
+ Zero-based indexing is used;
+ colptr[] has ncol+1 entries, the last one pointing
+ beyond the last column, so that colptr[ncol] = nnz. */
+} NCformat;
+
+/* Stype == SLU_NR */
+typedef struct {
+ 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 == SLU_SC */
+typedef struct {
+ int_t nnz; /* number of nonzeros in the matrix */
+ int_t nsuper; /* number of supernodes, minus 1 */
+ void *nzval; /* pointer to array of nonzero values, packed by column */
+ int_t *nzval_colptr;/* pointer to array of beginning of columns in nzval[] */
+ 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
+ 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
+ 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) */
+ /* 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.
+ For col_to_sup[], only the first ncol entries are
+ defined. For sup_to_col[], only the first nsuper+2
+ entries are defined. */
+} SCformat;
+
+/* 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 */
+ int_t *rowind;/* pointer to array of row indices of the nonzeros */
+ /* Note: nzval[]/rowind[] always have the same length */
+ int_t *colbeg;/* colbeg[j] points to the beginning of column j in nzval[]
+ and rowind[] */
+ int_t *colend;/* colend[j] points to one past the last element of column
+ j in nzval[] and rowind[] */
+ /* Note:
+ Zero-based indexing is used;
+ The consecutive columns of the nonzeros may not be
+ contiguous in storage, because the matrix has been
+ postmultiplied by a column permutation matrix. */
+} NCPformat;
+
+/* Stype == SLU_DN */
+typedef struct {
+ int_t lda; /* leading dimension */
+ void *nzval; /* array of size lda*ncol to represent a dense matrix */
+} DNformat;
+
+/* 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/SuperLU_5.2.0/SRC/sutil.c b/SuperLU_5.2.0/SRC/sutil.c
new file mode 100644
index 0000000..65c6d0d
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/sutil.c
@@ -0,0 +1,481 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * 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>
+ */
+
+
+#include <math.h>
+#include "slu_sdefs.h"
+
+void
+sCreate_CompCol_Matrix(SuperMatrix *A, int m, int n, int nnz,
+ float *nzval, int *rowind, int *colptr,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ NCformat *Astore;
+
+ A->Stype = stype;
+ A->Dtype = dtype;
+ A->Mtype = mtype;
+ A->nrow = m;
+ A->ncol = n;
+ A->Store = (void *) SUPERLU_MALLOC( sizeof(NCformat) );
+ if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
+ Astore = A->Store;
+ Astore->nnz = nnz;
+ Astore->nzval = nzval;
+ Astore->rowind = rowind;
+ Astore->colptr = colptr;
+}
+
+void
+sCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
+ float *nzval, int *colind, int *rowptr,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ NRformat *Astore;
+
+ A->Stype = stype;
+ A->Dtype = dtype;
+ A->Mtype = mtype;
+ A->nrow = m;
+ A->ncol = n;
+ A->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat) );
+ if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
+ Astore = A->Store;
+ Astore->nnz = nnz;
+ Astore->nzval = nzval;
+ Astore->colind = colind;
+ Astore->rowptr = rowptr;
+}
+
+/*! \brief Copy matrix A into matrix B. */
+void
+sCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
+{
+ NCformat *Astore, *Bstore;
+ int ncol, nnz, i;
+
+ B->Stype = A->Stype;
+ B->Dtype = A->Dtype;
+ B->Mtype = A->Mtype;
+ B->nrow = A->nrow;;
+ B->ncol = ncol = A->ncol;
+ Astore = (NCformat *) A->Store;
+ Bstore = (NCformat *) B->Store;
+ Bstore->nnz = nnz = Astore->nnz;
+ for (i = 0; i < nnz; ++i)
+ ((float *)Bstore->nzval)[i] = ((float *)Astore->nzval)[i];
+ for (i = 0; i < nnz; ++i) Bstore->rowind[i] = Astore->rowind[i];
+ for (i = 0; i <= ncol; ++i) Bstore->colptr[i] = Astore->colptr[i];
+}
+
+
+void
+sCreate_Dense_Matrix(SuperMatrix *X, int m, int n, float *x, int ldx,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ DNformat *Xstore;
+
+ X->Stype = stype;
+ X->Dtype = dtype;
+ X->Mtype = mtype;
+ X->nrow = m;
+ X->ncol = n;
+ X->Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
+ if ( !(X->Store) ) ABORT("SUPERLU_MALLOC fails for X->Store");
+ Xstore = (DNformat *) X->Store;
+ Xstore->lda = ldx;
+ Xstore->nzval = (float *) x;
+}
+
+void
+sCopy_Dense_Matrix(int M, int N, float *X, int ldx,
+ float *Y, int ldy)
+{
+/*! \brief Copies a two-dimensional matrix X to another matrix Y.
+ */
+ int i, j;
+
+ for (j = 0; j < N; ++j)
+ for (i = 0; i < M; ++i)
+ Y[i + j*ldy] = X[i + j*ldx];
+}
+
+void
+sCreate_SuperNode_Matrix(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)
+{
+ SCformat *Lstore;
+
+ L->Stype = stype;
+ L->Dtype = dtype;
+ L->Mtype = mtype;
+ L->nrow = m;
+ L->ncol = n;
+ L->Store = (void *) SUPERLU_MALLOC( sizeof(SCformat) );
+ if ( !(L->Store) ) ABORT("SUPERLU_MALLOC fails for L->Store");
+ Lstore = L->Store;
+ Lstore->nnz = nnz;
+ Lstore->nsuper = col_to_sup[n];
+ Lstore->nzval = nzval;
+ Lstore->nzval_colptr = nzval_colptr;
+ Lstore->rowind = rowind;
+ Lstore->rowind_colptr = rowind_colptr;
+ Lstore->col_to_sup = col_to_sup;
+ Lstore->sup_to_col = sup_to_col;
+
+}
+
+
+/*! \brief Convert a row compressed storage into a column compressed storage.
+ */
+void
+sCompRow_to_CompCol(int m, int n, int nnz,
+ float *a, int *colind, int *rowptr,
+ float **at, int **rowind, int **colptr)
+{
+ register int i, j, col, relpos;
+ int *marker;
+
+ /* Allocate storage for another copy of the matrix. */
+ *at = (float *) floatMalloc(nnz);
+ *rowind = (int *) intMalloc(nnz);
+ *colptr = (int *) intMalloc(n+1);
+ marker = (int *) intCalloc(n);
+
+ /* Get counts of each column of A, and set up column pointers */
+ for (i = 0; i < m; ++i)
+ for (j = rowptr[i]; j < rowptr[i+1]; ++j) ++marker[colind[j]];
+ (*colptr)[0] = 0;
+ for (j = 0; j < n; ++j) {
+ (*colptr)[j+1] = (*colptr)[j] + marker[j];
+ marker[j] = (*colptr)[j];
+ }
+
+ /* Transfer the matrix into the compressed column storage. */
+ for (i = 0; i < m; ++i) {
+ for (j = rowptr[i]; j < rowptr[i+1]; ++j) {
+ col = colind[j];
+ relpos = marker[col];
+ (*rowind)[relpos] = i;
+ (*at)[relpos] = a[j];
+ ++marker[col];
+ }
+ }
+
+ SUPERLU_FREE(marker);
+}
+
+
+void
+sPrint_CompCol_Matrix(char *what, SuperMatrix *A)
+{
+ NCformat *Astore;
+ register int i,n;
+ float *dp;
+
+ printf("\nCompCol matrix %s:\n", what);
+ printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
+ n = A->ncol;
+ Astore = (NCformat *) A->Store;
+ dp = (float *) Astore->nzval;
+ printf("nrow %d, ncol %d, nnz %d\n", A->nrow,A->ncol,Astore->nnz);
+ printf("nzval: ");
+ for (i = 0; i < Astore->colptr[n]; ++i) printf("%f ", dp[i]);
+ printf("\nrowind: ");
+ for (i = 0; i < Astore->colptr[n]; ++i) printf("%d ", Astore->rowind[i]);
+ printf("\ncolptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->colptr[i]);
+ printf("\n");
+ fflush(stdout);
+}
+
+void
+sPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
+{
+ SCformat *Astore;
+ register int i, j, k, c, d, n, nsup;
+ float *dp;
+ int *col_to_sup, *sup_to_col, *rowind, *rowind_colptr;
+
+ printf("\nSuperNode matrix %s:\n", what);
+ printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
+ n = A->ncol;
+ Astore = (SCformat *) A->Store;
+ dp = (float *) Astore->nzval;
+ col_to_sup = Astore->col_to_sup;
+ sup_to_col = Astore->sup_to_col;
+ rowind_colptr = Astore->rowind_colptr;
+ rowind = Astore->rowind;
+ printf("nrow %d, ncol %d, nnz %d, nsuper %d\n",
+ A->nrow,A->ncol,Astore->nnz,Astore->nsuper);
+ printf("nzval:\n");
+ for (k = 0; k <= Astore->nsuper; ++k) {
+ c = sup_to_col[k];
+ nsup = sup_to_col[k+1] - c;
+ for (j = c; j < c + nsup; ++j) {
+ d = Astore->nzval_colptr[j];
+ for (i = rowind_colptr[c]; i < rowind_colptr[c+1]; ++i) {
+ printf("%d\t%d\t%e\n", rowind[i], j, dp[d++]);
+ }
+ }
+ }
+#if 0
+ for (i = 0; i < Astore->nzval_colptr[n]; ++i) printf("%f ", dp[i]);
+#endif
+ printf("\nnzval_colptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->nzval_colptr[i]);
+ printf("\nrowind: ");
+ for (i = 0; i < Astore->rowind_colptr[n]; ++i)
+ printf("%d ", Astore->rowind[i]);
+ printf("\nrowind_colptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->rowind_colptr[i]);
+ printf("\ncol_to_sup: ");
+ for (i = 0; i < n; ++i) printf("%d ", col_to_sup[i]);
+ printf("\nsup_to_col: ");
+ for (i = 0; i <= Astore->nsuper+1; ++i)
+ printf("%d ", sup_to_col[i]);
+ printf("\n");
+ fflush(stdout);
+}
+
+void
+sPrint_Dense_Matrix(char *what, SuperMatrix *A)
+{
+ 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);
+ dp = (float *) Astore->nzval;
+ printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
+ printf("\nnzval: ");
+ for (j = 0; j < A->ncol; ++j) {
+ for (i = 0; i < A->nrow; ++i) printf("%f ", dp[i + j*lda]);
+ printf("\n");
+ }
+ printf("\n");
+ fflush(stdout);
+}
+
+/*! \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)
+{
+ int i, k, fsupc;
+ int *xsup, *supno;
+ int *xlsub, *lsub;
+ float *lusup;
+ int *xlusup;
+ float *ucol;
+ int *usub, *xusub;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (float *) Glu->lusup;
+ xlusup = Glu->xlusup;
+ ucol = (float *) Glu->ucol;
+ usub = Glu->usub;
+ xusub = Glu->xusub;
+
+ printf("%s", msg);
+ printf("col %d: pivrow %d, supno %d, xprune %d\n",
+ jcol, pivrow, supno[jcol], xprune[jcol]);
+
+ printf("\tU-col:\n");
+ for (i = xusub[jcol]; i < xusub[jcol+1]; i++)
+ printf("\t%d%10.4f\n", usub[i], ucol[i]);
+ printf("\tL-col in rectangular snode:\n");
+ fsupc = xsup[supno[jcol]]; /* first col of the snode */
+ i = xlsub[fsupc];
+ k = xlusup[jcol];
+ while ( i < xlsub[fsupc+1] && k < xlusup[jcol+1] ) {
+ printf("\t%d\t%10.4f\n", lsub[i], lusup[k]);
+ i++; k++;
+ }
+ fflush(stdout);
+}
+
+
+/*! \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)
+{
+ int i;
+
+ for (i = 0; i < n; i++) {
+ if (tempv[i] != 0.0)
+ {
+ fprintf(stderr,"tempv[%d] = %f\n", i,tempv[i]);
+ ABORT("scheck_tempv");
+ }
+ }
+}
+
+
+void
+sGenXtrue(int n, int nrhs, float *x, int ldx)
+{
+ int i, j;
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < n; ++i) {
+ x[i + j*ldx] = 1.0;/* + (float)(i+1.)/n;*/
+ }
+}
+
+/*! \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,
+ SuperMatrix *A, SuperMatrix *B)
+{
+ NCformat *Astore;
+ float *Aval;
+ DNformat *Bstore;
+ float *rhs;
+ float one = 1.0;
+ float zero = 0.0;
+ int ldc;
+ char transc[1];
+
+ Astore = A->Store;
+ Aval = (float *) Astore->nzval;
+ Bstore = B->Store;
+ rhs = Bstore->nzval;
+ ldc = Bstore->lda;
+
+ if ( trans == NOTRANS ) *(unsigned char *)transc = 'N';
+ else *(unsigned char *)transc = 'T';
+
+ sp_sgemm(transc, "N", A->nrow, nrhs, A->ncol, one, A,
+ x, ldx, zero, rhs, ldc);
+
+}
+
+/*! \brief Fills a float precision array with a given value.
+ */
+void
+sfill(float *a, int alen, float dval)
+{
+ register int i;
+ for (i = 0; i < alen; i++) a[i] = dval;
+}
+
+
+
+/*! \brief Check the inf-norm of the error vector
+ */
+void sinf_norm_error(int nrhs, SuperMatrix *X, float *xtrue)
+{
+ DNformat *Xstore;
+ float err, xnorm;
+ float *Xmat, *soln_work;
+ int i, j;
+
+ Xstore = X->Store;
+ Xmat = Xstore->nzval;
+
+ for (j = 0; j < nrhs; j++) {
+ soln_work = &Xmat[j*Xstore->lda];
+ err = xnorm = 0.0;
+ for (i = 0; i < X->nrow; i++) {
+ err = SUPERLU_MAX(err, fabs(soln_work[i] - xtrue[i]));
+ xnorm = SUPERLU_MAX(xnorm, fabs(soln_work[i]));
+ }
+ err = err / xnorm;
+ printf("||X - Xtrue||/||X|| = %e\n", err);
+ }
+}
+
+
+
+/*! \brief Print performance of the code. */
+void
+sPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
+ float rpg, float rcond, float *ferr,
+ float *berr, char *equed, SuperLUStat_t *stat)
+{
+ SCformat *Lstore;
+ NCformat *Ustore;
+ double *utime;
+ flops_t *ops;
+
+ utime = stat->utime;
+ ops = stat->ops;
+
+ if ( utime[FACT] != 0. )
+ printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
+ ops[FACT]*1e-6/utime[FACT]);
+ printf("Identify relaxed snodes = %8.2f\n", utime[RELAX]);
+ if ( utime[SOLVE] != 0. )
+ printf("Solve flops = %.0f, Mflops = %8.2f\n", ops[SOLVE],
+ ops[SOLVE]*1e-6/utime[SOLVE]);
+
+ Lstore = (SCformat *) L->Store;
+ Ustore = (NCformat *) U->Store;
+ printf("\tNo of nonzeros in factor L = %d\n", Lstore->nnz);
+ 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\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",
+ utime[FACT], ops[FACT]*1e-6/utime[FACT],
+ utime[SOLVE], ops[SOLVE]*1e-6/utime[SOLVE],
+ utime[ETREE], utime[EQUIL], utime[RCOND], utime[REFINE]);
+
+ printf("\tRpg\t\tRcond\t\tFerr\t\tBerr\t\tEquil?\n");
+ printf("NUM:\t%e\t%e\t%e\t%e\t%s\n",
+ rpg, rcond, ferr[0], berr[0], equed);
+
+}
+
+
+
+
+print_float_vec(char *what, int n, float *vec)
+{
+ int i;
+ printf("%s: n %d\n", what, n);
+ for (i = 0; i < n; ++i) printf("%d\t%f\n", i, vec[i]);
+ return 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/util.c b/SuperLU_5.2.0/SRC/util.c
new file mode 100644
index 0000000..a08e83e
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/util.c
@@ -0,0 +1,503 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*! @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.
+ * 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>
+ */
+
+
+#include <math.h>
+#include "slu_ddefs.h"
+
+/*! \brief Global statistics variale
+ */
+
+void superlu_abort_and_exit(char* msg)
+{
+ fprintf(stderr, "%s", msg);
+ exit (-1);
+}
+
+/*! \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->Trans = NOTRANS;
+ options->IterRefine = NOREFINE;
+ options->DiagPivotThresh = 1.0;
+ options->SymmetricMode = NO;
+ options->PivotGrowth = NO;
+ options->ConditionNumber = NO;
+ options->PrintStat = YES;
+}
+
+/*! \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)
+{
+ printf(".. options:\n");
+ printf("\tFact\t %8d\n", options->Fact);
+ printf("\tEquil\t %8d\n", options->Equil);
+ printf("\tColPerm\t %8d\n", options->ColPerm);
+ printf("\tDiagPivotThresh %8.4f\n", options->DiagPivotThresh);
+ printf("\tTrans\t %8d\n", options->Trans);
+ printf("\tIterRefine\t%4d\n", options->IterRefine);
+ printf("\tSymmetricMode\t%4d\n", options->SymmetricMode);
+ printf("\tPivotGrowth\t%4d\n", options->PivotGrowth);
+ printf("\tConditionNumber\t%4d\n", options->ConditionNumber);
+ printf("..\n");
+}
+
+/*! \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)
+{
+ SUPERLU_FREE ( A->Store );
+}
+
+void
+Destroy_CompCol_Matrix(SuperMatrix *A)
+{
+ SUPERLU_FREE( ((NCformat *)A->Store)->rowind );
+ SUPERLU_FREE( ((NCformat *)A->Store)->colptr );
+ SUPERLU_FREE( ((NCformat *)A->Store)->nzval );
+ SUPERLU_FREE( A->Store );
+}
+
+void
+Destroy_CompRow_Matrix(SuperMatrix *A)
+{
+ SUPERLU_FREE( ((NRformat *)A->Store)->colind );
+ SUPERLU_FREE( ((NRformat *)A->Store)->rowptr );
+ SUPERLU_FREE( ((NRformat *)A->Store)->nzval );
+ SUPERLU_FREE( A->Store );
+}
+
+void
+Destroy_SuperNode_Matrix(SuperMatrix *A)
+{
+ SUPERLU_FREE ( ((SCformat *)A->Store)->rowind );
+ SUPERLU_FREE ( ((SCformat *)A->Store)->rowind_colptr );
+ SUPERLU_FREE ( ((SCformat *)A->Store)->nzval );
+ SUPERLU_FREE ( ((SCformat *)A->Store)->nzval_colptr );
+ SUPERLU_FREE ( ((SCformat *)A->Store)->col_to_sup );
+ SUPERLU_FREE ( ((SCformat *)A->Store)->sup_to_col );
+ SUPERLU_FREE ( A->Store );
+}
+
+/*! \brief A is of type Stype==NCP */
+void
+Destroy_CompCol_Permuted(SuperMatrix *A)
+{
+ SUPERLU_FREE ( ((NCPformat *)A->Store)->colbeg );
+ SUPERLU_FREE ( ((NCPformat *)A->Store)->colend );
+ SUPERLU_FREE ( A->Store );
+}
+
+/*! \brief A is of type Stype==DN */
+void
+Destroy_Dense_Matrix(SuperMatrix *A)
+{
+ DNformat* Astore = A->Store;
+ SUPERLU_FREE (Astore->nzval);
+ SUPERLU_FREE ( A->Store );
+}
+
+/*! \brief Reset repfnz[] for the current column
+ */
+void
+resetrep_col (const int nseg, const int *segrep, int *repfnz)
+{
+ int i, irep;
+
+ for (i = 0; i < nseg; i++) {
+ irep = segrep[i];
+ repfnz[irep] = EMPTY;
+ }
+}
+
+
+/*! \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)
+{
+ int nsuper, fsupc, i, j;
+ int nnzL0, jlen, irep;
+ int *xsup, *xlsub;
+
+ xsup = Glu->xsup;
+ xlsub = Glu->xlsub;
+ *nnzL = 0;
+ *nnzU = (Glu->xusub)[n];
+ nnzL0 = 0;
+ 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;
+ nnzL0 += xprune[irep] - xlsub[irep];
+ }
+
+ /* 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;
+ }
+}
+
+
+/*! \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)
+{
+ register int nsuper, fsupc, nextl, i, j, k, jstrt;
+ int *xsup, *lsub, *xlsub;
+
+ if ( n <= 1 ) return;
+
+ xsup = Glu->xsup;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ nextl = 0;
+ nsuper = (Glu->supno)[n];
+
+ /*
+ * For each supernode ...
+ */
+ for (i = 0; i <= nsuper; i++) {
+ fsupc = xsup[i];
+ jstrt = xlsub[fsupc];
+ xlsub[fsupc] = nextl;
+ for (j = jstrt; j < xlsub[fsupc+1]; j++) {
+ lsub[nextl] = perm_r[lsub[j]]; /* Now indexed into P*A */
+ nextl++;
+ }
+ for (k = fsupc+1; k < xsup[i+1]; k++)
+ xlsub[k] = nextl; /* Other columns in supernode i */
+
+ }
+
+ xlsub[n] = nextl;
+}
+
+
+/*! \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)
+{
+ int j, k;
+
+ for (j = jcol; j < jcol+w; j++) {
+ printf("\tcol %d:\n", j);
+ for (k = 0; k < nseg; k++)
+ printf("\t\tseg %d, segrep %d, repfnz %d\n", k,
+ segrep[k], repfnz[(j-jcol)*n + segrep[k]]);
+ }
+
+}
+
+
+void
+StatInit(SuperLUStat_t *stat)
+{
+ register int i, w, panel_size, relax;
+
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+ w = SUPERLU_MAX(panel_size, relax);
+ stat->panel_histo = intCalloc(w+1);
+ stat->utime = (double *) SUPERLU_MALLOC(NPHASES * sizeof(double));
+ if (!stat->utime) ABORT("SUPERLU_MALLOC fails for stat->utime");
+ stat->ops = (flops_t *) SUPERLU_MALLOC(NPHASES * sizeof(flops_t));
+ if (!stat->ops) ABORT("SUPERLU_MALLOC fails for stat->ops");
+ for (i = 0; i < NPHASES; ++i) {
+ 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
+}
+
+
+void
+StatPrint(SuperLUStat_t *stat)
+{
+ double *utime;
+ flops_t *ops;
+
+ utime = stat->utime;
+ ops = stat->ops;
+ printf("Factor time = %8.2f\n", utime[FACT]);
+ if ( utime[FACT] != 0.0 )
+ printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
+ ops[FACT]*1e-6/utime[FACT]);
+
+ printf("Solve time = %8.2f\n", utime[SOLVE]);
+ if ( utime[SOLVE] != 0.0 )
+ 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);
+
+}
+
+
+void
+StatFree(SuperLUStat_t *stat)
+{
+ SUPERLU_FREE(stat->panel_histo);
+ SUPERLU_FREE(stat->utime);
+ SUPERLU_FREE(stat->ops);
+}
+
+
+flops_t
+LUFactFlops(SuperLUStat_t *stat)
+{
+ return (stat->ops[FACT]);
+}
+
+flops_t
+LUSolveFlops(SuperLUStat_t *stat)
+{
+ return (stat->ops[SOLVE]);
+}
+
+
+
+
+
+/*! \brief Fills an integer array with a given value.
+ */
+void ifill(int *a, int alen, int ival)
+{
+ register int i;
+ for (i = 0; i < alen; i++) a[i] = ival;
+}
+
+
+
+/*! \brief Get the statistics of the supernodes
+ */
+#define NBUCKS 10
+
+void super_stats(int nsuper, int *xsup)
+{
+ register int nsup1 = 0;
+ int i, isize, whichb, bl, bh;
+ int bucket[NBUCKS];
+ int max_sup_size = 0;
+
+ for (i = 0; i <= nsuper; i++) {
+ isize = xsup[i+1] - xsup[i];
+ if ( isize == 1 ) nsup1++;
+ if ( max_sup_size < isize ) max_sup_size = isize;
+ }
+
+ printf(" Supernode statistics:\n\tno of super = %d\n", nsuper+1);
+ printf("\tmax supernode size = %d\n", max_sup_size);
+ printf("\tno of size 1 supernodes = %d\n", nsup1);
+
+ /* Histogram of the supernode sizes */
+ ifill (bucket, NBUCKS, 0);
+
+ for (i = 0; i <= nsuper; i++) {
+ isize = xsup[i+1] - xsup[i];
+ whichb = (float) isize / max_sup_size * NBUCKS;
+ if (whichb >= NBUCKS) whichb = NBUCKS - 1;
+ bucket[whichb]++;
+ }
+
+ printf("\tHistogram of supernode sizes:\n");
+ for (i = 0; i < NBUCKS; i++) {
+ bl = (float) i * max_sup_size / NBUCKS;
+ bh = (float) (i+1) * max_sup_size / NBUCKS;
+ printf("\tsnode: %d-%d\t\t%d\n", bl+1, bh, bucket[i]);
+ }
+
+}
+
+
+float SpaSize(int n, int np, float sum_npw)
+{
+ return (sum_npw*8 + np*8 + n*4)/1024.;
+}
+
+float DenseSize(int n, float sum_nw)
+{
+ return (sum_nw*8 + n*8)/1024.;;
+}
+
+
+
+/*! \brief Check whether repfnz[] == EMPTY after reset.
+ */
+void check_repfnz(int n, int w, int jcol, int *repfnz)
+{
+ int jj, k;
+
+ for (jj = jcol; jj < jcol+w; jj++)
+ for (k = 0; k < n; k++)
+ if ( repfnz[(jj-jcol)*n + k] != EMPTY ) {
+ fprintf(stderr, "col %d, repfnz_col[%d] = %d\n", jj,
+ k, repfnz[(jj-jcol)*n + k]);
+ ABORT("check_repfnz");
+ }
+}
+
+
+/*! \brief Print a summary of the testing results. */
+void
+PrintSumm(char *type, int nfail, int nrun, int nerrs)
+{
+ if ( nfail > 0 )
+ printf("%3s driver: %d out of %d tests failed to pass the threshold\n",
+ type, nfail, nrun);
+ else
+ printf("All tests for %3s driver passed the threshold (%6d tests run)\n", type, nrun);
+
+ if ( nerrs > 0 )
+ printf("%6d error messages recorded\n", nerrs);
+}
+
+
+int print_int_vec(char *what, int n, int *vec)
+{
+ int i;
+ printf("%s\n", what);
+ 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/SuperLU_5.2.0/SRC/zcolumn_bmod.c b/SuperLU_5.2.0/SRC/zcolumn_bmod.c
new file mode 100644
index 0000000..453ebe6
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zcolumn_bmod.c
@@ -0,0 +1,377 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * </pre>
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "slu_zdefs.h"
+
+/*
+ * Function prototypes
+ */
+void zusolve(int, int, doublecomplex*, doublecomplex*);
+void zlsolve(int, int, doublecomplex*, doublecomplex*);
+void zmatvec(int, int, int, doublecomplex*, doublecomplex*, doublecomplex*);
+
+
+
+/*! \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 (
+ const int jcol, /* in */
+ const int nseg, /* in */
+ doublecomplex *dense, /* in */
+ doublecomplex *tempv, /* working array */
+ int *segrep, /* in */
+ int *repfnz, /* in */
+ int fpanelc, /* in -- first column in the current panel */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ doublecomplex alpha, beta;
+
+ /* krep = representative of current k-th supernode
+ * fsupc = first supernodal column
+ * nsupc = no of columns in supernode
+ * nsupr = no of rows in supernode (used as leading dimension)
+ * luptr = location of supernodal LU-block in storage
+ * kfnz = first nonz in the k-th supernodal segment
+ * no_zeros = no of leading zeros in a supernodal U-segment
+ */
+ doublecomplex ukj, ukj1, ukj2;
+ int luptr, luptr1, luptr2;
+ int fsupc, nsupc, nsupr, segsze;
+ int nrow; /* No of rows in the matrix of matrix-vector */
+ int jcolp1, jsupno, k, ksub, krep, krep_ind, ksupno;
+ register int lptr, kfnz, isub, irow, i;
+ register int no_zeros, new_next;
+ int ufirst, nextlu;
+ int fst_col; /* First column within small LU update */
+ int d_fsupc; /* Distance between the first column of the current
+ panel and the first column of the current snode. */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ doublecomplex *lusup;
+ int *xlusup;
+ int nzlumax;
+ doublecomplex *tempv1;
+ doublecomplex zero = {0.0, 0.0};
+ doublecomplex one = {1.0, 0.0};
+ doublecomplex none = {-1.0, 0.0};
+ doublecomplex comp_temp, comp_temp1;
+ int mem_error;
+ flops_t *ops = stat->ops;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (doublecomplex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+ nzlumax = Glu->nzlumax;
+ jcolp1 = jcol + 1;
+ jsupno = supno[jcol];
+
+ /*
+ * For each nonz supernode segment of U[*,j] in topological order
+ */
+ k = nseg - 1;
+ for (ksub = 0; ksub < nseg; ksub++) {
+
+ krep = segrep[k];
+ k--;
+ ksupno = supno[krep];
+ if ( jsupno != ksupno ) { /* Outside the rectangular supernode */
+
+ fsupc = xsup[ksupno];
+ fst_col = SUPERLU_MAX ( fsupc, fpanelc );
+
+ /* Distance from the current supernode to the current panel;
+ d_fsupc=0 if fsupc > fpanelc. */
+ d_fsupc = fst_col - fsupc;
+
+ luptr = xlusup[fst_col] + d_fsupc;
+ lptr = xlsub[fsupc] + d_fsupc;
+
+ kfnz = repfnz[krep];
+ kfnz = SUPERLU_MAX ( kfnz, fpanelc );
+
+ segsze = krep - kfnz + 1;
+ nsupc = krep - fst_col + 1;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
+ nrow = nsupr - d_fsupc - nsupc;
+ krep_ind = lptr + nsupc - 1;
+
+ ops[TRSV] += 4 * segsze * (segsze - 1);
+ ops[GEMV] += 8 * nrow * segsze;
+
+
+
+ /*
+ * Case 1: Update U-segment of size 1 -- col-col update
+ */
+ if ( segsze == 1 ) {
+ ukj = dense[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ zz_mult(&comp_temp, &ukj, &lusup[luptr]);
+ z_sub(&dense[irow], &dense[irow], &comp_temp);
+ luptr++;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ ukj1 = dense[lsub[krep_ind - 1]];
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) { /* Case 2: 2cols-col update */
+ zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ z_sub(&ukj, &ukj, &comp_temp);
+ dense[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++;
+ luptr1++;
+ zz_mult(&comp_temp, &ukj, &lusup[luptr]);
+ zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ z_sub(&dense[irow], &dense[irow], &comp_temp);
+ }
+ } else { /* Case 3: 3cols-col update */
+ ukj2 = dense[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ zz_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
+ z_sub(&ukj1, &ukj1, &comp_temp);
+
+ zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ z_sub(&ukj, &ukj, &comp_temp);
+
+ dense[lsub[krep_ind]] = ukj;
+ dense[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++;
+ luptr1++;
+ luptr2++;
+ zz_mult(&comp_temp, &ukj, &lusup[luptr]);
+ zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ z_sub(&dense[irow], &dense[irow], &comp_temp);
+ }
+ }
+
+
+ } else {
+ /*
+ * Case: sup-col update
+ * Perform a triangular solve and block update,
+ * then scatter the result of sup-col update to dense
+ */
+
+ no_zeros = kfnz - fst_col;
+
+ /* Copy U[*,j] segment from dense[*] to tempv[*] */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ tempv[i] = dense[irow];
+ ++isub;
+ }
+
+ /* Dense triangular solve -- start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#else
+ ztrsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#endif
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ CGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#else
+ zgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#endif
+#else
+ zlsolve ( nsupr, segsze, &lusup[luptr], tempv );
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ zmatvec (nsupr, nrow , segsze, &lusup[luptr], tempv, tempv1);
+#endif
+
+
+ /* Scatter tempv[] into SPA dense[] as a temporary storage */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense[irow] = tempv[i];
+ tempv[i] = zero;
+ ++isub;
+ }
+
+ /* Scatter tempv1[] into SPA dense[] */
+ for (i = 0; i < nrow; i++) {
+ irow = lsub[isub];
+ z_sub(&dense[irow], &dense[irow], &tempv1[i]);
+ tempv1[i] = zero;
+ ++isub;
+ }
+ }
+
+ } /* if jsupno ... */
+
+ } /* for each segment... */
+
+ /*
+ * Process the supernodal portion of L\U[*,j]
+ */
+ nextlu = xlusup[jcol];
+ fsupc = xsup[jsupno];
+
+ /* Copy the SPA dense into L\U[*,j] */
+ new_next = nextlu + xlsub[fsupc+1] - xlsub[fsupc];
+ while ( new_next > nzlumax ) {
+ if (mem_error = zLUMemXpand(jcol, nextlu, LUSUP, &nzlumax, Glu))
+ return (mem_error);
+ lusup = (doublecomplex *) Glu->lusup;
+ lsub = Glu->lsub;
+ }
+
+ for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
+ irow = lsub[isub];
+ lusup[nextlu] = dense[irow];
+ dense[irow] = zero;
+ ++nextlu;
+ }
+
+ xlusup[jcolp1] = nextlu; /* Close L\U[*,jcol] */
+
+ /* For more updates within the panel (also within the current supernode),
+ * should start from the first column of the panel, or the first column
+ * of the supernode, whichever is bigger. There are 2 cases:
+ * 1) fsupc < fpanelc, then fst_col := fpanelc
+ * 2) fsupc >= fpanelc, then fst_col := fsupc
+ */
+ fst_col = SUPERLU_MAX ( fsupc, fpanelc );
+
+ if ( fst_col < jcol ) {
+
+ /* Distance between the current supernode and the current panel.
+ d_fsupc=0 if fsupc >= fpanelc. */
+ d_fsupc = fst_col - fsupc;
+
+ lptr = xlsub[fsupc] + d_fsupc;
+ luptr = xlusup[fst_col] + d_fsupc;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc]; /* Leading dimension */
+ nsupc = jcol - fst_col; /* Excluding jcol */
+ nrow = nsupr - d_fsupc - nsupc;
+
+ /* Points to the beginning of jcol in snode L\U(jsupno) */
+ ufirst = xlusup[jcol] + d_fsupc;
+
+ ops[TRSV] += 4 * nsupc * (nsupc - 1);
+ ops[GEMV] += 8 * nrow * nsupc;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr],
+ &nsupr, &lusup[ufirst], &incx );
+#else
+ ztrsv_( "L", "N", "U", &nsupc, &lusup[luptr],
+ &nsupr, &lusup[ufirst], &incx );
+#endif
+
+ alpha = none; beta = one; /* y := beta*y + alpha*A*x */
+
+#ifdef _CRAY
+ CGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#else
+ zgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#endif
+#else
+ zlsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
+
+ zmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
+ &lusup[ufirst], tempv );
+
+ /* Copy updates from tempv[*] into lusup[*] */
+ isub = ufirst + nsupc;
+ for (i = 0; i < nrow; i++) {
+ z_sub(&lusup[isub], &lusup[isub], &tempv[i]);
+ tempv[i] = zero;
+ ++isub;
+ }
+
+#endif
+
+
+ } /* if fst_col < jcol ... */
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/zcolumn_dfs.c b/SuperLU_5.2.0/SRC/zcolumn_dfs.c
new file mode 100644
index 0000000..ab04837
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zcolumn_dfs.c
@@ -0,0 +1,281 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * </pre>
+*/
+
+#include "slu_zdefs.h"
+
+/*! \brief What type of supernodes we want */
+#define T2_SUPER
+
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ * 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
+ * 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 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.
+ *
+ * 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.
+ *
+ * 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
+ *
+ * Return value
+ * ============
+ * 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 */
+ int fsupc; /* First column of a snode */
+ int myfnz; /* First nonz column of a U-segment */
+ int chperm, chmark, chrep, kchild;
+ int xdfs, maxdfs, kpar, oldrep;
+ int jptr, jm1ptr;
+ int ito, ifrom, istop; /* Used to compress row subscripts */
+ int mem_error;
+ int *xsup, *supno, *lsub, *xlsub;
+ int nzlmax;
+ int maxsuper;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ nzlmax = Glu->nzlmax;
+
+ maxsuper = sp_ienv(3);
+ jcolp1 = jcol + 1;
+ jcolm1 = jcol - 1;
+ nsuper = supno[jcol];
+ jsuper = nsuper;
+ nextl = xlsub[jcol];
+ marker2 = &marker[2*m];
+
+ /* For each nonzero in A[*,jcol] do dfs */
+ for (k = 0; lsub_col[k] != EMPTY; k++) {
+
+ krow = lsub_col[k];
+ lsub_col[k] = EMPTY;
+ kmark = marker2[krow];
+
+ /* krow was visited before, go to the next nonz */
+ if ( kmark == jcol ) continue;
+
+ /* For each unmarked nbr krow of jcol
+ * krow is in L: place it in structure of L[*,jcol]
+ */
+ marker2[krow] = jcol;
+ kperm = perm_r[krow];
+
+ if ( kperm == EMPTY ) {
+ lsub[nextl++] = krow; /* krow is indexed into A */
+ if ( nextl >= nzlmax ) {
+ 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 {
+ /* krow is in U: if its supernode-rep krep
+ * has been explored, update repfnz[*]
+ */
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz[krep];
+
+ if ( myfnz != EMPTY ) { /* Visited before */
+ 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];
+
+ do {
+ /*
+ * For each unmarked kchild of krep
+ */
+ while ( xdfs < maxdfs ) {
+
+ kchild = lsub[xdfs];
+ xdfs++;
+ chmark = marker2[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;
+ if ( nextl >= nzlmax ) {
+ 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 */
+ if ( myfnz > 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) */
+ parent[krep] = oldrep;
+ repfnz[krep] = chperm;
+ xdfs = xlsub[krep];
+ maxdfs = xprune[krep];
+ } /* else */
+
+ } /* else */
+
+ } /* if */
+
+ } /* while */
+
+ /* krow has no more unexplored nbrs;
+ * place supernode-rep krep in postorder DFS.
+ * backtrack dfs to its parent
+ */
+ segrep[*nseg] = krep;
+ ++(*nseg);
+ kpar = parent[krep]; /* Pop from stack, mimic recursion */
+ if ( kpar == EMPTY ) break; /* dfs done */
+ krep = kpar;
+ xdfs = xplore[krep];
+ maxdfs = xprune[krep];
+
+ } while ( kpar != EMPTY ); /* Until empty stack */
+
+ } /* else */
+
+ } /* else */
+
+ } /* for each nonzero ... */
+
+ /* Check to see if j belongs in the same supernode as j-1 */
+ if ( jcol == 0 ) { /* Do nothing for column 0 */
+ nsuper = supno[0] = 0;
+ } else {
+ fsupc = xsup[nsuper];
+ jptr = xlsub[jcol]; /* Not compressed yet */
+ jm1ptr = xlsub[jcolm1];
+
+#ifdef T2_SUPER
+ if ( (nextl-jptr != jptr-jm1ptr-1) ) jsuper = EMPTY;
+#endif
+ /* 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)
+ */
+ if ( jsuper == EMPTY ) { /* starts a new supernode */
+ if ( (fsupc < jcolm1-1) ) { /* >= 3 columns in nsuper */
+#ifdef CHK_COMPRESS
+ printf(" Compress lsub[] at super %d-%d\n", fsupc, jcolm1);
+#endif
+ 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)
+ lsub[ito] = lsub[ifrom];
+ nextl = ito; /* = istop + length(jcol) */
+ }
+ nsuper++;
+ supno[jcol] = nsuper;
+ } /* if a new supernode */
+
+ } /* 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/SuperLU_5.2.0/SRC/zcopy_to_ucol.c b/SuperLU_5.2.0/SRC/zcopy_to_ucol.c
new file mode 100644
index 0000000..32716f6
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zcopy_to_ucol.c
@@ -0,0 +1,113 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_zdefs.h"
+
+int
+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 */
+ GlobalLU_t *Glu /* modified */
+ )
+{
+/*
+ * 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;
+ doublecomplex zero = {0.0, 0.0};
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ ucol = (doublecomplex *) Glu->ucol;
+ usub = Glu->usub;
+ xusub = Glu->xusub;
+ nzumax = Glu->nzumax;
+
+ 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))
+ return (mem_error);
+ ucol = (doublecomplex *) Glu->ucol;
+ if (mem_error = zLUMemXpand(jcol, nextu, USUB, &nzumax, Glu))
+ return (mem_error);
+ usub = Glu->usub;
+ lsub = Glu->lsub;
+ }
+
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ usub[nextu] = perm_r[irow];
+ ucol[nextu] = dense[irow];
+ dense[irow] = zero;
+ nextu++;
+ isub++;
+ }
+
+ }
+
+ }
+
+ } /* for each segment... */
+
+ xusub[jcol + 1] = nextu; /* Close U[*,jcol] */
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/zdiagonal.c b/SuperLU_5.2.0/SRC/zdiagonal.c
new file mode 100644
index 0000000..8319194
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zdiagonal.c
@@ -0,0 +1,143 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/zgscon.c b/SuperLU_5.2.0/SRC/zgscon.c
new file mode 100644
index 0000000..5159dfe
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zgscon.c
@@ -0,0 +1,165 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file zgscon.c
+ * \brief Estimates reciprocal of the condition number of a general matrix
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * July 25, 2015
+ *
+ * Modified from lapack routines ZGECON.
+ * </pre>
+ */
+
+/*
+ * File name: zgscon.c
+ * History: Modified from lapack routines ZGECON.
+ */
+#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)
+{
+
+
+ /* Local variables */
+ int kase, kase1, onenrm, i;
+ double ainvnm;
+ doublecomplex *work;
+ int isave[3];
+ extern int zrscl_(int *, doublecomplex *, doublecomplex *, int *);
+
+ extern int zlacon2_(int *, doublecomplex *, doublecomplex *, double *, int *, int []);
+
+
+ /* Test the input parameters. */
+ *info = 0;
+ onenrm = *(unsigned char *)norm == '1' || strncmp(norm, "O", 1)==0;
+ if (! onenrm && ! strncmp(norm, "I", 1)==0) *info = -1;
+ else if (L->nrow < 0 || L->nrow != L->ncol ||
+ L->Stype != SLU_SC || L->Dtype != SLU_Z || L->Mtype != SLU_TRLU)
+ *info = -2;
+ else if (U->nrow < 0 || U->nrow != U->ncol ||
+ U->Stype != SLU_NC || U->Dtype != SLU_Z || U->Mtype != SLU_TRU)
+ *info = -3;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("zgscon", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ *rcond = 0.;
+ if ( L->nrow == 0 || U->nrow == 0) {
+ *rcond = 1.;
+ return;
+ }
+
+ work = doublecomplexCalloc( 3*L->nrow );
+
+
+ if ( !work )
+ ABORT("Malloc fails for work arrays in zgscon.");
+
+ /* Estimate the norm of inv(A). */
+ ainvnm = 0.;
+ if ( onenrm ) kase1 = 1;
+ else kase1 = 2;
+ kase = 0;
+
+ do {
+ zlacon2_(&L->nrow, &work[L->nrow], &work[0], &ainvnm, &kase, isave);
+
+ if (kase == 0) break;
+
+ if (kase == kase1) {
+ /* Multiply by inv(L). */
+ sp_ztrsv("L", "No trans", "Unit", L, U, &work[0], stat, info);
+
+ /* Multiply by inv(U). */
+ sp_ztrsv("U", "No trans", "Non-unit", L, U, &work[0], stat, info);
+
+ } else {
+
+ /* Multiply by inv(U'). */
+ sp_ztrsv("U", "Transpose", "Non-unit", L, U, &work[0], stat, info);
+
+ /* Multiply by inv(L'). */
+ sp_ztrsv("L", "Transpose", "Unit", L, U, &work[0], stat, info);
+
+ }
+
+ } while ( kase != 0 );
+
+ /* Compute the estimate of the reciprocal condition number. */
+ if (ainvnm != 0.) *rcond = (1. / ainvnm) / anorm;
+
+ SUPERLU_FREE (work);
+ return;
+
+} /* zgscon */
+
diff --git a/SuperLU_5.2.0/SRC/zgsequ.c b/SuperLU_5.2.0/SRC/zgsequ.c
new file mode 100644
index 0000000..a73d1bb
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zgsequ.c
@@ -0,0 +1,205 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from LAPACK routine ZGEEQU
+ */
+#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)
+{
+
+
+ /* Local variables */
+ NCformat *Astore;
+ doublecomplex *Aval;
+ int i, j, irow;
+ double rcmin, rcmax;
+ double bignum, smlnum;
+ extern double dmach(char *);
+
+ /* Test the input parameters. */
+ *info = 0;
+ if ( A->nrow < 0 || A->ncol < 0 ||
+ A->Stype != SLU_NC || A->Dtype != SLU_Z || A->Mtype != SLU_GE )
+ *info = -1;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("zgsequ", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ if ( A->nrow == 0 || A->ncol == 0 ) {
+ *rowcnd = 1.;
+ *colcnd = 1.;
+ *amax = 0.;
+ return;
+ }
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Get machine constants. */
+ smlnum = dmach("S"); /* slamch_("S"); */
+ bignum = 1. / smlnum;
+
+ /* Compute row scale factors. */
+ for (i = 0; i < A->nrow; ++i) r[i] = 0.;
+
+ /* Find the maximum element in each row. */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ r[irow] = SUPERLU_MAX( r[irow], z_abs1(&Aval[i]) );
+ }
+
+ /* Find the maximum and minimum scale factors. */
+ rcmin = bignum;
+ rcmax = 0.;
+ for (i = 0; i < A->nrow; ++i) {
+ rcmax = SUPERLU_MAX(rcmax, r[i]);
+ rcmin = SUPERLU_MIN(rcmin, r[i]);
+ }
+ *amax = rcmax;
+
+ if (rcmin == 0.) {
+ /* Find the first zero scale factor and return an error code. */
+ for (i = 0; i < A->nrow; ++i)
+ if (r[i] == 0.) {
+ *info = i + 1;
+ return;
+ }
+ } else {
+ /* Invert the scale factors. */
+ for (i = 0; i < A->nrow; ++i)
+ r[i] = 1. / SUPERLU_MIN( SUPERLU_MAX( r[i], smlnum ), bignum );
+ /* Compute ROWCND = min(R(I)) / max(R(I)) */
+ *rowcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
+ }
+
+ /* Compute column scale factors */
+ for (j = 0; j < A->ncol; ++j) c[j] = 0.;
+
+ /* Find the maximum element in each column, assuming the row
+ scalings computed above. */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ c[j] = SUPERLU_MAX( c[j], z_abs1(&Aval[i]) * r[irow] );
+ }
+
+ /* Find the maximum and minimum scale factors. */
+ rcmin = bignum;
+ rcmax = 0.;
+ for (j = 0; j < A->ncol; ++j) {
+ rcmax = SUPERLU_MAX(rcmax, c[j]);
+ rcmin = SUPERLU_MIN(rcmin, c[j]);
+ }
+
+ if (rcmin == 0.) {
+ /* Find the first zero scale factor and return an error code. */
+ for (j = 0; j < A->ncol; ++j)
+ if ( c[j] == 0. ) {
+ *info = A->nrow + j + 1;
+ return;
+ }
+ } else {
+ /* Invert the scale factors. */
+ for (j = 0; j < A->ncol; ++j)
+ c[j] = 1. / SUPERLU_MIN( SUPERLU_MAX( c[j], smlnum ), bignum);
+ /* Compute COLCND = min(C(J)) / max(C(J)) */
+ *colcnd = SUPERLU_MAX( rcmin, smlnum ) / SUPERLU_MIN( rcmax, bignum );
+ }
+
+ return;
+
+} /* zgsequ */
+
+
diff --git a/SuperLU_5.2.0/SRC/zgsisx.c b/SuperLU_5.2.0/SRC/zgsisx.c
new file mode 100644
index 0000000..d5cccaf
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zgsisx.c
@@ -0,0 +1,738 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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,
+ GlobalLU_t *Glu, 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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ smlnum = dmach("Safe minimum"); /* lamch_("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 || strncmp(equed, "N", 1)==0) )
+ *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);
+ input_error("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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ }
+ 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, Glu, 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 ( *rcond < dmach("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/SuperLU_5.2.0/SRC/zgsitrf.c b/SuperLU_5.2.0/SRC/zgsitrf.c
new file mode 100644
index 0000000..4050134
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zgsitrf.c
@@ -0,0 +1,661 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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,
+ GlobalLU_t *Glu, /* persistent to facilitate multiple factorizations */
+ 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 */
+ 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]++;
+ ((doublecomplex *) 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 = (doublecomplex *) 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 = (doublecomplex *) Glu->ucol;
+ ((NCformat *)U->Store)->rowind = Glu->usub;
+ ((NCformat *)U->Store)->colptr = Glu->xusub;
+ } else {
+ zCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL,
+ (doublecomplex *) 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,
+ (doublecomplex *) 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/SuperLU_5.2.0/SRC/zgsrfs.c b/SuperLU_5.2.0/SRC/zgsrfs.c
new file mode 100644
index 0000000..02b63df
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zgsrfs.c
@@ -0,0 +1,475 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file zgsrfs.c
+ * \brief Improves computed solution to a system of inear equations
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Modified from lapack routine ZGERFS
+ * Last modified: December 3, 2015
+ * </pre>
+ */
+/*
+ * File name: zgsrfs.c
+ * History: Modified from lapack routine ZGERFS
+ */
+#include <math.h>
+#include "slu_zdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * ZGSRFS improves the computed solution to a system of linear
+ * equations and provides error bounds and backward error estimates for
+ * the solution.
+ *
+ * If equilibration was performed, the system becomes:
+ * (diag(R)*A_original*diag(C)) * X = diag(R)*B_original.
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * 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)
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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 zgstrs().
+ * 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.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See 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
+ *
+ * Internal Parameters
+ * ===================
+ *
+ * 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
+
+ /* Table of constant values */
+ int ione = 1;
+ doublecomplex ndone = {-1., 0.};
+ doublecomplex done = {1., 0.};
+
+ /* Local variables */
+ NCformat *Astore;
+ doublecomplex *Aval;
+ SuperMatrix Bjcol;
+ DNformat *Bstore, *Xstore, *Bjcol_store;
+ doublecomplex *Bmat, *Xmat, *Bptr, *Xptr;
+ int kase;
+ double safe1, safe2;
+ int i, j, k, irow, nz, count, notran, rowequ, colequ;
+ int ldb, ldx, nrhs;
+ double s, xk, lstres, eps, safmin;
+ char transc[1];
+ trans_t transt;
+ doublecomplex *work;
+ double *rwork;
+ int *iwork;
+ int isave[3];
+
+ extern int zlacon2_(int *, doublecomplex *, doublecomplex *, double *, int *, int []);
+#ifdef _CRAY
+ extern int CCOPY(int *, doublecomplex *, int *, doublecomplex *, int *);
+ extern int CSAXPY(int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *);
+#else
+ extern int zcopy_(int *, doublecomplex *, int *, doublecomplex *, int *);
+ extern int zaxpy_(int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *);
+#endif
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+ Bstore = B->Store;
+ Xstore = X->Store;
+ Bmat = Bstore->nzval;
+ Xmat = Xstore->nzval;
+ ldb = Bstore->lda;
+ ldx = Xstore->lda;
+ nrhs = B->ncol;
+
+ /* Test the input parameters */
+ *info = 0;
+ notran = (trans == NOTRANS);
+ if ( !notran && trans != TRANS && trans != CONJ ) *info = -1;
+ else if ( A->nrow != A->ncol || A->nrow < 0 ||
+ A->Stype != SLU_NC || A->Dtype != SLU_Z || A->Mtype != SLU_GE )
+ *info = -2;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ||
+ L->Stype != SLU_SC || L->Dtype != SLU_Z || L->Mtype != SLU_TRLU )
+ *info = -3;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ||
+ U->Stype != SLU_NC || U->Dtype != SLU_Z || U->Mtype != SLU_TRU )
+ *info = -4;
+ else if ( ldb < SUPERLU_MAX(0, A->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_Z || B->Mtype != SLU_GE )
+ *info = -10;
+ else if ( ldx < SUPERLU_MAX(0, A->nrow) ||
+ X->Stype != SLU_DN || X->Dtype != SLU_Z || X->Mtype != SLU_GE )
+ *info = -11;
+ if (*info != 0) {
+ i = -(*info);
+ input_error("zgsrfs", &i);
+ return;
+ }
+
+ /* Quick return if possible */
+ if ( A->nrow == 0 || nrhs == 0) {
+ for (j = 0; j < nrhs; ++j) {
+ ferr[j] = 0.;
+ berr[j] = 0.;
+ }
+ return;
+ }
+
+ rowequ = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+
+ /* Allocate working space */
+ work = doublecomplexMalloc(2*A->nrow);
+ rwork = (double *) SUPERLU_MALLOC( A->nrow * sizeof(double) );
+ iwork = intMalloc(A->nrow);
+ if ( !work || !rwork || !iwork )
+ ABORT("Malloc fails for work/rwork/iwork.");
+
+ if ( notran ) {
+ *(unsigned char *)transc = 'N';
+ transt = TRANS;
+ } else if ( trans == TRANS ) {
+ *(unsigned char *)transc = 'T';
+ transt = NOTRANS;
+ } else if ( trans == CONJ ) {
+ *(unsigned char *)transc = 'C';
+ transt = NOTRANS;
+ }
+
+ /* NZ = maximum number of nonzero elements in each row of A, plus 1 */
+ nz = A->ncol + 1;
+ eps = dmach("Epsilon");
+ safmin = dmach("Safe minimum");
+
+ /* Set SAFE1 essentially to be the underflow threshold times the
+ number of additions in each row. */
+ safe1 = nz * safmin;
+ safe2 = safe1 / eps;
+
+ /* Compute the number of nonzeros in each row (or column) of A */
+ for (i = 0; i < A->nrow; ++i) iwork[i] = 0;
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k)
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ ++iwork[Astore->rowind[i]];
+ } else {
+ for (k = 0; k < A->ncol; ++k)
+ iwork[k] = Astore->colptr[k+1] - Astore->colptr[k];
+ }
+
+ /* Copy one column of RHS B into Bjcol. */
+ Bjcol.Stype = B->Stype;
+ Bjcol.Dtype = B->Dtype;
+ Bjcol.Mtype = B->Mtype;
+ Bjcol.nrow = B->nrow;
+ Bjcol.ncol = 1;
+ Bjcol.Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
+ if ( !Bjcol.Store ) ABORT("SUPERLU_MALLOC fails for Bjcol.Store");
+ Bjcol_store = Bjcol.Store;
+ Bjcol_store->lda = ldb;
+ Bjcol_store->nzval = work; /* address aliasing */
+
+ /* Do for each right hand side ... */
+ for (j = 0; j < nrhs; ++j) {
+ count = 0;
+ lstres = 3.;
+ Bptr = &Bmat[j*ldb];
+ Xptr = &Xmat[j*ldx];
+
+ while (1) { /* Loop until stopping criterion is satisfied. */
+
+ /* Compute residual R = B - op(A) * X,
+ where op(A) = A, A**T, or A**H, depending on TRANS. */
+
+#ifdef _CRAY
+ CCOPY(&A->nrow, Bptr, &ione, work, &ione);
+#else
+ zcopy_(&A->nrow, Bptr, &ione, work, &ione);
+#endif
+ sp_zgemv(transc, ndone, A, Xptr, ione, done, work, ione);
+
+ /* Compute componentwise relative backward error from formula
+ max(i) ( abs(R(i)) / ( abs(op(A))*abs(X) + abs(B) )(i) )
+ 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 before dividing. */
+
+ for (i = 0; i < A->nrow; ++i) rwork[i] = z_abs1( &Bptr[i] );
+
+ /* Compute abs(op(A))*abs(X) + abs(B). */
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k) {
+ xk = z_abs1( &Xptr[k] );
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ rwork[Astore->rowind[i]] += z_abs1(&Aval[i]) * xk;
+ }
+ } else { /* trans = TRANS or CONJ */
+ for (k = 0; k < A->ncol; ++k) {
+ s = 0.;
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+ irow = Astore->rowind[i];
+ s += z_abs1(&Aval[i]) * z_abs1(&Xptr[irow]);
+ }
+ rwork[k] += s;
+ }
+ }
+ s = 0.;
+ for (i = 0; i < A->nrow; ++i) {
+ if (rwork[i] > safe2) {
+ s = SUPERLU_MAX( s, z_abs1(&work[i]) / rwork[i] );
+ } 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;
+
+ /* Test stopping criterion. Continue iterating if
+ 1) The residual BERR(J) is larger than machine epsilon, and
+ 2) BERR(J) decreased by at least a factor of 2 during the
+ last iteration, and
+ 3) At most ITMAX iterations tried. */
+
+ if (berr[j] > eps && berr[j] * 2. <= lstres && count < ITMAX) {
+ /* Update solution and try again. */
+ zgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+#ifdef _CRAY
+ CAXPY(&A->nrow, &done, work, &ione,
+ &Xmat[j*ldx], &ione);
+#else
+ zaxpy_(&A->nrow, &done, work, &ione,
+ &Xmat[j*ldx], &ione);
+#endif
+ lstres = berr[j];
+ ++count;
+ } else {
+ break;
+ }
+
+ } /* end while */
+
+ stat->RefineSteps = count;
+
+ /* Bound error from formula:
+ norm(X - XTRUE) / norm(X) .le. FERR = norm( abs(inv(op(A)))*
+ ( abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) / norm(X)
+ where
+ norm(Z) is the magnitude of the largest component of Z
+ inv(op(A)) is the inverse of op(A)
+ abs(Z) is the componentwise absolute value of the matrix or
+ vector Z
+ NZ is the maximum number of nonzeros in any row of A, plus 1
+ EPS is machine epsilon
+
+ The i-th component of abs(R)+NZ*EPS*(abs(op(A))*abs(X)+abs(B))
+ is incremented by SAFE1 if the i-th component of
+ abs(op(A))*abs(X) + abs(B) is less than SAFE2.
+
+ Use ZLACON2 to estimate the infinity-norm of the matrix
+ inv(op(A)) * diag(W),
+ where W = abs(R) + NZ*EPS*( abs(op(A))*abs(X)+abs(B) ))) */
+
+ for (i = 0; i < A->nrow; ++i) rwork[i] = z_abs1( &Bptr[i] );
+
+ /* Compute abs(op(A))*abs(X) + abs(B). */
+ if ( notran ) {
+ for (k = 0; k < A->ncol; ++k) {
+ xk = z_abs1( &Xptr[k] );
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i)
+ rwork[Astore->rowind[i]] += z_abs1(&Aval[i]) * xk;
+ }
+ } else { /* trans == TRANS or CONJ */
+ for (k = 0; k < A->ncol; ++k) {
+ s = 0.;
+ for (i = Astore->colptr[k]; i < Astore->colptr[k+1]; ++i) {
+ irow = Astore->rowind[i];
+ xk = z_abs1( &Xptr[irow] );
+ s += z_abs1(&Aval[i]) * xk;
+ }
+ rwork[k] += s;
+ }
+ }
+
+ for (i = 0; i < A->nrow; ++i)
+ if (rwork[i] > safe2)
+ rwork[i] = z_abs(&work[i]) + (iwork[i]+1)*eps*rwork[i];
+ else
+ rwork[i] = z_abs(&work[i])+(iwork[i]+1)*eps*rwork[i]+safe1;
+ kase = 0;
+
+ do {
+ zlacon2_(&A->nrow, &work[A->nrow], work, &ferr[j], &kase, isave);
+ if (kase == 0) break;
+
+ if (kase == 1) {
+ /* Multiply by diag(W)*inv(op(A)**T)*(diag(C) or diag(R)). */
+ if ( notran && colequ )
+ for (i = 0; i < A->ncol; ++i) {
+ zd_mult(&work[i], &work[i], C[i]);
+ }
+ else if ( !notran && rowequ )
+ for (i = 0; i < A->nrow; ++i) {
+ zd_mult(&work[i], &work[i], R[i]);
+ }
+
+ zgstrs (transt, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+ for (i = 0; i < A->nrow; ++i) {
+ zd_mult(&work[i], &work[i], rwork[i]);
+ }
+ } else {
+ /* Multiply by (diag(C) or diag(R))*inv(op(A))*diag(W). */
+ for (i = 0; i < A->nrow; ++i) {
+ zd_mult(&work[i], &work[i], rwork[i]);
+ }
+
+ zgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info);
+
+ if ( notran && colequ )
+ for (i = 0; i < A->ncol; ++i) {
+ zd_mult(&work[i], &work[i], C[i]);
+ }
+ else if ( !notran && rowequ )
+ for (i = 0; i < A->ncol; ++i) {
+ zd_mult(&work[i], &work[i], R[i]);
+ }
+ }
+
+ } while ( kase != 0 );
+
+ /* Normalize error. */
+ lstres = 0.;
+ if ( notran && colequ ) {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, C[i] * z_abs1( &Xptr[i]) );
+ } else if ( !notran && rowequ ) {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, R[i] * z_abs1( &Xptr[i]) );
+ } else {
+ for (i = 0; i < A->nrow; ++i)
+ lstres = SUPERLU_MAX( lstres, z_abs1( &Xptr[i]) );
+ }
+ if ( lstres != 0. )
+ ferr[j] /= lstres;
+
+ } /* for each RHS j ... */
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(rwork);
+ SUPERLU_FREE(iwork);
+ SUPERLU_FREE(Bjcol.Store);
+
+ return;
+
+} /* zgsrfs */
diff --git a/SuperLU_5.2.0/SRC/zgssv.c b/SuperLU_5.2.0/SRC/zgssv.c
new file mode 100644
index 0000000..b364c28
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zgssv.c
@@ -0,0 +1,238 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * ZGSSV solves the system of linear equations A*X=B, using the
+ * LU factorization from ZGSTRF. It performs the following steps:
+ *
+ * 1. If A is stored column-wise (A->Stype = SLU_NC):
+ *
+ * 1.1. Permute the columns of A, forming A*Pc, where Pc
+ * is a permutation matrix. For more details of this step,
+ * see sp_preorder.c.
+ *
+ * 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.
+ *
+ * 1.3. Solve the system of equations A*X=B using the factored
+ * form of A.
+ *
+ * 2. If A is stored row-wise (A->Stype = SLU_NR), apply the
+ * above algorithm to the transpose of A:
+ *
+ * 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 sp_preorder.c.
+ *
+ * 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.
+ *
+ * 2.3. Solve the system of equations A*X=B using the factored
+ * form of A.
+ *
+ * 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) 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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->RowPerm = MY_PERMR or
+ * options->Fact = SamePattern_SameRowPerm, perm_r is an
+ * input argument.
+ * otherwise it is an output argument.
+ *
+ * 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.
+ *
+ * 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;
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See util.h for the definition of 'SuperLUStat_t'.
+ *
+ * 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>
+ */
+
+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;
+ GlobalLU_t Glu; /* Not needed on return. */
+
+ /* Set default values for some parameters */
+ int panel_size; /* panel size */
+ int relax; /* no of columns in a relaxed snodes */
+ int permc_spec;
+ trans_t trans = NOTRANS;
+ double *utime;
+ double t; /* Temporary time */
+
+ /* Test the input parameters ... */
+ *info = 0;
+ Bstore = B->Store;
+ if ( options->Fact != DOFACT ) *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 ( B->ncol < 0 || Bstore->lda < SUPERLU_MAX(0, A->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_Z || B->Mtype != SLU_GE )
+ *info = -7;
+ if ( *info != 0 ) {
+ i = -(*info);
+ input_error("zgssv", &i);
+ return;
+ }
+
+ 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);
+ trans = TRANS;
+ } else {
+ if ( A->Stype == SLU_NC ) AA = A;
+ }
+
+ t = SuperLU_timer_();
+ /*
+ * Get 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_() - t;
+
+ etree = intMalloc(A->ncol);
+
+ t = SuperLU_timer_();
+ sp_preorder(options, AA, perm_c, etree, &AC);
+ utime[ETREE] = SuperLU_timer_() - t;
+
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+
+ /*printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
+ relax, panel_size, sp_ienv(3), sp_ienv(4));*/
+ t = SuperLU_timer_();
+ /* Compute the LU factorization of A. */
+ zgstrf(options, &AC, relax, panel_size, etree,
+ NULL, lwork, perm_c, perm_r, L, U, &Glu, stat, info);
+ utime[FACT] = SuperLU_timer_() - t;
+
+ t = SuperLU_timer_();
+ if ( *info == 0 ) {
+ /* Solve the system A*X=B, overwriting B with X. */
+ zgstrs (trans, L, U, perm_c, perm_r, B, stat, info);
+ }
+ utime[SOLVE] = SuperLU_timer_() - t;
+
+ SUPERLU_FREE (etree);
+ Destroy_CompCol_Permuted(&AC);
+ if ( A->Stype == SLU_NR ) {
+ Destroy_SuperMatrix_Store(AA);
+ SUPERLU_FREE(AA);
+ }
+
+}
diff --git a/SuperLU_5.2.0/SRC/zgssvx.c b/SuperLU_5.2.0/SRC/zgssvx.c
new file mode 100644
index 0000000..b95b57f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zgssvx.c
@@ -0,0 +1,646 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * ZGSSVX solves the system of linear equations A*X=B or A'*X=B, using
+ * the LU factorization from zgstrf(). Error bounds on the solution and
+ * a condition estimate are also provided. It performs the following steps:
+ *
+ * 1. If A is stored column-wise (A->Stype = SLU_NC):
+ *
+ * 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).
+ *
+ * 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 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.
+ *
+ * 1.6. The system of equations is solved for X using the factored form
+ * of A.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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, 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 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.
+ *
+ * 2.6. The system of equations is solved for X using the factored form
+ * of transpose(A).
+ *
+ * 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.
+ *
+ * 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.
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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: 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>
+ */
+
+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,
+ GlobalLU_t *Glu, 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;
+ 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;
+
+ /* 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);
+ if ( nofact ) {
+ *(unsigned char *)equed = 'N';
+ rowequ = FALSE;
+ colequ = FALSE;
+ } else {
+ rowequ = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ smlnum = dmach("Safe minimum"); /* lamch_("Safe minimum"); */
+ bignum = 1. / smlnum;
+ }
+
+#if 0
+printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
+ options->Fact, options->Trans, *equed);
+#endif
+
+ /* 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 || strncmp(equed, "N", 1)==0) )
+ *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 ) *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;
+ }
+ 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) {
+ i = -(*info);
+ input_error("zgssvx", &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 && 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 = strncmp(equed, "R", 1)==0 || strncmp(equed, "B", 1)==0;
+ colequ = strncmp(equed, "C", 1)==0 || strncmp(equed, "B", 1)==0;
+ }
+ 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;
+
+/* printf("Factor PA = LU ... relax %d\tw %d\tmaxsuper %d\trowblk %d\n",
+ relax, panel_size, sp_ienv(3), sp_ienv(4));
+ fflush(stdout); */
+
+ /* Compute the LU factorization of A*Pc. */
+ t0 = SuperLU_timer_();
+ zgstrf(options, &AC, relax, panel_size, etree,
+ work, lwork, perm_c, perm_r, L, U, Glu, stat, info);
+ utime[FACT] = SuperLU_timer_() - t0;
+
+ if ( lwork == -1 ) {
+ mem_usage->total_needed = *info - A->ncol;
+ return;
+ }
+ }
+
+ if ( *info > 0 ) {
+ if ( *info <= A->ncol ) {
+ /* Compute the reciprocal pivot growth factor of the leading
+ rank-deficient (*info) columns of A. */
+ *recip_pivot_growth = zPivotGrowth(*info, AA, perm_c, L, U);
+ }
+ return;
+ }
+
+ /* *info == 0 at this point. */
+
+ if ( options->PivotGrowth ) {
+ /* 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 ) {
+ /* 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++)
+ 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;
+
+ /* Use iterative refinement to improve the computed solution and compute
+ error bounds and backward error estimates for it. */
+ t0 = SuperLU_timer_();
+ if ( options->IterRefine != NOREFINE ) {
+ zgsrfs(trant, AA, L, U, perm_c, perm_r, equed, R, C, B,
+ X, ferr, berr, stat, &info1);
+ } else {
+ for (j = 0; j < nrhs; ++j) ferr[j] = berr[j] = 1.0;
+ }
+ utime[REFINE] = 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 < 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)
+ zd_mult(&Xmat[i+j*ldx], &Xmat[i+j*ldx], R[i]);
+ }
+ } /* 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 = A->ncol + 1;*/
+ if ( *rcond < dmach("E") ) *info = A->ncol + 1;
+ }
+
+ if ( nofact ) {
+ zQuerySpace(L, U, mem_usage);
+ Destroy_CompCol_Permuted(&AC);
+ }
+ if ( A->Stype == SLU_NR ) {
+ Destroy_SuperMatrix_Store(AA);
+ SUPERLU_FREE(AA);
+ }
+
+}
diff --git a/SuperLU_5.2.0/SRC/zgstrf.c b/SuperLU_5.2.0/SRC/zgstrf.c
new file mode 100644
index 0000000..2992612
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zgstrf.c
@@ -0,0 +1,459 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_zdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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).
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Glu (input/output) GlobalLU_t *
+ * If options->Fact == SamePattern_SameRowPerm, it is an input;
+ * The matrix A will be factorized assuming that a
+ * factorization of a matrix with the same sparsity pattern
+ * and similar numerical values was performed prior to this one.
+ * Therefore, this factorization will reuse both row and column
+ * scaling factors R and C, both row and column permutation
+ * vectors perm_r and perm_c, and the L & U data structures
+ * set up from the previous factorization.
+ * Otherwise, it is an output.
+ *
+ * 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: 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.
+ *
+ * ======================================================================
+ *
+ * Local Working Arrays:
+ * ======================
+ * m = number of rows in the matrix
+ * n = number of columns in the matrix
+ *
+ * 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.
+ *
+ * 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 zpanel_dfs.c; marker2 is used for inner-factorization,
+ * see zcolumn_dfs.c.
+ *
+ * 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 zpanel_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_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,
+ GlobalLU_t *Glu, /* persistent to facilitate multiple factorizations */
+ 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 *iwork;
+ doublecomplex *zwork;
+ int *segrep, *repfnz, *parent, *xplore;
+ int *panel_lsub; /* dense[]/panel_lsub[] pair forms a w-wide SPA */
+ int *xprune;
+ int *marker;
+ doublecomplex *dense, *tempv;
+ int *relax_end;
+ doublecomplex *a;
+ int *asub;
+ int *xa_begin, *xa_end;
+ int *xsup, *supno;
+ int *xlsub, *xlusup, *xusub;
+ int nzlumax;
+ double fill_ratio = sp_ienv(6); /* estimated fill ratio */
+
+ /* Local scalars */
+ fact_t fact = options->Fact;
+ double diag_pivot_thresh = options->DiagPivotThresh;
+ 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;
+
+ 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, fill_ratio, 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, &xprune, &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;
+
+ /* Identify relaxed snodes */
+ relax_end = (int *) intMalloc(n);
+ if ( options->SymmetricMode == YES ) {
+ heap_relax_snode(n, etree, relax, marker, relax_end);
+ } else {
+ relax_snode(n, etree, relax, marker, relax_end);
+ }
+
+ 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;
+
+ /*
+ * 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]++;
+
+ /* --------------------------------------
+ * Factorize the relaxed supernode(jcol:kcol)
+ * -------------------------------------- */
+ /* Determine the union of the row structure of the snode */
+ if ( (*info = zsnode_dfs(jcol, kcol, asub, xa_begin, xa_end,
+ xprune, 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;
+
+ /* Scatter into SPA dense[*] */
+ for (k = xa_begin[icol]; k < xa_end[icol]; k++)
+ dense[asub[k]] = a[k];
+
+ /* Numeric update within the snode */
+ zsnode_bmod(icol, jsupno, fsupc, dense, tempv, Glu, stat);
+
+ if ( (*info = zpivotL(icol, diag_pivot_thresh, &usepr, perm_r,
+ iperm_r, iperm_c, &pivrow, Glu, stat)) )
+ if ( iinfo == 0 ) iinfo = *info;
+
+#ifdef DEBUG
+ zprint_lu_col("[1]: ", icol, pivrow, xprune, Glu);
+#endif
+
+ }
+
+ jcol = icol;
+
+ } 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 */
+ zpanel_dfs(m, panel_size, jcol, A, perm_r, &nseg1,
+ dense, panel_lsub, segrep, repfnz, xprune,
+ 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 */
+
+ if ((*info = zcolumn_dfs(m, jj, perm_r, &nseg, &panel_lsub[k],
+ segrep, &repfnz[k], xprune, marker,
+ parent, xplore, Glu)) != 0) return;
+
+ /* Numeric updates */
+ if ((*info = zcolumn_bmod(jj, (nseg - nseg1), &dense[k],
+ tempv, &segrep[nseg1], &repfnz[k],
+ jcol, Glu, stat)) != 0) return;
+
+ /* Copy the U-segments to ucol[*] */
+ if ((*info = zcopy_to_ucol(jj, nseg, segrep, &repfnz[k],
+ perm_r, &dense[k], Glu)) != 0)
+ return;
+
+ if ( (*info = zpivotL(jj, diag_pivot_thresh, &usepr, perm_r,
+ iperm_r, iperm_c, &pivrow, Glu, stat)) )
+ if ( iinfo == 0 ) iinfo = *info;
+
+ /* Prune columns (0:jj-1) using column jj */
+ zpruneL(jj, perm_r, pivrow, nseg, segrep,
+ &repfnz[k], xprune, Glu);
+
+ /* Reset repfnz[] for this column */
+ resetrep_col (nseg, segrep, &repfnz[k]);
+
+#ifdef DEBUG
+ zprint_lu_col("[2]: ", jj, pivrow, xprune, Glu);
+#endif
+
+ }
+
+ 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;
+ }
+ }
+
+ countnz(min_mn, xprune, &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 = (doublecomplex *) 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 = (doublecomplex *) Glu->ucol;
+ ((NCformat *)U->Store)->rowind = Glu->usub;
+ ((NCformat *)U->Store)->colptr = Glu->xusub;
+ } else {
+ zCreate_SuperNode_Matrix(L, A->nrow, min_mn, nnzL,
+ (doublecomplex *) 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,
+ (doublecomplex *) 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);
+
+}
diff --git a/SuperLU_5.2.0/SRC/zgstrs.c b/SuperLU_5.2.0/SRC/zgstrs.c
new file mode 100644
index 0000000..df95d6f
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zgstrs.c
@@ -0,0 +1,360 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+#include "slu_zdefs.h"
+
+
+/*
+ * Function prototypes
+ */
+void zusolve(int, int, doublecomplex*, doublecomplex*);
+void zlsolve(int, int, doublecomplex*, doublecomplex*);
+void zmatvec(int, int, int, doublecomplex*, doublecomplex*, doublecomplex*);
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * 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.
+ *
+ * See supermatrix.h for the definition of 'SuperMatrix' structure.
+ *
+ * Arguments
+ * =========
+ *
+ * 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)
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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_Z, Mtype = SLU_GE.
+ * On entry, the right hand side matrix.
+ * On exit, the solution matrix if info = 0;
+ *
+ * stat (output) SuperLUStat_t*
+ * Record the statistics on runtime and floating-point operation count.
+ * See 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
+ * </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
+ int incx = 1, incy = 1;
+#ifdef USE_VENDOR_BLAS
+ doublecomplex alpha = {1.0, 0.0}, beta = {1.0, 0.0};
+ doublecomplex *work_col;
+#endif
+ doublecomplex temp_comp;
+ DNformat *Bstore;
+ doublecomplex *Bmat;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ doublecomplex *Lval, *Uval;
+ int fsupc, nrow, nsupr, nsupc, luptr, istart, irow;
+ int i, j, k, iptr, jcol, n, ldb, nrhs;
+ doublecomplex *work, *rhs_work, *soln;
+ flops_t solve_ops;
+ void zprint_soln();
+
+ /* Test input parameters ... */
+ *info = 0;
+ Bstore = B->Store;
+ ldb = Bstore->lda;
+ nrhs = B->ncol;
+ if ( trans != NOTRANS && trans != TRANS && trans != CONJ ) *info = -1;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ||
+ L->Stype != SLU_SC || L->Dtype != SLU_Z || L->Mtype != SLU_TRLU )
+ *info = -2;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ||
+ U->Stype != SLU_NC || U->Dtype != SLU_Z || U->Mtype != SLU_TRU )
+ *info = -3;
+ else if ( ldb < SUPERLU_MAX(0, L->nrow) ||
+ B->Stype != SLU_DN || B->Dtype != SLU_Z || B->Mtype != SLU_GE )
+ *info = -6;
+ if ( *info ) {
+ i = -(*info);
+ input_error("zgstrs", &i);
+ return;
+ }
+
+ n = L->nrow;
+ work = doublecomplexCalloc(n * nrhs);
+ if ( !work ) ABORT("Malloc fails for local work[].");
+ soln = doublecomplexMalloc(n);
+ if ( !soln ) ABORT("Malloc fails for local soln[].");
+
+ Bmat = Bstore->nzval;
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+ solve_ops = 0;
+
+ if ( trans == NOTRANS ) {
+ /* 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 += 4 * nsupc * (nsupc - 1) * nrhs;
+ solve_ops += 8 * 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;
+ zz_mult(&temp_comp, &rhs_work[fsupc], &Lval[luptr]);
+ z_sub(&rhs_work[irow], &rhs_work[irow], &temp_comp);
+ }
+ }
+ } 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"));
+ CTRSM( ftcs1, ftcs1, ftcs2, ftcs3, &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+
+ CGEMM( ftcs2, ftcs2, &nrow, &nrhs, &nsupc, &alpha,
+ &Lval[luptr+nsupc], &nsupr, &Bmat[fsupc], &ldb,
+ &beta, &work[0], &n );
+#else
+ ztrsm_("L", "L", "N", "U", &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+
+ zgemm_( "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);
+ z_sub(&rhs_work[irow], &rhs_work[irow], &work_col[i]);
+ work_col[i].r = 0.0;
+ work_col[i].i = 0.0;
+ iptr++;
+ }
+ }
+#else
+ for (j = 0; j < nrhs; j++) {
+ rhs_work = &Bmat[j*ldb];
+ zlsolve (nsupr, nsupc, &Lval[luptr], &rhs_work[fsupc]);
+ zmatvec (nsupr, nrow, nsupc, &Lval[luptr+nsupc],
+ &rhs_work[fsupc], &work[0] );
+
+ iptr = istart + nsupc;
+ for (i = 0; i < nrow; i++) {
+ irow = L_SUB(iptr);
+ z_sub(&rhs_work[irow], &rhs_work[irow], &work[i]);
+ work[i].r = 0.;
+ work[i].i = 0.;
+ iptr++;
+ }
+ }
+#endif
+ } /* else ... */
+ } /* for L-solve */
+
+#ifdef DEBUG
+ printf("After L-solve: y=\n");
+ zprint_soln(n, nrhs, Bmat);
+#endif
+
+ /*
+ * Back solve Ux=y.
+ */
+ for (k = Lstore->nsuper; k >= 0; 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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += 4 * nsupc * (nsupc + 1) * nrhs;
+
+ if ( nsupc == 1 ) {
+ rhs_work = &Bmat[0];
+ for (j = 0; j < nrhs; j++) {
+ z_div(&rhs_work[fsupc], &rhs_work[fsupc], &Lval[luptr]);
+ rhs_work += ldb;
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd("U", strlen("U"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ CTRSM( ftcs1, ftcs2, ftcs3, ftcs3, &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+#else
+ ztrsm_("L", "U", "N", "N", &nsupc, &nrhs, &alpha,
+ &Lval[luptr], &nsupr, &Bmat[fsupc], &ldb);
+#endif
+#else
+ for (j = 0; j < nrhs; j++)
+ zusolve ( nsupr, nsupc, &Lval[luptr], &Bmat[fsupc+j*ldb] );
+#endif
+ }
+
+ for (j = 0; j < nrhs; ++j) {
+ rhs_work = &Bmat[j*ldb];
+ for (jcol = fsupc; jcol < fsupc + nsupc; jcol++) {
+ solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++ ){
+ irow = U_SUB(i);
+ zz_mult(&temp_comp, &rhs_work[jcol], &Uval[i]);
+ z_sub(&rhs_work[irow], &rhs_work[irow], &temp_comp);
+ }
+ }
+ }
+
+ } /* for U-solve */
+
+#ifdef DEBUG
+ printf("After U-solve: x=\n");
+ zprint_soln(n, nrhs, Bmat);
+#endif
+
+ /* Compute the final solution X := Pc*X. */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[k] = rhs_work[perm_c[k]];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ stat->ops[SOLVE] = solve_ops;
+
+ } else { /* Solve A'*X=B or CONJ(A)*X=B */
+ /* Permute right hand sides to form Pc'*B. */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[perm_c[k]] = rhs_work[k];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ stat->ops[SOLVE] = 0;
+ if (trans == TRANS) {
+ for (k = 0; k < nrhs; ++k) {
+ /* Multiply by inv(U'). */
+ sp_ztrsv("U", "T", "N", L, U, &Bmat[k*ldb], stat, info);
+
+ /* Multiply by inv(L'). */
+ sp_ztrsv("L", "T", "U", L, U, &Bmat[k*ldb], stat, info);
+ }
+ } else { /* trans == CONJ */
+ for (k = 0; k < nrhs; ++k) {
+ /* Multiply by conj(inv(U')). */
+ sp_ztrsv("U", "C", "N", L, U, &Bmat[k*ldb], stat, info);
+
+ /* Multiply by conj(inv(L')). */
+ sp_ztrsv("L", "C", "U", L, U, &Bmat[k*ldb], stat, info);
+ }
+ }
+ /* Compute the final solution X := Pr'*X (=inv(Pr)*X) */
+ for (i = 0; i < nrhs; i++) {
+ rhs_work = &Bmat[i*ldb];
+ for (k = 0; k < n; k++) soln[k] = rhs_work[perm_r[k]];
+ for (k = 0; k < n; k++) rhs_work[k] = soln[k];
+ }
+
+ }
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(soln);
+}
+
+/*
+ * Diagnostic print of the solution vector
+ */
+void
+zprint_soln(int n, int nrhs, doublecomplex *soln)
+{
+ int i;
+
+ for (i = 0; i < n; i++)
+ printf("\t%d: %.4f\t%.4f\n", i, soln[i].r, soln[i].i);
+}
diff --git a/SuperLU_5.2.0/SRC/zlacon.c b/SuperLU_5.2.0/SRC/zlacon.c
new file mode 100644
index 0000000..2cb54ba
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zlacon.c
@@ -0,0 +1,232 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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)
+
+{
+
+
+ /* Table of constant values */
+ int c__1 = 1;
+ doublecomplex zero = {0.0, 0.0};
+ doublecomplex one = {1.0, 0.0};
+
+ /* System generated locals */
+ double d__1;
+
+ /* Local variables */
+ static int jump;
+ int jlast;
+ int iter;
+ double altsgn, estold;
+ int i, j;
+ double temp;
+ double safmin;
+ extern double dlamch_(char *);
+ extern int izmax1_slu(int *, doublecomplex *, int *);
+ extern double dzsum1_slu(int *, doublecomplex *, int *);
+
+ safmin = dlamch_("Safe minimum");
+ if ( *kase == 0 ) {
+ for (i = 0; i < *n; ++i) {
+ x[i].r = 1. / (double) (*n);
+ x[i].i = 0.;
+ }
+ *kase = 1;
+ jump = 1;
+ return 0;
+ }
+
+ switch (jump) {
+ case 1: goto L20;
+ case 2: goto L40;
+ case 3: goto L70;
+ case 4: goto L110;
+ case 5: goto L140;
+ }
+
+ /* ................ ENTRY (JUMP = 1)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
+ L20:
+ if (*n == 1) {
+ v[0] = x[0];
+ *est = z_abs(&v[0]);
+ /* ... QUIT */
+ goto L150;
+ }
+ *est = dzsum1_slu(n, x, &c__1);
+
+ for (i = 0; i < *n; ++i) {
+ d__1 = z_abs(&x[i]);
+ if (d__1 > safmin) {
+ d__1 = 1 / d__1;
+ x[i].r *= d__1;
+ x[i].i *= d__1;
+ } else {
+ x[i] = one;
+ }
+ }
+ *kase = 2;
+ jump = 2;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 2)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
+L40:
+ j = izmax1_slu(n, &x[0], &c__1);
+ --j;
+ iter = 2;
+
+ /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
+L50:
+ for (i = 0; i < *n; ++i) x[i] = zero;
+ x[j] = one;
+ *kase = 1;
+ jump = 3;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 3)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L70:
+#ifdef _CRAY
+ CCOPY(n, x, &c__1, v, &c__1);
+#else
+ zcopy_(n, x, &c__1, v, &c__1);
+#endif
+ estold = *est;
+ *est = dzsum1_slu(n, v, &c__1);
+
+
+L90:
+ /* TEST FOR CYCLING. */
+ if (*est <= estold) goto L120;
+
+ for (i = 0; i < *n; ++i) {
+ d__1 = z_abs(&x[i]);
+ if (d__1 > safmin) {
+ d__1 = 1 / d__1;
+ x[i].r *= d__1;
+ x[i].i *= d__1;
+ } else {
+ x[i] = one;
+ }
+ }
+ *kase = 2;
+ jump = 4;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 4)
+ X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
+L110:
+ jlast = j;
+ j = izmax1_slu(n, &x[0], &c__1);
+ --j;
+ if (x[jlast].r != (d__1 = x[j].r, fabs(d__1)) && iter < 5) {
+ ++iter;
+ goto L50;
+ }
+
+ /* ITERATION COMPLETE. FINAL STAGE. */
+L120:
+ altsgn = 1.;
+ for (i = 1; i <= *n; ++i) {
+ x[i-1].r = altsgn * ((double)(i - 1) / (double)(*n - 1) + 1.);
+ x[i-1].i = 0.;
+ altsgn = -altsgn;
+ }
+ *kase = 1;
+ jump = 5;
+ return 0;
+
+ /* ................ ENTRY (JUMP = 5)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L140:
+ temp = dzsum1_slu(n, x, &c__1) / (double)(*n * 3) * 2.;
+ if (temp > *est) {
+#ifdef _CRAY
+ CCOPY(n, &x[0], &c__1, &v[0], &c__1);
+#else
+ zcopy_(n, &x[0], &c__1, &v[0], &c__1);
+#endif
+ *est = temp;
+ }
+
+L150:
+ *kase = 0;
+ return 0;
+
+} /* zlacon_ */
diff --git a/SuperLU_5.2.0/SRC/zlacon2.c b/SuperLU_5.2.0/SRC/zlacon2.c
new file mode 100644
index 0000000..b43c619
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zlacon2.c
@@ -0,0 +1,239 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file zlacon2.c
+ * \brief Estimates the 1-norm
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * July 25, 2015
+ * </pre>
+ */
+#include <math.h>
+#include "slu_Cnames.h"
+#include "slu_dcomplex.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * ZLACON2 estimates the 1-norm of a square matrix A.
+ * Reverse communication is used for evaluating matrix-vector products.
+ *
+ * This is a thread safe version of ZLACON, which uses the array ISAVE
+ * in place of a STATIC variables, as follows:
+ *
+ * ZLACON ZLACON2
+ * jump isave[0]
+ * j isave[1]
+ * iter isave[2]
+ *
+ *
+ * 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.
+ *
+ * isave (input/output) int [3]
+ * ISAVE is INTEGER array, dimension (3)
+ * ISAVE is used to save variables between calls to ZLACON2
+ *
+ * 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
+zlacon2_(int *n, doublecomplex *v, doublecomplex *x, double *est, int *kase, int isave[3])
+{
+ /* Table of constant values */
+ int c__1 = 1;
+ doublecomplex zero = {0.0, 0.0};
+ doublecomplex one = {1.0, 0.0};
+
+ /* System generated locals */
+ double d__1;
+
+ /* Local variables */
+ int jlast;
+ double altsgn, estold;
+ int i;
+ double temp;
+ double safmin;
+ extern double dmach(char *);
+ extern int izmax1_slu(int *, doublecomplex *, int *);
+ extern double dzsum1_slu(int *, doublecomplex *, int *);
+
+ safmin = dmach("Safe minimum"); /* lamch_("Safe minimum"); */
+ if ( *kase == 0 ) {
+ for (i = 0; i < *n; ++i) {
+ x[i].r = 1. / (double) (*n);
+ x[i].i = 0.;
+ }
+ *kase = 1;
+ isave[0] = 1; /* jump = 1; */
+ return 0;
+ }
+
+ switch (isave[0]) {
+ case 1: goto L20;
+ case 2: goto L40;
+ case 3: goto L70;
+ case 4: goto L110;
+ case 5: goto L140;
+ }
+
+ /* ................ ENTRY (isave[0] = 1)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. */
+ L20:
+ if (*n == 1) {
+ v[0] = x[0];
+ *est = z_abs(&v[0]);
+ /* ... QUIT */
+ goto L150;
+ }
+ *est = dzsum1_slu(n, x, &c__1);
+
+ for (i = 0; i < *n; ++i) {
+ d__1 = z_abs(&x[i]);
+ if (d__1 > safmin) {
+ d__1 = 1 / d__1;
+ x[i].r *= d__1;
+ x[i].i *= d__1;
+ } else {
+ x[i] = one;
+ }
+ }
+ *kase = 2;
+ isave[0] = 2; /* jump = 2; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 2)
+ FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. */
+L40:
+ isave[1] = izmax1_slu(n, &x[0], &c__1); /* j */
+ --isave[1]; /* --j; */
+ isave[2] = 2; /* iter = 2; */
+
+ /* MAIN LOOP - ITERATIONS 2,3,...,ITMAX. */
+L50:
+ for (i = 0; i < *n; ++i) x[i] = zero;
+ x[isave[1]] = one;
+ *kase = 1;
+ isave[0] = 3; /* jump = 3; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 3)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L70:
+#ifdef _CRAY
+ CCOPY(n, x, &c__1, v, &c__1);
+#else
+ zcopy_(n, x, &c__1, v, &c__1);
+#endif
+ estold = *est;
+ *est = dzsum1_slu(n, v, &c__1);
+
+
+L90:
+ /* TEST FOR CYCLING. */
+ if (*est <= estold) goto L120;
+
+ for (i = 0; i < *n; ++i) {
+ d__1 = z_abs(&x[i]);
+ if (d__1 > safmin) {
+ d__1 = 1 / d__1;
+ x[i].r *= d__1;
+ x[i].i *= d__1;
+ } else {
+ x[i] = one;
+ }
+ }
+ *kase = 2;
+ isave[0] = 4; /* jump = 4; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 4)
+ X HAS BEEN OVERWRITTEN BY TRANDPOSE(A)*X. */
+L110:
+ jlast = isave[1]; /* j; */
+ isave[1] = izmax1_slu(n, &x[0], &c__1); /* j */
+ isave[1] = isave[1] - 1; /* --j; */
+ if (x[jlast].r != (d__1 = x[isave[1]].r, fabs(d__1)) && isave[2] < 5) {
+ isave[2] = isave[2] + 1; /* ++iter; */
+ goto L50;
+ }
+
+ /* ITERATION COMPLETE. FINAL STAGE. */
+L120:
+ altsgn = 1.;
+ for (i = 1; i <= *n; ++i) {
+ x[i-1].r = altsgn * ((double)(i - 1) / (double)(*n - 1) + 1.);
+ x[i-1].i = 0.;
+ altsgn = -altsgn;
+ }
+ *kase = 1;
+ isave[0] = 5; /* jump = 5; */
+ return 0;
+
+ /* ................ ENTRY (isave[0] = 5)
+ X HAS BEEN OVERWRITTEN BY A*X. */
+L140:
+ temp = dzsum1_slu(n, x, &c__1) / (double)(*n * 3) * 2.;
+ if (temp > *est) {
+#ifdef _CRAY
+ CCOPY(n, &x[0], &c__1, &v[0], &c__1);
+#else
+ zcopy_(n, &x[0], &c__1, &v[0], &c__1);
+#endif
+ *est = temp;
+ }
+
+L150:
+ *kase = 0;
+ return 0;
+
+} /* zlacon_ */
diff --git a/SuperLU_5.2.0/SRC/zlangs.c b/SuperLU_5.2.0/SRC/zlangs.c
new file mode 100644
index 0000000..595b9e9
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zlangs.c
@@ -0,0 +1,129 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from lapack routine ZLANGE
+ */
+#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)
+{
+
+ /* Local variables */
+ NCformat *Astore;
+ doublecomplex *Aval;
+ int i, j, irow;
+ double value, sum;
+ double *rwork;
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ if ( SUPERLU_MIN(A->nrow, A->ncol) == 0) {
+ value = 0.;
+
+ } else if (strncmp(norm, "M", 1)==0) {
+ /* Find max(abs(A(i,j))). */
+ value = 0.;
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
+ value = SUPERLU_MAX( value, z_abs( &Aval[i]) );
+
+ } else if (strncmp(norm, "O", 1)==0 || *(unsigned char *)norm == '1') {
+ /* Find norm1(A). */
+ value = 0.;
+ for (j = 0; j < A->ncol; ++j) {
+ sum = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++)
+ sum += z_abs( &Aval[i] );
+ value = SUPERLU_MAX(value,sum);
+ }
+
+ } else if (strncmp(norm, "I", 1)==0) {
+ /* Find normI(A). */
+ if ( !(rwork = (double *) SUPERLU_MALLOC(A->nrow * sizeof(double))) )
+ ABORT("SUPERLU_MALLOC fails for rwork.");
+ for (i = 0; i < A->nrow; ++i) rwork[i] = 0.;
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; i++) {
+ irow = Astore->rowind[i];
+ rwork[irow] += z_abs( &Aval[i] );
+ }
+ value = 0.;
+ for (i = 0; i < A->nrow; ++i)
+ value = SUPERLU_MAX(value, rwork[i]);
+
+ SUPERLU_FREE (rwork);
+
+ } else if (strncmp(norm, "F", 1)==0 || strncmp(norm, "E", 1)==0) {
+ /* Find normF(A). */
+ ABORT("Not implemented.");
+ } else
+ ABORT("Illegal norm specified.");
+
+ return (value);
+
+} /* zlangs */
+
diff --git a/SuperLU_5.2.0/SRC/zlaqgs.c b/SuperLU_5.2.0/SRC/zlaqgs.c
new file mode 100644
index 0000000..d434ec7
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zlaqgs.c
@@ -0,0 +1,157 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * History: Modified from LAPACK routine ZLAQGE
+ */
+#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)
+{
+
+
+#define THRESH (0.1)
+
+ /* Local variables */
+ NCformat *Astore;
+ doublecomplex *Aval;
+ int i, j, irow;
+ double large, small, cj;
+ double temp;
+
+
+ /* Quick return if possible */
+ if (A->nrow <= 0 || A->ncol <= 0) {
+ *(unsigned char *)equed = 'N';
+ return;
+ }
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Initialize LARGE and SMALL. */
+ small = dmach("Safe minimum") / dmach("Precision");
+ large = 1. / small;
+
+ if (rowcnd >= THRESH && amax >= small && amax <= large) {
+ if (colcnd >= THRESH)
+ *(unsigned char *)equed = 'N';
+ else {
+ /* Column scaling */
+ for (j = 0; j < A->ncol; ++j) {
+ cj = c[j];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ zd_mult(&Aval[i], &Aval[i], cj);
+ }
+ }
+ *(unsigned char *)equed = 'C';
+ }
+ } else if (colcnd >= THRESH) {
+ /* Row scaling, no column scaling */
+ for (j = 0; j < A->ncol; ++j)
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ zd_mult(&Aval[i], &Aval[i], r[irow]);
+ }
+ *(unsigned char *)equed = 'R';
+ } else {
+ /* Row and column scaling */
+ for (j = 0; j < A->ncol; ++j) {
+ cj = c[j];
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ temp = cj * r[irow];
+ zd_mult(&Aval[i], &Aval[i], temp);
+ }
+ }
+ *(unsigned char *)equed = 'B';
+ }
+
+ return;
+
+} /* zlaqgs */
+
diff --git a/SuperLU_5.2.0/SRC/zldperm.c b/SuperLU_5.2.0/SRC/zldperm.c
new file mode 100644
index 0000000..5802699
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zldperm.c
@@ -0,0 +1,178 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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/SuperLU_5.2.0/SRC/zmemory.c b/SuperLU_5.2.0/SRC/zmemory.c
new file mode 100644
index 0000000..4d99315
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zmemory.c
@@ -0,0 +1,710 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file zmemory.c
+ * \brief Memory details
+ *
+ * <pre>
+ * -- SuperLU routine (version 4.0) --
+ * Lawrence Berkeley National Laboratory.
+ * June 30, 2009
+ * </pre>
+ */
+#include "slu_zdefs.h"
+
+
+/* Internal prototypes */
+void *zexpand (int *, MemType,int, int, GlobalLU_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, GlobalLU_t *);
+void *zuser_malloc (int, int, GlobalLU_t *);
+void zuser_free (int, int, GlobalLU_t *);
+
+/* External prototypes (in memory.c - prec-independent) */
+extern void copy_mem_int (int, void *, void *);
+extern void user_bcopy (char *, char *, int);
+
+
+/* Macros to manipulate stack */
+#define StackFull(x) ( x + Glu->stack.used >= Glu->stack.size )
+#define NotDoubleAlign(addr) ( (intptr_t)addr & 7 )
+#define DoubleAlign(addr) ( ((intptr_t)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 */
+
+
+
+
+/*! \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, GlobalLU_t *Glu)
+{
+ if ( lwork == 0 ) {
+ Glu->MemModel = SYSTEM; /* malloc/free */
+ } else if ( lwork > 0 ) {
+ 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, GlobalLU_t *Glu)
+{
+ void *buf;
+
+ if ( StackFull(bytes) ) return (NULL);
+
+ if ( which_end == HEAD ) {
+ buf = (char*) Glu->stack.array + Glu->stack.top1;
+ Glu->stack.top1 += bytes;
+ } else {
+ Glu->stack.top2 -= bytes;
+ buf = (char*) Glu->stack.array + Glu->stack.top2;
+ }
+
+ Glu->stack.used += bytes;
+ return buf;
+}
+
+
+void zuser_free(int bytes, int which_end, GlobalLU_t *Glu)
+{
+ if ( which_end == HEAD ) {
+ Glu->stack.top1 -= bytes;
+ } else {
+ Glu->stack.top2 += 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.
+ * </pre>
+ */
+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.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.0 * panel_size + 4.0 + NO_MARKER) * n * iword +
+ (panel_size + 1.0) * n * dword );
+
+ return 0;
+} /* zQuerySpace */
+
+
+/*! \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, double fill_ratio, 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;
+
+ iword = sizeof(int);
+ dword = sizeof(doublecomplex);
+ Glu->n = n;
+ Glu->num_expansions = 0;
+
+ 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_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);
+ }
+
+#if ( PRNTlevel >= 1 )
+ printf("zLUMemInit() called: fill_ratio %.0f, nzlmax %ld, nzumax %ld\n",
+ fill_ratio, 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, 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 );
+ 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, Glu);
+ }
+ 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("zLUMemInit() 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;
+ Glu->stack.top2 = (lwork/4)*4; /* must be word-addressable */
+ Glu->stack.size = Glu->stack.top2;
+ }
+
+ 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;
+ Glu->supno = supno;
+ Glu->lsub = lsub;
+ Glu->xlsub = xlsub;
+ Glu->lusup = (void *) lusup;
+ Glu->xlusup = xlusup;
+ Glu->ucol = (void *) 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);
+ if ( info )
+ return ( info + zmemory_usage(nzlmax, nzumax, nzlumax, n) + n);
+
+ ++Glu->num_expansions;
+ return 0;
+
+} /* zLUMemInit */
+
+/*! \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, GlobalLU_t *Glu)
+{
+ int isize, dsize, extra;
+ doublecomplex *old_ptr;
+ 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 ( Glu->MemModel == SYSTEM )
+ *iworkptr = (int *) intCalloc(isize/sizeof(int));
+ else
+ *iworkptr = (int *) zuser_malloc(isize, TAIL, Glu);
+ if ( ! *iworkptr ) {
+ fprintf(stderr, "zLUWorkInit: malloc fails for local iworkptr[]\n");
+ return (isize + n);
+ }
+
+ if ( Glu->MemModel == SYSTEM )
+ *dworkptr = (doublecomplex *) SUPERLU_MALLOC(dsize);
+ else {
+ *dworkptr = (doublecomplex *) zuser_malloc(dsize, TAIL, Glu);
+ 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
+ Glu->stack.top2 -= extra;
+ Glu->stack.used += extra;
+ }
+ }
+ if ( ! *dworkptr ) {
+ fprintf(stderr, "malloc fails for local dworkptr[].");
+ return (isize + dsize + n);
+ }
+
+ return 0;
+}
+
+
+/*! \brief 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 = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) ),
+ 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);
+}
+
+/*! \brief 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 {
+ Glu->stack.used -= (Glu->stack.size - Glu->stack.top2);
+ Glu->stack.top2 = Glu->stack.size;
+/* zStackCompress(Glu); */
+ }
+
+ SUPERLU_FREE (Glu->expanders);
+ Glu->expanders = NULL;
+}
+
+/*! \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,
+ 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 = (void *) new_mem;
+ Glu->nzlumax = *maxlen;
+ break;
+ case UCOL:
+ Glu->ucol = (void *) 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];
+}
+
+/*! \brief 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;
+ ExpHeader *expanders = Glu->expanders; /* Array of 4 types of memory */
+
+ alpha = EXPAND;
+
+ if ( Glu->num_expansions == 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((size_t)new_len * lword);
+ if ( Glu->num_expansions != 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((size_t)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 ( 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;
+ new_mem = (void *)DoubleAlign(new_mem);
+ extra = (char*)new_mem - (char*)old_mem;
+#ifdef DEBUG
+ printf("expand(): not aligned, extra %d\n", extra);
+#endif
+ Glu->stack.top1 += extra;
+ Glu->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*)Glu->stack.array + Glu->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);
+ }
+ Glu->stack.top1 += extra;
+ Glu->stack.used += extra;
+ if ( type == UCOL ) {
+ Glu->stack.top1 += extra; /* Add same amount for USUB */
+ Glu->stack.used += extra;
+ }
+
+ } /* if ... */
+
+ } /* else ... */
+ }
+
+ expanders[type].size = new_len;
+ *prev_len = new_len;
+ if ( Glu->num_expansions ) ++Glu->num_expansions;
+
+ return (void *) expanders[type].mem;
+
+} /* zexpand */
+
+
+/*! \brief 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*)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;
+ 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
+
+}
+
+/*! \brief 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((size_t)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((size_t)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/SuperLU_5.2.0/SRC/zmyblas2.c b/SuperLU_5.2.0/SRC/zmyblas2.c
new file mode 100644
index 0000000..6924cfc
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zmyblas2.c
@@ -0,0 +1,198 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * </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"
+
+/*! \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.
+ */
+void zlsolve ( int ldm, int ncol, doublecomplex *M, doublecomplex *rhs )
+{
+ int k;
+ doublecomplex x0, x1, x2, x3, temp;
+ doublecomplex *M0;
+ doublecomplex *Mki0, *Mki1, *Mki2, *Mki3;
+ register int firstcol = 0;
+
+ M0 = &M[0];
+
+
+ while ( firstcol < ncol - 3 ) { /* Do 4 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+ Mki2 = Mki1 + ldm + 1;
+ Mki3 = Mki2 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ zz_mult(&temp, &x0, Mki0); Mki0++;
+ z_sub(&x1, &rhs[firstcol+1], &temp);
+ zz_mult(&temp, &x0, Mki0); Mki0++;
+ z_sub(&x2, &rhs[firstcol+2], &temp);
+ zz_mult(&temp, &x1, Mki1); Mki1++;
+ z_sub(&x2, &x2, &temp);
+ zz_mult(&temp, &x0, Mki0); Mki0++;
+ z_sub(&x3, &rhs[firstcol+3], &temp);
+ zz_mult(&temp, &x1, Mki1); Mki1++;
+ z_sub(&x3, &x3, &temp);
+ zz_mult(&temp, &x2, Mki2); Mki2++;
+ z_sub(&x3, &x3, &temp);
+
+ rhs[++firstcol] = x1;
+ rhs[++firstcol] = x2;
+ rhs[++firstcol] = x3;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++) {
+ zz_mult(&temp, &x0, Mki0); Mki0++;
+ z_sub(&rhs[k], &rhs[k], &temp);
+ zz_mult(&temp, &x1, Mki1); Mki1++;
+ z_sub(&rhs[k], &rhs[k], &temp);
+ zz_mult(&temp, &x2, Mki2); Mki2++;
+ z_sub(&rhs[k], &rhs[k], &temp);
+ zz_mult(&temp, &x3, Mki3); Mki3++;
+ z_sub(&rhs[k], &rhs[k], &temp);
+ }
+
+ M0 += 4 * ldm + 4;
+ }
+
+ if ( firstcol < ncol - 1 ) { /* Do 2 columns */
+ Mki0 = M0 + 1;
+ Mki1 = Mki0 + ldm + 1;
+
+ x0 = rhs[firstcol];
+ zz_mult(&temp, &x0, Mki0); Mki0++;
+ z_sub(&x1, &rhs[firstcol+1], &temp);
+
+ rhs[++firstcol] = x1;
+ ++firstcol;
+
+ for (k = firstcol; k < ncol; k++) {
+ zz_mult(&temp, &x0, Mki0); Mki0++;
+ z_sub(&rhs[k], &rhs[k], &temp);
+ zz_mult(&temp, &x1, Mki1); Mki1++;
+ z_sub(&rhs[k], &rhs[k], &temp);
+ }
+ }
+
+}
+
+/*! \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.
+ */
+void
+zusolve ( ldm, ncol, M, rhs )
+int ldm; /* in */
+int ncol; /* in */
+doublecomplex *M; /* in */
+doublecomplex *rhs; /* modified */
+{
+ doublecomplex xj, temp;
+ int jcol, j, irow;
+
+ jcol = ncol - 1;
+
+ for (j = 0; j < ncol; j++) {
+
+ z_div(&xj, &rhs[jcol], &M[jcol + jcol*ldm]); /* M(jcol, jcol) */
+ rhs[jcol] = xj;
+
+ for (irow = 0; irow < jcol; irow++) {
+ zz_mult(&temp, &xj, &M[irow+jcol*ldm]); /* M(irow, jcol) */
+ z_sub(&rhs[irow], &rhs[irow], &temp);
+ }
+
+ jcol--;
+
+ }
+}
+
+
+/*! \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 )
+int ldm; /* in -- leading dimension of M */
+int nrow; /* in */
+int ncol; /* in */
+doublecomplex *M; /* in */
+doublecomplex *vec; /* in */
+doublecomplex *Mxvec; /* in/out */
+{
+ doublecomplex vi0, vi1, vi2, vi3;
+ doublecomplex *M0, temp;
+ doublecomplex *Mki0, *Mki1, *Mki2, *Mki3;
+ register int firstcol = 0;
+ int k;
+
+ M0 = &M[0];
+
+ while ( firstcol < ncol - 3 ) { /* Do 4 columns */
+ Mki0 = M0;
+ Mki1 = Mki0 + ldm;
+ Mki2 = Mki1 + ldm;
+ Mki3 = Mki2 + ldm;
+
+ vi0 = vec[firstcol++];
+ vi1 = vec[firstcol++];
+ vi2 = vec[firstcol++];
+ vi3 = vec[firstcol++];
+ for (k = 0; k < nrow; k++) {
+ zz_mult(&temp, &vi0, Mki0); Mki0++;
+ z_add(&Mxvec[k], &Mxvec[k], &temp);
+ zz_mult(&temp, &vi1, Mki1); Mki1++;
+ z_add(&Mxvec[k], &Mxvec[k], &temp);
+ zz_mult(&temp, &vi2, Mki2); Mki2++;
+ z_add(&Mxvec[k], &Mxvec[k], &temp);
+ zz_mult(&temp, &vi3, Mki3); Mki3++;
+ z_add(&Mxvec[k], &Mxvec[k], &temp);
+ }
+
+ M0 += 4 * ldm;
+ }
+
+ while ( firstcol < ncol ) { /* Do 1 column */
+ Mki0 = M0;
+ vi0 = vec[firstcol++];
+ for (k = 0; k < nrow; k++) {
+ zz_mult(&temp, &vi0, Mki0); Mki0++;
+ z_add(&Mxvec[k], &Mxvec[k], &temp);
+ }
+ M0 += ldm;
+ }
+
+}
+
diff --git a/SuperLU_5.2.0/SRC/zpanel_bmod.c b/SuperLU_5.2.0/SRC/zpanel_bmod.c
new file mode 100644
index 0000000..9e21cab
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zpanel_bmod.c
@@ -0,0 +1,494 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+/*
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "slu_zdefs.h"
+
+/*
+ * Function prototypes
+ */
+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 */
+ const int w, /* in */
+ const int jcol, /* in */
+ const int nseg, /* in */
+ doublecomplex *dense, /* out, of size n by w */
+ doublecomplex *tempv, /* working array */
+ int *segrep, /* in */
+ int *repfnz, /* in, of size n by w */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ doublecomplex alpha, beta;
+#endif
+
+ register int k, ksub;
+ int fsupc, nsupc, nsupr, nrow;
+ int krep, krep_ind;
+ doublecomplex ukj, ukj1, ukj2;
+ int luptr, luptr1, luptr2;
+ int segsze;
+ int block_nrow; /* no of rows in a block row */
+ register int lptr; /* Points to the row subscripts of a supernode */
+ int kfnz, irow, no_zeros;
+ register int isub, isub1, i;
+ register int jj; /* Index through each column in the panel */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ doublecomplex *lusup;
+ int *xlusup;
+ int *repfnz_col; /* repfnz[] for a column in the panel */
+ doublecomplex *dense_col; /* dense[] for a column in the panel */
+ doublecomplex *tempv1; /* Used in 1-D update */
+ doublecomplex *TriTmp, *MatvecTmp; /* used in 2-D update */
+ doublecomplex zero = {0.0, 0.0};
+ doublecomplex one = {1.0, 0.0};
+ doublecomplex comp_temp, comp_temp1;
+ register int ldaTmp;
+ register int r_ind, r_hi;
+ int maxsuper, rowblk, colblk;
+ flops_t *ops = stat->ops;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (doublecomplex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ maxsuper = SUPERLU_MAX( sp_ienv(3), sp_ienv(7) );
+ rowblk = sp_ienv(4);
+ colblk = sp_ienv(5);
+ ldaTmp = maxsuper + rowblk;
+
+ /*
+ * For each nonz supernode segment of U[*,j] in topological order
+ */
+ k = nseg - 1;
+ for (ksub = 0; ksub < nseg; ksub++) { /* for each updating supernode */
+
+ /* krep = representative of current k-th supernode
+ * fsupc = first supernodal column
+ * nsupc = no of columns in a supernode
+ * nsupr = no of rows in a supernode
+ */
+ krep = segrep[k--];
+ fsupc = xsup[supno[krep]];
+ nsupc = krep - fsupc + 1;
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc];
+ nrow = nsupr - nsupc;
+ lptr = xlsub[fsupc];
+ krep_ind = lptr + nsupc - 1;
+
+ repfnz_col = repfnz;
+ dense_col = dense;
+
+ if ( nsupc >= colblk && nrow > rowblk ) { /* 2-D block update */
+
+ TriTmp = tempv;
+
+ /* Sequence through each column in panel -- triangular solves */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp ) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ luptr = xlusup[fsupc];
+
+ ops[TRSV] += 4 * segsze * (segsze - 1);
+ ops[GEMV] += 8 * nrow * segsze;
+
+ /* Case 1: Update U-segment of size 1 -- col-col update */
+ if ( segsze == 1 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
+ irow = lsub[i];
+ zz_mult(&comp_temp, &ukj, &lusup[luptr]);
+ z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ ++luptr;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ ukj1 = dense_col[lsub[krep_ind - 1]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) {
+ zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ z_sub(&ukj, &ukj, &comp_temp);
+ dense_col[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++; luptr1++;
+ zz_mult(&comp_temp, &ukj, &lusup[luptr]);
+ zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ }
+ } else {
+ ukj2 = dense_col[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ zz_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
+ z_sub(&ukj1, &ukj1, &comp_temp);
+
+ zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ z_sub(&ukj, &ukj, &comp_temp);
+ dense_col[lsub[krep_ind]] = ukj;
+ dense_col[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ luptr++; luptr1++; luptr2++;
+ zz_mult(&comp_temp, &ukj, &lusup[luptr]);
+ zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ }
+ }
+
+ } else { /* segsze >= 4 */
+
+ /* Copy U[*,j] segment from dense[*] to TriTmp[*], which
+ holds the result of triangular solves. */
+ no_zeros = kfnz - fsupc;
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; ++i) {
+ irow = lsub[isub];
+ TriTmp[i] = dense_col[irow]; /* Gather */
+ ++isub;
+ }
+
+ /* start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, TriTmp, &incx );
+#else
+ ztrsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, TriTmp, &incx );
+#endif
+#else
+ zlsolve ( nsupr, segsze, &lusup[luptr], TriTmp );
+#endif
+
+
+ } /* else ... */
+
+ } /* for jj ... end tri-solves */
+
+ /* Block row updates; push all the way into dense[*] block */
+ for ( r_ind = 0; r_ind < nrow; r_ind += rowblk ) {
+
+ r_hi = SUPERLU_MIN(nrow, r_ind + rowblk);
+ block_nrow = SUPERLU_MIN(rowblk, r_hi - r_ind);
+ luptr = xlusup[fsupc] + nsupc + r_ind;
+ isub1 = lptr + nsupc + r_ind;
+
+ repfnz_col = repfnz;
+ TriTmp = tempv;
+ dense_col = dense;
+
+ /* Sequence through each column in panel -- matrix-vector */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ if ( segsze <= 3 ) continue; /* skip unrolled cases */
+
+ /* Perform a block update, and scatter the result of
+ matrix-vector to dense[]. */
+ no_zeros = kfnz - fsupc;
+ luptr1 = luptr + nsupr * no_zeros;
+ MatvecTmp = &TriTmp[maxsuper];
+
+#ifdef USE_VENDOR_BLAS
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ CGEMV(ftcs2, &block_nrow, &segsze, &alpha, &lusup[luptr1],
+ &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
+#else
+ zgemv_("N", &block_nrow, &segsze, &alpha, &lusup[luptr1],
+ &nsupr, TriTmp, &incx, &beta, MatvecTmp, &incy);
+#endif
+#else
+ zmatvec(nsupr, block_nrow, segsze, &lusup[luptr1],
+ TriTmp, MatvecTmp);
+#endif
+
+ /* Scatter MatvecTmp[*] into SPA dense[*] temporarily
+ * such that MatvecTmp[*] can be re-used for the
+ * the next blok row update. dense[] will be copied into
+ * global store after the whole panel has been finished.
+ */
+ isub = isub1;
+ for (i = 0; i < block_nrow; i++) {
+ irow = lsub[isub];
+ z_sub(&dense_col[irow], &dense_col[irow],
+ &MatvecTmp[i]);
+ MatvecTmp[i] = zero;
+ ++isub;
+ }
+
+ } /* for jj ... */
+
+ } /* for each block row ... */
+
+ /* Scatter the triangular solves into SPA dense[*] */
+ repfnz_col = repfnz;
+ TriTmp = tempv;
+ dense_col = dense;
+
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m, TriTmp += ldaTmp) {
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ if ( segsze <= 3 ) continue; /* skip unrolled cases */
+
+ no_zeros = kfnz - fsupc;
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense_col[irow] = TriTmp[i];
+ TriTmp[i] = zero;
+ ++isub;
+ }
+
+ } /* for jj ... */
+
+ } else { /* 1-D block modification */
+
+
+ /* Sequence through each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++,
+ repfnz_col += m, dense_col += m) {
+
+ kfnz = repfnz_col[krep];
+ if ( kfnz == EMPTY ) continue; /* Skip any zero segment */
+
+ segsze = krep - kfnz + 1;
+ luptr = xlusup[fsupc];
+
+ ops[TRSV] += 4 * segsze * (segsze - 1);
+ ops[GEMV] += 8 * nrow * segsze;
+
+ /* Case 1: Update U-segment of size 1 -- col-col update */
+ if ( segsze == 1 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc;
+
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; i++) {
+ irow = lsub[i];
+ zz_mult(&comp_temp, &ukj, &lusup[luptr]);
+ z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ ++luptr;
+ }
+
+ } else if ( segsze <= 3 ) {
+ ukj = dense_col[lsub[krep_ind]];
+ luptr += nsupr*(nsupc-1) + nsupc-1;
+ ukj1 = dense_col[lsub[krep_ind - 1]];
+ luptr1 = luptr - nsupr;
+
+ if ( segsze == 2 ) {
+ zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ z_sub(&ukj, &ukj, &comp_temp);
+ dense_col[lsub[krep_ind]] = ukj;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ ++luptr; ++luptr1;
+ zz_mult(&comp_temp, &ukj, &lusup[luptr]);
+ zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ }
+ } else {
+ ukj2 = dense_col[lsub[krep_ind - 2]];
+ luptr2 = luptr1 - nsupr;
+ zz_mult(&comp_temp, &ukj2, &lusup[luptr2-1]);
+ z_sub(&ukj1, &ukj1, &comp_temp);
+
+ zz_mult(&comp_temp, &ukj1, &lusup[luptr1]);
+ zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ z_sub(&ukj, &ukj, &comp_temp);
+ dense_col[lsub[krep_ind]] = ukj;
+ dense_col[lsub[krep_ind-1]] = ukj1;
+ for (i = lptr + nsupc; i < xlsub[fsupc+1]; ++i) {
+ irow = lsub[i];
+ ++luptr; ++luptr1; ++luptr2;
+ zz_mult(&comp_temp, &ukj, &lusup[luptr]);
+ zz_mult(&comp_temp1, &ukj1, &lusup[luptr1]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ zz_mult(&comp_temp1, &ukj2, &lusup[luptr2]);
+ z_add(&comp_temp, &comp_temp, &comp_temp1);
+ z_sub(&dense_col[irow], &dense_col[irow], &comp_temp);
+ }
+ }
+
+ } else { /* segsze >= 4 */
+ /*
+ * Perform a triangular solve and block update,
+ * then scatter the result of sup-col update to dense[].
+ */
+ no_zeros = kfnz - fsupc;
+
+ /* Copy U[*,j] segment from dense[*] to tempv[*]:
+ * The result of triangular solve is in tempv[*];
+ * The result of matrix vector update is in dense_col[*]
+ */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; ++i) {
+ irow = lsub[isub];
+ tempv[i] = dense_col[irow]; /* Gather */
+ ++isub;
+ }
+
+ /* start effective triangle */
+ luptr += nsupr * no_zeros + no_zeros;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#else
+ ztrsv_( "L", "N", "U", &segsze, &lusup[luptr],
+ &nsupr, tempv, &incx );
+#endif
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ alpha = one;
+ beta = zero;
+#ifdef _CRAY
+ CGEMV( ftcs2, &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#else
+ zgemv_( "N", &nrow, &segsze, &alpha, &lusup[luptr],
+ &nsupr, tempv, &incx, &beta, tempv1, &incy );
+#endif
+#else
+ zlsolve ( nsupr, segsze, &lusup[luptr], tempv );
+
+ luptr += segsze; /* Dense matrix-vector */
+ tempv1 = &tempv[segsze];
+ zmatvec (nsupr, nrow, segsze, &lusup[luptr], tempv, tempv1);
+#endif
+
+ /* Scatter tempv[*] into SPA dense[*] temporarily, such
+ * that tempv[*] can be used for the triangular solve of
+ * the next column of the panel. They will be copied into
+ * ucol[*] after the whole panel has been finished.
+ */
+ isub = lptr + no_zeros;
+ for (i = 0; i < segsze; i++) {
+ irow = lsub[isub];
+ dense_col[irow] = tempv[i];
+ tempv[i] = zero;
+ isub++;
+ }
+
+ /* Scatter the update from tempv1[*] into SPA dense[*] */
+ /* Start dense rectangular L */
+ for (i = 0; i < nrow; i++) {
+ irow = lsub[isub];
+ z_sub(&dense_col[irow], &dense_col[irow], &tempv1[i]);
+ tempv1[i] = zero;
+ ++isub;
+ }
+
+ } /* else segsze>=4 ... */
+
+ } /* for each column in the panel... */
+
+ } /* else 1-D update ... */
+
+ } /* for each updating supernode ... */
+
+}
+
+
+
diff --git a/SuperLU_5.2.0/SRC/zpanel_dfs.c b/SuperLU_5.2.0/SRC/zpanel_dfs.c
new file mode 100644
index 0000000..03c34ca
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zpanel_dfs.c
@@ -0,0 +1,264 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_zdefs.h"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Performs a symbolic factorization on a panel of columns [jcol, jcol+w).
+ *
+ * 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 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.
+ *
+ * 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;
+ *
+ * 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>
+ */
+
+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;
+ int *xa_begin, *xa_end;
+ 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 *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;
+
+ /* Initialize pointers */
+ Astore = A->Store;
+ a = Astore->nzval;
+ asub = Astore->rowind;
+ xa_begin = Astore->colbeg;
+ xa_end = Astore->colend;
+ marker1 = marker + m;
+ repfnz_col = repfnz;
+ dense_col = dense;
+ *nseg = 0;
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+
+ /* For each column in the panel */
+ for (jj = jcol; jj < jcol + w; jj++) {
+ nextl_col = (jj - jcol) * m;
+
+#ifdef CHK_DFS
+ printf("\npanel col %d: ", jj);
+#endif
+
+ /* 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 )
+ continue; /* krow visited before, go to the next nonzero */
+
+ /* For each unmarked nbr krow of jj
+ * krow is in L: place it in structure of L[*,jj]
+ */
+ 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[*]
+ */
+ else {
+
+ krep = xsup[supno[kperm]+1] - 1;
+ myfnz = repfnz_col[krep];
+
+#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 > kperm ) repfnz_col[krep] = kperm;
+ /* continue; */
+ }
+ else {
+ /* Otherwise, perform dfs starting at krep */
+ oldrep = EMPTY;
+ parent[krep] = oldrep;
+ repfnz_col[krep] = kperm;
+ xdfs = xlsub[krep];
+ maxdfs = xprune[krep];
+
+#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
+ */
+ 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
+ * been explored, update its repfnz[*]
+ */
+ else {
+
+ chrep = xsup[supno[chperm]+1] - 1;
+ myfnz = repfnz_col[chrep];
+#ifdef CHK_DFS
+ printf("chrep %d,myfnz %d,perm_r[%d] %d\n",chrep,myfnz,kchild,chperm);
+#endif
+ if ( myfnz != EMPTY ) { /* Visited before */
+ if ( myfnz > chperm )
+ repfnz_col[chrep] = chperm;
+ }
+ else {
+ /* Cont. dfs at snode-rep of kchild */
+ 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
+ printf(" xdfs %d, maxdfs %d: ", xdfs, maxdfs);
+ 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
+ * segment is seen for the first time. (Note that
+ * "repfnz[krep]" may change later.)
+ * Backtrack dfs to its parent.
+ */
+ if ( marker1[krep] < jcol ) {
+ segrep[*nseg] = krep;
+ ++(*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
+ 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;
+
+ } /* for jj ... */
+
+}
diff --git a/SuperLU_5.2.0/SRC/zpivotL.c b/SuperLU_5.2.0/SRC/zpivotL.c
new file mode 100644
index 0000000..2aa5231
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zpivotL.c
@@ -0,0 +1,195 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include <math.h>
+#include <stdlib.h>
+#include "slu_zdefs.h"
+
+#undef DEBUG
+
+/*! \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
+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 */
+ int nsupr; /* no of rows in the supernode */
+ int lptr; /* points to the starting subscript of the supernode */
+ int pivptr, old_pivptr, diag, diagind;
+ double pivmax, rtemp, thresh;
+ doublecomplex temp;
+ doublecomplex *lu_sup_ptr;
+ doublecomplex *lu_col_ptr;
+ int *lsub_ptr;
+ int isub, icol, k, itemp;
+ int *lsub, *xlsub;
+ doublecomplex *lusup;
+ int *xlusup;
+ flops_t *ops = stat->ops;
+
+ /* Initialize pointers */
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (doublecomplex *) 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 */
+
+#ifdef DEBUG
+if ( jcol == MIN_COL ) {
+ printf("Before cdiv: col %d\n", jcol);
+ for (k = nsupc; k < nsupr; k++)
+ printf(" lu[%d] %f\n", lsub_ptr[k], lu_col_ptr[k]);
+}
+#endif
+
+ /* Determine the largest abs numerical value for partial pivoting;
+ Also search for user-specified pivot, and diagonal element. */
+ if ( *usepr ) *pivrow = iperm_r[jcol];
+ diagind = iperm_c[jcol];
+ pivmax = 0.0;
+ pivptr = nsupc;
+ diag = EMPTY;
+ old_pivptr = nsupc;
+ for (isub = nsupc; isub < nsupr; ++isub) {
+ rtemp = z_abs1 (&lu_col_ptr[isub]);
+ if ( rtemp > pivmax ) {
+ pivmax = rtemp;
+ pivptr = isub;
+ }
+ if ( *usepr && lsub_ptr[isub] == *pivrow ) old_pivptr = isub;
+ if ( lsub_ptr[isub] == diagind ) diag = isub;
+ }
+
+ /* 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);
+ }
+
+ thresh = u * pivmax;
+
+ /* Choose appropriate pivotal element by our policy. */
+ if ( *usepr ) {
+ rtemp = z_abs1 (&lu_col_ptr[old_pivptr]);
+ if ( rtemp != 0.0 && rtemp >= thresh )
+ pivptr = old_pivptr;
+ else
+ *usepr = 0;
+ }
+ if ( *usepr == 0 ) {
+ /* Use diagonal pivot? */
+ if ( diag >= 0 ) { /* diagonal exists */
+ rtemp = z_abs1 (&lu_col_ptr[diag]);
+ if ( rtemp != 0.0 && rtemp >= thresh ) pivptr = diag;
+ }
+ *pivrow = lsub_ptr[pivptr];
+ }
+
+ /* Record pivot row */
+ perm_r[*pivrow] = jcol;
+
+ /* 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 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/zpivotgrowth.c b/SuperLU_5.2.0/SRC/zpivotgrowth.c
new file mode 100644
index 0000000..2356874
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zpivotgrowth.c
@@ -0,0 +1,124 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+/*! \brief
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * Compute the reciprocal pivot growth factor of the leading ncols columns
+ * of the matrix, using the formula:
+ * min_j ( max_i(abs(A_ij)) / max_i(abs(U_ij)) )
+ *
+ * Arguments
+ * =========
+ *
+ * ncols (input) int
+ * The number of columns of matrices A, L and U.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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>
+ */
+
+double
+zPivotGrowth(int ncols, SuperMatrix *A, int *perm_c,
+ SuperMatrix *L, SuperMatrix *U)
+{
+
+ NCformat *Astore;
+ SCformat *Lstore;
+ NCformat *Ustore;
+ doublecomplex *Aval, *Lval, *Uval;
+ int fsupc, nsupr, luptr, nz_in_U;
+ int i, j, k, oldcol;
+ int *inv_perm_c;
+ double rpg, maxaj, maxuj;
+ double smlnum;
+ doublecomplex *luval;
+ doublecomplex temp_comp;
+
+ /* Get machine constants. */
+ smlnum = dmach("S");
+ rpg = 1. / smlnum;
+
+ Astore = A->Store;
+ Lstore = L->Store;
+ Ustore = U->Store;
+ Aval = Astore->nzval;
+ Lval = Lstore->nzval;
+ Uval = Ustore->nzval;
+
+ inv_perm_c = (int *) SUPERLU_MALLOC(A->ncol*sizeof(int));
+ for (j = 0; j < A->ncol; ++j) inv_perm_c[perm_c[j]] = j;
+
+ for (k = 0; k <= Lstore->nsuper; ++k) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ luptr = L_NZ_START(fsupc);
+ luval = &Lval[luptr];
+ nz_in_U = 1;
+
+ for (j = fsupc; j < L_FST_SUPC(k+1) && j < ncols; ++j) {
+ maxaj = 0.;
+ oldcol = inv_perm_c[j];
+ for (i = Astore->colptr[oldcol]; i < Astore->colptr[oldcol+1]; ++i)
+ maxaj = SUPERLU_MAX( maxaj, z_abs1( &Aval[i]) );
+
+ maxuj = 0.;
+ for (i = Ustore->colptr[j]; i < Ustore->colptr[j+1]; i++)
+ maxuj = SUPERLU_MAX( maxuj, z_abs1( &Uval[i]) );
+
+ /* Supernode */
+ for (i = 0; i < nz_in_U; ++i)
+ maxuj = SUPERLU_MAX( maxuj, z_abs1( &luval[i]) );
+
+ ++nz_in_U;
+ luval += nsupr;
+
+ if ( maxuj == 0. )
+ rpg = SUPERLU_MIN( rpg, 1.);
+ else
+ rpg = SUPERLU_MIN( rpg, maxaj / maxuj );
+ }
+
+ if ( j >= ncols ) break;
+ }
+
+ SUPERLU_FREE(inv_perm_c);
+ return (rpg);
+}
diff --git a/SuperLU_5.2.0/SRC/zpruneL.c b/SuperLU_5.2.0/SRC/zpruneL.c
new file mode 100644
index 0000000..2f25868
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zpruneL.c
@@ -0,0 +1,164 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#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 */
+ const int *perm_r, /* in */
+ const int pivrow, /* in */
+ const int nseg, /* in */
+ const int *segrep, /* in */
+ const int *repfnz, /* in */
+ int *xprune, /* out */
+ GlobalLU_t *Glu /* modified - global LU data structures */
+ )
+{
+
+ doublecomplex utemp;
+ int jsupno, irep, irep1, kmin, kmax, krow, movnum;
+ int i, ktemp, minloc, maxloc;
+ int do_prune; /* logical variable */
+ int *xsup, *supno;
+ int *lsub, *xlsub;
+ doublecomplex *lusup;
+ int *xlusup;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (doublecomplex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ /*
+ * For each supernode-rep irep in U[*,j]
+ */
+ jsupno = supno[jcol];
+ for (i = 0; i < nseg; i++) {
+
+ irep = segrep[i];
+ irep1 = irep + 1;
+ do_prune = FALSE;
+
+ /* Don't prune with a zero U-segment */
+ if ( repfnz[irep] == EMPTY )
+ continue;
+
+ /* If a snode overlaps with the next panel, then the U-segment
+ * is fragmented into two parts -- irep and irep1. We should let
+ * pruning occur at the rep-column in irep1's snode.
+ */
+ if ( supno[irep] == supno[irep1] ) /* Don't prune */
+ continue;
+
+ /*
+ * If it has not been pruned & it has a nonz in row L[pivrow,i]
+ */
+ if ( supno[irep] != jsupno ) {
+ if ( xprune[irep] >= xlsub[irep1] ) {
+ kmin = xlsub[irep];
+ kmax = xlsub[irep1] - 1;
+ for (krow = kmin; krow <= kmax; krow++)
+ if ( lsub[krow] == pivrow ) {
+ do_prune = TRUE;
+ break;
+ }
+ }
+
+ if ( do_prune ) {
+
+ /* Do a quicksort-type partition
+ * movnum=TRUE means that the num values have to be exchanged.
+ */
+ movnum = FALSE;
+ if ( irep == xsup[supno[irep]] ) /* Snode of size 1 */
+ movnum = TRUE;
+
+ while ( kmin <= kmax ) {
+
+ if ( perm_r[lsub[kmax]] == EMPTY )
+ kmax--;
+ else if ( perm_r[lsub[kmin]] != EMPTY )
+ kmin++;
+ else { /* kmin below pivrow (not yet pivoted), and kmax
+ * above pivrow: interchange the two subscripts
+ */
+ ktemp = lsub[kmin];
+ lsub[kmin] = lsub[kmax];
+ lsub[kmax] = ktemp;
+
+ /* 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.
+ */
+ if ( movnum ) {
+ minloc = xlusup[irep] + (kmin - xlsub[irep]);
+ maxloc = xlusup[irep] + (kmax - xlsub[irep]);
+ utemp = lusup[minloc];
+ lusup[minloc] = lusup[maxloc];
+ lusup[maxloc] = utemp;
+ }
+
+ kmin++;
+ kmax--;
+
+ }
+
+ } /* while */
+
+ xprune[irep] = kmin; /* Pruning */
+
+#ifdef CHK_PRUNE
+ printf(" After zpruneL(),using col %d: xprune[%d] = %d\n",
+ jcol, irep, kmin);
+#endif
+ } /* if do_prune */
+
+ } /* if */
+
+ } /* for each U-segment... */
+}
diff --git a/SuperLU_5.2.0/SRC/zreadhb.c b/SuperLU_5.2.0/SRC/zreadhb.c
new file mode 100644
index 0000000..ec338c2
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zreadhb.c
@@ -0,0 +1,379 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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"
+
+
+/*! \brief Eat up the rest of the current line */
+int zDumpLine(FILE *fp)
+{
+ register int c;
+ while ((c = fgetc(fp)) != '\n') ;
+ return 0;
+}
+
+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;
+}
+
+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) */
+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;
+}
+
+/*! \brief
+ *
+ * <pre>
+ * On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+ * matrix. On exit, it represents the full matrix with lower and upper parts.
+ * </pre>
+ */
+static void
+FormFullA(int n, int *nonz, doublecomplex **nzval, int **rowind, int **colptr)
+{
+ register int i, j, k, col, new_nnz;
+ int *t_rowind, *t_colptr, *al_rowind, *al_colptr, *a_rowind, *a_colptr;
+ int *marker;
+ doublecomplex *t_val, *al_val, *a_val;
+
+ al_rowind = *rowind;
+ al_colptr = *colptr;
+ al_val = *nzval;
+
+ if ( !(marker =(int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC t_colptr[]");
+ if ( !(t_rowind = (int *) SUPERLU_MALLOC( *nonz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_rowind[]");
+ if ( !(t_val = (doublecomplex*) SUPERLU_MALLOC( *nonz * sizeof(doublecomplex)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_val[]");
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < n; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i)
+ ++marker[al_rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < n; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose matrix A to T */
+ for (j = 0; j < n; ++j)
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ col = al_rowind[i];
+ t_rowind[marker[col]] = j;
+ t_val[marker[col]] = al_val[i];
+ ++marker[col];
+ }
+
+ new_nnz = *nonz * 2 - n;
+ if ( !(a_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC a_colptr[]");
+ if ( !(a_rowind = (int *) SUPERLU_MALLOC( new_nnz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_rowind[]");
+ if ( !(a_val = (doublecomplex*) SUPERLU_MALLOC( new_nnz * sizeof(doublecomplex)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_val[]");
+
+ a_colptr[0] = 0;
+ k = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ if ( t_rowind[i] != j ) { /* not diagonal */
+ a_rowind[k] = t_rowind[i];
+ a_val[k] = t_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+ }
+
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ a_rowind[k] = al_rowind[i];
+ a_val[k] = al_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+
+ a_colptr[j+1] = k;
+ }
+
+ printf("FormFullA: new_nnz = %d, k = %d\n", new_nnz, k);
+
+ SUPERLU_FREE(al_val);
+ SUPERLU_FREE(al_rowind);
+ SUPERLU_FREE(al_colptr);
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_val);
+ SUPERLU_FREE(t_rowind);
+ SUPERLU_FREE(t_colptr);
+
+ *nzval = a_val;
+ *rowind = a_rowind;
+ *colptr = a_colptr;
+ *nonz = new_nnz;
+}
+
+void
+zreadhb(FILE *fp, int *nrow, int *ncol, int *nonz,
+ doublecomplex **nzval, int **rowind, int **colptr)
+{
+
+ register int i, numer_lines = 0, rhscrd = 0;
+ int tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
+ char buf[100], type[4], key[10];
+ int sym;
+
+ /* Line 1 */
+ fgets(buf, 100, fp);
+ fputs(buf, stdout);
+#if 0
+ fscanf(fp, "%72c", buf); buf[72] = 0;
+ printf("Title: %s", buf);
+ fscanf(fp, "%8c", key); key[8] = 0;
+ printf("Key: %s\n", key);
+ zDumpLine(fp);
+#endif
+
+ /* Line 2 */
+ for (i=0; i<5; i++) {
+ fscanf(fp, "%14c", buf); buf[14] = 0;
+ sscanf(buf, "%d", &tmp);
+ if (i == 3) numer_lines = tmp;
+ if (i == 4 && tmp) rhscrd = 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);
+ fscanf(fp, "%20c", buf);
+ zDumpLine(fp);
+
+ /* Line 5: right-hand side */
+ if ( rhscrd ) zDumpLine(fp); /* skip RHSFMT */
+
+#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);
+ }
+
+ sym = (type[1] == 'S' || type[1] == 's');
+ if ( sym ) {
+ FormFullA(*ncol, nonz, nzval, rowind, colptr);
+ }
+
+ fclose(fp);
+}
+
diff --git a/SuperLU_5.2.0/SRC/zreadrb.c b/SuperLU_5.2.0/SRC/zreadrb.c
new file mode 100644
index 0000000..7641fe2
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zreadrb.c
@@ -0,0 +1,365 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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 <stdio.h>
+#include <stdlib.h>
+#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;
+}
+
+
+/*! \brief
+ *
+ * <pre>
+ * On input, nonz/nzval/rowind/colptr represents lower part of a symmetric
+ * matrix. On exit, it represents the full matrix with lower and upper parts.
+ * </pre>
+ */
+static void
+FormFullA(int n, int *nonz, doublecomplex **nzval, int **rowind, int **colptr)
+{
+ register int i, j, k, col, new_nnz;
+ int *t_rowind, *t_colptr, *al_rowind, *al_colptr, *a_rowind, *a_colptr;
+ int *marker;
+ doublecomplex *t_val, *al_val, *a_val;
+
+ al_rowind = *rowind;
+ al_colptr = *colptr;
+ al_val = *nzval;
+
+ if ( !(marker =(int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for marker[]");
+ if ( !(t_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC t_colptr[]");
+ if ( !(t_rowind = (int *) SUPERLU_MALLOC( *nonz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_rowind[]");
+ if ( !(t_val = (doublecomplex*) SUPERLU_MALLOC( *nonz * sizeof(doublecomplex)) ) )
+ ABORT("SUPERLU_MALLOC fails for t_val[]");
+
+ /* Get counts of each column of T, and set up column pointers */
+ for (i = 0; i < n; ++i) marker[i] = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i)
+ ++marker[al_rowind[i]];
+ }
+ t_colptr[0] = 0;
+ for (i = 0; i < n; ++i) {
+ t_colptr[i+1] = t_colptr[i] + marker[i];
+ marker[i] = t_colptr[i];
+ }
+
+ /* Transpose matrix A to T */
+ for (j = 0; j < n; ++j)
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ col = al_rowind[i];
+ t_rowind[marker[col]] = j;
+ t_val[marker[col]] = al_val[i];
+ ++marker[col];
+ }
+
+ new_nnz = *nonz * 2 - n;
+ if ( !(a_colptr = (int *) SUPERLU_MALLOC( (n+1) * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC a_colptr[]");
+ if ( !(a_rowind = (int *) SUPERLU_MALLOC( new_nnz * sizeof(int)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_rowind[]");
+ if ( !(a_val = (doublecomplex*) SUPERLU_MALLOC( new_nnz * sizeof(doublecomplex)) ) )
+ ABORT("SUPERLU_MALLOC fails for a_val[]");
+
+ a_colptr[0] = 0;
+ k = 0;
+ for (j = 0; j < n; ++j) {
+ for (i = t_colptr[j]; i < t_colptr[j+1]; ++i) {
+ if ( t_rowind[i] != j ) { /* not diagonal */
+ a_rowind[k] = t_rowind[i];
+ a_val[k] = t_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+ }
+
+ for (i = al_colptr[j]; i < al_colptr[j+1]; ++i) {
+ a_rowind[k] = al_rowind[i];
+ a_val[k] = al_val[i];
+#ifdef DEBUG
+ if ( fabs(a_val[k]) < 4.047e-300 )
+ printf("%5d: %e\n", k, a_val[k]);
+#endif
+ ++k;
+ }
+
+ a_colptr[j+1] = k;
+ }
+
+ printf("FormFullA: new_nnz = %d, k = %d\n", new_nnz, k);
+
+ SUPERLU_FREE(al_val);
+ SUPERLU_FREE(al_rowind);
+ SUPERLU_FREE(al_colptr);
+ SUPERLU_FREE(marker);
+ SUPERLU_FREE(t_val);
+ SUPERLU_FREE(t_rowind);
+ SUPERLU_FREE(t_colptr);
+
+ *nzval = a_val;
+ *rowind = a_rowind;
+ *colptr = a_colptr;
+ *nonz = new_nnz;
+}
+
+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];
+ int sym;
+ 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);
+ }
+
+ sym = (type[1] == 'S' || type[1] == 's');
+ if ( sym ) {
+ FormFullA(*ncol, nonz, nzval, rowind, colptr);
+ }
+
+ fclose(fp);
+}
diff --git a/SuperLU_5.2.0/SRC/zreadtriple.c b/SuperLU_5.2.0/SRC/zreadtriple.c
new file mode 100644
index 0000000..fc834ec
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zreadtriple.c
@@ -0,0 +1,150 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+zreadtriple(int *m, int *n, int *nonz,
+ doublecomplex **nzval, int **rowind, int **colptr)
+{
+/*
+ * Output parameters
+ * =================
+ * (a,asub,xa): asub[*] contains the row subscripts of nonzeros
+ * in columns of matrix A; a[*] the numerical values;
+ * row i of A is given by a[k],k=xa[i],...,xa[i+1]-1.
+ *
+ */
+ int j, k, jsize, nnz, nz;
+ doublecomplex *a, *val;
+ int *asub, *xa, *row, *col;
+ int zero_base = 0;
+
+ /* Matrix format:
+ * First line: #rows, #cols, #non-zero
+ * Triplet in the rest of lines:
+ * row, col, value
+ */
+
+ 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;
+ xa = *colptr;
+
+ val = (doublecomplex *) SUPERLU_MALLOC(*nonz * sizeof(doublecomplex));
+ 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 (nnz = 0, nz = 0; nnz < *nonz; ++nnz) {
+ scanf("%d%d%lf%lf\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,%e) out of bound, removed\n",
+ nz, row[nz], col[nz], val[nz].r, val[nz].i);
+ exit(-1);
+ } else {
+ ++xa[col[nz]];
+ ++nz;
+ }
+ }
+
+ *nonz = nz;
+
+ /* Initialize the array of column pointers */
+ k = 0;
+ jsize = xa[0];
+ xa[0] = 0;
+ for (j = 1; j < *n; ++j) {
+ k += jsize;
+ jsize = xa[j];
+ xa[j] = k;
+ }
+
+ /* Copy the triplets into the column oriented storage */
+ for (nz = 0; nz < *nonz; ++nz) {
+ j = col[nz];
+ k = xa[j];
+ asub[k] = row[nz];
+ a[k] = val[nz];
+ ++xa[j];
+ }
+
+ /* Reset the column pointers to the beginning of each column */
+ for (j = *n; j > 0; --j)
+ xa[j] = xa[j-1];
+ xa[0] = 0;
+
+ SUPERLU_FREE(val);
+ SUPERLU_FREE(row);
+ SUPERLU_FREE(col);
+
+#ifdef CHK_INPUT
+ {
+ 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/SuperLU_5.2.0/SRC/zsnode_bmod.c b/SuperLU_5.2.0/SRC/zsnode_bmod.c
new file mode 100644
index 0000000..403b7ee
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zsnode_bmod.c
@@ -0,0 +1,130 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#include "slu_zdefs.h"
+
+
+/*! \brief Performs numeric block updates within the relaxed snode.
+ */
+int
+zsnode_bmod (
+ const int jcol, /* in */
+ const int jsupno, /* in */
+ const int fsupc, /* in */
+ doublecomplex *dense, /* in */
+ doublecomplex *tempv, /* working array */
+ GlobalLU_t *Glu, /* modified */
+ SuperLUStat_t *stat /* output */
+ )
+{
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ _fcd ftcs1 = _cptofcd("L", strlen("L")),
+ ftcs2 = _cptofcd("N", strlen("N")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ int incx = 1, incy = 1;
+ doublecomplex alpha = {-1.0, 0.0}, beta = {1.0, 0.0};
+#endif
+
+ doublecomplex comp_zero = {0.0, 0.0};
+ int luptr, nsupc, nsupr, nrow;
+ int isub, irow, i, iptr;
+ register int ufirst, nextlu;
+ int *lsub, *xlsub;
+ doublecomplex *lusup;
+ int *xlusup;
+ flops_t *ops = stat->ops;
+
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (doublecomplex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+
+ nextlu = xlusup[jcol];
+
+ /*
+ * Process the supernodal portion of L\U[*,j]
+ */
+ for (isub = xlsub[fsupc]; isub < xlsub[fsupc+1]; isub++) {
+ irow = lsub[isub];
+ lusup[nextlu] = dense[irow];
+ dense[irow] = comp_zero;
+ ++nextlu;
+ }
+
+ xlusup[jcol + 1] = nextlu; /* Initialize xlusup for next column */
+
+ if ( fsupc < jcol ) {
+
+ luptr = xlusup[fsupc];
+ nsupr = xlsub[fsupc+1] - xlsub[fsupc];
+ nsupc = jcol - fsupc; /* Excluding jcol */
+ ufirst = xlusup[jcol]; /* Points to the beginning of column
+ jcol in supernode L\U(jsupno). */
+ nrow = nsupr - nsupc;
+
+ ops[TRSV] += 4 * nsupc * (nsupc - 1);
+ ops[GEMV] += 8 * nrow * nsupc;
+
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &lusup[luptr], &nsupr,
+ &lusup[ufirst], &incx );
+ CGEMV( ftcs2, &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#else
+ ztrsv_( "L", "N", "U", &nsupc, &lusup[luptr], &nsupr,
+ &lusup[ufirst], &incx );
+ zgemv_( "N", &nrow, &nsupc, &alpha, &lusup[luptr+nsupc], &nsupr,
+ &lusup[ufirst], &incx, &beta, &lusup[ufirst+nsupc], &incy );
+#endif
+#else
+ zlsolve ( nsupr, nsupc, &lusup[luptr], &lusup[ufirst] );
+ zmatvec ( nsupr, nrow, nsupc, &lusup[luptr+nsupc],
+ &lusup[ufirst], &tempv[0] );
+
+ /* Scatter tempv[*] into lusup[*] */
+ iptr = ufirst + nsupc;
+ for (i = 0; i < nrow; i++) {
+ z_sub(&lusup[iptr], &lusup[iptr], &tempv[i]);
+ ++iptr;
+ tempv[i] = comp_zero;
+ }
+#endif
+
+ }
+
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/zsnode_dfs.c b/SuperLU_5.2.0/SRC/zsnode_dfs.c
new file mode 100644
index 0000000..e1a81bc
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zsnode_dfs.c
@@ -0,0 +1,122 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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>
+ */
+
+
+#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 */
+ const int kcol, /* in - end of the supernode */
+ const int *asub, /* in */
+ const int *xa_begin, /* in */
+ const int *xa_end, /* in */
+ int *xprune, /* out */
+ int *marker, /* modified */
+ GlobalLU_t *Glu /* modified */
+ )
+{
+
+ register int i, k, ifrom, ito, nextl, new_next;
+ 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) )
+ return (mem_error);
+ lsub = Glu->lsub;
+ }
+ }
+ }
+ supno[i] = nsuper;
+ }
+
+ /* Supernode > 1, then make a copy of the subscripts for pruning */
+ if ( jcol < kcol ) {
+ new_next = nextl + (nextl - xlsub[jcol]);
+ while ( new_next > nzlmax ) {
+ if ( mem_error = zLUMemXpand(jcol, nextl, LSUB, &nzlmax, Glu) )
+ return (mem_error);
+ lsub = Glu->lsub;
+ }
+ ito = nextl;
+ for (ifrom = xlsub[jcol]; ifrom < nextl; )
+ lsub[ito++] = lsub[ifrom++];
+ for (i = jcol+1; i <= kcol; i++) xlsub[i] = nextl;
+ nextl = ito;
+ }
+
+ xsup[nsuper+1] = kcol + 1;
+ supno[kcol+1] = nsuper;
+ xprune[kcol] = nextl;
+ xlsub[kcol+1] = nextl;
+
+ return 0;
+}
+
diff --git a/SuperLU_5.2.0/SRC/zsp_blas2.c b/SuperLU_5.2.0/SRC/zsp_blas2.c
new file mode 100644
index 0000000..1e34012
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zsp_blas2.c
@@ -0,0 +1,608 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @file zsp_blas2.c
+ * \brief Sparse BLAS 2, using some dense BLAS 2 operations
+ *
+ * <pre>
+ * -- SuperLU routine (version 5.1) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ * Last update: December 3, 2015
+ * </pre>
+ */
+/*
+ * File name: zsp_blas2.c
+ * Purpose: Sparse BLAS 2, using some dense BLAS 2 operations.
+ */
+
+#include "slu_zdefs.h"
+
+/*
+ * Function prototypes
+ */
+void zusolve(int, int, doublecomplex*, doublecomplex*);
+void zlsolve(int, int, doublecomplex*, doublecomplex*);
+void zmatvec(int, int, int, doublecomplex*, doublecomplex*, doublecomplex*);
+
+/*! \brief Solves one of the systems of equations A*x = b, or A'*x = b
+ *
+ * <pre>
+ * Purpose
+ * =======
+ *
+ * sp_ztrsv() 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.
+ *
+ * Parameters
+ * ==========
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * U - (input) SuperMatrix*
+ * The factor U from the factorization Pr*A*Pc=L*U.
+ * U has types: Stype = NC, Dtype = SLU_Z, Mtype = TRU.
+ *
+ * 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.
+ *
+ * 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")),
+ ftcs3 = _cptofcd("U", strlen("U"));
+#endif
+ SCformat *Lstore;
+ NCformat *Ustore;
+ doublecomplex *Lval, *Uval;
+ int incx = 1, incy = 1;
+ doublecomplex temp;
+ doublecomplex alpha = {1.0, 0.0}, beta = {1.0, 0.0};
+ doublecomplex comp_zero = {0.0, 0.0};
+ int nrow;
+ int fsupc, nsupr, nsupc, luptr, istart, irow;
+ int i, k, iptr, jcol;
+ doublecomplex *work;
+ flops_t solve_ops;
+
+ /* Test the input parameters */
+ *info = 0;
+ if ( strncmp(uplo,"L", 1)!=0 && strncmp(uplo, "U", 1)!=0 ) *info = -1;
+ else if ( strncmp(trans, "N", 1)!=0 && strncmp(trans, "T", 1)!=0 &&
+ strncmp(trans, "C", 1)!=0) *info = -2;
+ else if ( strncmp(diag, "U", 1)!=0 && strncmp(diag, "N", 1)!=0 )
+ *info = -3;
+ else if ( L->nrow != L->ncol || L->nrow < 0 ) *info = -4;
+ else if ( U->nrow != U->ncol || U->nrow < 0 ) *info = -5;
+ if ( *info ) {
+ i = -(*info);
+ input_error("sp_ztrsv", &i);
+ return 0;
+ }
+
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+ solve_ops = 0;
+
+ if ( !(work = doublecomplexCalloc(L->nrow)) )
+ ABORT("Malloc fails for work in sp_ztrsv().");
+
+ if ( strncmp(trans, "N", 1)==0 ) { /* Form x := inv(A)*x. */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := inv(L)*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ 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;
+ luptr = L_NZ_START(fsupc);
+ nrow = nsupr - nsupc;
+
+ /* 1 z_div costs 10 flops */
+ solve_ops += 4 * nsupc * (nsupc - 1) + 10 * nsupc;
+ solve_ops += 8 * nrow * nsupc;
+
+ if ( nsupc == 1 ) {
+ for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
+ irow = L_SUB(iptr);
+ ++luptr;
+ zz_mult(&comp_zero, &x[fsupc], &Lval[luptr]);
+ z_sub(&x[irow], &x[irow], &comp_zero);
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+
+ CGEMV(ftcs2, &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
+ &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
+#else
+ ztrsv_("L", "N", "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+
+ zgemv_("N", &nrow, &nsupc, &alpha, &Lval[luptr+nsupc],
+ &nsupr, &x[fsupc], &incx, &beta, &work[0], &incy);
+#endif
+#else
+ zlsolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc]);
+
+ zmatvec ( nsupr, nsupr-nsupc, nsupc, &Lval[luptr+nsupc],
+ &x[fsupc], &work[0] );
+#endif
+
+ iptr = istart + nsupc;
+ for (i = 0; i < nrow; ++i, ++iptr) {
+ irow = L_SUB(iptr);
+ z_sub(&x[irow], &x[irow], &work[i]); /* Scatter */
+ work[i] = comp_zero;
+
+ }
+ }
+ } /* for k ... */
+
+ } else {
+ /* Form x := inv(U)*x */
+
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; k--) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ /* 1 z_div costs 10 flops */
+ solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
+
+ if ( nsupc == 1 ) {
+ z_div(&x[fsupc], &x[fsupc], &Lval[luptr]);
+ for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
+ irow = U_SUB(i);
+ zz_mult(&comp_zero, &x[fsupc], &Uval[i]);
+ z_sub(&x[irow], &x[irow], &comp_zero);
+ }
+ } else {
+#ifdef USE_VENDOR_BLAS
+#ifdef _CRAY
+ CTRSV(ftcs3, ftcs2, ftcs2, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ztrsv_("U", "N", "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+#else
+ zusolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
+#endif
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1);
+ i++) {
+ irow = U_SUB(i);
+ zz_mult(&comp_zero, &x[jcol], &Uval[i]);
+ z_sub(&x[irow], &x[irow], &comp_zero);
+ }
+ }
+ }
+ } /* for k ... */
+
+ }
+ } else if ( strncmp(trans, "T", 1)==0 ) { /* Form x := inv(A')*x */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := inv(L')*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; --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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += 8 * (nsupr - nsupc) * nsupc;
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ iptr = istart + nsupc;
+ for (i = L_NZ_START(jcol) + nsupc;
+ i < L_NZ_START(jcol+1); i++) {
+ irow = L_SUB(iptr);
+ zz_mult(&comp_zero, &x[irow], &Lval[i]);
+ z_sub(&x[jcol], &x[jcol], &comp_zero);
+ iptr++;
+ }
+ }
+
+ if ( nsupc > 1 ) {
+ solve_ops += 4 * nsupc * (nsupc - 1);
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd("T", strlen("T"));
+ ftcs3 = _cptofcd("U", strlen("U"));
+ CTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ztrsv_("L", "T", "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ }
+ } else {
+ /* Form x := inv(U')*x */
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = 0; k <= Lstore->nsuper; k++) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
+ irow = U_SUB(i);
+ zz_mult(&comp_zero, &x[irow], &Uval[i]);
+ z_sub(&x[jcol], &x[jcol], &comp_zero);
+ }
+ }
+
+ /* 1 z_div costs 10 flops */
+ solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
+
+ if ( nsupc == 1 ) {
+ z_div(&x[fsupc], &x[fsupc], &Lval[luptr]);
+ } else {
+#ifdef _CRAY
+ ftcs1 = _cptofcd("U", strlen("U"));
+ ftcs2 = _cptofcd("T", strlen("T"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ CTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ztrsv_("U", "T", "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ } /* for k ... */
+ }
+ } else { /* Form x := conj(inv(A'))*x */
+
+ if ( strncmp(uplo, "L", 1)==0 ) {
+ /* Form x := conj(inv(L'))*x */
+ if ( L->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = Lstore->nsuper; k >= 0; --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;
+ luptr = L_NZ_START(fsupc);
+
+ solve_ops += 8 * (nsupr - nsupc) * nsupc;
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ iptr = istart + nsupc;
+ for (i = L_NZ_START(jcol) + nsupc;
+ i < L_NZ_START(jcol+1); i++) {
+ irow = L_SUB(iptr);
+ zz_conj(&temp, &Lval[i]);
+ zz_mult(&comp_zero, &x[irow], &temp);
+ z_sub(&x[jcol], &x[jcol], &comp_zero);
+ iptr++;
+ }
+ }
+
+ if ( nsupc > 1 ) {
+ solve_ops += 4 * nsupc * (nsupc - 1);
+#ifdef _CRAY
+ ftcs1 = _cptofcd("L", strlen("L"));
+ ftcs2 = _cptofcd(trans, strlen("T"));
+ ftcs3 = _cptofcd("U", strlen("U"));
+ ZTRSV(ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ztrsv_("L", trans, "U", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ }
+ } else {
+ /* Form x := conj(inv(U'))*x */
+ if ( U->nrow == 0 ) return 0; /* Quick return */
+
+ for (k = 0; k <= Lstore->nsuper; k++) {
+ fsupc = L_FST_SUPC(k);
+ nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
+ nsupc = L_FST_SUPC(k+1) - fsupc;
+ luptr = L_NZ_START(fsupc);
+
+ for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+ solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
+ for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
+ irow = U_SUB(i);
+ zz_conj(&temp, &Uval[i]);
+ zz_mult(&comp_zero, &x[irow], &temp);
+ z_sub(&x[jcol], &x[jcol], &comp_zero);
+ }
+ }
+
+ /* 1 z_div costs 10 flops */
+ solve_ops += 4 * nsupc * (nsupc + 1) + 10 * nsupc;
+
+ if ( nsupc == 1 ) {
+ zz_conj(&temp, &Lval[luptr]);
+ z_div(&x[fsupc], &x[fsupc], &temp);
+ } else {
+#ifdef _CRAY
+ ftcs1 = _cptofcd("U", strlen("U"));
+ ftcs2 = _cptofcd(trans, strlen("T"));
+ ftcs3 = _cptofcd("N", strlen("N"));
+ ZTRSV( ftcs1, ftcs2, ftcs3, &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#else
+ ztrsv_("U", trans, "N", &nsupc, &Lval[luptr], &nsupr,
+ &x[fsupc], &incx);
+#endif
+ }
+ } /* for k ... */
+ }
+ }
+
+ stat->ops[SOLVE] += solve_ops;
+ SUPERLU_FREE(work);
+ return 0;
+}
+
+
+
+/*! \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^H*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)
+{
+
+ /* Local variables */
+ NCformat *Astore;
+ doublecomplex *Aval;
+ int info;
+ doublecomplex temp, temp1;
+ int lenx, leny, i, j, irow;
+ int iy, jx, jy, kx, ky;
+ int notran;
+ doublecomplex comp_zero = {0.0, 0.0};
+ doublecomplex comp_one = {1.0, 0.0};
+
+ notran = ( strncmp(trans, "N", 1)==0 || strncmp(trans, "n", 1)==0 );
+ Astore = A->Store;
+ Aval = Astore->nzval;
+
+ /* Test the input parameters */
+ info = 0;
+ if ( !notran && strncmp(trans, "T", 1)!=0 && strncmp(trans, "C", 1)!=0)
+ info = 1;
+ else if ( A->nrow < 0 || A->ncol < 0 ) info = 3;
+ else if (incx == 0) info = 5;
+ else if (incy == 0) info = 8;
+ if (info != 0) {
+ input_error("sp_zgemv ", &info);
+ return 0;
+ }
+
+ /* Quick return if possible. */
+ if (A->nrow == 0 || A->ncol == 0 ||
+ z_eq(&alpha, &comp_zero) &&
+ z_eq(&beta, &comp_one))
+ return 0;
+
+ /* Set LENX and LENY, the lengths of the vectors x and y, and set
+ up the start points in X and Y. */
+ if ( notran ) {
+ lenx = A->ncol;
+ leny = A->nrow;
+ } else {
+ lenx = A->nrow;
+ leny = A->ncol;
+ }
+ if (incx > 0) kx = 0;
+ else kx = - (lenx - 1) * incx;
+ if (incy > 0) ky = 0;
+ else ky = - (leny - 1) * incy;
+
+ /* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through A. */
+ /* First form y := beta*y. */
+ if ( !z_eq(&beta, &comp_one) ) {
+ if (incy == 1) {
+ if ( z_eq(&beta, &comp_zero) )
+ for (i = 0; i < leny; ++i) y[i] = comp_zero;
+ else
+ for (i = 0; i < leny; ++i)
+ zz_mult(&y[i], &beta, &y[i]);
+ } else {
+ iy = ky;
+ if ( z_eq(&beta, &comp_zero) )
+ for (i = 0; i < leny; ++i) {
+ y[iy] = comp_zero;
+ iy += incy;
+ }
+ else
+ for (i = 0; i < leny; ++i) {
+ zz_mult(&y[iy], &beta, &y[iy]);
+ iy += incy;
+ }
+ }
+ }
+
+ if ( z_eq(&alpha, &comp_zero) ) return 0;
+
+ if ( notran ) {
+ /* Form y := alpha*A*x + y. */
+ jx = kx;
+ if (incy == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ if ( !z_eq(&x[jx], &comp_zero) ) {
+ zz_mult(&temp, &alpha, &x[jx]);
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ zz_mult(&temp1, &temp, &Aval[i]);
+ z_add(&y[irow], &y[irow], &temp1);
+ }
+ }
+ jx += incx;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ } else if (strncmp(trans, "T", 1) == 0 || strncmp(trans, "t", 1) == 0) {
+ /* Form y := alpha*A'*x + y. */
+ jy = ky;
+ if (incx == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ temp = comp_zero;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ zz_mult(&temp1, &Aval[i], &x[irow]);
+ z_add(&temp, &temp, &temp1);
+ }
+ zz_mult(&temp1, &alpha, &temp);
+ z_add(&y[jy], &y[jy], &temp1);
+ jy += incy;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ } else { /* trans == 'C' or 'c' */
+ /* Form y := alpha * conj(A) * x + y. */
+ doublecomplex temp2;
+ jy = ky;
+ if (incx == 1) {
+ for (j = 0; j < A->ncol; ++j) {
+ temp = comp_zero;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ temp2.r = Aval[i].r;
+ temp2.i = -Aval[i].i; /* conjugation */
+ zz_mult(&temp1, &temp2, &x[irow]);
+ z_add(&temp, &temp, &temp1);
+ }
+ zz_mult(&temp1, &alpha, &temp);
+ z_add(&y[jy], &y[jy], &temp1);
+ jy += incy;
+ }
+ } else {
+ ABORT("Not implemented.");
+ }
+ }
+
+ return 0;
+} /* sp_zgemv */
+
diff --git a/SuperLU_5.2.0/SRC/zsp_blas3.c b/SuperLU_5.2.0/SRC/zsp_blas3.c
new file mode 100644
index 0000000..4125ba9
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zsp_blas3.c
@@ -0,0 +1,137 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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
+ * Purpose: Sparse BLAS3, using some dense BLAS3 operations.
+ */
+
+#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)
+{
+ int incx = 1, incy = 1;
+ int j;
+
+ for (j = 0; j < n; ++j) {
+ sp_zgemv(transa, alpha, A, &b[ldb*j], incx, beta, &c[ldc*j], incy);
+ }
+ return 0;
+}
diff --git a/SuperLU_5.2.0/SRC/zutil.c b/SuperLU_5.2.0/SRC/zutil.c
new file mode 100644
index 0000000..23c292c
--- /dev/null
+++ b/SuperLU_5.2.0/SRC/zutil.c
@@ -0,0 +1,485 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*! @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.
+ * 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>
+ */
+
+
+#include <math.h>
+#include "slu_zdefs.h"
+
+void
+zCreate_CompCol_Matrix(SuperMatrix *A, int m, int n, int nnz,
+ doublecomplex *nzval, int *rowind, int *colptr,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ NCformat *Astore;
+
+ A->Stype = stype;
+ A->Dtype = dtype;
+ A->Mtype = mtype;
+ A->nrow = m;
+ A->ncol = n;
+ A->Store = (void *) SUPERLU_MALLOC( sizeof(NCformat) );
+ if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
+ Astore = A->Store;
+ Astore->nnz = nnz;
+ Astore->nzval = nzval;
+ Astore->rowind = rowind;
+ Astore->colptr = colptr;
+}
+
+void
+zCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
+ doublecomplex *nzval, int *colind, int *rowptr,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ NRformat *Astore;
+
+ A->Stype = stype;
+ A->Dtype = dtype;
+ A->Mtype = mtype;
+ A->nrow = m;
+ A->ncol = n;
+ A->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat) );
+ if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
+ Astore = A->Store;
+ Astore->nnz = nnz;
+ Astore->nzval = nzval;
+ Astore->colind = colind;
+ Astore->rowptr = rowptr;
+}
+
+/*! \brief Copy matrix A into matrix B. */
+void
+zCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
+{
+ NCformat *Astore, *Bstore;
+ int ncol, nnz, i;
+
+ B->Stype = A->Stype;
+ B->Dtype = A->Dtype;
+ B->Mtype = A->Mtype;
+ B->nrow = A->nrow;;
+ B->ncol = ncol = A->ncol;
+ Astore = (NCformat *) A->Store;
+ Bstore = (NCformat *) B->Store;
+ Bstore->nnz = nnz = Astore->nnz;
+ for (i = 0; i < nnz; ++i)
+ ((doublecomplex *)Bstore->nzval)[i] = ((doublecomplex *)Astore->nzval)[i];
+ for (i = 0; i < nnz; ++i) Bstore->rowind[i] = Astore->rowind[i];
+ for (i = 0; i <= ncol; ++i) Bstore->colptr[i] = Astore->colptr[i];
+}
+
+
+void
+zCreate_Dense_Matrix(SuperMatrix *X, int m, int n, doublecomplex *x, int ldx,
+ Stype_t stype, Dtype_t dtype, Mtype_t mtype)
+{
+ DNformat *Xstore;
+
+ X->Stype = stype;
+ X->Dtype = dtype;
+ X->Mtype = mtype;
+ X->nrow = m;
+ X->ncol = n;
+ X->Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
+ if ( !(X->Store) ) ABORT("SUPERLU_MALLOC fails for X->Store");
+ Xstore = (DNformat *) X->Store;
+ Xstore->lda = ldx;
+ Xstore->nzval = (doublecomplex *) x;
+}
+
+void
+zCopy_Dense_Matrix(int M, int N, doublecomplex *X, int ldx,
+ doublecomplex *Y, int ldy)
+{
+/*! \brief Copies a two-dimensional matrix X to another matrix Y.
+ */
+ int i, j;
+
+ for (j = 0; j < N; ++j)
+ for (i = 0; i < M; ++i)
+ Y[i + j*ldy] = X[i + j*ldx];
+}
+
+void
+zCreate_SuperNode_Matrix(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)
+{
+ SCformat *Lstore;
+
+ L->Stype = stype;
+ L->Dtype = dtype;
+ L->Mtype = mtype;
+ L->nrow = m;
+ L->ncol = n;
+ L->Store = (void *) SUPERLU_MALLOC( sizeof(SCformat) );
+ if ( !(L->Store) ) ABORT("SUPERLU_MALLOC fails for L->Store");
+ Lstore = L->Store;
+ Lstore->nnz = nnz;
+ Lstore->nsuper = col_to_sup[n];
+ Lstore->nzval = nzval;
+ Lstore->nzval_colptr = nzval_colptr;
+ Lstore->rowind = rowind;
+ Lstore->rowind_colptr = rowind_colptr;
+ Lstore->col_to_sup = col_to_sup;
+ Lstore->sup_to_col = sup_to_col;
+
+}
+
+
+/*! \brief Convert a row compressed storage into a column compressed storage.
+ */
+void
+zCompRow_to_CompCol(int m, int n, int nnz,
+ doublecomplex *a, int *colind, int *rowptr,
+ doublecomplex **at, int **rowind, int **colptr)
+{
+ register int i, j, col, relpos;
+ int *marker;
+
+ /* Allocate storage for another copy of the matrix. */
+ *at = (doublecomplex *) doublecomplexMalloc(nnz);
+ *rowind = (int *) intMalloc(nnz);
+ *colptr = (int *) intMalloc(n+1);
+ marker = (int *) intCalloc(n);
+
+ /* Get counts of each column of A, and set up column pointers */
+ for (i = 0; i < m; ++i)
+ for (j = rowptr[i]; j < rowptr[i+1]; ++j) ++marker[colind[j]];
+ (*colptr)[0] = 0;
+ for (j = 0; j < n; ++j) {
+ (*colptr)[j+1] = (*colptr)[j] + marker[j];
+ marker[j] = (*colptr)[j];
+ }
+
+ /* Transfer the matrix into the compressed column storage. */
+ for (i = 0; i < m; ++i) {
+ for (j = rowptr[i]; j < rowptr[i+1]; ++j) {
+ col = colind[j];
+ relpos = marker[col];
+ (*rowind)[relpos] = i;
+ (*at)[relpos] = a[j];
+ ++marker[col];
+ }
+ }
+
+ SUPERLU_FREE(marker);
+}
+
+
+void
+zPrint_CompCol_Matrix(char *what, SuperMatrix *A)
+{
+ NCformat *Astore;
+ register int i,n;
+ double *dp;
+
+ printf("\nCompCol matrix %s:\n", what);
+ printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
+ n = A->ncol;
+ Astore = (NCformat *) A->Store;
+ dp = (double *) Astore->nzval;
+ printf("nrow %d, ncol %d, nnz %d\n", A->nrow,A->ncol,Astore->nnz);
+ printf("nzval: ");
+ for (i = 0; i < 2*Astore->colptr[n]; ++i) printf("%f ", dp[i]);
+ printf("\nrowind: ");
+ for (i = 0; i < Astore->colptr[n]; ++i) printf("%d ", Astore->rowind[i]);
+ printf("\ncolptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->colptr[i]);
+ printf("\n");
+ fflush(stdout);
+}
+
+void
+zPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
+{
+ SCformat *Astore;
+ register int i, j, k, c, d, n, nsup;
+ double *dp;
+ int *col_to_sup, *sup_to_col, *rowind, *rowind_colptr;
+
+ printf("\nSuperNode matrix %s:\n", what);
+ printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
+ n = A->ncol;
+ Astore = (SCformat *) A->Store;
+ dp = (double *) Astore->nzval;
+ col_to_sup = Astore->col_to_sup;
+ sup_to_col = Astore->sup_to_col;
+ rowind_colptr = Astore->rowind_colptr;
+ rowind = Astore->rowind;
+ printf("nrow %d, ncol %d, nnz %d, nsuper %d\n",
+ A->nrow,A->ncol,Astore->nnz,Astore->nsuper);
+ printf("nzval:\n");
+ for (k = 0; k <= Astore->nsuper; ++k) {
+ c = sup_to_col[k];
+ nsup = sup_to_col[k+1] - c;
+ for (j = c; j < c + nsup; ++j) {
+ d = Astore->nzval_colptr[j];
+ for (i = rowind_colptr[c]; i < rowind_colptr[c+1]; ++i) {
+ printf("%d\t%d\t%e\t%e\n", rowind[i], j, dp[d], dp[d+1]);
+ d += 2;
+ }
+ }
+ }
+#if 0
+ for (i = 0; i < 2*Astore->nzval_colptr[n]; ++i) printf("%f ", dp[i]);
+#endif
+ printf("\nnzval_colptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->nzval_colptr[i]);
+ printf("\nrowind: ");
+ for (i = 0; i < Astore->rowind_colptr[n]; ++i)
+ printf("%d ", Astore->rowind[i]);
+ printf("\nrowind_colptr: ");
+ for (i = 0; i <= n; ++i) printf("%d ", Astore->rowind_colptr[i]);
+ printf("\ncol_to_sup: ");
+ for (i = 0; i < n; ++i) printf("%d ", col_to_sup[i]);
+ printf("\nsup_to_col: ");
+ for (i = 0; i <= Astore->nsuper+1; ++i)
+ printf("%d ", sup_to_col[i]);
+ printf("\n");
+ fflush(stdout);
+}
+
+void
+zPrint_Dense_Matrix(char *what, SuperMatrix *A)
+{
+ 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);
+ dp = (double *) Astore->nzval;
+ printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,lda);
+ printf("\nnzval: ");
+ for (j = 0; j < A->ncol; ++j) {
+ for (i = 0; i < 2*A->nrow; ++i) printf("%f ", dp[i + j*2*lda]);
+ printf("\n");
+ }
+ printf("\n");
+ fflush(stdout);
+}
+
+/*! \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)
+{
+ int i, k, fsupc;
+ int *xsup, *supno;
+ int *xlsub, *lsub;
+ doublecomplex *lusup;
+ int *xlusup;
+ doublecomplex *ucol;
+ int *usub, *xusub;
+
+ xsup = Glu->xsup;
+ supno = Glu->supno;
+ lsub = Glu->lsub;
+ xlsub = Glu->xlsub;
+ lusup = (doublecomplex *) Glu->lusup;
+ xlusup = Glu->xlusup;
+ ucol = (doublecomplex *) Glu->ucol;
+ usub = Glu->usub;
+ xusub = Glu->xusub;
+
+ printf("%s", msg);
+ printf("col %d: pivrow %d, supno %d, xprune %d\n",
+ jcol, pivrow, supno[jcol], xprune[jcol]);
+
+ printf("\tU-col:\n");
+ for (i = xusub[jcol]; i < xusub[jcol+1]; i++)
+ printf("\t%d%10.4f, %10.4f\n", usub[i], ucol[i].r, ucol[i].i);
+ printf("\tL-col in rectangular snode:\n");
+ fsupc = xsup[supno[jcol]]; /* first col of the snode */
+ i = xlsub[fsupc];
+ k = xlusup[jcol];
+ while ( i < xlsub[fsupc+1] && k < xlusup[jcol+1] ) {
+ printf("\t%d\t%10.4f, %10.4f\n", lsub[i], lusup[k].r, lusup[k].i);
+ i++; k++;
+ }
+ fflush(stdout);
+}
+
+
+/*! \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)
+{
+ int i;
+
+ for (i = 0; i < n; i++) {
+ if ((tempv[i].r != 0.0) || (tempv[i].i != 0.0))
+ {
+ fprintf(stderr,"tempv[%d] = {%f, %f}\n", i, tempv[i].r, tempv[i].i);
+ ABORT("zcheck_tempv");
+ }
+ }
+}
+
+
+void
+zGenXtrue(int n, int nrhs, doublecomplex *x, int ldx)
+{
+ int i, j;
+ for (j = 0; j < nrhs; ++j)
+ for (i = 0; i < n; ++i) {
+ x[i + j*ldx].r = 1.0;
+ x[i + j*ldx].i = 0.0;
+ }
+}
+
+/*! \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,
+ SuperMatrix *A, SuperMatrix *B)
+{
+ NCformat *Astore;
+ doublecomplex *Aval;
+ DNformat *Bstore;
+ doublecomplex *rhs;
+ doublecomplex one = {1.0, 0.0};
+ doublecomplex zero = {0.0, 0.0};
+ int ldc;
+ char transc[1];
+
+ Astore = A->Store;
+ Aval = (doublecomplex *) Astore->nzval;
+ Bstore = B->Store;
+ rhs = Bstore->nzval;
+ ldc = Bstore->lda;
+
+ if ( trans == NOTRANS ) *(unsigned char *)transc = 'N';
+ else *(unsigned char *)transc = 'T';
+
+ sp_zgemm(transc, "N", A->nrow, nrhs, A->ncol, one, A,
+ x, ldx, zero, rhs, ldc);
+
+}
+
+/*! \brief Fills a doublecomplex precision array with a given value.
+ */
+void
+zfill(doublecomplex *a, int alen, doublecomplex dval)
+{
+ register int i;
+ for (i = 0; i < alen; i++) a[i] = dval;
+}
+
+
+
+/*! \brief Check the inf-norm of the error vector
+ */
+void zinf_norm_error(int nrhs, SuperMatrix *X, doublecomplex *xtrue)
+{
+ DNformat *Xstore;
+ double err, xnorm;
+ doublecomplex *Xmat, *soln_work;
+ doublecomplex temp;
+ int i, j;
+
+ Xstore = X->Store;
+ Xmat = Xstore->nzval;
+
+ for (j = 0; j < nrhs; j++) {
+ soln_work = &Xmat[j*Xstore->lda];
+ err = xnorm = 0.0;
+ for (i = 0; i < X->nrow; i++) {
+ z_sub(&temp, &soln_work[i], &xtrue[i]);
+ err = SUPERLU_MAX(err, z_abs(&temp));
+ xnorm = SUPERLU_MAX(xnorm, z_abs(&soln_work[i]));
+ }
+ err = err / xnorm;
+ printf("||X - Xtrue||/||X|| = %e\n", err);
+ }
+}
+
+
+
+/*! \brief Print performance of the code. */
+void
+zPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
+ double rpg, double rcond, double *ferr,
+ double *berr, char *equed, SuperLUStat_t *stat)
+{
+ SCformat *Lstore;
+ NCformat *Ustore;
+ double *utime;
+ flops_t *ops;
+
+ utime = stat->utime;
+ ops = stat->ops;
+
+ if ( utime[FACT] != 0. )
+ printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
+ ops[FACT]*1e-6/utime[FACT]);
+ printf("Identify relaxed snodes = %8.2f\n", utime[RELAX]);
+ if ( utime[SOLVE] != 0. )
+ printf("Solve flops = %.0f, Mflops = %8.2f\n", ops[SOLVE],
+ ops[SOLVE]*1e-6/utime[SOLVE]);
+
+ Lstore = (SCformat *) L->Store;
+ Ustore = (NCformat *) U->Store;
+ printf("\tNo of nonzeros in factor L = %d\n", Lstore->nnz);
+ 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\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",
+ utime[FACT], ops[FACT]*1e-6/utime[FACT],
+ utime[SOLVE], ops[SOLVE]*1e-6/utime[SOLVE],
+ utime[ETREE], utime[EQUIL], utime[RCOND], utime[REFINE]);
+
+ printf("\tRpg\t\tRcond\t\tFerr\t\tBerr\t\tEquil?\n");
+ printf("NUM:\t%e\t%e\t%e\t%e\t%s\n",
+ rpg, rcond, ferr[0], berr[0], equed);
+
+}
+
+
+
+
+print_doublecomplex_vec(char *what, int n, doublecomplex *vec)
+{
+ int i;
+ printf("%s: n %d\n", what, n);
+ for (i = 0; i < n; ++i) printf("%d\t%f%f\n", i, vec[i].r, vec[i].i);
+ return 0;
+}
+
diff --git a/SuperLU_5.2.0/TESTING/._CMakeLists.txt b/SuperLU_5.2.0/TESTING/._CMakeLists.txt
new file mode 100644
index 0000000..57576b7
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._CMakeLists.txt differ
diff --git a/SuperLU_5.2.0/TESTING/._MATGEN b/SuperLU_5.2.0/TESTING/._MATGEN
new file mode 100755
index 0000000..956d2bc
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._MATGEN differ
diff --git a/SuperLU_5.2.0/TESTING/._Makefile b/SuperLU_5.2.0/TESTING/._Makefile
new file mode 100644
index 0000000..511f92f
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._Makefile differ
diff --git a/SuperLU_5.2.0/TESTING/._cdrive.c b/SuperLU_5.2.0/TESTING/._cdrive.c
new file mode 100644
index 0000000..a7a99f5
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._cdrive.c differ
diff --git a/SuperLU_5.2.0/TESTING/._cgst01.c b/SuperLU_5.2.0/TESTING/._cgst01.c
new file mode 100644
index 0000000..cc91c11
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._cgst01.c differ
diff --git a/SuperLU_5.2.0/TESTING/._cgst02.c b/SuperLU_5.2.0/TESTING/._cgst02.c
new file mode 100644
index 0000000..7c5eef9
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._cgst02.c differ
diff --git a/SuperLU_5.2.0/TESTING/._cgst04.c b/SuperLU_5.2.0/TESTING/._cgst04.c
new file mode 100644
index 0000000..995cf71
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._cgst04.c differ
diff --git a/SuperLU_5.2.0/TESTING/._cgst07.c b/SuperLU_5.2.0/TESTING/._cgst07.c
new file mode 100644
index 0000000..ebf7946
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._cgst07.c differ
diff --git a/SuperLU_5.2.0/TESTING/._ctest.csh b/SuperLU_5.2.0/TESTING/._ctest.csh
new file mode 100755
index 0000000..3c4077a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._ctest.csh differ
diff --git a/SuperLU_5.2.0/TESTING/._ddrive.c b/SuperLU_5.2.0/TESTING/._ddrive.c
new file mode 100644
index 0000000..b6b6fde
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._ddrive.c differ
diff --git a/SuperLU_5.2.0/TESTING/._dgst01.c b/SuperLU_5.2.0/TESTING/._dgst01.c
new file mode 100644
index 0000000..8eb8dc3
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._dgst01.c differ
diff --git a/SuperLU_5.2.0/TESTING/._dgst02.c b/SuperLU_5.2.0/TESTING/._dgst02.c
new file mode 100644
index 0000000..c0924aa
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._dgst02.c differ
diff --git a/SuperLU_5.2.0/TESTING/._dgst04.c b/SuperLU_5.2.0/TESTING/._dgst04.c
new file mode 100644
index 0000000..77893ef
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._dgst04.c differ
diff --git a/SuperLU_5.2.0/TESTING/._dgst07.c b/SuperLU_5.2.0/TESTING/._dgst07.c
new file mode 100644
index 0000000..ccf165c
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._dgst07.c differ
diff --git a/SuperLU_5.2.0/TESTING/._dtest.csh b/SuperLU_5.2.0/TESTING/._dtest.csh
new file mode 100755
index 0000000..dcec294
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._dtest.csh differ
diff --git a/SuperLU_5.2.0/TESTING/._runtest.cmake b/SuperLU_5.2.0/TESTING/._runtest.cmake
new file mode 100644
index 0000000..a9d0925
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._runtest.cmake differ
diff --git a/SuperLU_5.2.0/TESTING/._sdrive.c b/SuperLU_5.2.0/TESTING/._sdrive.c
new file mode 100644
index 0000000..6352f25
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sdrive.c differ
diff --git a/SuperLU_5.2.0/TESTING/._sgst01.c b/SuperLU_5.2.0/TESTING/._sgst01.c
new file mode 100644
index 0000000..fe870db
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sgst01.c differ
diff --git a/SuperLU_5.2.0/TESTING/._sgst02.c b/SuperLU_5.2.0/TESTING/._sgst02.c
new file mode 100644
index 0000000..54c62e6
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sgst02.c differ
diff --git a/SuperLU_5.2.0/TESTING/._sgst04.c b/SuperLU_5.2.0/TESTING/._sgst04.c
new file mode 100644
index 0000000..5baf76f
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sgst04.c differ
diff --git a/SuperLU_5.2.0/TESTING/._sgst07.c b/SuperLU_5.2.0/TESTING/._sgst07.c
new file mode 100644
index 0000000..d7f84eb
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sgst07.c differ
diff --git a/SuperLU_5.2.0/TESTING/._sp_cconvert.c b/SuperLU_5.2.0/TESTING/._sp_cconvert.c
new file mode 100644
index 0000000..3277f5f
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sp_cconvert.c differ
diff --git a/SuperLU_5.2.0/TESTING/._sp_dconvert.c b/SuperLU_5.2.0/TESTING/._sp_dconvert.c
new file mode 100644
index 0000000..6770f1a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sp_dconvert.c differ
diff --git a/SuperLU_5.2.0/TESTING/._sp_ienv.c b/SuperLU_5.2.0/TESTING/._sp_ienv.c
new file mode 100644
index 0000000..0a49adb
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sp_ienv.c differ
diff --git a/SuperLU_5.2.0/TESTING/._sp_sconvert.c b/SuperLU_5.2.0/TESTING/._sp_sconvert.c
new file mode 100644
index 0000000..2120a6f
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sp_sconvert.c differ
diff --git a/SuperLU_5.2.0/TESTING/._sp_zconvert.c b/SuperLU_5.2.0/TESTING/._sp_zconvert.c
new file mode 100644
index 0000000..ba7ec30
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._sp_zconvert.c differ
diff --git a/SuperLU_5.2.0/TESTING/._stest.csh b/SuperLU_5.2.0/TESTING/._stest.csh
new file mode 100755
index 0000000..6da43db
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._stest.csh differ
diff --git a/SuperLU_5.2.0/TESTING/._zdrive.c b/SuperLU_5.2.0/TESTING/._zdrive.c
new file mode 100644
index 0000000..593ff9a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._zdrive.c differ
diff --git a/SuperLU_5.2.0/TESTING/._zgst01.c b/SuperLU_5.2.0/TESTING/._zgst01.c
new file mode 100644
index 0000000..f0fd2fa
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._zgst01.c differ
diff --git a/SuperLU_5.2.0/TESTING/._zgst02.c b/SuperLU_5.2.0/TESTING/._zgst02.c
new file mode 100644
index 0000000..ab586a7
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._zgst02.c differ
diff --git a/SuperLU_5.2.0/TESTING/._zgst04.c b/SuperLU_5.2.0/TESTING/._zgst04.c
new file mode 100644
index 0000000..666ac7e
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._zgst04.c differ
diff --git a/SuperLU_5.2.0/TESTING/._zgst07.c b/SuperLU_5.2.0/TESTING/._zgst07.c
new file mode 100644
index 0000000..f7acd5a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._zgst07.c differ
diff --git a/SuperLU_5.2.0/TESTING/._ztest.csh b/SuperLU_5.2.0/TESTING/._ztest.csh
new file mode 100755
index 0000000..3c9c318
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/._ztest.csh differ
diff --git a/SuperLU_5.2.0/TESTING/CMakeLists.txt b/SuperLU_5.2.0/TESTING/CMakeLists.txt
new file mode 100644
index 0000000..284544f
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/CMakeLists.txt
@@ -0,0 +1,101 @@
+include_directories(${SuperLU_SOURCE_DIR}/SRC)
+
+# Libs linked to all of the tests
+set(test_link_libs superlu matgen ${BLAS_LIB} m)
+
+add_subdirectory(MATGEN)
+
+set(ALINTST sp_ienv.c)
+set(NVAL 9 19)
+set(NRHS 2)
+set(LWORK 0 10000000)
+
+function(cat IN_FILE OUT_FILE)
+ file(READ ${IN_FILE} CONTENTS)
+ file(APPEND ${OUT_FILE} "${CONTENTS}")
+endfunction()
+
+
+function(add_superlu_test output input target)
+ set(TEST_INPUT "${SuperLU_SOURCE_DIR}/EXAMPLE/${input}")
+ set(TEST_OUTPUT "${SuperLU_BINARY_DIR}/TESTING/${output}")
+
+ # Prepare a temporary file to "cat" to:
+ # "== LAPACK test matrices"
+ file(WRITE ${TEST_OUTPUT} "")
+
+## get_target_property(TEST_LOC ${target} LOCATION)
+ set(TEST_LOC ${CMAKE_CURRENT_BINARY_DIR})
+
+ foreach (n ${NVAL})
+ foreach (s ${NRHS})
+ foreach(l ${LWORK})
+ set(testName "${target}_${n}_${s}_${l}")
+ set(SINGLE_OUTPUT ${SuperLU_BINARY_DIR}/TESTING/${testName}.out)
+ add_test( ${testName}_LA "${CMAKE_COMMAND}"
+ -DTEST=${TEST_LOC} -t "LA" -n ${n} -s ${s} -l ${l}
+ -DOUTPUT=${SINGLE_OUTPUT}
+ -DALL_OUTPUT=${TEST_OUTPUT}
+ -DHEADING=Dense\ matrix\ --\ n=${n},\ s=${s},\ lwork=${l}
+ -P "${SuperLU_SOURCE_DIR}/TESTING/runtest.cmake"
+ )
+ endforeach()
+ endforeach()
+ endforeach()
+
+# file(APPEND ${TEST_OUTPUT} "== sparse matrix\n")
+
+ foreach (s ${NRHS})
+ foreach(l ${LWORK})
+ set(testName "${target}_${s}_${l}")
+ set(SINGLE_OUTPUT ${SuperLU_BINARY_DIR}/TESTING/${testName}.out)
+ add_test( ${testName}_SP "${CMAKE_COMMAND}"
+ -DTEST=${TEST_LOC} -t "SP" -s ${s} -l ${l} -f ${TEST_INPUT}
+ -DOUTPUT=${SINGLE_OUTPUT}
+ -DALL_OUTPUT=${TEST_OUTPUT}
+ -DHEADING=Sparse\ matrix\ ${TEST_INPUT}\ --\ s=${s},\ lwork=${l}
+ -P "${SuperLU_SOURCE_DIR}/TESTING/runtest.cmake")
+ endforeach()
+ endforeach()
+
+endfunction(add_superlu_test)
+
+
+if(enable_single)
+ set(SLINTST sdrive.c sp_sconvert.c sgst01.c sgst02.c sgst04.c sgst07.c)
+
+ add_executable(s_test ${ALINTST} ${SLINTST})
+ target_link_libraries(s_test ${test_link_libs})
+
+ add_superlu_test(s_test.out g20.rua s_test)
+
+endif()
+
+
+if(enable_double)
+ set(DLINTST ddrive.c sp_dconvert.c dgst01.c dgst02.c dgst04.c dgst07.c)
+
+ add_executable(d_test ${ALINTST} ${DLINTST})
+ target_link_libraries(d_test ${test_link_libs})
+
+ add_superlu_test(d_test.out g20.rua d_test)
+endif()
+
+if(enable_complex)
+ set(CLINTST cdrive.c sp_cconvert.c cgst01.c cgst02.c cgst04.c cgst07.c)
+
+ add_executable(c_test ${ALINTST} ${CLINTST})
+ target_link_libraries(c_test ${test_link_libs})
+
+ add_superlu_test(c_test.out cg20.cua c_test)
+endif()
+
+
+if(enable_complex16)
+ set(ZLINTST zdrive.c sp_zconvert.c zgst01.c zgst02.c zgst04.c zgst07.c)
+
+ add_executable(z_test ${ALINTST} ${ZLINTST})
+ target_link_libraries(z_test ${test_link_libs})
+
+ add_superlu_test(z_test.out cg20.cua z_test)
+endif()
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._CMakeLists.txt b/SuperLU_5.2.0/TESTING/MATGEN/._CMakeLists.txt
new file mode 100644
index 0000000..4c0e167
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._CMakeLists.txt differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._Cnames.h.bak b/SuperLU_5.2.0/TESTING/MATGEN/._Cnames.h.bak
new file mode 100644
index 0000000..0c654f9
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._Cnames.h.bak differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._Makefile b/SuperLU_5.2.0/TESTING/MATGEN/._Makefile
new file mode 100644
index 0000000..a06fb0a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._Makefile differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._cdotc.c b/SuperLU_5.2.0/TESTING/MATGEN/._cdotc.c
new file mode 100644
index 0000000..6ca2398
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._cdotc.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clacgv.c b/SuperLU_5.2.0/TESTING/MATGEN/._clacgv.c
new file mode 100644
index 0000000..59075a2
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clacgv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clagge.c b/SuperLU_5.2.0/TESTING/MATGEN/._clagge.c
new file mode 100644
index 0000000..6d76fec
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clagge.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._claghe.c b/SuperLU_5.2.0/TESTING/MATGEN/._claghe.c
new file mode 100644
index 0000000..d969677
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._claghe.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clagsy.c b/SuperLU_5.2.0/TESTING/MATGEN/._clagsy.c
new file mode 100644
index 0000000..2a32f53
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clagsy.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clarge.c b/SuperLU_5.2.0/TESTING/MATGEN/._clarge.c
new file mode 100644
index 0000000..97fe4f6
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clarge.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clarnd.c b/SuperLU_5.2.0/TESTING/MATGEN/._clarnd.c
new file mode 100644
index 0000000..dd27be7
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clarnd.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clarnv.c b/SuperLU_5.2.0/TESTING/MATGEN/._clarnv.c
new file mode 100644
index 0000000..73de5ae
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clarnv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._claror.c b/SuperLU_5.2.0/TESTING/MATGEN/._claror.c
new file mode 100644
index 0000000..3a960f1
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._claror.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clarot.c b/SuperLU_5.2.0/TESTING/MATGEN/._clarot.c
new file mode 100644
index 0000000..32e973d
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clarot.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clartg.c b/SuperLU_5.2.0/TESTING/MATGEN/._clartg.c
new file mode 100644
index 0000000..1c2658d
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clartg.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._claset.c b/SuperLU_5.2.0/TESTING/MATGEN/._claset.c
new file mode 100644
index 0000000..98ba45b
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._claset.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clatb4.c b/SuperLU_5.2.0/TESTING/MATGEN/._clatb4.c
new file mode 100644
index 0000000..e7bd39e
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clatb4.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clatm2.c b/SuperLU_5.2.0/TESTING/MATGEN/._clatm2.c
new file mode 100644
index 0000000..3346982
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clatm2.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clatm3.c b/SuperLU_5.2.0/TESTING/MATGEN/._clatm3.c
new file mode 100644
index 0000000..4485391
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clatm3.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clatme.c b/SuperLU_5.2.0/TESTING/MATGEN/._clatme.c
new file mode 100644
index 0000000..3e09b47
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clatme.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._clatms.c b/SuperLU_5.2.0/TESTING/MATGEN/._clatms.c
new file mode 100644
index 0000000..dd6c5ca
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._clatms.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._csymv.c b/SuperLU_5.2.0/TESTING/MATGEN/._csymv.c
new file mode 100644
index 0000000..d0b1ced
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._csymv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._d_lg10.c b/SuperLU_5.2.0/TESTING/MATGEN/._d_lg10.c
new file mode 100644
index 0000000..6dc12a5
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._d_lg10.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._d_sign.c b/SuperLU_5.2.0/TESTING/MATGEN/._d_sign.c
new file mode 100644
index 0000000..7caa64c
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._d_sign.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlabad.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlabad.c
new file mode 100644
index 0000000..4db6fbf
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlabad.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlagge.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlagge.c
new file mode 100644
index 0000000..100fa7c
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlagge.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlagsy.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlagsy.c
new file mode 100644
index 0000000..6f2192a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlagsy.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlaran.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlaran.c
new file mode 100644
index 0000000..06868a9
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlaran.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlarge.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlarge.c
new file mode 100644
index 0000000..461fe86
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlarge.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlarnd.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlarnd.c
new file mode 100644
index 0000000..73075d4
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlarnd.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlarnv.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlarnv.c
new file mode 100644
index 0000000..fa417f3
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlarnv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlaror.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlaror.c
new file mode 100644
index 0000000..1a4bf30
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlaror.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlarot.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlarot.c
new file mode 100644
index 0000000..ba2158d
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlarot.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlartg.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlartg.c
new file mode 100644
index 0000000..e6e42d7
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlartg.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlaruv.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlaruv.c
new file mode 100644
index 0000000..deaf4e6
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlaruv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlaset.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlaset.c
new file mode 100644
index 0000000..2ba2a93
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlaset.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlatb4.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlatb4.c
new file mode 100644
index 0000000..60b7e1f
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlatb4.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlatm1.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlatm1.c
new file mode 100644
index 0000000..43db084
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlatm1.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlatm2.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlatm2.c
new file mode 100644
index 0000000..96ccf9f
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlatm2.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlatm3.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlatm3.c
new file mode 100644
index 0000000..335a345
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlatm3.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._dlatms.c b/SuperLU_5.2.0/TESTING/MATGEN/._dlatms.c
new file mode 100644
index 0000000..a8315f3
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._dlatms.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._f2c.h b/SuperLU_5.2.0/TESTING/MATGEN/._f2c.h
new file mode 100644
index 0000000..99ee811
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._f2c.h differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._pow_dd.c b/SuperLU_5.2.0/TESTING/MATGEN/._pow_dd.c
new file mode 100644
index 0000000..82edb32
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._pow_dd.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._pow_di.c b/SuperLU_5.2.0/TESTING/MATGEN/._pow_di.c
new file mode 100644
index 0000000..f1b9038
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._pow_di.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._pow_ri.c b/SuperLU_5.2.0/TESTING/MATGEN/._pow_ri.c
new file mode 100644
index 0000000..36b3666
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._pow_ri.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._r_lg10.c b/SuperLU_5.2.0/TESTING/MATGEN/._r_lg10.c
new file mode 100644
index 0000000..fd12746
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._r_lg10.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._r_sign.c b/SuperLU_5.2.0/TESTING/MATGEN/._r_sign.c
new file mode 100644
index 0000000..ed2607a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._r_sign.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slabad.c b/SuperLU_5.2.0/TESTING/MATGEN/._slabad.c
new file mode 100644
index 0000000..5d1e50f
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slabad.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slagge.c b/SuperLU_5.2.0/TESTING/MATGEN/._slagge.c
new file mode 100644
index 0000000..4f061bc
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slagge.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slagsy.c b/SuperLU_5.2.0/TESTING/MATGEN/._slagsy.c
new file mode 100644
index 0000000..d34c4b0
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slagsy.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slaran.c b/SuperLU_5.2.0/TESTING/MATGEN/._slaran.c
new file mode 100644
index 0000000..2bfdf9a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slaran.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slarge.c b/SuperLU_5.2.0/TESTING/MATGEN/._slarge.c
new file mode 100644
index 0000000..d92343a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slarge.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slarnd.c b/SuperLU_5.2.0/TESTING/MATGEN/._slarnd.c
new file mode 100644
index 0000000..06b32f8
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slarnd.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slarnv.c b/SuperLU_5.2.0/TESTING/MATGEN/._slarnv.c
new file mode 100644
index 0000000..cc7e816
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slarnv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slaror.c b/SuperLU_5.2.0/TESTING/MATGEN/._slaror.c
new file mode 100644
index 0000000..a2292e1
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slaror.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slarot.c b/SuperLU_5.2.0/TESTING/MATGEN/._slarot.c
new file mode 100644
index 0000000..4c81fd5
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slarot.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slartg.c b/SuperLU_5.2.0/TESTING/MATGEN/._slartg.c
new file mode 100644
index 0000000..4994044
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slartg.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slaruv.c b/SuperLU_5.2.0/TESTING/MATGEN/._slaruv.c
new file mode 100644
index 0000000..ec2b35c
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slaruv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slaset.c b/SuperLU_5.2.0/TESTING/MATGEN/._slaset.c
new file mode 100644
index 0000000..6e5b318
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slaset.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slatb4.c b/SuperLU_5.2.0/TESTING/MATGEN/._slatb4.c
new file mode 100644
index 0000000..3c98477
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slatb4.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slatm1.c b/SuperLU_5.2.0/TESTING/MATGEN/._slatm1.c
new file mode 100644
index 0000000..b96d843
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slatm1.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slatm2.c b/SuperLU_5.2.0/TESTING/MATGEN/._slatm2.c
new file mode 100644
index 0000000..de131c1
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slatm2.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slatm3.c b/SuperLU_5.2.0/TESTING/MATGEN/._slatm3.c
new file mode 100644
index 0000000..9e54d9d
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slatm3.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slatms.c b/SuperLU_5.2.0/TESTING/MATGEN/._slatms.c
new file mode 100644
index 0000000..7d1e12a
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slatms.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._slu_Cnames.h b/SuperLU_5.2.0/TESTING/MATGEN/._slu_Cnames.h
new file mode 100644
index 0000000..0eae984
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._slu_Cnames.h differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zdotc.c b/SuperLU_5.2.0/TESTING/MATGEN/._zdotc.c
new file mode 100644
index 0000000..036cfcb
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zdotc.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlacgv.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlacgv.c
new file mode 100644
index 0000000..07faf35
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlacgv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlagge.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlagge.c
new file mode 100644
index 0000000..6192e46
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlagge.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlaghe.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlaghe.c
new file mode 100644
index 0000000..dc5c682
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlaghe.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlagsy.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlagsy.c
new file mode 100644
index 0000000..c6cae16
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlagsy.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlarge.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlarge.c
new file mode 100644
index 0000000..5777ad8
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlarge.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlarnd.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlarnd.c
new file mode 100644
index 0000000..42f74d1
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlarnd.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlarnv.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlarnv.c
new file mode 100644
index 0000000..7f566cc
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlarnv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlaror.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlaror.c
new file mode 100644
index 0000000..c8fb6e9
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlaror.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlarot.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlarot.c
new file mode 100644
index 0000000..4d82cac
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlarot.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlartg.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlartg.c
new file mode 100644
index 0000000..2b64541
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlartg.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlaset.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlaset.c
new file mode 100644
index 0000000..15b35ad
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlaset.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlatb4.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlatb4.c
new file mode 100644
index 0000000..91cd0eb
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlatb4.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlatm2.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlatm2.c
new file mode 100644
index 0000000..815ef15
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlatm2.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlatm3.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlatm3.c
new file mode 100644
index 0000000..2327177
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlatm3.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zlatms.c b/SuperLU_5.2.0/TESTING/MATGEN/._zlatms.c
new file mode 100644
index 0000000..62595fb
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zlatms.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/._zsymv.c b/SuperLU_5.2.0/TESTING/MATGEN/._zsymv.c
new file mode 100644
index 0000000..9042e23
Binary files /dev/null and b/SuperLU_5.2.0/TESTING/MATGEN/._zsymv.c differ
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/CMakeLists.txt b/SuperLU_5.2.0/TESTING/MATGEN/CMakeLists.txt
new file mode 100644
index 0000000..f4e7eb6
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/CMakeLists.txt
@@ -0,0 +1,99 @@
+set(sources "")
+
+if(enable_single)
+ list(APPEND sources
+ slatm1.c
+ slaran.c
+ slarnd.c
+ slaruv.c
+ slabad.c
+ slarnv.c
+ slatb4.c
+ slaset.c
+ slartg.c
+ slatms.c
+ slagge.c
+ slagsy.c
+ slarge.c
+ slaror.c
+ slarot.c
+ slatm2.c
+ slatm3.c
+ r_lg10.c
+ r_sign.c
+ pow_dd.c
+ pow_ri.c
+ )
+endif()
+
+if(enable_double)
+ list(APPEND sources
+ dlatm1.c
+ dlaran.c
+ dlarnd.c
+ dlaruv.c
+ dlabad.c
+ dlarnv.c
+ dlatb4.c
+ dlaset.c
+ dlartg.c
+ dlatms.c
+ dlagge.c
+ dlagsy.c
+ dlarge.c
+ dlaror.c
+ dlarot.c
+ dlatm2.c
+ dlatm3.c
+ d_lg10.c
+ d_sign.c
+ pow_dd.c
+ pow_di.c
+ )
+endif()
+
+if(enable_complex)
+ list(APPEND sources
+ clatb4.c
+ claset.c
+ clartg.c
+ clarnv.c
+ clacgv.c
+ csymv.c
+ clatms.c
+ clagge.c
+ clagsy.c
+ clarge.c
+ claror.c
+ clarot.c
+ clatm2.c
+ clatm3.c
+ claghe.c
+ clarnd.c
+ cdotc.c
+ )
+endif()
+
+if(enable_complex16)
+ list(APPEND sources
+ zlatb4.c
+ zlaset.c
+ zlartg.c
+ zlarnv.c
+ zlacgv.c
+ zsymv.c
+ zlatms.c
+ zlagge.c
+ zlagsy.c
+ zlarge.c
+ zlaror.c
+ zlarot.c
+ zlatm2.c
+ zlatm3.c
+ zlaghe.c
+ zlarnd.c
+ zdotc.c
+ )
+endif()
+
+add_library(matgen ${sources})
diff --git a/TESTING/MATGEN/Cnames.h.bak b/SuperLU_5.2.0/TESTING/MATGEN/Cnames.h.bak
similarity index 100%
rename from TESTING/MATGEN/Cnames.h.bak
rename to SuperLU_5.2.0/TESTING/MATGEN/Cnames.h.bak
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/Makefile b/SuperLU_5.2.0/TESTING/MATGEN/Makefile
new file mode 100644
index 0000000..c71bcec
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/Makefile
@@ -0,0 +1,78 @@
+include ../../make.inc
+
+#######################################################################
+# This is the makefile to create a library of the test matrix
+# generators used in LAPACK. The files are organized as follows:
+#
+# SCATGEN -- Auxiliary routines called from both REAL and COMPLEX
+# DZATGEN -- Auxiliary routines called from both DOUBLE PRECISION
+# and COMPLEX*16
+# SMATGEN -- Single precision real matrix generation routines
+# CMATGEN -- Single precision complex matrix generation routines
+# DMATGEN -- Double precision real matrix generation routines
+# ZMATGEN -- Double precision complex matrix generation routines
+#
+# The library can be set up to include routines for any combination
+# of the four precisions. To create or add to the library, enter make
+# followed by one or more of the precisions desired. Some examples:
+# make single
+# make single complex
+# make single double complex complex16
+# Alternatively, the command
+# make
+# without any arguments creates a library of all four precisions.
+# The library is called
+# libtmglib.a
+# and is created at the LAPACK directory level.
+#
+# To remove the object files after the library is created, enter
+# make clean
+#
+#######################################################################
+
+SCATGEN = slatm1.o slaran.o slarnd.o slaruv.o slabad.o slarnv.o
+SLASRC = slatb4.o slaset.o slartg.o
+SMATGEN = slatms.o slagge.o slagsy.o slarge.o slaror.o slarot.o slatm2.o slatm3.o
+SINTRINSIC = r_lg10.o r_sign.o pow_dd.o pow_ri.o
+
+DZATGEN = dlatm1.o dlaran.o dlarnd.o dlaruv.o dlabad.o dlarnv.o
+DLASRC = dlatb4.o dlaset.o dlartg.o
+DMATGEN = dlatms.o dlagge.o dlagsy.o dlarge.o dlaror.o dlarot.o dlatm2.o dlatm3.o
+DINTRINSIC = d_lg10.o d_sign.o pow_dd.o pow_di.o
+
+CLASRC = clatb4.o claset.o clartg.o clarnv.o clacgv.o csymv.o
+CMATGEN = clatms.o clagge.o clagsy.o clarge.o claror.o clarot.o clatm2.o clatm3.o \
+ claghe.o clarnd.o
+ #cdotc.o already in BLAS
+
+ZLASRC = zlatb4.o zlaset.o zlartg.o zlarnv.o zlacgv.o zsymv.o
+ZMATGEN = zlatms.o zlagge.o zlagsy.o zlarge.o zlaror.o zlarot.o zlatm2.o zlatm3.o \
+ zlaghe.o zlarnd.o
+ #zdotc.o in BLAS
+
+all: single double complex complex16
+
+single: $(SMATGEN) $(SCATGEN) $(SLASRC) $(SINTRINSIC) $(ALLAUX)
+ $(ARCH) $(ARCHFLAGS) ../$(TMGLIB) $(SMATGEN) $(SCATGEN) \
+ $(SLASRC) $(SINTRINSIC) $(ALLAUX)
+ $(RANLIB) ../$(TMGLIB)
+
+double: $(DMATGEN) $(DZATGEN) $(DLASRC) $(DINTRINSIC) $(ALLAUX)
+ $(ARCH) $(ARCHFLAGS) ../$(TMGLIB) $(DMATGEN) $(DZATGEN) \
+ $(DLASRC) $(DINTRINSIC) $(ALLAUX)
+ $(RANLIB) ../$(TMGLIB)
+
+complex: $(CMATGEN) $(SCATGEN) $(CLASRC) $(SINTRINSIC) $(ALLAUX)
+ $(ARCH) $(ARCHFLAGS) ../$(TMGLIB) $(CMATGEN) $(SCATGEN) \
+ $(CLASRC) $(SINTRINSIC) $(ALLAUX)
+ $(RANLIB) ../$(TMGLIB)
+
+complex16: $(ZMATGEN) $(DZATGEN) $(ZLASRC) $(DINSTRINSIC) $(ALLAUX)
+ $(ARCH) $(ARCHFLAGS) ../$(TMGLIB) $(ZMATGEN) $(DZATGEN) \
+ $(ZLASRC) $(DINTRINSIC) $(ALLAUX)
+ $(RANLIB) ../$(TMGLIB)
+
+clean:
+ rm -f *.o ../$(TMGLIB)
+
+.c.o: ; $(CC) $(CFLAGS) $(CDEFS) -c $<
diff --git a/TESTING/MATGEN/cdotc.c b/SuperLU_5.2.0/TESTING/MATGEN/cdotc.c
similarity index 100%
rename from TESTING/MATGEN/cdotc.c
rename to SuperLU_5.2.0/TESTING/MATGEN/cdotc.c
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clacgv.c b/SuperLU_5.2.0/TESTING/MATGEN/clacgv.c
new file mode 100644
index 0000000..91bcea3
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clacgv.c
@@ -0,0 +1,76 @@
+#include "f2c.h"
+
+/* Subroutine */ int clacgv_slu(integer *n, complex *x, integer *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
+
+
+ Purpose
+ =======
+
+ CLACGV conjugates a complex vector of length N.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The length of the vector X. N >= 0.
+
+ X (input/output) COMPLEX array, dimension
+ (1+(N-1)*abs(INCX))
+ On entry, the vector of length N to be conjugated.
+ On exit, X is overwritten with conjg(X).
+
+ INCX (input) INTEGER
+ The spacing between successive elements of X.
+
+ =====================================================================
+
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer i__1, i__2;
+ complex q__1;
+ /* Builtin functions */
+ void r_cnjg(complex *, complex *);
+ /* Local variables */
+ static integer ioff, i;
+
+
+#define X(I) x[(I)-1]
+
+
+ if (*incx == 1) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ r_cnjg(&q__1, &X(i));
+ X(i).r = q__1.r, X(i).i = q__1.i;
+/* L10: */
+ }
+ } else {
+ ioff = 1;
+ if (*incx < 0) {
+ ioff = 1 - (*n - 1) * *incx;
+ }
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = ioff;
+ r_cnjg(&q__1, &X(ioff));
+ X(ioff).r = q__1.r, X(ioff).i = q__1.i;
+ ioff += *incx;
+/* L20: */
+ }
+ }
+ return 0;
+
+/* End of CLACGV */
+
+} /* clacgv_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clagge.c b/SuperLU_5.2.0/TESTING/MATGEN/clagge.c
new file mode 100644
index 0000000..1c9cdca
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clagge.c
@@ -0,0 +1,464 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static complex c_b1 = {0.f,0.f};
+static complex c_b2 = {1.f,0.f};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int clagge_slu(integer *m, integer *n, integer *kl, integer *ku,
+ real *d, complex *a, integer *lda, integer *iseed, complex *work,
+ integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ doublereal d__1;
+ complex q__1;
+
+ /* Builtin functions */
+ double c_abs(complex *);
+ void c_div(complex *, complex *, complex *);
+
+ /* Local variables */
+ static integer i, j;
+ extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
+ complex *, integer *, complex *, integer *, complex *, integer *),
+ cscal_(integer *, complex *, complex *, integer *), cgemv_(char *
+ , integer *, integer *, complex *, complex *, integer *, complex *
+ , integer *, complex *, complex *, integer *);
+ extern real scnrm2_(integer *, complex *, integer *);
+ static complex wa, wb;
+ extern /* Subroutine */ int clacgv_slu(integer *, complex *, integer *);
+ static real wn;
+ extern /* Subroutine */ int clarnv_slu(integer *, integer *, integer *, complex *);
+ extern int input_error(char *, int *);
+ static complex tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ CLAGGE generates a complex general m by n matrix A, by pre- and post-
+
+ multiplying a real diagonal matrix D with random unitary matrices:
+ A = U*D*V. The lower and upper bandwidths may then be reduced to
+ kl and ku by additional unitary transformations.
+
+ Arguments
+ =========
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ KL (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= KL <= M-1.
+
+ KU (input) INTEGER
+ The number of nonzero superdiagonals within the band of A.
+ 0 <= KU <= N-1.
+
+ D (input) REAL array, dimension (min(M,N))
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) COMPLEX array, dimension (LDA,N)
+ The generated m by n matrix A.
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= M.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) COMPLEX array, dimension (M+N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*m < 0) {
+ *info = -1;
+ } else if (*n < 0) {
+ *info = -2;
+ } else if (*kl < 0 || *kl > *m - 1) {
+ *info = -3;
+ } else if (*ku < 0 || *ku > *n - 1) {
+ *info = -4;
+ } else if (*lda < max(1,*m)) {
+ *info = -7;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("CLAGGE", &i__1);
+ return 0;
+ }
+
+/* initialize A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = 1; i <= i__2; ++i) {
+ i__3 = i + j * a_dim1;
+ a[i__3].r = 0.f, a[i__3].i = 0.f;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = min(*m,*n);
+ for (i = 1; i <= i__1; ++i) {
+ i__2 = i + i * a_dim1;
+ i__3 = i;
+ a[i__2].r = d[i__3], a[i__2].i = 0.f;
+/* L30: */
+ }
+
+/* pre- and post-multiply A by random unitary matrices */
+
+ for (i = min(*m,*n); i >= 1; --i) {
+ if (i < *m) {
+
+/* generate random reflection */
+
+ i__1 = *m - i + 1;
+ clarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *m - i + 1;
+ wn = scnrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / c_abs(&work[1]);
+ q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__1 = *m - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__1, &q__1, &work[2], &c__1);
+ work[1].r = 1.f, work[1].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* multiply A(i:m,i:n) by random reflection from the lef
+t */
+
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ cgemv_("Conjugate transpose", &i__1, &i__2, &c_b2, &a[i + i *
+ a_dim1], lda, &work[1], &c__1, &c_b1, &work[*m + 1], &
+ c__1);
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&i__1, &i__2, &q__1, &work[1], &c__1, &work[*m + 1], &c__1,
+ &a[i + i * a_dim1], lda);
+ }
+ if (i < *n) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ clarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = scnrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / c_abs(&work[1]);
+ q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__1 = *n - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__1, &q__1, &work[2], &c__1);
+ work[1].r = 1.f, work[1].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* multiply A(i:m,i:n) by random reflection from the rig
+ht */
+
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ cgemv_("No transpose", &i__1, &i__2, &c_b2, &a[i + i * a_dim1],
+ lda, &work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&i__1, &i__2, &q__1, &work[*n + 1], &c__1, &work[1], &c__1,
+ &a[i + i * a_dim1], lda);
+ }
+/* L40: */
+ }
+
+/* Reduce number of subdiagonals to KL and number of superdiagonals
+ to KU
+
+ Computing MAX */
+ i__2 = *m - 1 - *kl, i__3 = *n - 1 - *ku;
+ i__1 = max(i__2,i__3);
+ for (i = 1; i <= i__1; ++i) {
+ if (*kl <= *ku) {
+
+/* annihilate subdiagonal elements first (necessary if K
+L = 0)
+
+ Computing MIN */
+ i__2 = *m - 1 - *kl;
+ if (i <= min(i__2,*n)) {
+
+/* generate reflection to annihilate A(kl+i+1:m,i
+) */
+
+ i__2 = *m - *kl - i + 1;
+ wn = scnrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
+ d__1 = wn / c_abs(&a[*kl + i + i * a_dim1]);
+ i__2 = *kl + i + i * a_dim1;
+ q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ i__2 = *kl + i + i * a_dim1;
+ q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__2 = *m - *kl - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__2, &q__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
+ i__2 = *kl + i + i * a_dim1;
+ a[i__2].r = 1.f, a[i__2].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* apply reflection to A(kl+i:m,i+1:n) from the l
+eft */
+
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ cgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*kl + i
+ + (i + 1) * a_dim1], lda, &a[*kl + i + i * a_dim1], &
+ c__1, &c_b1, &work[1], &c__1);
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&i__2, &i__3, &q__1, &a[*kl + i + i * a_dim1], &c__1, &
+ work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
+ i__2 = *kl + i + i * a_dim1;
+ q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+ }
+
+/* Computing MIN */
+ i__2 = *n - 1 - *ku;
+ if (i <= min(i__2,*m)) {
+
+/* generate reflection to annihilate A(i,ku+i+1:n
+) */
+
+ i__2 = *n - *ku - i + 1;
+ wn = scnrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ d__1 = wn / c_abs(&a[i + (*ku + i) * a_dim1]);
+ i__2 = i + (*ku + i) * a_dim1;
+ q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ i__2 = i + (*ku + i) * a_dim1;
+ q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__2 = *n - *ku - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__2, &q__1, &a[i + (*ku + i + 1) * a_dim1], lda);
+ i__2 = i + (*ku + i) * a_dim1;
+ a[i__2].r = 1.f, a[i__2].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* apply reflection to A(i+1:m,ku+i:n) from the r
+ight */
+
+ i__2 = *n - *ku - i + 1;
+ clacgv_slu(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ cgemv_("No transpose", &i__2, &i__3, &c_b2, &a[i + 1 + (*ku +
+ i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda, &
+ c_b1, &work[1], &c__1);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&i__2, &i__3, &q__1, &work[1], &c__1, &a[i + (*ku + i)
+ * a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
+ i__2 = i + (*ku + i) * a_dim1;
+ q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+ }
+ } else {
+
+/* annihilate superdiagonal elements first (necessary if
+
+ KU = 0)
+
+ Computing MIN */
+ i__2 = *n - 1 - *ku;
+ if (i <= min(i__2,*m)) {
+
+/* generate reflection to annihilate A(i,ku+i+1:n
+) */
+
+ i__2 = *n - *ku - i + 1;
+ wn = scnrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ d__1 = wn / c_abs(&a[i + (*ku + i) * a_dim1]);
+ i__2 = i + (*ku + i) * a_dim1;
+ q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ i__2 = i + (*ku + i) * a_dim1;
+ q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__2 = *n - *ku - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__2, &q__1, &a[i + (*ku + i + 1) * a_dim1], lda);
+ i__2 = i + (*ku + i) * a_dim1;
+ a[i__2].r = 1.f, a[i__2].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* apply reflection to A(i+1:m,ku+i:n) from the r
+ight */
+
+ i__2 = *n - *ku - i + 1;
+ clacgv_slu(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ cgemv_("No transpose", &i__2, &i__3, &c_b2, &a[i + 1 + (*ku +
+ i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda, &
+ c_b1, &work[1], &c__1);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&i__2, &i__3, &q__1, &work[1], &c__1, &a[i + (*ku + i)
+ * a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
+ i__2 = i + (*ku + i) * a_dim1;
+ q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+ }
+
+/* Computing MIN */
+ i__2 = *m - 1 - *kl;
+ if (i <= min(i__2,*n)) {
+
+/* generate reflection to annihilate A(kl+i+1:m,i
+) */
+
+ i__2 = *m - *kl - i + 1;
+ wn = scnrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
+ d__1 = wn / c_abs(&a[*kl + i + i * a_dim1]);
+ i__2 = *kl + i + i * a_dim1;
+ q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ i__2 = *kl + i + i * a_dim1;
+ q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__2 = *m - *kl - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__2, &q__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
+ i__2 = *kl + i + i * a_dim1;
+ a[i__2].r = 1.f, a[i__2].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* apply reflection to A(kl+i:m,i+1:n) from the l
+eft */
+
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ cgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*kl + i
+ + (i + 1) * a_dim1], lda, &a[*kl + i + i * a_dim1], &
+ c__1, &c_b1, &work[1], &c__1);
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&i__2, &i__3, &q__1, &a[*kl + i + i * a_dim1], &c__1, &
+ work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
+ i__2 = *kl + i + i * a_dim1;
+ q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+ }
+ }
+
+ i__2 = *m;
+ for (j = *kl + i + 1; j <= i__2; ++j) {
+ i__3 = j + i * a_dim1;
+ a[i__3].r = 0.f, a[i__3].i = 0.f;
+/* L50: */
+ }
+
+ i__2 = *n;
+ for (j = *ku + i + 1; j <= i__2; ++j) {
+ i__3 = i + j * a_dim1;
+ a[i__3].r = 0.f, a[i__3].i = 0.f;
+/* L60: */
+ }
+/* L70: */
+ }
+ return 0;
+
+/* End of CLAGGE */
+
+} /* clagge_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/claghe.c b/SuperLU_5.2.0/TESTING/MATGEN/claghe.c
new file mode 100644
index 0000000..7489a1a
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/claghe.c
@@ -0,0 +1,309 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static complex c_b1 = {0.f,0.f};
+static complex c_b2 = {1.f,0.f};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int claghe_slu(integer *n, integer *k, real *d, complex *a,
+ integer *lda, integer *iseed, complex *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ doublereal d__1;
+ complex q__1, q__2, q__3, q__4;
+
+ /* Builtin functions */
+ double c_abs(complex *);
+ void c_div(complex *, complex *, complex *), r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ extern /* Subroutine */ int cher2_(char *, integer *, complex *, complex *
+ , integer *, complex *, integer *, complex *, integer *);
+ static integer i, j;
+ extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
+ complex *, integer *, complex *, integer *, complex *, integer *);
+ static complex alpha;
+ extern /* Subroutine */ int cscal_(integer *, complex *, complex *,
+ integer *);
+ extern /* Complex */ VOID cdotc_(complex *, integer *, complex *, integer
+ *, complex *, integer *);
+ extern /* Subroutine */ int cgemv_(char *, integer *, integer *, complex *
+ , complex *, integer *, complex *, integer *, complex *, complex *
+ , integer *), chemv_(char *, integer *, complex *,
+ complex *, integer *, complex *, integer *, complex *, complex *,
+ integer *), caxpy_(integer *, complex *, complex *,
+ integer *, complex *, integer *);
+ extern real scnrm2_(integer *, complex *, integer *);
+ static complex wa, wb;
+ static real wn;
+ extern /* Subroutine */ int clarnv_slu(integer *, integer *, integer *, complex *);
+ extern int input_error(char *, int *);
+ static complex tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ CLAGHE generates a complex hermitian matrix A, by pre- and post-
+ multiplying a real diagonal matrix D with a random unitary matrix:
+ A = U*D*U'. The semi-bandwidth may then be reduced to k by additional
+
+ unitary transformations.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ K (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= K <= N-1.
+
+ D (input) REAL array, dimension (N)
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) COMPLEX array, dimension (LDA,N)
+ The generated n by n hermitian matrix A (the full matrix is
+ stored).
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) COMPLEX array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*k < 0 || *k > *n - 1) {
+ *info = -2;
+ } else if (*lda < max(1,*n)) {
+ *info = -5;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("CLAGHE", &i__1);
+ return 0;
+ }
+
+/* initialize lower triangle of A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__3 = i + j * a_dim1;
+ a[i__3].r = 0.f, a[i__3].i = 0.f;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ i__2 = i + i * a_dim1;
+ i__3 = i;
+ a[i__2].r = d[i__3], a[i__2].i = 0.f;
+/* L30: */
+ }
+
+/* Generate lower triangle of hermitian matrix */
+
+ for (i = *n - 1; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ clarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = scnrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / c_abs(&work[1]);
+ q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__1 = *n - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__1, &q__1, &work[2], &c__1);
+ work[1].r = 1.f, work[1].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* apply random reflection to A(i:n,i:n) from the left
+ and the right
+
+ compute y := tau * A * u */
+
+ i__1 = *n - i + 1;
+ chemv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
+ &c_b1, &work[*n + 1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( y, u ) * u */
+
+ q__3.r = -.5f, q__3.i = 0.f;
+ q__2.r = q__3.r * tau.r - q__3.i * tau.i, q__2.i = q__3.r * tau.i +
+ q__3.i * tau.r;
+ i__1 = *n - i + 1;
+ cdotc_(&q__4, &i__1, &work[*n + 1], &c__1, &work[1], &c__1);
+ q__1.r = q__2.r * q__4.r - q__2.i * q__4.i, q__1.i = q__2.r * q__4.i
+ + q__2.i * q__4.r;
+ alpha.r = q__1.r, alpha.i = q__1.i;
+ i__1 = *n - i + 1;
+ caxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
+
+/* apply the transformation as a rank-2 update to A(i:n,i:n) */
+
+ i__1 = *n - i + 1;
+ q__1.r = -1.f, q__1.i = 0.f;
+ cher2_("Lower", &i__1, &q__1, &work[1], &c__1, &work[*n + 1], &c__1, &
+ a[i + i * a_dim1], lda);
+/* L40: */
+ }
+
+/* Reduce number of subdiagonals to K */
+
+ i__1 = *n - 1 - *k;
+ for (i = 1; i <= i__1; ++i) {
+
+/* generate reflection to annihilate A(k+i+1:n,i) */
+
+ i__2 = *n - *k - i + 1;
+ wn = scnrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
+ d__1 = wn / c_abs(&a[*k + i + i * a_dim1]);
+ i__2 = *k + i + i * a_dim1;
+ q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ i__2 = *k + i + i * a_dim1;
+ q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__2 = *n - *k - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__2, &q__1, &a[*k + i + 1 + i * a_dim1], &c__1);
+ i__2 = *k + i + i * a_dim1;
+ a[i__2].r = 1.f, a[i__2].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
+
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ cgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*k + i + (i + 1)
+ * a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b1, &work[
+ 1], &c__1);
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&i__2, &i__3, &q__1, &a[*k + i + i * a_dim1], &c__1, &work[1],
+ &c__1, &a[*k + i + (i + 1) * a_dim1], lda);
+
+/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
+ht
+
+ compute y := tau * A * u */
+
+ i__2 = *n - *k - i + 1;
+ chemv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
+ k + i + i * a_dim1], &c__1, &c_b1, &work[1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( y, u ) * u */
+
+ q__3.r = -.5f, q__3.i = 0.f;
+ q__2.r = q__3.r * tau.r - q__3.i * tau.i, q__2.i = q__3.r * tau.i +
+ q__3.i * tau.r;
+ i__2 = *n - *k - i + 1;
+ cdotc_(&q__4, &i__2, &work[1], &c__1, &a[*k + i + i * a_dim1], &c__1);
+ q__1.r = q__2.r * q__4.r - q__2.i * q__4.i, q__1.i = q__2.r * q__4.i
+ + q__2.i * q__4.r;
+ alpha.r = q__1.r, alpha.i = q__1.i;
+ i__2 = *n - *k - i + 1;
+ caxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
+ ;
+
+/* apply hermitian rank-2 update to A(k+i:n,k+i:n) */
+
+ i__2 = *n - *k - i + 1;
+ q__1.r = -1.f, q__1.i = 0.f;
+ cher2_("Lower", &i__2, &q__1, &a[*k + i + i * a_dim1], &c__1, &work[1]
+ , &c__1, &a[*k + i + (*k + i) * a_dim1], lda);
+
+ i__2 = *k + i + i * a_dim1;
+ q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+ i__2 = *n;
+ for (j = *k + i + 1; j <= i__2; ++j) {
+ i__3 = j + i * a_dim1;
+ a[i__3].r = 0.f, a[i__3].i = 0.f;
+/* L50: */
+ }
+/* L60: */
+ }
+
+/* Store full hermitian matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__3 = j + i * a_dim1;
+ r_cnjg(&q__1, &a[i + j * a_dim1]);
+ a[i__3].r = q__1.r, a[i__3].i = q__1.i;
+/* L70: */
+ }
+/* L80: */
+ }
+ return 0;
+
+/* End of CLAGHE */
+
+} /* claghe_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clagsy.c b/SuperLU_5.2.0/TESTING/MATGEN/clagsy.c
new file mode 100644
index 0000000..a02b5f3
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clagsy.c
@@ -0,0 +1,363 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static complex c_b1 = {0.f,0.f};
+static complex c_b2 = {1.f,0.f};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int clagsy_slu(integer *n, integer *k, real *d, complex *a,
+ integer *lda, integer *iseed, complex *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6, i__7, i__8,
+ i__9;
+ doublereal d__1;
+ complex q__1, q__2, q__3, q__4;
+
+ /* Builtin functions */
+ double c_abs(complex *);
+ void c_div(complex *, complex *, complex *);
+
+ /* Local variables */
+ static integer i, j;
+ extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
+ complex *, integer *, complex *, integer *, complex *, integer *);
+ static complex alpha;
+ extern /* Subroutine */ int cscal_(integer *, complex *, complex *,
+ integer *);
+ extern /* Complex */ VOID cdotc_(complex *, integer *, complex *, integer
+ *, complex *, integer *);
+ extern /* Subroutine */ int cgemv_(char *, integer *, integer *, complex *
+ , complex *, integer *, complex *, integer *, complex *, complex *
+ , integer *), caxpy_(integer *, complex *, complex *,
+ integer *, complex *, integer *), csymv_sluslu(char *, integer *,
+ complex *, complex *, integer *, complex *, integer *, complex *,
+ complex *, integer *);
+ extern real scnrm2_(integer *, complex *, integer *);
+ static integer ii, jj;
+ static complex wa, wb;
+ extern /* Subroutine */ int clacgv_slu(integer *, complex *, integer *);
+ static real wn;
+ extern /* Subroutine */ int clarnv_slu(integer *, integer *, integer *, complex *);
+ extern int input_error(char *, int *);
+ static complex tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ CLAGSY generates a complex symmetric matrix A, by pre- and post-
+ multiplying a real diagonal matrix D with a random unitary matrix:
+ A = U*D*U**T. The semi-bandwidth may then be reduced to k by
+ additional unitary transformations.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ K (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= K <= N-1.
+
+ D (input) REAL array, dimension (N)
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) COMPLEX array, dimension (LDA,N)
+ The generated n by n symmetric matrix A (the full matrix is
+ stored).
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) COMPLEX array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*k < 0 || *k > *n - 1) {
+ *info = -2;
+ } else if (*lda < max(1,*n)) {
+ *info = -5;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("CLAGSY", &i__1);
+ return 0;
+ }
+
+/* initialize lower triangle of A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__3 = i + j * a_dim1;
+ a[i__3].r = 0.f, a[i__3].i = 0.f;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ i__2 = i + i * a_dim1;
+ i__3 = i;
+ a[i__2].r = d[i__3], a[i__2].i = 0.f;
+/* L30: */
+ }
+
+/* Generate lower triangle of symmetric matrix */
+
+ for (i = *n - 1; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ clarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = scnrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / c_abs(&work[1]);
+ q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__1 = *n - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__1, &q__1, &work[2], &c__1);
+ work[1].r = 1.f, work[1].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* apply random reflection to A(i:n,i:n) from the left
+ and the right
+
+ compute y := tau * A * conjg(u) */
+
+ i__1 = *n - i + 1;
+ clacgv_slu(&i__1, &work[1], &c__1);
+ i__1 = *n - i + 1;
+ csymv_sluslu("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
+ &c_b1, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ clacgv_slu(&i__1, &work[1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( u, y ) * u */
+
+ q__3.r = -.5f, q__3.i = 0.f;
+ q__2.r = q__3.r * tau.r - q__3.i * tau.i, q__2.i = q__3.r * tau.i +
+ q__3.i * tau.r;
+ i__1 = *n - i + 1;
+ cdotc_(&q__4, &i__1, &work[1], &c__1, &work[*n + 1], &c__1);
+ q__1.r = q__2.r * q__4.r - q__2.i * q__4.i, q__1.i = q__2.r * q__4.i
+ + q__2.i * q__4.r;
+ alpha.r = q__1.r, alpha.i = q__1.i;
+ i__1 = *n - i + 1;
+ caxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
+
+/* apply the transformation as a rank-2 update to A(i:n,i:n)
+
+ CALL CSYR2( 'Lower', N-I+1, -ONE, WORK, 1, WORK( N+1 ), 1,
+
+ $ A( I, I ), LDA ) */
+
+ i__1 = *n;
+ for (jj = i; jj <= i__1; ++jj) {
+ i__2 = *n;
+ for (ii = jj; ii <= i__2; ++ii) {
+ i__3 = ii + jj * a_dim1;
+ i__4 = ii + jj * a_dim1;
+ i__5 = ii - i + 1;
+ i__6 = *n + jj - i + 1;
+ q__3.r = work[i__5].r * work[i__6].r - work[i__5].i * work[
+ i__6].i, q__3.i = work[i__5].r * work[i__6].i + work[
+ i__5].i * work[i__6].r;
+ q__2.r = a[i__4].r - q__3.r, q__2.i = a[i__4].i - q__3.i;
+ i__7 = *n + ii - i + 1;
+ i__8 = jj - i + 1;
+ q__4.r = work[i__7].r * work[i__8].r - work[i__7].i * work[
+ i__8].i, q__4.i = work[i__7].r * work[i__8].i + work[
+ i__7].i * work[i__8].r;
+ q__1.r = q__2.r - q__4.r, q__1.i = q__2.i - q__4.i;
+ a[i__3].r = q__1.r, a[i__3].i = q__1.i;
+/* L40: */
+ }
+/* L50: */
+ }
+/* L60: */
+ }
+
+/* Reduce number of subdiagonals to K */
+
+ i__1 = *n - 1 - *k;
+ for (i = 1; i <= i__1; ++i) {
+
+/* generate reflection to annihilate A(k+i+1:n,i) */
+
+ i__2 = *n - *k - i + 1;
+ wn = scnrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
+ d__1 = wn / c_abs(&a[*k + i + i * a_dim1]);
+ i__2 = *k + i + i * a_dim1;
+ q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ i__2 = *k + i + i * a_dim1;
+ q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__2 = *n - *k - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__2, &q__1, &a[*k + i + 1 + i * a_dim1], &c__1);
+ i__2 = *k + i + i * a_dim1;
+ a[i__2].r = 1.f, a[i__2].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
+
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ cgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*k + i + (i + 1)
+ * a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b1, &work[
+ 1], &c__1);
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&i__2, &i__3, &q__1, &a[*k + i + i * a_dim1], &c__1, &work[1],
+ &c__1, &a[*k + i + (i + 1) * a_dim1], lda);
+
+/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
+ht
+
+ compute y := tau * A * conjg(u) */
+
+ i__2 = *n - *k - i + 1;
+ clacgv_slu(&i__2, &a[*k + i + i * a_dim1], &c__1);
+ i__2 = *n - *k - i + 1;
+ csymv_sluslu("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
+ k + i + i * a_dim1], &c__1, &c_b1, &work[1], &c__1);
+ i__2 = *n - *k - i + 1;
+ clacgv_slu(&i__2, &a[*k + i + i * a_dim1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( u, y ) * u */
+
+ q__3.r = -.5f, q__3.i = 0.f;
+ q__2.r = q__3.r * tau.r - q__3.i * tau.i, q__2.i = q__3.r * tau.i +
+ q__3.i * tau.r;
+ i__2 = *n - *k - i + 1;
+ cdotc_(&q__4, &i__2, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1);
+ q__1.r = q__2.r * q__4.r - q__2.i * q__4.i, q__1.i = q__2.r * q__4.i
+ + q__2.i * q__4.r;
+ alpha.r = q__1.r, alpha.i = q__1.i;
+ i__2 = *n - *k - i + 1;
+ caxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
+ ;
+
+/* apply symmetric rank-2 update to A(k+i:n,k+i:n)
+
+ CALL CSYR2( 'Lower', N-K-I+1, -ONE, A( K+I, I ), 1, WORK, 1,
+
+ $ A( K+I, K+I ), LDA ) */
+
+ i__2 = *n;
+ for (jj = *k + i; jj <= i__2; ++jj) {
+ i__3 = *n;
+ for (ii = jj; ii <= i__3; ++ii) {
+ i__4 = ii + jj * a_dim1;
+ i__5 = ii + jj * a_dim1;
+ i__6 = ii + i * a_dim1;
+ i__7 = jj - *k - i + 1;
+ q__3.r = a[i__6].r * work[i__7].r - a[i__6].i * work[i__7].i,
+ q__3.i = a[i__6].r * work[i__7].i + a[i__6].i * work[
+ i__7].r;
+ q__2.r = a[i__5].r - q__3.r, q__2.i = a[i__5].i - q__3.i;
+ i__8 = ii - *k - i + 1;
+ i__9 = jj + i * a_dim1;
+ q__4.r = work[i__8].r * a[i__9].r - work[i__8].i * a[i__9].i,
+ q__4.i = work[i__8].r * a[i__9].i + work[i__8].i * a[
+ i__9].r;
+ q__1.r = q__2.r - q__4.r, q__1.i = q__2.i - q__4.i;
+ a[i__4].r = q__1.r, a[i__4].i = q__1.i;
+/* L70: */
+ }
+/* L80: */
+ }
+
+ i__2 = *k + i + i * a_dim1;
+ q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+ i__2 = *n;
+ for (j = *k + i + 1; j <= i__2; ++j) {
+ i__3 = j + i * a_dim1;
+ a[i__3].r = 0.f, a[i__3].i = 0.f;
+/* L90: */
+ }
+/* L100: */
+ }
+
+/* Store full symmetric matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__3 = j + i * a_dim1;
+ i__4 = i + j * a_dim1;
+ a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;
+/* L110: */
+ }
+/* L120: */
+ }
+ return 0;
+
+/* End of CLAGSY */
+
+} /* clagsy_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clarge.c b/SuperLU_5.2.0/TESTING/MATGEN/clarge.c
new file mode 100644
index 0000000..aae8e36
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clarge.c
@@ -0,0 +1,160 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static complex c_b1 = {0.f,0.f};
+static complex c_b2 = {1.f,0.f};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int clarge_slu(integer *n, complex *a, integer *lda, integer *
+ iseed, complex *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1;
+ doublereal d__1;
+ complex q__1;
+
+ /* Builtin functions */
+ double c_abs(complex *);
+ void c_div(complex *, complex *, complex *);
+
+ /* Local variables */
+ static integer i;
+ extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
+ complex *, integer *, complex *, integer *, complex *, integer *),
+ cscal_(integer *, complex *, complex *, integer *), cgemv_(char *
+ , integer *, integer *, complex *, complex *, integer *, complex *
+ , integer *, complex *, complex *, integer *);
+ extern real scnrm2_(integer *, complex *, integer *);
+ static complex wa, wb;
+ static real wn;
+ extern /* Subroutine */ int clarnv_slu(integer *, integer *, integer *, complex *);
+ extern int input_error(char *, int *);
+ static complex tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ CLARGE pre- and post-multiplies a complex general n by n matrix A
+ with a random unitary matrix: A = U*D*U'.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ A (input/output) COMPLEX array, dimension (LDA,N)
+ On entry, the original n by n matrix A.
+ On exit, A is overwritten by U*A*U' for some random
+ unitary matrix U.
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) COMPLEX array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*lda < max(1,*n)) {
+ *info = -3;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("CLARGE", &i__1);
+ return 0;
+ }
+
+/* pre- and post-multiply A by random unitary matrix */
+
+ for (i = *n; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ clarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = scnrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / c_abs(&work[1]);
+ q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
+ wa.r = q__1.r, wa.i = q__1.i;
+ if (wn == 0.f) {
+ tau.r = 0.f, tau.i = 0.f;
+ } else {
+ q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
+ wb.r = q__1.r, wb.i = q__1.i;
+ i__1 = *n - i;
+ c_div(&q__1, &c_b2, &wb);
+ cscal_(&i__1, &q__1, &work[2], &c__1);
+ work[1].r = 1.f, work[1].i = 0.f;
+ c_div(&q__1, &wb, &wa);
+ d__1 = q__1.r;
+ tau.r = d__1, tau.i = 0.f;
+ }
+
+/* multiply A(i:n,1:n) by random reflection from the left */
+
+ i__1 = *n - i + 1;
+ cgemv_("Conjugate transpose", &i__1, n, &c_b2, &a[i + a_dim1], lda, &
+ work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&i__1, n, &q__1, &work[1], &c__1, &work[*n + 1], &c__1, &a[i +
+ a_dim1], lda);
+
+/* multiply A(1:n,i:n) by random reflection from the right */
+
+ i__1 = *n - i + 1;
+ cgemv_("No transpose", n, &i__1, &c_b2, &a[i * a_dim1 + 1], lda, &
+ work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(n, &i__1, &q__1, &work[*n + 1], &c__1, &work[1], &c__1, &a[i *
+ a_dim1 + 1], lda);
+/* L10: */
+ }
+ return 0;
+
+/* End of CLARGE */
+
+} /* clarge_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clarnd.c b/SuperLU_5.2.0/TESTING/MATGEN/clarnd.c
new file mode 100644
index 0000000..da08656
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clarnd.c
@@ -0,0 +1,125 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Complex */ VOID clarnd_slu(complex * ret_val, integer *idist, integer *iseed)
+{
+ /* System generated locals */
+ doublereal d__1, d__2;
+ complex q__1, q__2, q__3;
+
+ /* Builtin functions */
+ double log(doublereal), sqrt(doublereal);
+ void c_exp(complex *, complex *);
+
+ /* Local variables */
+ static real t1, t2;
+ extern doublereal dlaran_sluslu(integer *);
+
+
+/* -- 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
+
+
+ Purpose
+ =======
+
+ CLARND returns a random complex number from a uniform or normal
+ distribution.
+
+ Arguments
+ =========
+
+ IDIST (input) INTEGER
+ Specifies the distribution of the random numbers:
+ = 1: real and imaginary parts each uniform (0,1)
+ = 2: real and imaginary parts each uniform (-1,1)
+ = 3: real and imaginary parts each normal (0,1)
+ = 4: uniformly distributed on the disc abs(z) <= 1
+ = 5: uniformly distributed on the circle abs(z) = 1
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ Further Details
+ ===============
+
+ This routine calls the auxiliary routine SLARAN to generate a random
+
+ real number from a uniform (0,1) distribution. The Box-Muller method
+
+ is used to transform numbers from a uniform to a normal distribution.
+
+
+ =====================================================================
+
+
+
+ Generate a pair of real random numbers from a uniform (0,1)
+ distribution
+
+ Parameter adjustments */
+ --iseed;
+
+ /* Function Body */
+ t1 = dlaran_sluslu(&iseed[1]);
+ t2 = dlaran_sluslu(&iseed[1]);
+
+ if (*idist == 1) {
+
+/* real and imaginary parts each uniform (0,1) */
+
+ q__1.r = t1, q__1.i = t2;
+ ret_val->r = q__1.r, ret_val->i = q__1.i;
+ } else if (*idist == 2) {
+
+/* real and imaginary parts each uniform (-1,1) */
+
+ d__1 = t1 * 2.f - 1.f;
+ d__2 = t2 * 2.f - 1.f;
+ q__1.r = d__1, q__1.i = d__2;
+ ret_val->r = q__1.r, ret_val->i = q__1.i;
+ } else if (*idist == 3) {
+
+/* real and imaginary parts each normal (0,1) */
+
+ d__1 = sqrt(log(t1) * -2.f);
+ d__2 = t2 * 6.2831853071795864769252867663f;
+ q__3.r = 0.f, q__3.i = d__2;
+ c_exp(&q__2, &q__3);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ ret_val->r = q__1.r, ret_val->i = q__1.i;
+ } else if (*idist == 4) {
+
+/* uniform distribution on the unit disc abs(z) <= 1 */
+
+ d__1 = sqrt(t1);
+ d__2 = t2 * 6.2831853071795864769252867663f;
+ q__3.r = 0.f, q__3.i = d__2;
+ c_exp(&q__2, &q__3);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ ret_val->r = q__1.r, ret_val->i = q__1.i;
+ } else if (*idist == 5) {
+
+/* uniform distribution on the unit circle abs(z) = 1 */
+
+ d__1 = t2 * 6.2831853071795864769252867663f;
+ q__2.r = 0.f, q__2.i = d__1;
+ c_exp(&q__1, &q__2);
+ ret_val->r = q__1.r, ret_val->i = q__1.i;
+ }
+ return ;
+
+/* End of CLARND */
+
+} /* clarnd_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clarnv.c b/SuperLU_5.2.0/TESTING/MATGEN/clarnv.c
new file mode 100644
index 0000000..7b20d16
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clarnv.c
@@ -0,0 +1,172 @@
+#include "f2c.h"
+
+/* Subroutine */ int clarnv_slu(integer *idist, integer *iseed, integer *n,
+ complex *x)
+{
+/* -- 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
+
+
+ Purpose
+ =======
+
+ CLARNV returns a vector of n random complex numbers from a uniform or
+
+ normal distribution.
+
+ Arguments
+ =========
+
+ IDIST (input) INTEGER
+ Specifies the distribution of the random numbers:
+ = 1: real and imaginary parts each uniform (0,1)
+ = 2: real and imaginary parts each uniform (-1,1)
+ = 3: real and imaginary parts each normal (0,1)
+ = 4: uniformly distributed on the disc abs(z) < 1
+ = 5: uniformly distributed on the circle abs(z) = 1
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ N (input) INTEGER
+ The number of random numbers to be generated.
+
+ X (output) COMPLEX array, dimension (N)
+ The generated random numbers.
+
+ Further Details
+ ===============
+
+ This routine calls the auxiliary routine SLARUV to generate random
+ real numbers from a uniform (0,1) distribution, in batches of up to
+ 128 using vectorisable code. The Box-Muller method is used to
+ transform numbers from a uniform to a normal distribution.
+
+ =====================================================================
+
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer i__1, i__2, i__3, i__4, i__5;
+ doublereal d__1, d__2;
+ complex q__1, q__2, q__3;
+ /* Builtin functions */
+ double log(doublereal), sqrt(doublereal);
+ void c_exp(complex *, complex *);
+ /* Local variables */
+ static integer i;
+ static real u[128];
+ static integer il, iv;
+ extern /* Subroutine */ int slaruv_slu(integer *, integer *, real *);
+
+
+#define X(I) x[(I)-1]
+#define ISEED(I) iseed[(I)-1]
+
+
+ i__1 = *n;
+ for (iv = 1; iv <= *n; iv += 64) {
+/* Computing MIN */
+ i__2 = 64, i__3 = *n - iv + 1;
+ il = min(i__2,i__3);
+
+/* Call SLARUV to generate 2*IL real numbers from a uniform (0,
+1)
+ distribution (2*IL <= LV) */
+
+ i__2 = il << 1;
+ slaruv_slu(&ISEED(1), &i__2, u);
+
+ if (*idist == 1) {
+
+/* Copy generated numbers */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ i__4 = (i << 1) - 2;
+ i__5 = (i << 1) - 1;
+ q__1.r = u[(i<<1)-2], q__1.i = u[(i<<1)-1];
+ X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
+/* L10: */
+ }
+ } else if (*idist == 2) {
+
+/* Convert generated numbers to uniform (-1,1) distribut
+ion */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ d__1 = u[(i << 1) - 2] * 2.f - 1.f;
+ d__2 = u[(i << 1) - 1] * 2.f - 1.f;
+ q__1.r = d__1, q__1.i = d__2;
+ X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
+/* L20: */
+ }
+ } else if (*idist == 3) {
+
+/* Convert generated numbers to normal (0,1) distributio
+n */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ d__1 = sqrt(log(u[(i << 1) - 2]) * -2.f);
+ d__2 = u[(i << 1) - 1] * 6.2831853071795864769252867663f;
+ q__3.r = 0.f, q__3.i = d__2;
+ c_exp(&q__2, &q__3);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
+/* L30: */
+ }
+ } else if (*idist == 4) {
+
+/* Convert generated numbers to complex numbers uniforml
+y
+ distributed on the unit disk */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ d__1 = sqrt(u[(i << 1) - 2]);
+ d__2 = u[(i << 1) - 1] * 6.2831853071795864769252867663f;
+ q__3.r = 0.f, q__3.i = d__2;
+ c_exp(&q__2, &q__3);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
+/* L40: */
+ }
+ } else if (*idist == 5) {
+
+/* Convert generated numbers to complex numbers uniforml
+y
+ distributed on the unit circle */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ d__1 = u[(i << 1) - 1] * 6.2831853071795864769252867663f;
+ q__2.r = 0.f, q__2.i = d__1;
+ c_exp(&q__1, &q__2);
+ X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
+/* L50: */
+ }
+ }
+/* L60: */
+ }
+ return 0;
+
+/* End of CLARNV */
+
+} /* clarnv_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/claror.c b/SuperLU_5.2.0/TESTING/MATGEN/claror.c
new file mode 100644
index 0000000..9f52e4f
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/claror.c
@@ -0,0 +1,351 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static complex c_b1 = {0.f,0.f};
+static complex c_b2 = {1.f,0.f};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int claror_slu(char *side, char *init, integer *m, integer *n,
+ complex *a, integer *lda, integer *iseed, complex *x, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ complex q__1, q__2;
+
+ /* Builtin functions */
+ double c_abs(complex *);
+ void r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static integer kbeg, jcol;
+ static real xabs;
+ static integer irow, j;
+ extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
+ complex *, integer *, complex *, integer *, complex *, integer *),
+ cscal_(integer *, complex *, complex *, integer *);
+ extern /* Subroutine */ int cgemv_(char *, integer *, integer *, complex *
+ , complex *, integer *, complex *, integer *, complex *, complex *
+ , integer *);
+ static complex csign;
+ static integer ixfrm, itype, nxfrm;
+ static real xnorm;
+ extern real scnrm2_(integer *, complex *, integer *);
+ extern /* Subroutine */ int clacgv_slu(integer *, complex *, integer *);
+ extern /* Complex */ VOID clarnd_slu(complex *, integer *, integer *);
+ extern /* Subroutine */ int claset_slu(char *, integer *, integer *, complex
+ *, complex *, complex *, integer *);
+ extern int input_error(char *, int *);
+ static real factor;
+ static complex xnorms;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ CLAROR pre- or post-multiplies an M by N matrix A by a random
+ unitary matrix U, overwriting A. A may optionally be
+ initialized to the identity matrix before multiplying by U.
+ U is generated using the method of G.W. Stewart
+ ( SIAM J. Numer. Anal. 17, 1980, pp. 403-409 ).
+ (BLAS-2 version)
+
+ Arguments
+ =========
+
+ SIDE - CHARACTER*1
+ SIDE specifies whether A is multiplied on the left or right
+
+ by U.
+ SIDE = 'L' Multiply A on the left (premultiply) by U
+ SIDE = 'R' Multiply A on the right (postmultiply) by U*
+ SIDE = 'C' Multiply A on the left by U and the right by U*
+ SIDE = 'T' Multiply A on the left by U and the right by U'
+ Not modified.
+
+ INIT - CHARACTER*1
+ INIT specifies whether or not A should be initialized to
+ the identity matrix.
+ INIT = 'I' Initialize A to (a section of) the
+ identity matrix before applying U.
+ INIT = 'N' No initialization. Apply U to the
+ input matrix A.
+
+ INIT = 'I' may be used to generate square (i.e., unitary)
+ or rectangular orthogonal matrices (orthogonality being
+ in the sense of CDOTC):
+
+ For square matrices, M=N, and SIDE many be either 'L' or
+ 'R'; the rows will be orthogonal to each other, as will the
+
+ columns.
+ For rectangular matrices where M < N, SIDE = 'R' will
+ produce a dense matrix whose rows will be orthogonal and
+ whose columns will not, while SIDE = 'L' will produce a
+ matrix whose rows will be orthogonal, and whose first M
+ columns will be orthogonal, the remaining columns being
+ zero.
+ For matrices where M > N, just use the previous
+ explaination, interchanging 'L' and 'R' and "rows" and
+ "columns".
+
+ Not modified.
+
+ M - INTEGER
+ Number of rows of A. Not modified.
+
+ N - INTEGER
+ Number of columns of A. Not modified.
+
+ A - COMPLEX array, dimension ( LDA, N )
+ Input and output array. Overwritten by U A ( if SIDE = 'L' )
+
+ or by A U ( if SIDE = 'R' )
+ or by U A U* ( if SIDE = 'C')
+ or by U A U' ( if SIDE = 'T') on exit.
+
+ LDA - INTEGER
+ Leading dimension of A. Must be at least MAX ( 1, M ).
+ Not modified.
+
+ ISEED - INTEGER array, dimension ( 4 )
+ On entry ISEED specifies the seed of the random number
+ generator. The array elements should be between 0 and 4095;
+
+ if not they will be reduced mod 4096. Also, ISEED(4) must
+ be odd. The random number generator uses a linear
+ congruential sequence limited to small integers, and so
+ should produce machine independent random numbers. The
+ values of ISEED are changed on exit, and can be used in the
+
+ next call to CLAROR to continue the same random number
+ sequence.
+ Modified.
+
+ X - COMPLEX array, dimension ( 3*MAX( M, N ) )
+ Workspace. Of length:
+ 2*M + N if SIDE = 'L',
+ 2*N + M if SIDE = 'R',
+ 3*N if SIDE = 'C' or 'T'.
+ Modified.
+
+ INFO - INTEGER
+ An error flag. It is set to:
+ 0 if no error.
+ 1 if CLARND returned a bad random number (installation
+ problem)
+ -1 if SIDE is not L, R, C, or T.
+ -3 if M is negative.
+ -4 if N is negative or if SIDE is C or T and N is not equal
+
+ to M.
+ -6 if LDA is less than M.
+
+ =====================================================================
+
+
+
+ Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --x;
+
+ /* Function Body */
+ if (*n == 0 || *m == 0) {
+ return 0;
+ }
+
+ itype = 0;
+ if (strncmp(side, "L", 1)==0) {
+ itype = 1;
+ } else if (strncmp(side, "R", 1)==0) {
+ itype = 2;
+ } else if (strncmp(side, "C", 1)==0) {
+ itype = 3;
+ } else if (strncmp(side, "T", 1)==0) {
+ itype = 4;
+ }
+
+/* Check for argument errors. */
+
+ *info = 0;
+ if (itype == 0) {
+ *info = -1;
+ } else if (*m < 0) {
+ *info = -3;
+ } else if (*n < 0 || itype == 3 && *n != *m) {
+ *info = -4;
+ } else if (*lda < *m) {
+ *info = -6;
+ }
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("CLAROR", &i__1);
+ return 0;
+ }
+
+ if (itype == 1) {
+ nxfrm = *m;
+ } else {
+ nxfrm = *n;
+ }
+
+/* Initialize A to the identity matrix if desired */
+
+ if (strncmp(init, "I", 1)==0) {
+ claset_slu("Full", m, n, &c_b1, &c_b2, &a[a_offset], lda);
+ }
+
+/* If no rotation possible, still multiply by
+ a random complex number from the circle |x| = 1
+
+ 2) Compute Rotation by computing Householder
+ Transformations H(2), H(3), ..., H(n). Note that the
+ order in which they are computed is irrelevant. */
+
+ i__1 = nxfrm;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = j;
+ x[i__2].r = 0.f, x[i__2].i = 0.f;
+/* L40: */
+ }
+
+ i__1 = nxfrm;
+ for (ixfrm = 2; ixfrm <= i__1; ++ixfrm) {
+ kbeg = nxfrm - ixfrm + 1;
+
+/* Generate independent normal( 0, 1 ) random numbers */
+
+ i__2 = nxfrm;
+ for (j = kbeg; j <= i__2; ++j) {
+ i__3 = j;
+ clarnd_slu(&q__1, &c__3, &iseed[1]);
+ x[i__3].r = q__1.r, x[i__3].i = q__1.i;
+/* L50: */
+ }
+
+/* Generate a Householder transformation from the random vector
+ X */
+
+ xnorm = scnrm2_(&ixfrm, &x[kbeg], &c__1);
+ xabs = c_abs(&x[kbeg]);
+ if (xabs != 0.f) {
+ i__2 = kbeg;
+ q__1.r = x[i__2].r / xabs, q__1.i = x[i__2].i / xabs;
+ csign.r = q__1.r, csign.i = q__1.i;
+ } else {
+ csign.r = 1.f, csign.i = 0.f;
+ }
+ q__1.r = xnorm * csign.r, q__1.i = xnorm * csign.i;
+ xnorms.r = q__1.r, xnorms.i = q__1.i;
+ i__2 = nxfrm + kbeg;
+ q__1.r = -(doublereal)csign.r, q__1.i = -(doublereal)csign.i;
+ x[i__2].r = q__1.r, x[i__2].i = q__1.i;
+ factor = xnorm * (xnorm + xabs);
+ if (dabs(factor) < 1e-20f) {
+ *info = 1;
+ i__2 = -(*info);
+ input_error("CLAROR", &i__2);
+ return 0;
+ } else {
+ factor = 1.f / factor;
+ }
+ i__2 = kbeg;
+ i__3 = kbeg;
+ q__1.r = x[i__3].r + xnorms.r, q__1.i = x[i__3].i + xnorms.i;
+ x[i__2].r = q__1.r, x[i__2].i = q__1.i;
+
+/* Apply Householder transformation to A */
+
+ if (itype == 1 || itype == 3 || itype == 4) {
+
+/* Apply H(k) on the left of A */
+
+ cgemv_("C", &ixfrm, n, &c_b2, &a[kbeg + a_dim1], lda, &x[kbeg], &
+ c__1, &c_b1, &x[(nxfrm << 1) + 1], &c__1);
+ q__2.r = factor, q__2.i = 0.f;
+ q__1.r = -(doublereal)q__2.r, q__1.i = -(doublereal)q__2.i;
+ cgerc_(&ixfrm, n, &q__1, &x[kbeg], &c__1, &x[(nxfrm << 1) + 1], &
+ c__1, &a[kbeg + a_dim1], lda);
+
+ }
+
+ if (itype >= 2 && itype <= 4) {
+
+/* Apply H(k)* (or H(k)') on the right of A */
+
+ if (itype == 4) {
+ clacgv_slu(&ixfrm, &x[kbeg], &c__1);
+ }
+
+ cgemv_("N", m, &ixfrm, &c_b2, &a[kbeg * a_dim1 + 1], lda, &x[kbeg]
+ , &c__1, &c_b1, &x[(nxfrm << 1) + 1], &c__1);
+ q__2.r = factor, q__2.i = 0.f;
+ q__1.r = -(doublereal)q__2.r, q__1.i = -(doublereal)q__2.i;
+ cgerc_(m, &ixfrm, &q__1, &x[(nxfrm << 1) + 1], &c__1, &x[kbeg], &
+ c__1, &a[kbeg * a_dim1 + 1], lda);
+
+ }
+/* L60: */
+ }
+
+ clarnd_slu(&q__1, &c__3, &iseed[1]);
+ x[1].r = q__1.r, x[1].i = q__1.i;
+ xabs = c_abs(&x[1]);
+ if (xabs != 0.f) {
+ q__1.r = x[1].r / xabs, q__1.i = x[1].i / xabs;
+ csign.r = q__1.r, csign.i = q__1.i;
+ } else {
+ csign.r = 1.f, csign.i = 0.f;
+ }
+ i__1 = nxfrm << 1;
+ x[i__1].r = csign.r, x[i__1].i = csign.i;
+
+/* Scale the matrix A by D. */
+
+ if (itype == 1 || itype == 3 || itype == 4) {
+ i__1 = *m;
+ for (irow = 1; irow <= i__1; ++irow) {
+ r_cnjg(&q__1, &x[nxfrm + irow]);
+ cscal_(n, &q__1, &a[irow + a_dim1], lda);
+/* L70: */
+ }
+ }
+
+ if (itype == 2 || itype == 3) {
+ i__1 = *n;
+ for (jcol = 1; jcol <= i__1; ++jcol) {
+ cscal_(m, &x[nxfrm + jcol], &a[jcol * a_dim1 + 1], &c__1);
+/* L80: */
+ }
+ }
+
+ if (itype == 4) {
+ i__1 = *n;
+ for (jcol = 1; jcol <= i__1; ++jcol) {
+ r_cnjg(&q__1, &x[nxfrm + jcol]);
+ cscal_(m, &q__1, &a[jcol * a_dim1 + 1], &c__1);
+/* L90: */
+ }
+ }
+ return 0;
+
+/* End of CLAROR */
+
+} /* claror_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clarot.c b/SuperLU_5.2.0/TESTING/MATGEN/clarot.c
new file mode 100644
index 0000000..15b65d3
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clarot.c
@@ -0,0 +1,365 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__4 = 4;
+static integer c__8 = 8;
+
+/* Subroutine */ int clarot_slu(logical *lrows, logical *lleft, logical *lright,
+ integer *nl, complex *c, complex *s, complex *a, integer *lda,
+ complex *xleft, complex *xright)
+{
+ /* System generated locals */
+ integer i__1, i__2, i__3, i__4;
+ complex q__1, q__2, q__3, q__4, q__5, q__6;
+
+ /* Builtin functions */
+ void r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static integer iinc, j, inext;
+ static complex tempx;
+ static integer ix, iy, nt;
+ static complex xt[2], yt[2];
+ extern int input_error(char *, int *);
+ static integer iyt;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ CLAROT applies a (Givens) rotation to two adjacent rows or
+ columns, where one element of the first and/or last column/row
+ may be a separate variable. This is specifically indended
+ for use on matrices stored in some format other than GE, so
+ that elements of the matrix may be used or modified for which
+ no array element is provided.
+
+ One example is a symmetric matrix in SB format (bandwidth=4), for
+
+ which UPLO='L': Two adjacent rows will have the format:
+
+ row j: * * * * * . . . .
+ row j+1: * * * * * . . . .
+
+ '*' indicates elements for which storage is provided,
+ '.' indicates elements for which no storage is provided, but
+ are not necessarily zero; their values are determined by
+ symmetry. ' ' indicates elements which are necessarily zero,
+ and have no storage provided.
+
+ Those columns which have two '*'s can be handled by SROT.
+ Those columns which have no '*'s can be ignored, since as long
+ as the Givens rotations are carefully applied to preserve
+ symmetry, their values are determined.
+ Those columns which have one '*' have to be handled separately,
+ by using separate variables "p" and "q":
+
+ row j: * * * * * p . . .
+ row j+1: q * * * * * . . . .
+
+ The element p would have to be set correctly, then that column
+ is rotated, setting p to its new value. The next call to
+ CLAROT would rotate columns j and j+1, using p, and restore
+ symmetry. The element q would start out being zero, and be
+ made non-zero by the rotation. Later, rotations would presumably
+
+ be chosen to zero q out.
+
+ Typical Calling Sequences: rotating the i-th and (i+1)-st rows.
+ ------- ------- ---------
+
+ General dense matrix:
+
+ CALL CLAROT(.TRUE.,.FALSE.,.FALSE., N, C,S,
+ A(i,1),LDA, DUMMY, DUMMY)
+
+ General banded matrix in GB format:
+
+ j = MAX(1, i-KL )
+ NL = MIN( N, i+KU+1 ) + 1-j
+ CALL CLAROT( .TRUE., i-KL.GE.1, i+KU.LT.N, NL, C,S,
+ A(KU+i+1-j,j),LDA-1, XLEFT, XRIGHT )
+
+ [ note that i+1-j is just MIN(i,KL+1) ]
+
+ Symmetric banded matrix in SY format, bandwidth K,
+ lower triangle only:
+
+ j = MAX(1, i-K )
+ NL = MIN( K+1, i ) + 1
+ CALL CLAROT( .TRUE., i-K.GE.1, .TRUE., NL, C,S,
+ A(i,j), LDA, XLEFT, XRIGHT )
+
+ Same, but upper triangle only:
+
+ NL = MIN( K+1, N-i ) + 1
+ CALL CLAROT( .TRUE., .TRUE., i+K.LT.N, NL, C,S,
+ A(i,i), LDA, XLEFT, XRIGHT )
+
+ Symmetric banded matrix in SB format, bandwidth K,
+ lower triangle only:
+
+ [ same as for SY, except:]
+ . . . .
+ A(i+1-j,j), LDA-1, XLEFT, XRIGHT )
+
+ [ note that i+1-j is just MIN(i,K+1) ]
+
+ Same, but upper triangle only:
+ . . .
+ A(K+1,i), LDA-1, XLEFT, XRIGHT )
+
+ Rotating columns is just the transpose of rotating rows, except
+
+ for GB and SB: (rotating columns i and i+1)
+
+ GB:
+ j = MAX(1, i-KU )
+ NL = MIN( N, i+KL+1 ) + 1-j
+ CALL CLAROT( .TRUE., i-KU.GE.1, i+KL.LT.N, NL, C,S,
+ A(KU+j+1-i,i),LDA-1, XTOP, XBOTTM )
+
+ [note that KU+j+1-i is just MAX(1,KU+2-i)]
+
+ SB: (upper triangle)
+
+ . . . . . .
+ A(K+j+1-i,i),LDA-1, XTOP, XBOTTM )
+
+ SB: (lower triangle)
+
+ . . . . . .
+ A(1,i),LDA-1, XTOP, XBOTTM )
+
+ Arguments
+ =========
+
+ LROWS - LOGICAL
+ If .TRUE., then CLAROT will rotate two rows. If .FALSE.,
+ then it will rotate two columns.
+ Not modified.
+
+ LLEFT - LOGICAL
+ If .TRUE., then XLEFT will be used instead of the
+ corresponding element of A for the first element in the
+ second row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.)
+ If .FALSE., then the corresponding element of A will be
+ used.
+ Not modified.
+
+ LRIGHT - LOGICAL
+ If .TRUE., then XRIGHT will be used instead of the
+ corresponding element of A for the last element in the
+ first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
+
+ .FALSE., then the corresponding element of A will be used.
+ Not modified.
+
+ NL - INTEGER
+ The length of the rows (if LROWS=.TRUE.) or columns (if
+ LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
+ used, the columns/rows they are in should be included in
+ NL, e.g., if LLEFT = LRIGHT = .TRUE., then NL must be at
+ least 2. The number of rows/columns to be rotated
+ exclusive of those involving XLEFT and/or XRIGHT may
+ not be negative, i.e., NL minus how many of LLEFT and
+ LRIGHT are .TRUE. must be at least zero; if not, INPUT_ERROR
+ will be called.
+ Not modified.
+
+ C, S - COMPLEX
+ Specify the Givens rotation to be applied. If LROWS is
+ true, then the matrix ( c s )
+ ( _ _ )
+ (-s c ) is applied from the left;
+ if false, then the transpose (not conjugated) thereof is
+ applied from the right. Note that in contrast to the
+ output of CROTG or to most versions of CROT, both C and S
+ are complex. For a Givens rotation, |C|**2 + |S|**2 should
+
+ be 1, but this is not checked.
+ Not modified.
+
+ A - COMPLEX array.
+ The array containing the rows/columns to be rotated. The
+ first element of A should be the upper left element to
+ be rotated.
+ Read and modified.
+
+ LDA - INTEGER
+ The "effective" leading dimension of A. If A contains
+ a matrix stored in GE, HE, or SY format, then this is just
+ the leading dimension of A as dimensioned in the calling
+ routine. If A contains a matrix stored in band (GB, HB, or
+
+ SB) format, then this should be *one less* than the leading
+
+ dimension used in the calling routine. Thus, if A were
+ dimensioned A(LDA,*) in CLAROT, then A(1,j) would be the
+ j-th element in the first of the two rows to be rotated,
+ and A(2,j) would be the j-th in the second, regardless of
+ how the array may be stored in the calling routine. [A
+ cannot, however, actually be dimensioned thus, since for
+ band format, the row number may exceed LDA, which is not
+ legal FORTRAN.]
+ If LROWS=.TRUE., then LDA must be at least 1, otherwise
+ it must be at least NL minus the number of .TRUE. values
+ in XLEFT and XRIGHT.
+ Not modified.
+
+ XLEFT - COMPLEX
+ If LLEFT is .TRUE., then XLEFT will be used and modified
+ instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
+ (if LROWS=.FALSE.).
+ Read and modified.
+
+ XRIGHT - COMPLEX
+ If LRIGHT is .TRUE., then XRIGHT will be used and modified
+ instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
+ (if LROWS=.FALSE.).
+ Read and modified.
+
+ =====================================================================
+
+
+
+ Set up indices, arrays for ends
+
+ Parameter adjustments */
+ --a;
+
+ /* Function Body */
+ if (*lrows) {
+ iinc = *lda;
+ inext = 1;
+ } else {
+ iinc = 1;
+ inext = *lda;
+ }
+
+ if (*lleft) {
+ nt = 1;
+ ix = iinc + 1;
+ iy = *lda + 2;
+ xt[0].r = a[1].r, xt[0].i = a[1].i;
+ yt[0].r = xleft->r, yt[0].i = xleft->i;
+ } else {
+ nt = 0;
+ ix = 1;
+ iy = inext + 1;
+ }
+
+ if (*lright) {
+ iyt = inext + 1 + (*nl - 1) * iinc;
+ ++nt;
+ i__1 = nt - 1;
+ xt[i__1].r = xright->r, xt[i__1].i = xright->i;
+ i__1 = nt - 1;
+ i__2 = iyt;
+ yt[i__1].r = a[i__2].r, yt[i__1].i = a[i__2].i;
+ }
+
+/* Check for errors */
+
+ if (*nl < nt) {
+ input_error("CLAROT", &c__4);
+ return 0;
+ }
+ if (*lda <= 0 || ! (*lrows) && *lda < *nl - nt) {
+ input_error("CLAROT", &c__8);
+ return 0;
+ }
+
+/* Rotate
+
+ CROT( NL-NT, A(IX),IINC, A(IY),IINC, C, S ) with complex C, S */
+
+ i__1 = *nl - nt - 1;
+ for (j = 0; j <= i__1; ++j) {
+ i__2 = ix + j * iinc;
+ q__2.r = c->r * a[i__2].r - c->i * a[i__2].i, q__2.i = c->r * a[i__2]
+ .i + c->i * a[i__2].r;
+ i__3 = iy + j * iinc;
+ q__3.r = s->r * a[i__3].r - s->i * a[i__3].i, q__3.i = s->r * a[i__3]
+ .i + s->i * a[i__3].r;
+ q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
+ tempx.r = q__1.r, tempx.i = q__1.i;
+ i__2 = iy + j * iinc;
+ r_cnjg(&q__4, s);
+ q__3.r = -(doublereal)q__4.r, q__3.i = -(doublereal)q__4.i;
+ i__3 = ix + j * iinc;
+ q__2.r = q__3.r * a[i__3].r - q__3.i * a[i__3].i, q__2.i = q__3.r * a[
+ i__3].i + q__3.i * a[i__3].r;
+ r_cnjg(&q__6, c);
+ i__4 = iy + j * iinc;
+ q__5.r = q__6.r * a[i__4].r - q__6.i * a[i__4].i, q__5.i = q__6.r * a[
+ i__4].i + q__6.i * a[i__4].r;
+ q__1.r = q__2.r + q__5.r, q__1.i = q__2.i + q__5.i;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+ i__2 = ix + j * iinc;
+ a[i__2].r = tempx.r, a[i__2].i = tempx.i;
+/* L10: */
+ }
+
+/* CROT( NT, XT,1, YT,1, C, S ) with complex C, S */
+
+ i__1 = nt;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = j - 1;
+ q__2.r = c->r * xt[i__2].r - c->i * xt[i__2].i, q__2.i = c->r * xt[
+ i__2].i + c->i * xt[i__2].r;
+ i__3 = j - 1;
+ q__3.r = s->r * yt[i__3].r - s->i * yt[i__3].i, q__3.i = s->r * yt[
+ i__3].i + s->i * yt[i__3].r;
+ q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
+ tempx.r = q__1.r, tempx.i = q__1.i;
+ i__2 = j - 1;
+ r_cnjg(&q__4, s);
+ q__3.r = -(doublereal)q__4.r, q__3.i = -(doublereal)q__4.i;
+ i__3 = j - 1;
+ q__2.r = q__3.r * xt[i__3].r - q__3.i * xt[i__3].i, q__2.i = q__3.r *
+ xt[i__3].i + q__3.i * xt[i__3].r;
+ r_cnjg(&q__6, c);
+ i__4 = j - 1;
+ q__5.r = q__6.r * yt[i__4].r - q__6.i * yt[i__4].i, q__5.i = q__6.r *
+ yt[i__4].i + q__6.i * yt[i__4].r;
+ q__1.r = q__2.r + q__5.r, q__1.i = q__2.i + q__5.i;
+ yt[i__2].r = q__1.r, yt[i__2].i = q__1.i;
+ i__2 = j - 1;
+ xt[i__2].r = tempx.r, xt[i__2].i = tempx.i;
+/* L20: */
+ }
+
+/* Stuff values back into XLEFT, XRIGHT, etc. */
+
+ if (*lleft) {
+ a[1].r = xt[0].r, a[1].i = xt[0].i;
+ xleft->r = yt[0].r, xleft->i = yt[0].i;
+ }
+
+ if (*lright) {
+ i__1 = nt - 1;
+ xright->r = xt[i__1].r, xright->i = xt[i__1].i;
+ i__1 = iyt;
+ i__2 = nt - 1;
+ a[i__1].r = yt[i__2].r, a[i__1].i = yt[i__2].i;
+ }
+
+ return 0;
+
+/* End of CLAROT */
+
+} /* clarot_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clartg.c b/SuperLU_5.2.0/TESTING/MATGEN/clartg.c
new file mode 100644
index 0000000..1e441cc
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clartg.c
@@ -0,0 +1,147 @@
+#include "f2c.h"
+
+/* Subroutine */ int clartg_slu(complex *f, complex *g, real *cs, complex *sn,
+ complex *r)
+{
+/* -- 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
+
+
+ Purpose
+ =======
+
+ CLARTG generates a plane rotation so that
+
+ [ CS SN ] [ F ] [ R ]
+ [ __ ] . [ ] = [ ] where CS**2 + |SN|**2 = 1.
+ [ -SN CS ] [ G ] [ 0 ]
+
+ This is a faster version of the BLAS1 routine CROTG, except for
+ the following differences:
+ F and G are unchanged on return.
+ If G=0, then CS=1 and SN=0.
+ If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any
+ floating point operations.
+
+ Arguments
+ =========
+
+ F (input) COMPLEX
+ The first component of vector to be rotated.
+
+ G (input) COMPLEX
+ The second component of vector to be rotated.
+
+ CS (output) REAL
+ The cosine of the rotation.
+
+ SN (output) COMPLEX
+ The sine of the rotation.
+
+ R (output) COMPLEX
+ The nonzero component of the rotated vector.
+
+ =====================================================================
+
+
+
+ [ 25 or 38 ops for main paths ] */
+ /* System generated locals */
+ real r__1, r__2;
+ doublereal d__1;
+ complex q__1, q__2, q__3;
+ /* Builtin functions */
+ void r_cnjg(complex *, complex *);
+ double c_abs(complex *), r_imag(complex *), sqrt(doublereal);
+ /* Local variables */
+ static real d, f1, f2, g1, g2, fa, ga, di;
+ static complex fs, gs, ss;
+
+
+ if (g->r == 0.f && g->i == 0.f) {
+ *cs = 1.f;
+ sn->r = 0.f, sn->i = 0.f;
+ r->r = f->r, r->i = f->i;
+ } else if (f->r == 0.f && f->i == 0.f) {
+ *cs = 0.f;
+
+ r_cnjg(&q__2, g);
+ d__1 = c_abs(g);
+ q__1.r = q__2.r / d__1, q__1.i = q__2.i / d__1;
+ sn->r = q__1.r, sn->i = q__1.i;
+ d__1 = c_abs(g);
+ r->r = d__1, r->i = 0.f;
+
+/* SN = ONE
+ R = G */
+
+ } else {
+ f1 = (r__1 = f->r, dabs(r__1)) + (r__2 = r_imag(f), dabs(r__2));
+ g1 = (r__1 = g->r, dabs(r__1)) + (r__2 = r_imag(g), dabs(r__2));
+ if (f1 >= g1) {
+ q__1.r = g->r / f1, q__1.i = g->i / f1;
+ gs.r = q__1.r, gs.i = q__1.i;
+/* Computing 2nd power */
+ r__1 = gs.r;
+/* Computing 2nd power */
+ r__2 = r_imag(&gs);
+ g2 = r__1 * r__1 + r__2 * r__2;
+ q__1.r = f->r / f1, q__1.i = f->i / f1;
+ fs.r = q__1.r, fs.i = q__1.i;
+/* Computing 2nd power */
+ r__1 = fs.r;
+/* Computing 2nd power */
+ r__2 = r_imag(&fs);
+ f2 = r__1 * r__1 + r__2 * r__2;
+ d = sqrt(g2 / f2 + 1.f);
+ *cs = 1.f / d;
+ r_cnjg(&q__3, &gs);
+ q__2.r = q__3.r * fs.r - q__3.i * fs.i, q__2.i = q__3.r * fs.i +
+ q__3.i * fs.r;
+ d__1 = *cs / f2;
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ sn->r = q__1.r, sn->i = q__1.i;
+ q__1.r = d * f->r, q__1.i = d * f->i;
+ r->r = q__1.r, r->i = q__1.i;
+ } else {
+ q__1.r = f->r / g1, q__1.i = f->i / g1;
+ fs.r = q__1.r, fs.i = q__1.i;
+/* Computing 2nd power */
+ r__1 = fs.r;
+/* Computing 2nd power */
+ r__2 = r_imag(&fs);
+ f2 = r__1 * r__1 + r__2 * r__2;
+ fa = sqrt(f2);
+ q__1.r = g->r / g1, q__1.i = g->i / g1;
+ gs.r = q__1.r, gs.i = q__1.i;
+/* Computing 2nd power */
+ r__1 = gs.r;
+/* Computing 2nd power */
+ r__2 = r_imag(&gs);
+ g2 = r__1 * r__1 + r__2 * r__2;
+ ga = sqrt(g2);
+ d = sqrt(f2 / g2 + 1.f);
+ di = 1.f / d;
+ *cs = fa / ga * di;
+ r_cnjg(&q__3, &gs);
+ q__2.r = q__3.r * fs.r - q__3.i * fs.i, q__2.i = q__3.r * fs.i +
+ q__3.i * fs.r;
+ d__1 = fa * ga;
+ q__1.r = q__2.r / d__1, q__1.i = q__2.i / d__1;
+ ss.r = q__1.r, ss.i = q__1.i;
+ q__1.r = di * ss.r, q__1.i = di * ss.i;
+ sn->r = q__1.r, sn->i = q__1.i;
+ q__2.r = g->r * ss.r - g->i * ss.i, q__2.i = g->r * ss.i + g->i *
+ ss.r;
+ q__1.r = d * q__2.r, q__1.i = d * q__2.i;
+ r->r = q__1.r, r->i = q__1.i;
+ }
+ }
+ return 0;
+
+/* End of CLARTG */
+
+} /* clartg_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/claset.c b/SuperLU_5.2.0/TESTING/MATGEN/claset.c
new file mode 100644
index 0000000..168057a
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/claset.c
@@ -0,0 +1,143 @@
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int claset_slu(char *uplo, integer *m, integer *n, complex *
+ alpha, complex *beta, complex *a, integer *lda)
+{
+/* -- 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
+ =======
+
+ CLASET initializes a 2-D array A to BETA on the diagonal and
+ ALPHA on the offdiagonals.
+
+ Arguments
+ =========
+
+ UPLO (input) CHARACTER*1
+ Specifies the part of the matrix A to be set.
+ = 'U': Upper triangular part is set. The lower triangle
+
+ is unchanged.
+ = 'L': Lower triangular part is set. The upper triangle
+
+ is unchanged.
+ Otherwise: All of the matrix A is set.
+
+ M (input) INTEGER
+ On entry, M specifies the number of rows of A.
+
+ N (input) INTEGER
+ On entry, N specifies the number of columns of A.
+
+ ALPHA (input) COMPLEX
+ All the offdiagonal array elements are set to ALPHA.
+
+ BETA (input) COMPLEX
+ All the diagonal array elements are set to BETA.
+
+ A (input/output) COMPLEX array, dimension (LDA,N)
+ On entry, the m by n matrix A.
+ On exit, A(i,j) = ALPHA, 1 <= i <= m, 1 <= j <= n, i.ne.j;
+ A(i,i) = BETA , 1 <= i <= min(m,n)
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= max(1,M).
+
+ =====================================================================
+
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ /* Local variables */
+ static integer i, j;
+
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Set the diagonal to BETA and the strictly upper triangular
+
+ part of the array to ALPHA. */
+
+ i__1 = *n;
+ for (j = 2; j <= *n; ++j) {
+/* Computing MIN */
+ i__3 = j - 1;
+ i__2 = min(i__3,*m);
+ for (i = 1; i <= min(j-1,*m); ++i) {
+ i__3 = i + j * a_dim1;
+ A(i,j).r = alpha->r, A(i,j).i = alpha->i;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = min(*n,*m);
+ for (i = 1; i <= min(*n,*m); ++i) {
+ i__2 = i + i * a_dim1;
+ A(i,i).r = beta->r, A(i,i).i = beta->i;
+/* L30: */
+ }
+
+ } else if (strncmp(uplo, "L", 1)==0) {
+
+/* Set the diagonal to BETA and the strictly lower triangular
+
+ part of the array to ALPHA. */
+
+ i__1 = min(*m,*n);
+ for (j = 1; j <= min(*m,*n); ++j) {
+ i__2 = *m;
+ for (i = j + 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ A(i,j).r = alpha->r, A(i,j).i = alpha->i;
+/* L40: */
+ }
+/* L50: */
+ }
+ i__1 = min(*n,*m);
+ for (i = 1; i <= min(*n,*m); ++i) {
+ i__2 = i + i * a_dim1;
+ A(i,i).r = beta->r, A(i,i).i = beta->i;
+/* L60: */
+ }
+
+ } else {
+
+/* Set the array to BETA on the diagonal and ALPHA on the
+ offdiagonal. */
+
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ A(i,j).r = alpha->r, A(i,j).i = alpha->i;
+/* L70: */
+ }
+/* L80: */
+ }
+ i__1 = min(*m,*n);
+ for (i = 1; i <= min(*m,*n); ++i) {
+ i__2 = i + i * a_dim1;
+ A(i,i).r = beta->r, A(i,i).i = beta->i;
+/* L90: */
+ }
+ }
+
+ return 0;
+
+/* End of CLASET */
+
+} /* claset_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clatb4.c b/SuperLU_5.2.0/TESTING/MATGEN/clatb4.c
new file mode 100644
index 0000000..278690e
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clatb4.c
@@ -0,0 +1,466 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__2 = 2;
+
+/* Subroutine */ int clatb4_slu(char *path, integer *imat, integer *m, integer *
+ n, char *type, integer *kl, integer *ku, real *anorm, integer *mode,
+ real *cndnum, char *dist)
+{
+ /* Initialized data */
+
+ static logical first = TRUE_;
+
+ /* System generated locals */
+ integer i__1;
+
+ /* Builtin functions */
+ double sqrt(doublereal);
+
+ /* Local variables */
+ static real badc1, badc2, large, small;
+ static char c2[2];
+ extern /* Subroutine */ int slabad_slu(real *, real *);
+ extern float smach(char *);
+ static integer mat;
+ static real eps;
+
+
+/* -- LAPACK test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ CLATB4 sets parameters for the matrix generator based on the type of
+
+ matrix to be generated.
+
+ Arguments
+ =========
+
+ PATH (input) CHARACTER*3
+ The LAPACK path name.
+
+ IMAT (input) INTEGER
+ An integer key describing which matrix to generate for this
+ path.
+
+ M (input) INTEGER
+ The number of rows in the matrix to be generated.
+
+ N (input) INTEGER
+ The number of columns in the matrix to be generated.
+
+ TYPE (output) CHARACTER*1
+ The type of the matrix to be generated:
+ = 'S': symmetric matrix
+ = 'P': symmetric positive (semi)definite matrix
+ = 'N': nonsymmetric matrix
+
+ KL (output) INTEGER
+ The lower band width of the matrix to be generated.
+
+ KU (output) INTEGER
+ The upper band width of the matrix to be generated.
+
+ ANORM (output) REAL
+ The desired norm of the matrix to be generated. The diagonal
+
+ matrix of singular values or eigenvalues is scaled by this
+ value.
+
+ MODE (output) INTEGER
+ A key indicating how to choose the vector of eigenvalues.
+
+ CNDNUM (output) REAL
+ The desired condition number.
+
+ DIST (output) CHARACTER*1
+ The type of distribution to be used by the random number
+ generator.
+
+ =====================================================================
+
+
+
+ Set some constants for use in the subroutine. */
+
+ if (first) {
+ first = FALSE_;
+ eps = smach("Precision");
+ badc2 = .1f / eps;
+ badc1 = sqrt(badc2);
+ small = smach("Safe minimum");
+ large = 1.f / small;
+
+/* If it looks like we're on a Cray, take the square root of
+ SMALL and LARGE to avoid overflow and underflow problems. */
+
+ slabad_slu(&small, &large);
+ small = small / eps * .25f;
+ large = 1.f / small;
+ }
+
+ /* s_copy(c2, path + 1, 2L, 2L);*/
+ strncpy(c2, path + 1, 2);
+
+/* Set some parameters we don't plan to change. */
+
+ *(unsigned char *)dist = 'S';
+ *mode = 3;
+
+/* xQR, xLQ, xQL, xRQ: Set parameters to generate a general
+ M x N matrix. */
+
+ if (strncmp(c2, "QR", 2)==0 || strncmp(c2, "LQ", 2)==0
+ || strncmp(c2, "QL", 2)==0 || strncmp(c2, "RQ", 2)==0) {
+
+/* Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat == 2) {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ } else if (*imat == 3) {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "GE", 2)==0) {
+
+/* xGE: Set parameters to generate a general M x N matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat == 2) {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ } else if (*imat == 3) {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (*imat == 8) {
+ *cndnum = badc1;
+ } else if (*imat == 9) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 10) {
+ *anorm = small;
+ } else if (*imat == 11) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "GB", 2)==0) {
+
+/* xGB: Set parameters to generate a general banded matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the condition number and norm. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2 * .1f;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "GT", 2)==0) {
+
+/* xGT: Set parameters to generate a general tridiagonal matri
+x.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+ *kl = 1;
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 3) {
+ *cndnum = badc1;
+ } else if (*imat == 4) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 5 || *imat == 11) {
+ *anorm = small;
+ } else if (*imat == 6 || *imat == 12) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "PO", 2)==0 || strncmp(c2, "PP", 2)==0 ||
+ strncmp(c2, "HE", 2)==0 || strncmp(c2, "HP", 2)==0 ||
+ strncmp(c2, "SY", 2)==0 || strncmp(c2, "SP", 2)==0) {
+
+/* xPO, xPP, xHE, xHP, xSY, xSP: Set parameters to generate a
+
+ symmetric or Hermitian matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = *(unsigned char *)c2;
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *n - 1;
+ *kl = max(i__1,0);
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 6) {
+ *cndnum = badc1;
+ } else if (*imat == 7) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 8) {
+ *anorm = small;
+ } else if (*imat == 9) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "PB", 2)==0) {
+
+/* xPB: Set parameters to generate a symmetric band matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'P';
+
+/* Set the norm and condition number. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "PT", 2)==0) {
+
+/* xPT: Set parameters to generate a symmetric positive defini
+te
+ tridiagonal matrix. */
+
+ *(unsigned char *)type = 'P';
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+ *kl = 1;
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 3) {
+ *cndnum = badc1;
+ } else if (*imat == 4) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 5 || *imat == 11) {
+ *anorm = small;
+ } else if (*imat == 6 || *imat == 12) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "TR", 2)==0 || strncmp(c2, "TP", 2)==0) {
+
+/* xTR, xTP: Set parameters to generate a triangular matrix
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ mat = abs(*imat);
+ if (mat == 1 || mat == 7) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat < 0) {
+/* Computing MAX */
+ i__1 = *n - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (mat == 3 || mat == 9) {
+ *cndnum = badc1;
+ } else if (mat == 4 || mat == 10) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (mat == 5) {
+ *anorm = small;
+ } else if (mat == 6) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "TB", 2)==0) {
+
+/* xTB: Set parameters to generate a triangular band matrix.
+
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the norm and condition number. */
+
+ if (*imat == 2 || *imat == 8) {
+ *cndnum = badc1;
+ } else if (*imat == 3 || *imat == 9) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 4) {
+ *anorm = small;
+ } else if (*imat == 5) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+ }
+ if (*n <= 1) {
+ *cndnum = 1.f;
+ }
+
+ return 0;
+
+/* End of CLATB4 */
+
+} /* clatb4_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clatm2.c b/SuperLU_5.2.0/TESTING/MATGEN/clatm2.c
new file mode 100644
index 0000000..baa5524
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clatm2.c
@@ -0,0 +1,283 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Complex */ VOID clatm2_slu(complex * ret_val, integer *m, integer *n, integer
+ *i, integer *j, integer *kl, integer *ku, integer *idist, integer *
+ iseed, complex *d, integer *igrade, complex *dl, complex *dr, integer
+ *ipvtng, integer *iwork, real *sparse)
+{
+ /* System generated locals */
+ integer i__1, i__2;
+ complex q__1, q__2, q__3;
+
+ /* Builtin functions */
+ void c_div(complex *, complex *, complex *), r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static integer isub, jsub;
+ static complex ctemp;
+ extern /* Complex */ VOID clarnd_slu(complex *, integer *, integer *);
+ extern doublereal dlaran_sluslu(integer *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+
+
+
+ Purpose
+ =======
+
+ CLATM2 returns the (I,J) entry of a random matrix of dimension
+ (M, N) described by the other paramters. It is called by the
+ CLATMR routine in order to build random test matrices. No error
+ checking on parameters is done, because this routine is called in
+
+ a tight loop by CLATMR which has already checked the parameters.
+
+ Use of CLATM2 differs from CLATM3 in the order in which the random
+
+ number generator is called to fill in random matrix entries.
+ With CLATM2, the generator is called to fill in the pivoted matrix
+
+ columnwise. With CLATM3, the generator is called to fill in the
+ matrix columnwise, after which it is pivoted. Thus, CLATM3 can
+ be used to construct random matrices which differ only in their
+ order of rows and/or columns. CLATM2 is used to construct band
+ matrices while avoiding calling the random number generator for
+ entries outside the band (and therefore generating random numbers
+
+
+ The matrix whose (I,J) entry is returned is constructed as
+ follows (this routine only computes one entry):
+
+ If I is outside (1..M) or J is outside (1..N), return zero
+ (this is convenient for generating matrices in band format).
+
+
+ Generate a matrix A with random entries of distribution IDIST.
+
+ Set the diagonal to D.
+
+ Grade the matrix, if desired, from the left (by DL) and/or
+ from the right (by DR or DL) as specified by IGRADE.
+
+ Permute, if desired, the rows and/or columns as specified by
+ IPVTNG and IWORK.
+
+ Band the matrix to have lower bandwidth KL and upper
+ bandwidth KU.
+
+ Set random entries to zero as specified by SPARSE.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ Number of rows of matrix. Not modified.
+
+ N - INTEGER
+ Number of columns of matrix. Not modified.
+
+ I - INTEGER
+ Row of entry to be returned. Not modified.
+
+ J - INTEGER
+ Column of entry to be returned. Not modified.
+
+ KL - INTEGER
+ Lower bandwidth. Not modified.
+
+ KU - INTEGER
+ Upper bandwidth. Not modified.
+
+ IDIST - INTEGER
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => real and imaginary parts each UNIFORM( 0, 1 )
+ 2 => real and imaginary parts each UNIFORM( -1, 1 )
+ 3 => real and imaginary parts each NORMAL( 0, 1 )
+ 4 => complex number uniform in DISK( 0 , 1 )
+ Not modified.
+
+ ISEED - INTEGER array of dimension ( 4 )
+ Seed for random number generator.
+ Changed on exit.
+
+ D - COMPLEX array of dimension ( MIN( I , J ) )
+ Diagonal entries of matrix. Not modified.
+
+ IGRADE - INTEGER
+ Specifies grading of matrix as follows:
+ 0 => no grading
+ 1 => matrix premultiplied by diag( DL )
+ 2 => matrix postmultiplied by diag( DR )
+ 3 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DR )
+ 4 => matrix premultiplied by diag( DL ) and
+ postmultiplied by inv( diag( DL ) )
+ 5 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( CONJG(DL) )
+ 6 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DL )
+ Not modified.
+
+ DL - COMPLEX array ( I or J, as appropriate )
+ Left scale factors for grading matrix. Not modified.
+
+ DR - COMPLEX array ( I or J, as appropriate )
+ Right scale factors for grading matrix. Not modified.
+
+ IPVTNG - INTEGER
+ On entry specifies pivoting permutations as follows:
+ 0 => none.
+ 1 => row pivoting.
+ 2 => column pivoting.
+ 3 => full pivoting, i.e., on both sides.
+ Not modified.
+
+ IWORK - INTEGER array ( I or J, as appropriate )
+ This array specifies the permutation used. The
+ row (or column) in position K was originally in
+ position IWORK( K ).
+ This differs from IWORK for CLATM3. Not modified.
+
+ SPARSE - REAL between 0. and 1.
+ On entry specifies the sparsity of the matrix
+ if sparse matix is to be generated.
+ SPARSE should lie between 0 and 1.
+ A uniform ( 0, 1 ) random number x is generated and
+ compared to SPARSE; if x is larger the matrix entry
+ is unchanged and if x is smaller the entry is set
+ to zero. Thus on the average a fraction SPARSE of the
+ entries will be set to zero.
+ Not modified.
+
+ =====================================================================
+
+
+
+
+
+
+
+
+
+
+ -----------------------------------------------------------------------
+
+
+
+
+ Check for I and J in range
+
+ Parameter adjustments */
+ --iwork;
+ --dr;
+ --dl;
+ --d;
+ --iseed;
+
+ /* Function Body */
+ if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
+ ret_val->r = 0.f, ret_val->i = 0.f;
+ return ;
+ }
+
+/* Check for banding */
+
+ if (*j > *i + *ku || *j < *i - *kl) {
+ ret_val->r = 0.f, ret_val->i = 0.f;
+ return ;
+ }
+
+/* Check for sparsity */
+
+ if (*sparse > 0.f) {
+ if (dlaran_sluslu(&iseed[1]) < *sparse) {
+ ret_val->r = 0.f, ret_val->i = 0.f;
+ return ;
+ }
+ }
+
+/* Compute subscripts depending on IPVTNG */
+
+ if (*ipvtng == 0) {
+ isub = *i;
+ jsub = *j;
+ } else if (*ipvtng == 1) {
+ isub = iwork[*i];
+ jsub = *j;
+ } else if (*ipvtng == 2) {
+ isub = *i;
+ jsub = iwork[*j];
+ } else if (*ipvtng == 3) {
+ isub = iwork[*i];
+ jsub = iwork[*j];
+ }
+
+/* Compute entry and grade it according to IGRADE */
+
+ if (isub == jsub) {
+ i__1 = isub;
+ ctemp.r = d[i__1].r, ctemp.i = d[i__1].i;
+ } else {
+ clarnd_slu(&q__1, idist, &iseed[1]);
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ }
+ if (*igrade == 1) {
+ i__1 = isub;
+ q__1.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__1.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 2) {
+ i__1 = jsub;
+ q__1.r = ctemp.r * dr[i__1].r - ctemp.i * dr[i__1].i, q__1.i =
+ ctemp.r * dr[i__1].i + ctemp.i * dr[i__1].r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 3) {
+ i__1 = isub;
+ q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ i__2 = jsub;
+ q__1.r = q__2.r * dr[i__2].r - q__2.i * dr[i__2].i, q__1.i = q__2.r *
+ dr[i__2].i + q__2.i * dr[i__2].r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 4 && isub != jsub) {
+ i__1 = isub;
+ q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ c_div(&q__1, &q__2, &dl[jsub]);
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 5) {
+ i__1 = isub;
+ q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ r_cnjg(&q__3, &dl[jsub]);
+ q__1.r = q__2.r * q__3.r - q__2.i * q__3.i, q__1.i = q__2.r * q__3.i
+ + q__2.i * q__3.r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 6) {
+ i__1 = isub;
+ q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ i__2 = jsub;
+ q__1.r = q__2.r * dl[i__2].r - q__2.i * dl[i__2].i, q__1.i = q__2.r *
+ dl[i__2].i + q__2.i * dl[i__2].r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ }
+ ret_val->r = ctemp.r, ret_val->i = ctemp.i;
+ return ;
+
+/* End of CLATM2 */
+
+} /* clatm2_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clatm3.c b/SuperLU_5.2.0/TESTING/MATGEN/clatm3.c
new file mode 100644
index 0000000..2275f46
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clatm3.c
@@ -0,0 +1,295 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Complex */ VOID clatm3_slu(complex * ret_val, integer *m, integer *n, integer
+ *i, integer *j, integer *isub, integer *jsub, integer *kl, integer *
+ ku, integer *idist, integer *iseed, complex *d, integer *igrade,
+ complex *dl, complex *dr, integer *ipvtng, integer *iwork, real *
+ sparse)
+{
+ /* System generated locals */
+ integer i__1, i__2;
+ complex q__1, q__2, q__3;
+
+ /* Builtin functions */
+ void c_div(complex *, complex *, complex *), r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static complex ctemp;
+ extern /* Complex */ VOID clarnd_slu(complex *, integer *, integer *);
+ extern doublereal dlaran_sluslu(integer *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+
+
+
+ Purpose
+ =======
+
+ CLATM3 returns the (ISUB,JSUB) entry of a random matrix of
+ dimension (M, N) described by the other paramters. (ISUB,JSUB)
+ is the final position of the (I,J) entry after pivoting
+ according to IPVTNG and IWORK. CLATM3 is called by the
+ CLATMR routine in order to build random test matrices. No error
+ checking on parameters is done, because this routine is called in
+
+ a tight loop by CLATMR which has already checked the parameters.
+
+ Use of CLATM3 differs from CLATM2 in the order in which the random
+
+ number generator is called to fill in random matrix entries.
+ With CLATM2, the generator is called to fill in the pivoted matrix
+
+ columnwise. With CLATM3, the generator is called to fill in the
+ matrix columnwise, after which it is pivoted. Thus, CLATM3 can
+ be used to construct random matrices which differ only in their
+ order of rows and/or columns. CLATM2 is used to construct band
+ matrices while avoiding calling the random number generator for
+ entries outside the band (and therefore generating random numbers
+
+ in different orders for different pivot orders).
+
+ The matrix whose (ISUB,JSUB) entry is returned is constructed as
+ follows (this routine only computes one entry):
+
+ If ISUB is outside (1..M) or JSUB is outside (1..N), return zero
+
+ (this is convenient for generating matrices in band format).
+
+
+ Generate a matrix A with random entries of distribution IDIST.
+
+ Set the diagonal to D.
+
+ Grade the matrix, if desired, from the left (by DL) and/or
+ from the right (by DR or DL) as specified by IGRADE.
+
+ Permute, if desired, the rows and/or columns as specified by
+ IPVTNG and IWORK.
+
+ Band the matrix to have lower bandwidth KL and upper
+ bandwidth KU.
+
+ Set random entries to zero as specified by SPARSE.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ Number of rows of matrix. Not modified.
+
+ N - INTEGER
+ Number of columns of matrix. Not modified.
+
+ I - INTEGER
+ Row of unpivoted entry to be returned. Not modified.
+
+ J - INTEGER
+ Column of unpivoted entry to be returned. Not modified.
+
+ ISUB - INTEGER
+ Row of pivoted entry to be returned. Changed on exit.
+
+ JSUB - INTEGER
+ Column of pivoted entry to be returned. Changed on exit.
+
+ KL - INTEGER
+ Lower bandwidth. Not modified.
+
+ KU - INTEGER
+ Upper bandwidth. Not modified.
+
+ IDIST - INTEGER
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => real and imaginary parts each UNIFORM( 0, 1 )
+ 2 => real and imaginary parts each UNIFORM( -1, 1 )
+ 3 => real and imaginary parts each NORMAL( 0, 1 )
+ 4 => complex number uniform in DISK( 0 , 1 )
+ Not modified.
+
+ ISEED - INTEGER array of dimension ( 4 )
+ Seed for random number generator.
+ Changed on exit.
+
+ D - COMPLEX array of dimension ( MIN( I , J ) )
+ Diagonal entries of matrix. Not modified.
+
+ IGRADE - INTEGER
+ Specifies grading of matrix as follows:
+ 0 => no grading
+ 1 => matrix premultiplied by diag( DL )
+ 2 => matrix postmultiplied by diag( DR )
+ 3 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DR )
+ 4 => matrix premultiplied by diag( DL ) and
+ postmultiplied by inv( diag( DL ) )
+ 5 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( CONJG(DL) )
+ 6 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DL )
+ Not modified.
+
+ DL - COMPLEX array ( I or J, as appropriate )
+ Left scale factors for grading matrix. Not modified.
+
+ DR - COMPLEX array ( I or J, as appropriate )
+ Right scale factors for grading matrix. Not modified.
+
+ IPVTNG - INTEGER
+ On entry specifies pivoting permutations as follows:
+ 0 => none.
+ 1 => row pivoting.
+ 2 => column pivoting.
+ 3 => full pivoting, i.e., on both sides.
+ Not modified.
+
+ IWORK - INTEGER array ( I or J, as appropriate )
+ This array specifies the permutation used. The
+ row (or column) originally in position K is in
+ position IWORK( K ) after pivoting.
+ This differs from IWORK for CLATM2. Not modified.
+
+ SPARSE - REAL between 0. and 1.
+ On entry specifies the sparsity of the matrix
+ if sparse matix is to be generated.
+ SPARSE should lie between 0 and 1.
+ A uniform ( 0, 1 ) random number x is generated and
+ compared to SPARSE; if x is larger the matrix entry
+ is unchanged and if x is smaller the entry is set
+ to zero. Thus on the average a fraction SPARSE of the
+ entries will be set to zero.
+ Not modified.
+
+ =====================================================================
+
+
+
+
+
+
+
+
+
+
+ -----------------------------------------------------------------------
+
+
+
+
+ Check for I and J in range
+
+ Parameter adjustments */
+ --iwork;
+ --dr;
+ --dl;
+ --d;
+ --iseed;
+
+ /* Function Body */
+ if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
+ *isub = *i;
+ *jsub = *j;
+ ret_val->r = 0.f, ret_val->i = 0.f;
+ return ;
+ }
+
+/* Compute subscripts depending on IPVTNG */
+
+ if (*ipvtng == 0) {
+ *isub = *i;
+ *jsub = *j;
+ } else if (*ipvtng == 1) {
+ *isub = iwork[*i];
+ *jsub = *j;
+ } else if (*ipvtng == 2) {
+ *isub = *i;
+ *jsub = iwork[*j];
+ } else if (*ipvtng == 3) {
+ *isub = iwork[*i];
+ *jsub = iwork[*j];
+ }
+
+/* Check for banding */
+
+ if (*jsub > *isub + *ku || *jsub < *isub - *kl) {
+ ret_val->r = 0.f, ret_val->i = 0.f;
+ return ;
+ }
+
+/* Check for sparsity */
+
+ if (*sparse > 0.f) {
+ if (dlaran_sluslu(&iseed[1]) < *sparse) {
+ ret_val->r = 0.f, ret_val->i = 0.f;
+ return ;
+ }
+ }
+
+/* Compute entry and grade it according to IGRADE */
+
+ if (*i == *j) {
+ i__1 = *i;
+ ctemp.r = d[i__1].r, ctemp.i = d[i__1].i;
+ } else {
+ clarnd_slu(&q__1, idist, &iseed[1]);
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ }
+ if (*igrade == 1) {
+ i__1 = *i;
+ q__1.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__1.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 2) {
+ i__1 = *j;
+ q__1.r = ctemp.r * dr[i__1].r - ctemp.i * dr[i__1].i, q__1.i =
+ ctemp.r * dr[i__1].i + ctemp.i * dr[i__1].r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 3) {
+ i__1 = *i;
+ q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ i__2 = *j;
+ q__1.r = q__2.r * dr[i__2].r - q__2.i * dr[i__2].i, q__1.i = q__2.r *
+ dr[i__2].i + q__2.i * dr[i__2].r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 4 && *i != *j) {
+ i__1 = *i;
+ q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ c_div(&q__1, &q__2, &dl[*j]);
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 5) {
+ i__1 = *i;
+ q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ r_cnjg(&q__3, &dl[*j]);
+ q__1.r = q__2.r * q__3.r - q__2.i * q__3.i, q__1.i = q__2.r * q__3.i
+ + q__2.i * q__3.r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ } else if (*igrade == 6) {
+ i__1 = *i;
+ q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ i__2 = *j;
+ q__1.r = q__2.r * dl[i__2].r - q__2.i * dl[i__2].i, q__1.i = q__2.r *
+ dl[i__2].i + q__2.i * dl[i__2].r;
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ }
+ ret_val->r = ctemp.r, ret_val->i = ctemp.i;
+ return ;
+
+/* End of CLATM3 */
+
+} /* clatm3_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clatme.c b/SuperLU_5.2.0/TESTING/MATGEN/clatme.c
new file mode 100644
index 0000000..11ee0b9
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clatme.c
@@ -0,0 +1,623 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static complex c_b1 = {0.f,0.f};
+static complex c_b2 = {1.f,0.f};
+static integer c__1 = 1;
+static integer c__0 = 0;
+static integer c__5 = 5;
+
+/* Subroutine */ int clatme_slu(integer *n, char *dist, integer *iseed, complex *
+ d, integer *mode, real *cond, complex *dmax__, char *ei, char *rsign,
+ char *upper, char *sim, real *ds, integer *modes, real *conds,
+ integer *kl, integer *ku, real *anorm, complex *a, integer *lda,
+ complex *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+ real r__1, r__2;
+ complex q__1, q__2;
+
+ /* Builtin functions */
+ double c_abs(complex *);
+ void r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static logical bads;
+ static integer isim;
+ static real temp;
+ static integer i, j;
+ extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
+ complex *, integer *, complex *, integer *, complex *, integer *);
+ static complex alpha;
+ extern /* Subroutine */ int cscal_(integer *, complex *, complex *,
+ integer *);
+ extern /* Subroutine */ int cgemv_(char *, integer *, integer *, complex *
+ , complex *, integer *, complex *, integer *, complex *, complex *
+ , integer *);
+ static integer iinfo;
+ static real tempa[1];
+ static integer icols, idist;
+ extern /* Subroutine */ int ccopy_(integer *, complex *, integer *,
+ complex *, integer *);
+ static integer irows;
+ extern /* Subroutine */ int clatm1_(integer *, real *, integer *, integer
+ *, integer *, complex *, integer *, integer *), slatm1_slu(integer *,
+ real *, integer *, integer *, integer *, real *, integer *,
+ integer *);
+ static integer ic, jc;
+ extern doublereal clange_(char *, integer *, integer *, complex *,
+ integer *, real *);
+ static integer ir;
+ extern /* Subroutine */ int clarge_slu(integer *, complex *, integer *,
+ integer *, complex *, integer *), clarfg_(integer *, complex *,
+ complex *, integer *, complex *), clacgv_slu(integer *, complex *,
+ integer *);
+ extern /* Complex */ VOID clarnd_slu(complex *, integer *, integer *);
+ static real ralpha;
+ extern /* Subroutine */ int csscal_(integer *, real *, complex *, integer
+ *), claset_slu(char *, integer *, integer *, complex *, complex *,
+ complex *, integer *),
+ clarnv_slu(integer *, integer *, integer *, complex *);
+ extern int input_error(char *, int *);
+ static integer irsign, iupper;
+ static complex xnorms;
+ static integer jcr;
+ static complex tau;
+
+
+/* -- LAPACK test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ CLATME generates random non-symmetric square matrices with
+ specified eigenvalues for testing LAPACK programs.
+
+ CLATME operates by applying the following sequence of
+ operations:
+
+ 1. Set the diagonal to D, where D may be input or
+ computed according to MODE, COND, DMAX, and RSIGN
+ as described below.
+
+ 2. If UPPER='T', the upper triangle of A is set to random values
+ out of distribution DIST.
+
+ 3. If SIM='T', A is multiplied on the left by a random matrix
+ X, whose singular values are specified by DS, MODES, and
+ CONDS, and on the right by X inverse.
+
+ 4. If KL < N-1, the lower bandwidth is reduced to KL using
+ Householder transformations. If KU < N-1, the upper
+ bandwidth is reduced to KU.
+
+ 5. If ANORM is not negative, the matrix is scaled to have
+ maximum-element-norm ANORM.
+
+ (Note: since the matrix cannot be reduced beyond Hessenberg form,
+
+ no packing options are available.)
+
+ Arguments
+ =========
+
+ N - INTEGER
+ The number of columns (or rows) of A. Not modified.
+
+ DIST - CHARACTER*1
+ On entry, DIST specifies the type of distribution to be used
+
+ to generate the random eigen-/singular values, and on the
+ upper triangle (see UPPER).
+ 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
+ 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
+ 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
+ 'D' => uniform on the complex disc |z| < 1.
+ Not modified.
+
+ ISEED - INTEGER array, dimension ( 4 )
+ On entry ISEED specifies the seed of the random number
+ generator. They should lie between 0 and 4095 inclusive,
+ and ISEED(4) should be odd. The random number generator
+ uses a linear congruential sequence limited to small
+ integers, and so should produce machine independent
+ random numbers. The values of ISEED are changed on
+ exit, and can be used in the next call to CLATME
+ to continue the same random number sequence.
+ Changed on exit.
+
+ D - COMPLEX array, dimension ( N )
+ This array is used to specify the eigenvalues of A. If
+ MODE=0, then D is assumed to contain the eigenvalues
+ otherwise they will be computed according to MODE, COND,
+ DMAX, and RSIGN and placed in D.
+ Modified if MODE is nonzero.
+
+ MODE - INTEGER
+ On entry this describes how the eigenvalues are to
+ be specified:
+ MODE = 0 means use D as input
+ MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
+ MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
+ MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
+ MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
+ MODE = 5 sets D to random numbers in the range
+ ( 1/COND , 1 ) such that their logarithms
+ are uniformly distributed.
+ MODE = 6 set D to random numbers from same distribution
+ as the rest of the matrix.
+ MODE < 0 has the same meaning as ABS(MODE), except that
+ the order of the elements of D is reversed.
+ Thus if MODE is between 1 and 4, D has entries ranging
+ from 1 to 1/COND, if between -1 and -4, D has entries
+ ranging from 1/COND to 1,
+ Not modified.
+
+ COND - REAL
+ On entry, this is used as described under MODE above.
+ If used, it must be >= 1. Not modified.
+
+ DMAX - COMPLEX
+ If MODE is neither -6, 0 nor 6, the contents of D, as
+ computed according to MODE and COND, will be scaled by
+ DMAX / max(abs(D(i))). Note that DMAX need not be
+ positive or real: if DMAX is negative or complex (or zero),
+
+ D will be scaled by a negative or complex number (or zero).
+
+ If RSIGN='F' then the largest (absolute) eigenvalue will be
+
+ equal to DMAX.
+ Not modified.
+
+ EI - CHARACTER*1 (ignored)
+ Not modified.
+
+ RSIGN - CHARACTER*1
+ If MODE is not 0, 6, or -6, and RSIGN='T', then the
+ elements of D, as computed according to MODE and COND, will
+
+ be multiplied by a random complex number from the unit
+ circle |z| = 1. If RSIGN='F', they will not be. RSIGN may
+
+ only have the values 'T' or 'F'.
+ Not modified.
+
+ UPPER - CHARACTER*1
+ If UPPER='T', then the elements of A above the diagonal
+ will be set to random numbers out of DIST. If UPPER='F',
+ they will not. UPPER may only have the values 'T' or 'F'.
+ Not modified.
+
+ SIM - CHARACTER*1
+ If SIM='T', then A will be operated on by a "similarity
+ transform", i.e., multiplied on the left by a matrix X and
+ on the right by X inverse. X = U S V, where U and V are
+ random unitary matrices and S is a (diagonal) matrix of
+ singular values specified by DS, MODES, and CONDS. If
+ SIM='F', then A will not be transformed.
+ Not modified.
+
+ DS - REAL array, dimension ( N )
+ This array is used to specify the singular values of X,
+ in the same way that D specifies the eigenvalues of A.
+ If MODE=0, the DS contains the singular values, which
+ may not be zero.
+ Modified if MODE is nonzero.
+
+ MODES - INTEGER
+ CONDS - REAL
+ Similar to MODE and COND, but for specifying the diagonal
+ of S. MODES=-6 and +6 are not allowed (since they would
+ result in randomly ill-conditioned eigenvalues.)
+
+ KL - INTEGER
+ This specifies the lower bandwidth of the matrix. KL=1
+ specifies upper Hessenberg form. If KL is at least N-1,
+ then A will have full lower bandwidth.
+ Not modified.
+
+ KU - INTEGER
+ This specifies the upper bandwidth of the matrix. KU=1
+ specifies lower Hessenberg form. If KU is at least N-1,
+ then A will have full upper bandwidth; if KU and KL
+ are both at least N-1, then A will be dense. Only one of
+ KU and KL may be less than N-1.
+ Not modified.
+
+ ANORM - REAL
+ If ANORM is not negative, then A will be scaled by a non-
+ negative real number to make the maximum-element-norm of A
+ to be ANORM.
+ Not modified.
+
+ A - COMPLEX array, dimension ( LDA, N )
+ On exit A is the desired test matrix.
+ Modified.
+
+ LDA - INTEGER
+ LDA specifies the first dimension of A as declared in the
+ calling program. LDA must be at least M.
+ Not modified.
+
+ WORK - COMPLEX array, dimension ( 3*N )
+ Workspace.
+ Modified.
+
+ INFO - INTEGER
+ Error code. On exit, INFO will be set to one of the
+ following values:
+ 0 => normal return
+ -1 => N negative
+ -2 => DIST illegal string
+ -5 => MODE not in range -6 to 6
+ -6 => COND less than 1.0, and MODE neither -6, 0 nor 6
+ -9 => RSIGN is not 'T' or 'F'
+ -10 => UPPER is not 'T' or 'F'
+ -11 => SIM is not 'T' or 'F'
+ -12 => MODES=0 and DS has a zero singular value.
+ -13 => MODES is not in the range -5 to 5.
+ -14 => MODES is nonzero and CONDS is less than 1.
+ -15 => KL is less than 1.
+ -16 => KU is less than 1, or KL and KU are both less than
+ N-1.
+ -19 => LDA is less than M.
+ 1 => Error return from CLATM1 (computing D)
+ 2 => Cannot scale to DMAX (max. eigenvalue is 0)
+ 3 => Error return from SLATM1 (computing DS)
+ 4 => Error return from CLARGE
+ 5 => Zero singular value from SLATM1.
+
+ =====================================================================
+
+
+
+ 1) Decode and Test the input parameters.
+ Initialize flags & seed.
+
+ Parameter adjustments */
+ --iseed;
+ --d;
+ --ds;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+
+/* Quick return if possible */
+
+ if (*n == 0) {
+ return 0;
+ }
+
+/* Decode DIST */
+
+ if (strncmp(dist, "U", 1)==0) {
+ idist = 1;
+ } else if (strncmp(dist, "S", 1)==0) {
+ idist = 2;
+ } else if (strncmp(dist, "N", 1)==0) {
+ idist = 3;
+ } else if (strncmp(dist, "D", 1)==0) {
+ idist = 4;
+ } else {
+ idist = -1;
+ }
+
+/* Decode RSIGN */
+
+ if (strncmp(rsign, "T", 1)==0) {
+ irsign = 1;
+ } else if (strncmp(rsign, "F", 1)==0) {
+ irsign = 0;
+ } else {
+ irsign = -1;
+ }
+
+/* Decode UPPER */
+
+ if (strncmp(upper, "T", 1)==0) {
+ iupper = 1;
+ } else if (strncmp(upper, "F", 1)==0) {
+ iupper = 0;
+ } else {
+ iupper = -1;
+ }
+
+/* Decode SIM */
+
+ if (strncmp(sim, "T", 1)==0) {
+ isim = 1;
+ } else if (strncmp(sim, "F", 1)==0) {
+ isim = 0;
+ } else {
+ isim = -1;
+ }
+
+/* Check DS, if MODES=0 and ISIM=1 */
+
+ bads = FALSE_;
+ if (*modes == 0 && isim == 1) {
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ if (ds[j] == 0.f) {
+ bads = TRUE_;
+ }
+/* L10: */
+ }
+ }
+
+/* Set INFO if an error */
+
+ if (*n < 0) {
+ *info = -1;
+ } else if (idist == -1) {
+ *info = -2;
+ } else if (abs(*mode) > 6) {
+ *info = -5;
+ } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.f) {
+ *info = -6;
+ } else if (irsign == -1) {
+ *info = -9;
+ } else if (iupper == -1) {
+ *info = -10;
+ } else if (isim == -1) {
+ *info = -11;
+ } else if (bads) {
+ *info = -12;
+ } else if (isim == 1 && abs(*modes) > 5) {
+ *info = -13;
+ } else if (isim == 1 && *modes != 0 && *conds < 1.f) {
+ *info = -14;
+ } else if (*kl < 1) {
+ *info = -15;
+ } else if (*ku < 1 || *ku < *n - 1 && *kl < *n - 1) {
+ *info = -16;
+ } else if (*lda < max(1,*n)) {
+ *info = -19;
+ }
+
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("CLATME", &i__1);
+ return 0;
+ }
+
+/* Initialize random number generator */
+
+ for (i = 1; i <= 4; ++i) {
+ iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
+/* L20: */
+ }
+
+ if (iseed[4] % 2 != 1) {
+ ++iseed[4];
+ }
+
+/* 2) Set up diagonal of A
+
+ Compute D according to COND and MODE */
+
+ clatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], n, &iinfo);
+ if (iinfo != 0) {
+ *info = 1;
+ return 0;
+ }
+ if (*mode != 0 && abs(*mode) != 6) {
+
+/* Scale by DMAX */
+
+ temp = c_abs(&d[1]);
+ i__1 = *n;
+ for (i = 2; i <= i__1; ++i) {
+/* Computing MAX */
+ r__1 = temp, r__2 = c_abs(&d[i]);
+ temp = dmax(r__1,r__2);
+/* L30: */
+ }
+
+ if (temp > 0.f) {
+ q__1.r = dmax__->r / temp, q__1.i = dmax__->i / temp;
+ alpha.r = q__1.r, alpha.i = q__1.i;
+ } else {
+ *info = 2;
+ return 0;
+ }
+
+ cscal_(n, &alpha, &d[1], &c__1);
+
+ }
+
+ claset_slu("Full", n, n, &c_b1, &c_b1, &a[a_offset], lda);
+ i__1 = *lda + 1;
+ ccopy_(n, &d[1], &c__1, &a[a_offset], &i__1);
+
+/* 3) If UPPER='T', set upper triangle of A to random numbers. */
+
+ if (iupper != 0) {
+ i__1 = *n;
+ for (jc = 2; jc <= i__1; ++jc) {
+ i__2 = jc - 1;
+ clarnv_slu(&idist, &iseed[1], &i__2, &a[jc * a_dim1 + 1]);
+/* L40: */
+ }
+ }
+
+/* 4) If SIM='T', apply similarity transformation.
+
+ -1
+ Transform is X A X , where X = U S V, thus
+
+ it is U S V A V' (1/S) U' */
+
+ if (isim != 0) {
+
+/* Compute S (singular values of the eigenvector matrix)
+ according to CONDS and MODES */
+
+ slatm1_slu(modes, conds, &c__0, &c__0, &iseed[1], &ds[1], n, &iinfo);
+ if (iinfo != 0) {
+ *info = 3;
+ return 0;
+ }
+
+/* Multiply by V and V' */
+
+ clarge_slu(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
+ if (iinfo != 0) {
+ *info = 4;
+ return 0;
+ }
+
+/* Multiply by S and (1/S) */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ csscal_(n, &ds[j], &a[j + a_dim1], lda);
+ if (ds[j] != 0.f) {
+ r__1 = 1.f / ds[j];
+ csscal_(n, &r__1, &a[j * a_dim1 + 1], &c__1);
+ } else {
+ *info = 5;
+ return 0;
+ }
+/* L50: */
+ }
+
+/* Multiply by U and U' */
+
+ clarge_slu(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
+ if (iinfo != 0) {
+ *info = 4;
+ return 0;
+ }
+ }
+
+/* 5) Reduce the bandwidth. */
+
+ if (*kl < *n - 1) {
+
+/* Reduce bandwidth -- kill column */
+
+ i__1 = *n - 1;
+ for (jcr = *kl + 1; jcr <= i__1; ++jcr) {
+ ic = jcr - *kl;
+ irows = *n + 1 - jcr;
+ icols = *n + *kl - jcr;
+
+ ccopy_(&irows, &a[jcr + ic * a_dim1], &c__1, &work[1], &c__1);
+ xnorms.r = work[1].r, xnorms.i = work[1].i;
+ clarfg_(&irows, &xnorms, &work[2], &c__1, &tau);
+ r_cnjg(&q__1, &tau);
+ tau.r = q__1.r, tau.i = q__1.i;
+ work[1].r = 1.f, work[1].i = 0.f;
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ alpha.r = q__1.r, alpha.i = q__1.i;
+
+ cgemv_("C", &irows, &icols, &c_b2, &a[jcr + (ic + 1) * a_dim1],
+ lda, &work[1], &c__1, &c_b1, &work[irows + 1], &c__1);
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&irows, &icols, &q__1, &work[1], &c__1, &work[irows + 1], &
+ c__1, &a[jcr + (ic + 1) * a_dim1], lda);
+
+ cgemv_("N", n, &irows, &c_b2, &a[jcr * a_dim1 + 1], lda, &work[1],
+ &c__1, &c_b1, &work[irows + 1], &c__1);
+ r_cnjg(&q__2, &tau);
+ q__1.r = -(doublereal)q__2.r, q__1.i = -(doublereal)q__2.i;
+ cgerc_(n, &irows, &q__1, &work[irows + 1], &c__1, &work[1], &c__1,
+ &a[jcr * a_dim1 + 1], lda);
+
+ i__2 = jcr + ic * a_dim1;
+ a[i__2].r = xnorms.r, a[i__2].i = xnorms.i;
+ i__2 = irows - 1;
+ claset_slu("Full", &i__2, &c__1, &c_b1, &c_b1, &a[jcr + 1 + ic *
+ a_dim1], lda);
+
+ i__2 = icols + 1;
+ cscal_(&i__2, &alpha, &a[jcr + ic * a_dim1], lda);
+ r_cnjg(&q__1, &alpha);
+ cscal_(n, &q__1, &a[jcr * a_dim1 + 1], &c__1);
+/* L60: */
+ }
+ } else if (*ku < *n - 1) {
+
+/* Reduce upper bandwidth -- kill a row at a time. */
+
+ i__1 = *n - 1;
+ for (jcr = *ku + 1; jcr <= i__1; ++jcr) {
+ ir = jcr - *ku;
+ irows = *n + *ku - jcr;
+ icols = *n + 1 - jcr;
+
+ ccopy_(&icols, &a[ir + jcr * a_dim1], lda, &work[1], &c__1);
+ xnorms.r = work[1].r, xnorms.i = work[1].i;
+ clarfg_(&icols, &xnorms, &work[2], &c__1, &tau);
+ r_cnjg(&q__1, &tau);
+ tau.r = q__1.r, tau.i = q__1.i;
+ work[1].r = 1.f, work[1].i = 0.f;
+ i__2 = icols - 1;
+ clacgv_slu(&i__2, &work[2], &c__1);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ alpha.r = q__1.r, alpha.i = q__1.i;
+
+ cgemv_("N", &irows, &icols, &c_b2, &a[ir + 1 + jcr * a_dim1], lda,
+ &work[1], &c__1, &c_b1, &work[icols + 1], &c__1);
+ q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
+ cgerc_(&irows, &icols, &q__1, &work[icols + 1], &c__1, &work[1], &
+ c__1, &a[ir + 1 + jcr * a_dim1], lda);
+
+ cgemv_("C", &icols, n, &c_b2, &a[jcr + a_dim1], lda, &work[1], &
+ c__1, &c_b1, &work[icols + 1], &c__1);
+ r_cnjg(&q__2, &tau);
+ q__1.r = -(doublereal)q__2.r, q__1.i = -(doublereal)q__2.i;
+ cgerc_(&icols, n, &q__1, &work[1], &c__1, &work[icols + 1], &c__1,
+ &a[jcr + a_dim1], lda);
+
+ i__2 = ir + jcr * a_dim1;
+ a[i__2].r = xnorms.r, a[i__2].i = xnorms.i;
+ i__2 = icols - 1;
+ claset_slu("Full", &c__1, &i__2, &c_b1, &c_b1, &a[ir + (jcr + 1) *
+ a_dim1], lda);
+
+ i__2 = irows + 1;
+ cscal_(&i__2, &alpha, &a[ir + jcr * a_dim1], &c__1);
+ r_cnjg(&q__1, &alpha);
+ cscal_(n, &q__1, &a[jcr + a_dim1], lda);
+/* L70: */
+ }
+ }
+
+/* Scale the matrix to have norm ANORM */
+
+ if (*anorm >= 0.f) {
+ temp = clange_("M", n, n, &a[a_offset], lda, tempa);
+ if (temp > 0.f) {
+ ralpha = *anorm / temp;
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ csscal_(n, &ralpha, &a[j * a_dim1 + 1], &c__1);
+/* L80: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of CLATME */
+
+} /* clatme_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/clatms.c b/SuperLU_5.2.0/TESTING/MATGEN/clatms.c
new file mode 100644
index 0000000..991ce21
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/clatms.c
@@ -0,0 +1,1650 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static complex c_b1 = {0.f,0.f};
+static integer c__1 = 1;
+static integer c__5 = 5;
+static logical c_true = TRUE_;
+static logical c_false = FALSE_;
+
+/* Subroutine */ int clatms_slu(integer *m, integer *n, char *dist, integer *
+ iseed, char *sym, real *d, integer *mode, real *cond, real *dmax__,
+ integer *kl, integer *ku, char *pack, complex *a, integer *lda,
+ complex *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
+ real r__1, r__2, r__3;
+ doublereal d__1;
+ complex q__1, q__2, q__3;
+ logical L__1;
+
+ /* Builtin functions */
+ double cos(doublereal), sin(doublereal);
+ void r_cnjg(complex *, complex *);
+
+ /* Local variables */
+ static integer ilda, icol;
+ static real temp;
+ static logical csym;
+ static integer irow, isym;
+ static complex c;
+ static integer i, j, k;
+ static complex s;
+ static real alpha, angle;
+ static integer ipack;
+ static real realc;
+ static integer ioffg;
+ static integer iinfo;
+ extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *);
+ static complex ctemp;
+ static integer idist, mnmin, iskew;
+ static complex extra, dummy;
+ extern /* Subroutine */ int slatm1_slu(integer *, real *, integer *, integer
+ *, integer *, real *, integer *, integer *);
+ static integer ic, jc, nc;
+ extern /* Subroutine */ int clagge_slu(integer *, integer *, integer *,
+ integer *, real *, complex *, integer *, integer *, complex *,
+ integer *), claghe_slu(integer *, integer *, real *, complex *,
+ integer *, integer *, complex *, integer *);
+ static integer il;
+ static complex ct;
+ static integer iendch, ir, jr, ipackg, mr;
+ extern /* Complex */ VOID clarnd_slu(complex *, integer *, integer *);
+ static integer minlda;
+ static complex st;
+ extern /* Subroutine */ int claset_slu(char *, integer *, integer *, complex
+ *, complex *, complex *, integer *), clartg_slu(complex *,
+ complex *, real *, complex *, complex *),
+ clagsy_slu(integer *, integer *, real *, complex *,
+ integer *, integer *, complex *, integer *);
+ extern int input_error(char *, int *);
+ extern doublereal slarnd_slu(integer *, integer *);
+ extern /* Subroutine */ int clarot_slu(logical *, logical *, logical *,
+ integer *, complex *, complex *, complex *, integer *, complex *,
+ complex *);
+ static logical iltemp, givens;
+ static integer ioffst, irsign;
+ static logical ilextr, topdwn;
+ static integer ir1, ir2, isympk, jch, llb, jkl, jku, uub;
+
+
+/* -- LAPACK test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ CLATMS generates random matrices with specified singular values
+ (or hermitian with specified eigenvalues)
+ for testing LAPACK programs.
+
+ CLATMS operates by applying the following sequence of
+ operations:
+
+ Set the diagonal to D, where D may be input or
+ computed according to MODE, COND, DMAX, and SYM
+ as described below.
+
+ Generate a matrix with the appropriate band structure, by one
+ of two methods:
+
+ Method A:
+ Generate a dense M x N matrix by multiplying D on the left
+ and the right by random unitary matrices, then:
+
+ Reduce the bandwidth according to KL and KU, using
+ Householder transformations.
+
+ Method B:
+ Convert the bandwidth-0 (i.e., diagonal) matrix to a
+ bandwidth-1 matrix using Givens rotations, "chasing"
+ out-of-band elements back, much as in QR; then convert
+ the bandwidth-1 to a bandwidth-2 matrix, etc. Note
+ that for reasonably small bandwidths (relative to M and
+
+ N) this requires less storage, as a dense matrix is not
+
+ generated. Also, for hermitian or symmetric matrices,
+ only one triangle is generated.
+
+ Method A is chosen if the bandwidth is a large fraction of the
+ order of the matrix, and LDA is at least M (so a dense
+ matrix can be stored.) Method B is chosen if the bandwidth
+
+ is small (< 1/2 N for hermitian or symmetric, < .3 N+M for
+ non-symmetric), or LDA is less than M and not less than the
+
+ bandwidth.
+
+ Pack the matrix if desired. Options specified by PACK are:
+ no packing
+ zero out upper half (if hermitian)
+ zero out lower half (if hermitian)
+ store the upper half columnwise (if hermitian or upper
+ triangular)
+ store the lower half columnwise (if hermitian or lower
+ triangular)
+ store the lower triangle in banded format (if hermitian or
+ lower triangular)
+ store the upper triangle in banded format (if hermitian or
+ upper triangular)
+ store the entire matrix in banded format
+ If Method B is chosen, and band format is specified, then the
+ matrix will be generated in the band format, so no repacking
+
+ will be necessary.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ The number of rows of A. Not modified.
+
+ N - INTEGER
+ The number of columns of A. N must equal M if the matrix
+ is symmetric or hermitian (i.e., if SYM is not 'N')
+ Not modified.
+
+ DIST - CHARACTER*1
+ On entry, DIST specifies the type of distribution to be used
+
+ to generate the random eigen-/singular values.
+ 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
+ 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
+ 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
+ Not modified.
+
+ ISEED - INTEGER array, dimension ( 4 )
+ On entry ISEED specifies the seed of the random number
+ generator. They should lie between 0 and 4095 inclusive,
+ and ISEED(4) should be odd. The random number generator
+ uses a linear congruential sequence limited to small
+ integers, and so should produce machine independent
+ random numbers. The values of ISEED are changed on
+ exit, and can be used in the next call to CLATMS
+ to continue the same random number sequence.
+ Changed on exit.
+
+ SYM - CHARACTER*1
+ If SYM='H', the generated matrix is hermitian, with
+ eigenvalues specified by D, COND, MODE, and DMAX; they
+ may be positive, negative, or zero.
+ If SYM='P', the generated matrix is hermitian, with
+ eigenvalues (= singular values) specified by D, COND,
+ MODE, and DMAX; they will not be negative.
+ If SYM='N', the generated matrix is nonsymmetric, with
+ singular values specified by D, COND, MODE, and DMAX;
+ they will not be negative.
+ If SYM='S', the generated matrix is (complex) symmetric,
+ with singular values specified by D, COND, MODE, and
+ DMAX; they will not be negative.
+ Not modified.
+
+ D - REAL array, dimension ( MIN( M, N ) )
+ This array is used to specify the singular values or
+ eigenvalues of A (see SYM, above.) If MODE=0, then D is
+ assumed to contain the singular/eigenvalues, otherwise
+ they will be computed according to MODE, COND, and DMAX,
+ and placed in D.
+ Modified if MODE is nonzero.
+
+ MODE - INTEGER
+ On entry this describes how the singular/eigenvalues are to
+
+ be specified:
+ MODE = 0 means use D as input
+ MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
+ MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
+ MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
+ MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
+ MODE = 5 sets D to random numbers in the range
+ ( 1/COND , 1 ) such that their logarithms
+ are uniformly distributed.
+ MODE = 6 set D to random numbers from same distribution
+ as the rest of the matrix.
+ MODE < 0 has the same meaning as ABS(MODE), except that
+ the order of the elements of D is reversed.
+ Thus if MODE is positive, D has entries ranging from
+ 1 to 1/COND, if negative, from 1/COND to 1,
+ If SYM='H', and MODE is neither 0, 6, nor -6, then
+ the elements of D will also be multiplied by a random
+ sign (i.e., +1 or -1.)
+ Not modified.
+
+ COND - REAL
+ On entry, this is used as described under MODE above.
+ If used, it must be >= 1. Not modified.
+
+ DMAX - REAL
+ If MODE is neither -6, 0 nor 6, the contents of D, as
+ computed according to MODE and COND, will be scaled by
+ DMAX / max(abs(D(i))); thus, the maximum absolute eigen- or
+
+ singular value (which is to say the norm) will be abs(DMAX).
+
+ Note that DMAX need not be positive: if DMAX is negative
+ (or zero), D will be scaled by a negative number (or zero).
+
+ Not modified.
+
+ KL - INTEGER
+ This specifies the lower bandwidth of the matrix. For
+ example, KL=0 implies upper triangular, KL=1 implies upper
+ Hessenberg, and KL being at least M-1 means that the matrix
+
+ has full lower bandwidth. KL must equal KU if the matrix
+ is symmetric or hermitian.
+ Not modified.
+
+ KU - INTEGER
+ This specifies the upper bandwidth of the matrix. For
+ example, KU=0 implies lower triangular, KU=1 implies lower
+ Hessenberg, and KU being at least N-1 means that the matrix
+
+ has full upper bandwidth. KL must equal KU if the matrix
+ is symmetric or hermitian.
+ Not modified.
+
+ PACK - CHARACTER*1
+ This specifies packing of matrix as follows:
+ 'N' => no packing
+ 'U' => zero out all subdiagonal entries (if symmetric
+ or hermitian)
+ 'L' => zero out all superdiagonal entries (if symmetric
+ or hermitian)
+ 'C' => store the upper triangle columnwise (only if the
+ matrix is symmetric, hermitian, or upper triangular)
+
+ 'R' => store the lower triangle columnwise (only if the
+ matrix is symmetric, hermitian, or lower triangular)
+
+ 'B' => store the lower triangle in band storage scheme
+ (only if the matrix is symmetric, hermitian, or
+ lower triangular)
+ 'Q' => store the upper triangle in band storage scheme
+ (only if the matrix is symmetric, hermitian, or
+ upper triangular)
+ 'Z' => store the entire matrix in band storage scheme
+ (pivoting can be provided for by using this
+ option to store A in the trailing rows of
+ the allocated storage)
+
+ Using these options, the various LAPACK packed and banded
+ storage schemes can be obtained:
+ GB - use 'Z'
+ PB, SB, HB, or TB - use 'B' or 'Q'
+ PP, SP, HB, or TP - use 'C' or 'R'
+
+ If two calls to CLATMS differ only in the PACK parameter,
+ they will generate mathematically equivalent matrices.
+ Not modified.
+
+ A - COMPLEX array, dimension ( LDA, N )
+ On exit A is the desired test matrix. A is first generated
+
+ in full (unpacked) form, and then packed, if so specified
+ by PACK. Thus, the first M elements of the first N
+ columns will always be modified. If PACK specifies a
+ packed or banded storage scheme, all LDA elements of the
+ first N columns will be modified; the elements of the
+ array which do not correspond to elements of the generated
+ matrix are set to zero.
+ Modified.
+
+ LDA - INTEGER
+ LDA specifies the first dimension of A as declared in the
+ calling program. If PACK='N', 'U', 'L', 'C', or 'R', then
+ LDA must be at least M. If PACK='B' or 'Q', then LDA must
+ be at least MIN( KL, M-1) (which is equal to MIN(KU,N-1)).
+ If PACK='Z', LDA must be large enough to hold the packed
+ array: MIN( KU, N-1) + MIN( KL, M-1) + 1.
+ Not modified.
+
+ WORK - COMPLEX array, dimension ( 3*MAX( N, M ) )
+ Workspace.
+ Modified.
+
+ INFO - INTEGER
+ Error code. On exit, INFO will be set to one of the
+ following values:
+ 0 => normal return
+ -1 => M negative or unequal to N and SYM='S', 'H', or 'P'
+ -2 => N negative
+ -3 => DIST illegal string
+ -5 => SYM illegal string
+ -7 => MODE not in range -6 to 6
+ -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
+ -10 => KL negative
+ -11 => KU negative, or SYM is not 'N' and KU is not equal to
+
+ KL
+ -12 => PACK illegal string, or PACK='U' or 'L', and SYM='N';
+
+ or PACK='C' or 'Q' and SYM='N' and KL is not zero;
+ or PACK='R' or 'B' and SYM='N' and KU is not zero;
+ or PACK='U', 'L', 'C', 'R', 'B', or 'Q', and M is not
+
+ N.
+ -14 => LDA is less than M, or PACK='Z' and LDA is less than
+
+ MIN(KU,N-1) + MIN(KL,M-1) + 1.
+ 1 => Error return from SLATM1
+ 2 => Cannot scale to DMAX (max. sing. value is 0)
+ 3 => Error return from CLAGGE, CLAGHE or CLAGSY
+
+ =====================================================================
+
+
+
+ 1) Decode and Test the input parameters.
+ Initialize flags & seed.
+
+ Parameter adjustments */
+ --iseed;
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+
+/* Quick return if possible */
+
+ if (*m == 0 || *n == 0) {
+ return 0;
+ }
+
+/* Decode DIST */
+
+ if (strncmp(dist, "U", 1)==0) {
+ idist = 1;
+ } else if (strncmp(dist, "S", 1)==0) {
+ idist = 2;
+ } else if (strncmp(dist, "N", 1)==0) {
+ idist = 3;
+ } else {
+ idist = -1;
+ }
+
+/* Decode SYM */
+
+ if (strncmp(sym, "N", 1)==0) {
+ isym = 1;
+ irsign = 0;
+ csym = FALSE_;
+ } else if (strncmp(sym, "P", 1)==0) {
+ isym = 2;
+ irsign = 0;
+ csym = FALSE_;
+ } else if (strncmp(sym, "S", 1)==0) {
+ isym = 2;
+ irsign = 0;
+ csym = TRUE_;
+ } else if (strncmp(sym, "H", 1)==0) {
+ isym = 2;
+ irsign = 1;
+ csym = FALSE_;
+ } else {
+ isym = -1;
+ }
+
+/* Decode PACK */
+
+ isympk = 0;
+ if (strncmp(pack, "N", 1)==0) {
+ ipack = 0;
+ } else if (strncmp(pack, "U", 1)==0) {
+ ipack = 1;
+ isympk = 1;
+ } else if (strncmp(pack, "L", 1)==0) {
+ ipack = 2;
+ isympk = 1;
+ } else if (strncmp(pack, "C", 1)==0) {
+ ipack = 3;
+ isympk = 2;
+ } else if (strncmp(pack, "R", 1)==0) {
+ ipack = 4;
+ isympk = 3;
+ } else if (strncmp(pack, "B", 1)==0) {
+ ipack = 5;
+ isympk = 3;
+ } else if (strncmp(pack, "Q", 1)==0) {
+ ipack = 6;
+ isympk = 2;
+ } else if (strncmp(pack, "Z", 1)==0) {
+ ipack = 7;
+ } else {
+ ipack = -1;
+ }
+
+/* Set certain internal parameters */
+
+ mnmin = min(*m,*n);
+/* Computing MIN */
+ i__1 = *kl, i__2 = *m - 1;
+ llb = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *ku, i__2 = *n - 1;
+ uub = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *m, i__2 = *n + llb;
+ mr = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *n, i__2 = *m + uub;
+ nc = min(i__1,i__2);
+
+ if (ipack == 5 || ipack == 6) {
+ minlda = uub + 1;
+ } else if (ipack == 7) {
+ minlda = llb + uub + 1;
+ } else {
+ minlda = *m;
+ }
+
+/* Use Givens rotation method if bandwidth small enough,
+ or if LDA is too small to store the matrix unpacked. */
+
+ givens = FALSE_;
+ if (isym == 1) {
+/* Computing MAX */
+ i__1 = 1, i__2 = mr + nc;
+ if ((real) (llb + uub) < (real) max(i__1,i__2) * .3f) {
+ givens = TRUE_;
+ }
+ } else {
+ if (llb << 1 < *m) {
+ givens = TRUE_;
+ }
+ }
+ if (*lda < *m && *lda >= minlda) {
+ givens = TRUE_;
+ }
+
+/* Set INFO if an error */
+
+ if (*m < 0) {
+ *info = -1;
+ } else if (*m != *n && isym != 1) {
+ *info = -1;
+ } else if (*n < 0) {
+ *info = -2;
+ } else if (idist == -1) {
+ *info = -3;
+ } else if (isym == -1) {
+ *info = -5;
+ } else if (abs(*mode) > 6) {
+ *info = -7;
+ } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.f) {
+ *info = -8;
+ } else if (*kl < 0) {
+ *info = -10;
+ } else if (*ku < 0 || isym != 1 && *kl != *ku) {
+ *info = -11;
+ } else if (ipack == -1 || isympk == 1 && isym == 1 || isympk == 2 && isym
+ == 1 && *kl > 0 || isympk == 3 && isym == 1 && *ku > 0 || isympk
+ != 0 && *m != *n) {
+ *info = -12;
+ } else if (*lda < max(1,minlda)) {
+ *info = -14;
+ }
+
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("CLATMS", &i__1);
+ return 0;
+ }
+
+/* Initialize random number generator */
+
+ for (i = 1; i <= 4; ++i) {
+ iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
+/* L10: */
+ }
+
+ if (iseed[4] % 2 != 1) {
+ ++iseed[4];
+ }
+
+/* 2) Set up D if indicated.
+
+ Compute D according to COND and MODE */
+
+ slatm1_slu(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, &iinfo);
+ if (iinfo != 0) {
+ *info = 1;
+ return 0;
+ }
+
+/* Choose Top-Down if D is (apparently) increasing,
+ Bottom-Up if D is (apparently) decreasing. */
+
+ if (dabs(d[1]) <= (r__1 = d[mnmin], dabs(r__1))) {
+ topdwn = TRUE_;
+ } else {
+ topdwn = FALSE_;
+ }
+
+ if (*mode != 0 && abs(*mode) != 6) {
+
+/* Scale by DMAX */
+
+ temp = dabs(d[1]);
+ i__1 = mnmin;
+ for (i = 2; i <= i__1; ++i) {
+/* Computing MAX */
+ r__2 = temp, r__3 = (r__1 = d[i], dabs(r__1));
+ temp = dmax(r__2,r__3);
+/* L20: */
+ }
+
+ if (temp > 0.f) {
+ alpha = *dmax__ / temp;
+ } else {
+ *info = 2;
+ return 0;
+ }
+
+ sscal_(&mnmin, &alpha, &d[1], &c__1);
+
+ }
+
+ claset_slu("Full", lda, n, &c_b1, &c_b1, &a[a_offset], lda);
+
+/* 3) Generate Banded Matrix using Givens rotations.
+ Also the special case of UUB=LLB=0
+
+ Compute Addressing constants to cover all
+ storage formats. Whether GE, HE, SY, GB, HB, or SB,
+ upper or lower triangle or both,
+ the (i,j)-th element is in
+ A( i - ISKEW*j + IOFFST, j ) */
+
+ if (ipack > 4) {
+ ilda = *lda - 1;
+ iskew = 1;
+ if (ipack > 5) {
+ ioffst = uub + 1;
+ } else {
+ ioffst = 1;
+ }
+ } else {
+ ilda = *lda;
+ iskew = 0;
+ ioffst = 0;
+ }
+
+/* IPACKG is the format that the matrix is generated in. If this is
+ different from IPACK, then the matrix must be repacked at the
+ end. It also signals how to compute the norm, for scaling. */
+
+ ipackg = 0;
+
+/* Diagonal Matrix -- We are done, unless it
+ is to be stored HP/SP/PP/TP (PACK='R' or 'C') */
+
+ if (llb == 0 && uub == 0) {
+ i__1 = mnmin;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = (1 - iskew) * j + ioffst + j * a_dim1;
+ i__3 = j;
+ q__1.r = d[i__3], q__1.i = 0.f;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+/* L30: */
+ }
+
+ if (ipack <= 2 || ipack >= 5) {
+ ipackg = ipack;
+ }
+
+ } else if (givens) {
+
+/* Check whether to use Givens rotations,
+ Householder transformations, or nothing. */
+
+ if (isym == 1) {
+
+/* Non-symmetric -- A = U D V */
+
+ if (ipack > 4) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+
+ i__1 = mnmin;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = (1 - iskew) * j + ioffst + j * a_dim1;
+ i__3 = j;
+ q__1.r = d[i__3], q__1.i = 0.f;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+/* L40: */
+ }
+
+ if (topdwn) {
+ jkl = 0;
+ i__1 = uub;
+ for (jku = 1; jku <= i__1; ++jku) {
+
+/* Transform from bandwidth JKL, JKU-1 to
+JKL, JKU
+
+ Last row actually rotated is M
+ Last column actually rotated is MIN( M+
+JKU, N )
+
+ Computing MIN */
+ i__3 = *m + jku;
+ i__2 = min(i__3,*n) + jkl - 1;
+ for (jr = 1; jr <= i__2; ++jr) {
+ extra.r = 0.f, extra.i = 0.f;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ d__1 = cos(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ c.r = q__1.r, c.i = q__1.i;
+ d__1 = sin(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ s.r = q__1.r, s.i = q__1.i;
+/* Computing MAX */
+ i__3 = 1, i__4 = jr - jkl;
+ icol = max(i__3,i__4);
+ if (jr < *m) {
+/* Computing MIN */
+ i__3 = *n, i__4 = jr + jku;
+ il = min(i__3,i__4) + 1 - icol;
+ L__1 = jr > jkl;
+ clarot_slu(&c_true, &L__1, &c_false, &il, &c, &s, &a[
+ jr - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &extra, &dummy);
+ }
+
+/* Chase "EXTRA" back up */
+
+ ir = jr;
+ ic = icol;
+ i__3 = -jkl - jku;
+ for (jch = jr - jkl; i__3 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__3) {
+ if (ir < *m) {
+ clartg_slu(&a[ir + 1 - iskew * (ic + 1) + ioffst
+ + (ic + 1) * a_dim1], &extra, &realc,
+ &s, &dummy);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__2.r = realc * dummy.r, q__2.i = realc *
+ dummy.i;
+ r_cnjg(&q__1, &q__2);
+ c.r = q__1.r, c.i = q__1.i;
+ q__3.r = -(doublereal)s.r, q__3.i = -(
+ doublereal)s.i;
+ q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
+ q__2.i = q__3.r * dummy.i + q__3.i *
+ dummy.r;
+ r_cnjg(&q__1, &q__2);
+ s.r = q__1.r, s.i = q__1.i;
+ }
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jku;
+ irow = max(i__4,i__5);
+ il = ir + 2 - irow;
+ ctemp.r = 0.f, ctemp.i = 0.f;
+ iltemp = jch > jku;
+ clarot_slu(&c_false, &iltemp, &c_true, &il, &c, &s, &
+ a[irow - iskew * ic + ioffst + ic *
+ a_dim1], &ilda, &ctemp, &extra);
+ if (iltemp) {
+ clartg_slu(&a[irow + 1 - iskew * (ic + 1) +
+ ioffst + (ic + 1) * a_dim1], &ctemp, &
+ realc, &s, &dummy);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__2.r = realc * dummy.r, q__2.i = realc *
+ dummy.i;
+ r_cnjg(&q__1, &q__2);
+ c.r = q__1.r, c.i = q__1.i;
+ q__3.r = -(doublereal)s.r, q__3.i = -(
+ doublereal)s.i;
+ q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
+ q__2.i = q__3.r * dummy.i + q__3.i *
+ dummy.r;
+ r_cnjg(&q__1, &q__2);
+ s.r = q__1.r, s.i = q__1.i;
+
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jku - jkl;
+ icol = max(i__4,i__5);
+ il = ic + 2 - icol;
+ extra.r = 0.f, extra.i = 0.f;
+ L__1 = jch > jku + jkl;
+ clarot_slu(&c_true, &L__1, &c_true, &il, &c, &s,
+ &a[irow - iskew * icol + ioffst +
+ icol * a_dim1], &ilda, &extra, &ctemp)
+ ;
+ ic = icol;
+ ir = irow;
+ }
+/* L50: */
+ }
+/* L60: */
+ }
+/* L70: */
+ }
+
+ jku = uub;
+ i__1 = llb;
+ for (jkl = 1; jkl <= i__1; ++jkl) {
+
+/* Transform from bandwidth JKL-1, JKU to
+JKL, JKU
+
+ Computing MIN */
+ i__3 = *n + jkl;
+ i__2 = min(i__3,*m) + jku - 1;
+ for (jc = 1; jc <= i__2; ++jc) {
+ extra.r = 0.f, extra.i = 0.f;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ d__1 = cos(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ c.r = q__1.r, c.i = q__1.i;
+ d__1 = sin(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ s.r = q__1.r, s.i = q__1.i;
+/* Computing MAX */
+ i__3 = 1, i__4 = jc - jku;
+ irow = max(i__3,i__4);
+ if (jc < *n) {
+/* Computing MIN */
+ i__3 = *m, i__4 = jc + jkl;
+ il = min(i__3,i__4) + 1 - irow;
+ L__1 = jc > jku;
+ clarot_slu(&c_false, &L__1, &c_false, &il, &c, &s, &
+ a[irow - iskew * jc + ioffst + jc *
+ a_dim1], &ilda, &extra, &dummy);
+ }
+
+/* Chase "EXTRA" back up */
+
+ ic = jc;
+ ir = irow;
+ i__3 = -jkl - jku;
+ for (jch = jc - jku; i__3 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__3) {
+ if (ic < *n) {
+ clartg_slu(&a[ir + 1 - iskew * (ic + 1) + ioffst
+ + (ic + 1) * a_dim1], &extra, &realc,
+ &s, &dummy);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__2.r = realc * dummy.r, q__2.i = realc *
+ dummy.i;
+ r_cnjg(&q__1, &q__2);
+ c.r = q__1.r, c.i = q__1.i;
+ q__3.r = -(doublereal)s.r, q__3.i = -(
+ doublereal)s.i;
+ q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
+ q__2.i = q__3.r * dummy.i + q__3.i *
+ dummy.r;
+ r_cnjg(&q__1, &q__2);
+ s.r = q__1.r, s.i = q__1.i;
+ }
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jkl;
+ icol = max(i__4,i__5);
+ il = ic + 2 - icol;
+ ctemp.r = 0.f, ctemp.i = 0.f;
+ iltemp = jch > jkl;
+ clarot_slu(&c_true, &iltemp, &c_true, &il, &c, &s, &
+ a[ir - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &ctemp, &extra);
+ if (iltemp) {
+ clartg_slu(&a[ir + 1 - iskew * (icol + 1) +
+ ioffst + (icol + 1) * a_dim1], &ctemp,
+ &realc, &s, &dummy);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__2.r = realc * dummy.r, q__2.i = realc *
+ dummy.i;
+ r_cnjg(&q__1, &q__2);
+ c.r = q__1.r, c.i = q__1.i;
+ q__3.r = -(doublereal)s.r, q__3.i = -(
+ doublereal)s.i;
+ q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
+ q__2.i = q__3.r * dummy.i + q__3.i *
+ dummy.r;
+ r_cnjg(&q__1, &q__2);
+ s.r = q__1.r, s.i = q__1.i;
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jkl - jku;
+ irow = max(i__4,i__5);
+ il = ir + 2 - irow;
+ extra.r = 0.f, extra.i = 0.f;
+ L__1 = jch > jkl + jku;
+ clarot_slu(&c_false, &L__1, &c_true, &il, &c, &s,
+ &a[irow - iskew * icol + ioffst +
+ icol * a_dim1], &ilda, &extra, &ctemp)
+ ;
+ ic = icol;
+ ir = irow;
+ }
+/* L80: */
+ }
+/* L90: */
+ }
+/* L100: */
+ }
+
+ } else {
+
+/* Bottom-Up -- Start at the bottom right. */
+
+ jkl = 0;
+ i__1 = uub;
+ for (jku = 1; jku <= i__1; ++jku) {
+
+/* Transform from bandwidth JKL, JKU-1 to
+JKL, JKU
+
+ First row actually rotated is M
+ First column actually rotated is MIN( M
++JKU, N )
+
+ Computing MIN */
+ i__2 = *m, i__3 = *n + jkl;
+ iendch = min(i__2,i__3) - 1;
+/* Computing MIN */
+ i__2 = *m + jku;
+ i__3 = 1 - jkl;
+ for (jc = min(i__2,*n) - 1; jc >= i__3; --jc) {
+ extra.r = 0.f, extra.i = 0.f;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ d__1 = cos(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ c.r = q__1.r, c.i = q__1.i;
+ d__1 = sin(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ s.r = q__1.r, s.i = q__1.i;
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - jku + 1;
+ irow = max(i__2,i__4);
+ if (jc > 0) {
+/* Computing MIN */
+ i__2 = *m, i__4 = jc + jkl + 1;
+ il = min(i__2,i__4) + 1 - irow;
+ L__1 = jc + jkl < *m;
+ clarot_slu(&c_false, &c_false, &L__1, &il, &c, &s, &
+ a[irow - iskew * jc + ioffst + jc *
+ a_dim1], &ilda, &dummy, &extra);
+ }
+
+/* Chase "EXTRA" back down */
+
+ ic = jc;
+ i__2 = iendch;
+ i__4 = jkl + jku;
+ for (jch = jc + jkl; i__4 < 0 ? jch >= i__2 : jch <=
+ i__2; jch += i__4) {
+ ilextr = ic > 0;
+ if (ilextr) {
+ clartg_slu(&a[jch - iskew * ic + ioffst + ic *
+ a_dim1], &extra, &realc, &s, &dummy);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__1.r = realc * dummy.r, q__1.i = realc *
+ dummy.i;
+ c.r = q__1.r, c.i = q__1.i;
+ q__1.r = s.r * dummy.r - s.i * dummy.i,
+ q__1.i = s.r * dummy.i + s.i *
+ dummy.r;
+ s.r = q__1.r, s.i = q__1.i;
+ }
+ ic = max(1,ic);
+/* Computing MIN */
+ i__5 = *n - 1, i__6 = jch + jku;
+ icol = min(i__5,i__6);
+ iltemp = jch + jku < *n;
+ ctemp.r = 0.f, ctemp.i = 0.f;
+ i__5 = icol + 2 - ic;
+ clarot_slu(&c_true, &ilextr, &iltemp, &i__5, &c, &s,
+ &a[jch - iskew * ic + ioffst + ic *
+ a_dim1], &ilda, &extra, &ctemp);
+ if (iltemp) {
+ clartg_slu(&a[jch - iskew * icol + ioffst + icol
+ * a_dim1], &ctemp, &realc, &s, &dummy)
+ ;
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__1.r = realc * dummy.r, q__1.i = realc *
+ dummy.i;
+ c.r = q__1.r, c.i = q__1.i;
+ q__1.r = s.r * dummy.r - s.i * dummy.i,
+ q__1.i = s.r * dummy.i + s.i *
+ dummy.r;
+ s.r = q__1.r, s.i = q__1.i;
+/* Computing MIN */
+ i__5 = iendch, i__6 = jch + jkl + jku;
+ il = min(i__5,i__6) + 2 - jch;
+ extra.r = 0.f, extra.i = 0.f;
+ L__1 = jch + jkl + jku <= iendch;
+ clarot_slu(&c_false, &c_true, &L__1, &il, &c, &s,
+ &a[jch - iskew * icol + ioffst +
+ icol * a_dim1], &ilda, &ctemp, &extra)
+ ;
+ ic = icol;
+ }
+/* L110: */
+ }
+/* L120: */
+ }
+/* L130: */
+ }
+
+ jku = uub;
+ i__1 = llb;
+ for (jkl = 1; jkl <= i__1; ++jkl) {
+
+/* Transform from bandwidth JKL-1, JKU to
+JKL, JKU
+
+ First row actually rotated is MIN( N+JK
+L, M )
+ First column actually rotated is N
+
+ Computing MIN */
+ i__3 = *n, i__4 = *m + jku;
+ iendch = min(i__3,i__4) - 1;
+/* Computing MIN */
+ i__3 = *n + jkl;
+ i__4 = 1 - jku;
+ for (jr = min(i__3,*m) - 1; jr >= i__4; --jr) {
+ extra.r = 0.f, extra.i = 0.f;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ d__1 = cos(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ c.r = q__1.r, c.i = q__1.i;
+ d__1 = sin(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ s.r = q__1.r, s.i = q__1.i;
+/* Computing MAX */
+ i__3 = 1, i__2 = jr - jkl + 1;
+ icol = max(i__3,i__2);
+ if (jr > 0) {
+/* Computing MIN */
+ i__3 = *n, i__2 = jr + jku + 1;
+ il = min(i__3,i__2) + 1 - icol;
+ L__1 = jr + jku < *n;
+ clarot_slu(&c_true, &c_false, &L__1, &il, &c, &s, &a[
+ jr - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &dummy, &extra);
+ }
+
+/* Chase "EXTRA" back down */
+
+ ir = jr;
+ i__3 = iendch;
+ i__2 = jkl + jku;
+ for (jch = jr + jku; i__2 < 0 ? jch >= i__3 : jch <=
+ i__3; jch += i__2) {
+ ilextr = ir > 0;
+ if (ilextr) {
+ clartg_slu(&a[ir - iskew * jch + ioffst + jch *
+ a_dim1], &extra, &realc, &s, &dummy);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__1.r = realc * dummy.r, q__1.i = realc *
+ dummy.i;
+ c.r = q__1.r, c.i = q__1.i;
+ q__1.r = s.r * dummy.r - s.i * dummy.i,
+ q__1.i = s.r * dummy.i + s.i *
+ dummy.r;
+ s.r = q__1.r, s.i = q__1.i;
+ }
+ ir = max(1,ir);
+/* Computing MIN */
+ i__5 = *m - 1, i__6 = jch + jkl;
+ irow = min(i__5,i__6);
+ iltemp = jch + jkl < *m;
+ ctemp.r = 0.f, ctemp.i = 0.f;
+ i__5 = irow + 2 - ir;
+ clarot_slu(&c_false, &ilextr, &iltemp, &i__5, &c, &s,
+ &a[ir - iskew * jch + ioffst + jch *
+ a_dim1], &ilda, &extra, &ctemp);
+ if (iltemp) {
+ clartg_slu(&a[irow - iskew * jch + ioffst + jch *
+ a_dim1], &ctemp, &realc, &s, &dummy);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__1.r = realc * dummy.r, q__1.i = realc *
+ dummy.i;
+ c.r = q__1.r, c.i = q__1.i;
+ q__1.r = s.r * dummy.r - s.i * dummy.i,
+ q__1.i = s.r * dummy.i + s.i *
+ dummy.r;
+ s.r = q__1.r, s.i = q__1.i;
+/* Computing MIN */
+ i__5 = iendch, i__6 = jch + jkl + jku;
+ il = min(i__5,i__6) + 2 - jch;
+ extra.r = 0.f, extra.i = 0.f;
+ L__1 = jch + jkl + jku <= iendch;
+ clarot_slu(&c_true, &c_true, &L__1, &il, &c, &s,
+ &a[irow - iskew * jch + ioffst + jch *
+ a_dim1], &ilda, &ctemp, &extra);
+ ir = irow;
+ }
+/* L140: */
+ }
+/* L150: */
+ }
+/* L160: */
+ }
+
+ }
+
+ } else {
+
+/* Symmetric -- A = U D U'
+ Hermitian -- A = U D U* */
+
+ ipackg = ipack;
+ ioffg = ioffst;
+
+ if (topdwn) {
+
+/* Top-Down -- Generate Upper triangle only */
+
+ if (ipack >= 5) {
+ ipackg = 6;
+ ioffg = uub + 1;
+ } else {
+ ipackg = 1;
+ }
+
+ i__1 = mnmin;
+ for (j = 1; j <= i__1; ++j) {
+ i__4 = (1 - iskew) * j + ioffg + j * a_dim1;
+ i__2 = j;
+ q__1.r = d[i__2], q__1.i = 0.f;
+ a[i__4].r = q__1.r, a[i__4].i = q__1.i;
+/* L170: */
+ }
+
+ i__1 = uub;
+ for (k = 1; k <= i__1; ++k) {
+ i__4 = *n - 1;
+ for (jc = 1; jc <= i__4; ++jc) {
+/* Computing MAX */
+ i__2 = 1, i__3 = jc - k;
+ irow = max(i__2,i__3);
+/* Computing MIN */
+ i__2 = jc + 1, i__3 = k + 2;
+ il = min(i__2,i__3);
+ extra.r = 0.f, extra.i = 0.f;
+ i__2 = jc - iskew * (jc + 1) + ioffg + (jc + 1) *
+ a_dim1;
+ ctemp.r = a[i__2].r, ctemp.i = a[i__2].i;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ d__1 = cos(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ c.r = q__1.r, c.i = q__1.i;
+ d__1 = sin(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ s.r = q__1.r, s.i = q__1.i;
+ if (csym) {
+ ct.r = c.r, ct.i = c.i;
+ st.r = s.r, st.i = s.i;
+ } else {
+ r_cnjg(&q__1, &ctemp);
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ r_cnjg(&q__1, &c);
+ ct.r = q__1.r, ct.i = q__1.i;
+ r_cnjg(&q__1, &s);
+ st.r = q__1.r, st.i = q__1.i;
+ }
+ L__1 = jc > k;
+ clarot_slu(&c_false, &L__1, &c_true, &il, &c, &s, &a[
+ irow - iskew * jc + ioffg + jc * a_dim1], &
+ ilda, &extra, &ctemp);
+/* Computing MIN */
+ i__3 = k, i__5 = *n - jc;
+ i__2 = min(i__3,i__5) + 1;
+ clarot_slu(&c_true, &c_true, &c_false, &i__2, &ct, &st, &
+ a[(1 - iskew) * jc + ioffg + jc * a_dim1], &
+ ilda, &ctemp, &dummy);
+
+/* Chase EXTRA back up the matrix
+*/
+
+ icol = jc;
+ i__2 = -k;
+ for (jch = jc - k; i__2 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__2) {
+ clartg_slu(&a[jch + 1 - iskew * (icol + 1) + ioffg +
+ (icol + 1) * a_dim1], &extra, &realc, &s,
+ &dummy);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__2.r = realc * dummy.r, q__2.i = realc *
+ dummy.i;
+ r_cnjg(&q__1, &q__2);
+ c.r = q__1.r, c.i = q__1.i;
+ q__3.r = -(doublereal)s.r, q__3.i = -(doublereal)
+ s.i;
+ q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
+ q__2.i = q__3.r * dummy.i + q__3.i *
+ dummy.r;
+ r_cnjg(&q__1, &q__2);
+ s.r = q__1.r, s.i = q__1.i;
+ i__3 = jch - iskew * (jch + 1) + ioffg + (jch + 1)
+ * a_dim1;
+ ctemp.r = a[i__3].r, ctemp.i = a[i__3].i;
+ if (csym) {
+ ct.r = c.r, ct.i = c.i;
+ st.r = s.r, st.i = s.i;
+ } else {
+ r_cnjg(&q__1, &ctemp);
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ r_cnjg(&q__1, &c);
+ ct.r = q__1.r, ct.i = q__1.i;
+ r_cnjg(&q__1, &s);
+ st.r = q__1.r, st.i = q__1.i;
+ }
+ i__3 = k + 2;
+ clarot_slu(&c_true, &c_true, &c_true, &i__3, &c, &s,
+ &a[(1 - iskew) * jch + ioffg + jch *
+ a_dim1], &ilda, &ctemp, &extra);
+/* Computing MAX */
+ i__3 = 1, i__5 = jch - k;
+ irow = max(i__3,i__5);
+/* Computing MIN */
+ i__3 = jch + 1, i__5 = k + 2;
+ il = min(i__3,i__5);
+ extra.r = 0.f, extra.i = 0.f;
+ L__1 = jch > k;
+ clarot_slu(&c_false, &L__1, &c_true, &il, &ct, &st, &
+ a[irow - iskew * jch + ioffg + jch *
+ a_dim1], &ilda, &extra, &ctemp);
+ icol = jch;
+/* L180: */
+ }
+/* L190: */
+ }
+/* L200: */
+ }
+
+/* If we need lower triangle, copy from upper. No
+te that
+ the order of copying is chosen to work for 'q'
+ -> 'b' */
+
+ if (ipack != ipackg && ipack != 3) {
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ irow = ioffst - iskew * jc;
+ if (csym) {
+/* Computing MIN */
+ i__2 = *n, i__3 = jc + uub;
+ i__4 = min(i__2,i__3);
+ for (jr = jc; jr <= i__4; ++jr) {
+ i__2 = jr + irow + jc * a_dim1;
+ i__3 = jc - iskew * jr + ioffg + jr * a_dim1;
+ a[i__2].r = a[i__3].r, a[i__2].i = a[i__3].i;
+/* L210: */
+ }
+ } else {
+/* Computing MIN */
+ i__2 = *n, i__3 = jc + uub;
+ i__4 = min(i__2,i__3);
+ for (jr = jc; jr <= i__4; ++jr) {
+ i__2 = jr + irow + jc * a_dim1;
+ r_cnjg(&q__1, &a[jc - iskew * jr + ioffg + jr
+ * a_dim1]);
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+/* L220: */
+ }
+ }
+/* L230: */
+ }
+ if (ipack == 5) {
+ i__1 = *n;
+ for (jc = *n - uub + 1; jc <= i__1; ++jc) {
+ i__4 = uub + 1;
+ for (jr = *n + 2 - jc; jr <= i__4; ++jr) {
+ i__2 = jr + jc * a_dim1;
+ a[i__2].r = 0.f, a[i__2].i = 0.f;
+/* L240: */
+ }
+/* L250: */
+ }
+ }
+ if (ipackg == 6) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+ }
+ } else {
+
+/* Bottom-Up -- Generate Lower triangle only */
+
+ if (ipack >= 5) {
+ ipackg = 5;
+ if (ipack == 6) {
+ ioffg = 1;
+ }
+ } else {
+ ipackg = 2;
+ }
+
+ i__1 = mnmin;
+ for (j = 1; j <= i__1; ++j) {
+ i__4 = (1 - iskew) * j + ioffg + j * a_dim1;
+ i__2 = j;
+ q__1.r = d[i__2], q__1.i = 0.f;
+ a[i__4].r = q__1.r, a[i__4].i = q__1.i;
+/* L260: */
+ }
+
+ i__1 = uub;
+ for (k = 1; k <= i__1; ++k) {
+ for (jc = *n - 1; jc >= 1; --jc) {
+/* Computing MIN */
+ i__4 = *n + 1 - jc, i__2 = k + 2;
+ il = min(i__4,i__2);
+ extra.r = 0.f, extra.i = 0.f;
+ i__4 = (1 - iskew) * jc + 1 + ioffg + jc * a_dim1;
+ ctemp.r = a[i__4].r, ctemp.i = a[i__4].i;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ d__1 = cos(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ c.r = q__1.r, c.i = q__1.i;
+ d__1 = sin(angle);
+ clarnd_slu(&q__2, &c__5, &iseed[1]);
+ q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
+ s.r = q__1.r, s.i = q__1.i;
+ if (csym) {
+ ct.r = c.r, ct.i = c.i;
+ st.r = s.r, st.i = s.i;
+ } else {
+ r_cnjg(&q__1, &ctemp);
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ r_cnjg(&q__1, &c);
+ ct.r = q__1.r, ct.i = q__1.i;
+ r_cnjg(&q__1, &s);
+ st.r = q__1.r, st.i = q__1.i;
+ }
+ L__1 = *n - jc > k;
+ clarot_slu(&c_false, &c_true, &L__1, &il, &c, &s, &a[(1
+ - iskew) * jc + ioffg + jc * a_dim1], &ilda, &
+ ctemp, &extra);
+/* Computing MAX */
+ i__4 = 1, i__2 = jc - k + 1;
+ icol = max(i__4,i__2);
+ i__4 = jc + 2 - icol;
+ clarot_slu(&c_true, &c_false, &c_true, &i__4, &ct, &st, &
+ a[jc - iskew * icol + ioffg + icol * a_dim1],
+ &ilda, &dummy, &ctemp);
+
+/* Chase EXTRA back down the matrix
+ */
+
+ icol = jc;
+ i__4 = *n - 1;
+ i__2 = k;
+ for (jch = jc + k; i__2 < 0 ? jch >= i__4 : jch <=
+ i__4; jch += i__2) {
+ clartg_slu(&a[jch - iskew * icol + ioffg + icol *
+ a_dim1], &extra, &realc, &s, &dummy);
+ clarnd_slu(&q__1, &c__5, &iseed[1]);
+ dummy.r = q__1.r, dummy.i = q__1.i;
+ q__1.r = realc * dummy.r, q__1.i = realc *
+ dummy.i;
+ c.r = q__1.r, c.i = q__1.i;
+ q__1.r = s.r * dummy.r - s.i * dummy.i, q__1.i =
+ s.r * dummy.i + s.i * dummy.r;
+ s.r = q__1.r, s.i = q__1.i;
+ i__3 = (1 - iskew) * jch + 1 + ioffg + jch *
+ a_dim1;
+ ctemp.r = a[i__3].r, ctemp.i = a[i__3].i;
+ if (csym) {
+ ct.r = c.r, ct.i = c.i;
+ st.r = s.r, st.i = s.i;
+ } else {
+ r_cnjg(&q__1, &ctemp);
+ ctemp.r = q__1.r, ctemp.i = q__1.i;
+ r_cnjg(&q__1, &c);
+ ct.r = q__1.r, ct.i = q__1.i;
+ r_cnjg(&q__1, &s);
+ st.r = q__1.r, st.i = q__1.i;
+ }
+ i__3 = k + 2;
+ clarot_slu(&c_true, &c_true, &c_true, &i__3, &c, &s,
+ &a[jch - iskew * icol + ioffg + icol *
+ a_dim1], &ilda, &extra, &ctemp);
+/* Computing MIN */
+ i__3 = *n + 1 - jch, i__5 = k + 2;
+ il = min(i__3,i__5);
+ extra.r = 0.f, extra.i = 0.f;
+ L__1 = *n - jch > k;
+ clarot_slu(&c_false, &c_true, &L__1, &il, &ct, &st, &
+ a[(1 - iskew) * jch + ioffg + jch *
+ a_dim1], &ilda, &ctemp, &extra);
+ icol = jch;
+/* L270: */
+ }
+/* L280: */
+ }
+/* L290: */
+ }
+
+/* If we need upper triangle, copy from lower. No
+te that
+ the order of copying is chosen to work for 'b'
+ -> 'q' */
+
+ if (ipack != ipackg && ipack != 4) {
+ for (jc = *n; jc >= 1; --jc) {
+ irow = ioffst - iskew * jc;
+ if (csym) {
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - uub;
+ i__1 = max(i__2,i__4);
+ for (jr = jc; jr >= i__1; --jr) {
+ i__2 = jr + irow + jc * a_dim1;
+ i__4 = jc - iskew * jr + ioffg + jr * a_dim1;
+ a[i__2].r = a[i__4].r, a[i__2].i = a[i__4].i;
+/* L300: */
+ }
+ } else {
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - uub;
+ i__1 = max(i__2,i__4);
+ for (jr = jc; jr >= i__1; --jr) {
+ i__2 = jr + irow + jc * a_dim1;
+ r_cnjg(&q__1, &a[jc - iskew * jr + ioffg + jr
+ * a_dim1]);
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+/* L310: */
+ }
+ }
+/* L320: */
+ }
+ if (ipack == 6) {
+ i__1 = uub;
+ for (jc = 1; jc <= i__1; ++jc) {
+ i__2 = uub + 1 - jc;
+ for (jr = 1; jr <= i__2; ++jr) {
+ i__4 = jr + jc * a_dim1;
+ a[i__4].r = 0.f, a[i__4].i = 0.f;
+/* L330: */
+ }
+/* L340: */
+ }
+ }
+ if (ipackg == 5) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+ }
+ }
+
+/* Ensure that the diagonal is real if Hermitian */
+
+ if (! csym) {
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ irow = ioffst + (1 - iskew) * jc;
+ i__2 = irow + jc * a_dim1;
+ i__4 = irow + jc * a_dim1;
+ d__1 = a[i__4].r;
+ q__1.r = d__1, q__1.i = 0.f;
+ a[i__2].r = q__1.r, a[i__2].i = q__1.i;
+/* L350: */
+ }
+ }
+
+ }
+
+ } else {
+
+/* 4) Generate Banded Matrix by first
+ Rotating by random Unitary matrices,
+ then reducing the bandwidth using Householder
+ transformations.
+
+ Note: we should get here only if LDA .ge. N */
+
+ if (isym == 1) {
+
+/* Non-symmetric -- A = U D V */
+
+ clagge_slu(&mr, &nc, &llb, &uub, &d[1], &a[a_offset], lda, &iseed[1],
+ &work[1], &iinfo);
+ } else {
+
+/* Symmetric -- A = U D U' or
+ Hermitian -- A = U D U* */
+
+ if (csym) {
+ clagsy_slu(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1]
+ , &iinfo);
+ } else {
+ claghe_slu(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1]
+ , &iinfo);
+ }
+ }
+
+ if (iinfo != 0) {
+ *info = 3;
+ return 0;
+ }
+ }
+
+/* 5) Pack the matrix */
+
+ if (ipack != ipackg) {
+ if (ipack == 1) {
+
+/* 'U' -- Upper triangular, not packed */
+
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__4 = i + j * a_dim1;
+ a[i__4].r = 0.f, a[i__4].i = 0.f;
+/* L360: */
+ }
+/* L370: */
+ }
+
+ } else if (ipack == 2) {
+
+/* 'L' -- Lower triangular, not packed */
+
+ i__1 = *m;
+ for (j = 2; j <= i__1; ++j) {
+ i__2 = j - 1;
+ for (i = 1; i <= i__2; ++i) {
+ i__4 = i + j * a_dim1;
+ a[i__4].r = 0.f, a[i__4].i = 0.f;
+/* L380: */
+ }
+/* L390: */
+ }
+
+ } else if (ipack == 3) {
+
+/* 'C' -- Upper triangle packed Columnwise. */
+
+ icol = 1;
+ irow = 0;
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = j;
+ for (i = 1; i <= i__2; ++i) {
+ ++irow;
+ if (irow > *lda) {
+ irow = 1;
+ ++icol;
+ }
+ i__4 = irow + icol * a_dim1;
+ i__3 = i + j * a_dim1;
+ a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
+/* L400: */
+ }
+/* L410: */
+ }
+
+ } else if (ipack == 4) {
+
+/* 'R' -- Lower triangle packed Columnwise. */
+
+ icol = 1;
+ irow = 0;
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = j; i <= i__2; ++i) {
+ ++irow;
+ if (irow > *lda) {
+ irow = 1;
+ ++icol;
+ }
+ i__4 = irow + icol * a_dim1;
+ i__3 = i + j * a_dim1;
+ a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
+/* L420: */
+ }
+/* L430: */
+ }
+
+ } else if (ipack >= 5) {
+
+/* 'B' -- The lower triangle is packed as a band matrix.
+
+ 'Q' -- The upper triangle is packed as a band matrix.
+
+ 'Z' -- The whole matrix is packed as a band matrix.
+*/
+
+ if (ipack == 5) {
+ uub = 0;
+ }
+ if (ipack == 6) {
+ llb = 0;
+ }
+
+ i__1 = uub;
+ for (j = 1; j <= i__1; ++j) {
+/* Computing MIN */
+ i__2 = j + llb;
+ for (i = min(i__2,*m); i >= 1; --i) {
+ i__2 = i - j + uub + 1 + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ a[i__2].r = a[i__4].r, a[i__2].i = a[i__4].i;
+/* L440: */
+ }
+/* L450: */
+ }
+
+ i__1 = *n;
+ for (j = uub + 2; j <= i__1; ++j) {
+/* Computing MIN */
+ i__4 = j + llb;
+ i__2 = min(i__4,*m);
+ for (i = j - uub; i <= i__2; ++i) {
+ i__4 = i - j + uub + 1 + j * a_dim1;
+ i__3 = i + j * a_dim1;
+ a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
+/* L460: */
+ }
+/* L470: */
+ }
+ }
+
+/* If packed, zero out extraneous elements.
+
+ Symmetric/Triangular Packed --
+ zero out everything after A(IROW,ICOL) */
+
+ if (ipack == 3 || ipack == 4) {
+ i__1 = *m;
+ for (jc = icol; jc <= i__1; ++jc) {
+ i__2 = *lda;
+ for (jr = irow + 1; jr <= i__2; ++jr) {
+ i__4 = jr + jc * a_dim1;
+ a[i__4].r = 0.f, a[i__4].i = 0.f;
+/* L480: */
+ }
+ irow = 0;
+/* L490: */
+ }
+
+ } else if (ipack >= 5) {
+
+/* Packed Band --
+ 1st row is now in A( UUB+2-j, j), zero above it
+ m-th row is now in A( M+UUB-j,j), zero below it
+ last non-zero diagonal is now in A( UUB+LLB+1,j ),
+
+ zero below it, too. */
+
+ ir1 = uub + llb + 2;
+ ir2 = uub + *m + 2;
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ i__2 = uub + 1 - jc;
+ for (jr = 1; jr <= i__2; ++jr) {
+ i__4 = jr + jc * a_dim1;
+ a[i__4].r = 0.f, a[i__4].i = 0.f;
+/* L500: */
+ }
+/* Computing MAX
+ Computing MIN */
+ i__3 = ir1, i__5 = ir2 - jc;
+ i__2 = 1, i__4 = min(i__3,i__5);
+ i__6 = *lda;
+ for (jr = max(i__2,i__4); jr <= i__6; ++jr) {
+ i__2 = jr + jc * a_dim1;
+ a[i__2].r = 0.f, a[i__2].i = 0.f;
+/* L510: */
+ }
+/* L520: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of CLATMS */
+
+} /* clatms_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/csymv.c b/SuperLU_5.2.0/TESTING/MATGEN/csymv.c
new file mode 100644
index 0000000..ab167e4
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/csymv.c
@@ -0,0 +1,407 @@
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int csymv_sluslu(char *uplo, integer *n, complex *alpha, complex *
+ a, integer *lda, complex *x, integer *incx, complex *beta, complex *y,
+ integer *incy)
+{
+/* -- 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
+ =======
+
+ CSYMV performs the matrix-vector operation
+
+ y := alpha*A*x + beta*y,
+
+ where alpha and beta are scalars, x and y are n element vectors and
+ A is an n by n symmetric matrix.
+
+ Arguments
+ ==========
+
+ UPLO - CHARACTER*1
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - COMPLEX array, dimension ( LDA, N )
+ Before entry, with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the symmetric matrix and the strictly
+ lower triangular part of A is not referenced.
+ Before entry, with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the symmetric matrix and the strictly
+ upper triangular part of A is not referenced.
+ Unchanged on exit.
+
+ LDA - INTEGER
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, N ).
+ Unchanged on exit.
+
+ X - COMPLEX array, dimension at least
+ ( 1 + ( N - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the N-
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - COMPLEX
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - COMPLEX array, dimension at least
+ ( 1 + ( N - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y. On exit, Y is overwritten by the updated
+ vector y.
+
+ INCY - INTEGER
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ =====================================================================
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ complex q__1, q__2, q__3, q__4;
+ /* Local variables */
+ static integer info;
+ static complex temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+ extern int input_error(char *, int *);
+
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if ( strncmp(uplo, "U", 1)!=0 && ! strncmp(uplo, "L", 1)!=0) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*lda < max(1,*n)) {
+ info = 5;
+ } else if (*incx == 0) {
+ info = 7;
+ } else if (*incy == 0) {
+ info = 10;
+ }
+ if (info != 0) {
+ input_error("CSYMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || alpha->r == 0.f && alpha->i == 0.f && (beta->r == 1.f &&
+ beta->i == 0.f)) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y. */
+
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A.
+
+ First form y := beta*y. */
+
+ if (beta->r != 1.f || beta->i != 0.f) {
+ if (*incy == 1) {
+ if (beta->r == 0.f && beta->i == 0.f) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ Y(i).r = 0.f, Y(i).i = 0.f;
+/* L10: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ i__3 = i;
+ q__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
+ q__1.i = beta->r * Y(i).i + beta->i * Y(i)
+ .r;
+ Y(i).r = q__1.r, Y(i).i = q__1.i;
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (beta->r == 0.f && beta->i == 0.f) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = iy;
+ Y(iy).r = 0.f, Y(iy).i = 0.f;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = iy;
+ i__3 = iy;
+ q__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
+ q__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
+ .r;
+ Y(iy).r = q__1.r, Y(iy).i = q__1.i;
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (alpha->r == 0.f && alpha->i == 0.f) {
+ return 0;
+ }
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form y when A is stored in upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ q__1.r = alpha->r * X(j).r - alpha->i * X(j).i, q__1.i =
+ alpha->r * X(j).i + alpha->i * X(j).r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ temp2.r = 0.f, temp2.i = 0.f;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i + q__2.i;
+ Y(i).r = q__1.r, Y(i).i = q__1.i;
+ i__3 = i + j * a_dim1;
+ i__4 = i;
+ q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i).i,
+ q__2.i = A(i,j).r * X(i).i + A(i,j).i * X(
+ i).r;
+ q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
+ temp2.r = q__1.r, temp2.i = q__1.i;
+/* L50: */
+ }
+ i__2 = j;
+ i__3 = j;
+ i__4 = j + j * a_dim1;
+ q__3.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, q__3.i =
+ temp1.r * A(j,j).i + temp1.i * A(j,j).r;
+ q__2.r = Y(j).r + q__3.r, q__2.i = Y(j).i + q__3.i;
+ q__4.r = alpha->r * temp2.r - alpha->i * temp2.i, q__4.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
+ Y(j).r = q__1.r, Y(j).i = q__1.i;
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, q__1.i =
+ alpha->r * X(jx).i + alpha->i * X(jx).r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ temp2.r = 0.f, temp2.i = 0.f;
+ ix = kx;
+ iy = ky;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i + q__2.i;
+ Y(iy).r = q__1.r, Y(iy).i = q__1.i;
+ i__3 = i + j * a_dim1;
+ i__4 = ix;
+ q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix).i,
+ q__2.i = A(i,j).r * X(ix).i + A(i,j).i * X(
+ ix).r;
+ q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
+ temp2.r = q__1.r, temp2.i = q__1.i;
+ ix += *incx;
+ iy += *incy;
+/* L70: */
+ }
+ i__2 = jy;
+ i__3 = jy;
+ i__4 = j + j * a_dim1;
+ q__3.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, q__3.i =
+ temp1.r * A(j,j).i + temp1.i * A(j,j).r;
+ q__2.r = Y(jy).r + q__3.r, q__2.i = Y(jy).i + q__3.i;
+ q__4.r = alpha->r * temp2.r - alpha->i * temp2.i, q__4.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
+ Y(jy).r = q__1.r, Y(jy).i = q__1.i;
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y when A is stored in lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ q__1.r = alpha->r * X(j).r - alpha->i * X(j).i, q__1.i =
+ alpha->r * X(j).i + alpha->i * X(j).r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ temp2.r = 0.f, temp2.i = 0.f;
+ i__2 = j;
+ i__3 = j;
+ i__4 = j + j * a_dim1;
+ q__2.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, q__2.i =
+ temp1.r * A(j,j).i + temp1.i * A(j,j).r;
+ q__1.r = Y(j).r + q__2.r, q__1.i = Y(j).i + q__2.i;
+ Y(j).r = q__1.r, Y(j).i = q__1.i;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i + q__2.i;
+ Y(i).r = q__1.r, Y(i).i = q__1.i;
+ i__3 = i + j * a_dim1;
+ i__4 = i;
+ q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i).i,
+ q__2.i = A(i,j).r * X(i).i + A(i,j).i * X(
+ i).r;
+ q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
+ temp2.r = q__1.r, temp2.i = q__1.i;
+/* L90: */
+ }
+ i__2 = j;
+ i__3 = j;
+ q__2.r = alpha->r * temp2.r - alpha->i * temp2.i, q__2.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ q__1.r = Y(j).r + q__2.r, q__1.i = Y(j).i + q__2.i;
+ Y(j).r = q__1.r, Y(j).i = q__1.i;
+/* L100: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, q__1.i =
+ alpha->r * X(jx).i + alpha->i * X(jx).r;
+ temp1.r = q__1.r, temp1.i = q__1.i;
+ temp2.r = 0.f, temp2.i = 0.f;
+ i__2 = jy;
+ i__3 = jy;
+ i__4 = j + j * a_dim1;
+ q__2.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, q__2.i =
+ temp1.r * A(j,j).i + temp1.i * A(j,j).r;
+ q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
+ Y(jy).r = q__1.r, Y(jy).i = q__1.i;
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ iy += *incy;
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i + q__2.i;
+ Y(iy).r = q__1.r, Y(iy).i = q__1.i;
+ i__3 = i + j * a_dim1;
+ i__4 = ix;
+ q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix).i,
+ q__2.i = A(i,j).r * X(ix).i + A(i,j).i * X(
+ ix).r;
+ q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
+ temp2.r = q__1.r, temp2.i = q__1.i;
+/* L110: */
+ }
+ i__2 = jy;
+ i__3 = jy;
+ q__2.r = alpha->r * temp2.r - alpha->i * temp2.i, q__2.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
+ Y(jy).r = q__1.r, Y(jy).i = q__1.i;
+ jx += *incx;
+ jy += *incy;
+/* L120: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of CSYMV */
+
+} /* csymv_sluslu */
+
diff --git a/TESTING/MATGEN/d_lg10.c b/SuperLU_5.2.0/TESTING/MATGEN/d_lg10.c
similarity index 100%
rename from TESTING/MATGEN/d_lg10.c
rename to SuperLU_5.2.0/TESTING/MATGEN/d_lg10.c
diff --git a/TESTING/MATGEN/d_sign.c b/SuperLU_5.2.0/TESTING/MATGEN/d_sign.c
similarity index 100%
rename from TESTING/MATGEN/d_sign.c
rename to SuperLU_5.2.0/TESTING/MATGEN/d_sign.c
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlabad.c b/SuperLU_5.2.0/TESTING/MATGEN/dlabad.c
new file mode 100644
index 0000000..597586e
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlabad.c
@@ -0,0 +1,60 @@
+#include "f2c.h"
+
+/* Subroutine */ int dlabad_slu(doublereal *small, doublereal *large)
+{
+/* -- 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
+ =======
+
+ DLABAD takes as input the values computed by SLAMCH for underflow and
+
+ overflow, and returns the square root of each of these values if the
+
+ log of LARGE is sufficiently large. This subroutine is intended to
+ identify machines with a large exponent range, such as the Crays, and
+
+ redefine the underflow and overflow limits to be the square roots of
+
+ the values computed by DLAMCH. This subroutine is needed because
+ DLAMCH does not compensate for poor arithmetic in the upper half of
+ the exponent range, as is found on a Cray.
+
+ Arguments
+ =========
+
+ SMALL (input/output) DOUBLE PRECISION
+ On entry, the underflow threshold as computed by DLAMCH.
+ On exit, if LOG10(LARGE) is sufficiently large, the square
+ root of SMALL, otherwise unchanged.
+
+ LARGE (input/output) DOUBLE PRECISION
+ On entry, the overflow threshold as computed by DLAMCH.
+ On exit, if LOG10(LARGE) is sufficiently large, the square
+ root of LARGE, otherwise unchanged.
+
+ =====================================================================
+
+
+
+ If it looks like we're on a Cray, take the square root of
+ SMALL and LARGE to avoid overflow and underflow problems. */
+ /* Builtin functions */
+ double d_lg10(doublereal *), sqrt(doublereal);
+
+
+ if (d_lg10(large) > 2e3) {
+ *small = sqrt(*small);
+ *large = sqrt(*large);
+ }
+
+ return 0;
+
+/* End of DLABAD */
+
+} /* dlabad_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlagge.c b/SuperLU_5.2.0/TESTING/MATGEN/dlagge.c
new file mode 100644
index 0000000..ffde0d7
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlagge.c
@@ -0,0 +1,402 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__3 = 3;
+static integer c__1 = 1;
+static doublereal c_b11 = 1.;
+static doublereal c_b13 = 0.;
+
+/* Subroutine */ int dlagge_slu(integer *m, integer *n, integer *kl, integer *ku,
+ doublereal *d, doublereal *a, integer *lda, integer *iseed,
+ doublereal *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ doublereal d__1;
+
+ /* Builtin functions */
+ double d_sign(doublereal *, doublereal *);
+
+ /* Local variables */
+ extern /* Subroutine */ int dger_(integer *, integer *, doublereal *,
+ doublereal *, integer *, doublereal *, integer *, doublereal *,
+ integer *);
+ extern doublereal dnrm2_(integer *, doublereal *, integer *);
+ static integer i, j;
+ extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
+ integer *), dgemv_(char *, integer *, integer *, doublereal *,
+ doublereal *, integer *, doublereal *, integer *, doublereal *,
+ doublereal *, integer *);
+ static doublereal wa, wb, wn;
+ extern /* Subroutine */ int dlarnv_slu(integer *, integer *, integer *, doublereal *);
+ extern int input_error(char *, int *);
+ static doublereal tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0)
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ DLAGGE generates a real general m by n matrix A, by pre- and post-
+ multiplying a real diagonal matrix D with random orthogonal matrices:
+
+ A = U*D*V. The lower and upper bandwidths may then be reduced to
+ kl and ku by additional orthogonal transformations.
+
+ Arguments
+ =========
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ KL (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= KL <= M-1.
+
+ KU (input) INTEGER
+ The number of nonzero superdiagonals within the band of A.
+ 0 <= KU <= N-1.
+
+ D (input) DOUBLE PRECISION array, dimension (min(M,N))
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) DOUBLE PRECISION array, dimension (LDA,N)
+ The generated m by n matrix A.
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= M.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) DOUBLE PRECISION array, dimension (M+N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*m < 0) {
+ *info = -1;
+ } else if (*n < 0) {
+ *info = -2;
+ } else if (*kl < 0 || *kl > *m - 1) {
+ *info = -3;
+ } else if (*ku < 0 || *ku > *n - 1) {
+ *info = -4;
+ } else if (*lda < max(1,*m)) {
+ *info = -7;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("DLAGGE", &i__1);
+ return 0;
+ }
+
+/* initialize A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = 1; i <= i__2; ++i) {
+ a[i + j * a_dim1] = 0.;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = min(*m,*n);
+ for (i = 1; i <= i__1; ++i) {
+ a[i + i * a_dim1] = d[i];
+/* L30: */
+ }
+
+/* pre- and post-multiply A by random orthogonal matrices */
+
+ for (i = min(*m,*n); i >= 1; --i) {
+ if (i < *m) {
+
+/* generate random reflection */
+
+ i__1 = *m - i + 1;
+ dlarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *m - i + 1;
+ wn = dnrm2_(&i__1, &work[1], &c__1);
+ wa = d_sign(&wn, &work[1]);
+ if (wn == 0.) {
+ tau = 0.;
+ } else {
+ wb = work[1] + wa;
+ i__1 = *m - i;
+ d__1 = 1. / wb;
+ dscal_(&i__1, &d__1, &work[2], &c__1);
+ work[1] = 1.;
+ tau = wb / wa;
+ }
+
+/* multiply A(i:m,i:n) by random reflection from the lef
+t */
+
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ dgemv_("Transpose", &i__1, &i__2, &c_b11, &a[i + i * a_dim1], lda,
+ &work[1], &c__1, &c_b13, &work[*m + 1], &c__1);
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ d__1 = -tau;
+ dger_(&i__1, &i__2, &d__1, &work[1], &c__1, &work[*m + 1], &c__1,
+ &a[i + i * a_dim1], lda);
+ }
+ if (i < *n) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ dlarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = dnrm2_(&i__1, &work[1], &c__1);
+ wa = d_sign(&wn, &work[1]);
+ if (wn == 0.) {
+ tau = 0.;
+ } else {
+ wb = work[1] + wa;
+ i__1 = *n - i;
+ d__1 = 1. / wb;
+ dscal_(&i__1, &d__1, &work[2], &c__1);
+ work[1] = 1.;
+ tau = wb / wa;
+ }
+
+/* multiply A(i:m,i:n) by random reflection from the rig
+ht */
+
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ dgemv_("No transpose", &i__1, &i__2, &c_b11, &a[i + i * a_dim1],
+ lda, &work[1], &c__1, &c_b13, &work[*n + 1], &c__1);
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ d__1 = -tau;
+ dger_(&i__1, &i__2, &d__1, &work[*n + 1], &c__1, &work[1], &c__1,
+ &a[i + i * a_dim1], lda);
+ }
+/* L40: */
+ }
+
+/* Reduce number of subdiagonals to KL and number of superdiagonals
+ to KU
+
+ Computing MAX */
+ i__2 = *m - 1 - *kl, i__3 = *n - 1 - *ku;
+ i__1 = max(i__2,i__3);
+ for (i = 1; i <= i__1; ++i) {
+ if (*kl <= *ku) {
+
+/* annihilate subdiagonal elements first (necessary if K
+L = 0)
+
+ Computing MIN */
+ i__2 = *m - 1 - *kl;
+ if (i <= min(i__2,*n)) {
+
+/* generate reflection to annihilate A(kl+i+1:m,i
+) */
+
+ i__2 = *m - *kl - i + 1;
+ wn = dnrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
+ wa = d_sign(&wn, &a[*kl + i + i * a_dim1]);
+ if (wn == 0.) {
+ tau = 0.;
+ } else {
+ wb = a[*kl + i + i * a_dim1] + wa;
+ i__2 = *m - *kl - i;
+ d__1 = 1. / wb;
+ dscal_(&i__2, &d__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
+ a[*kl + i + i * a_dim1] = 1.;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(kl+i:m,i+1:n) from the l
+eft */
+
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ dgemv_("Transpose", &i__2, &i__3, &c_b11, &a[*kl + i + (i + 1)
+ * a_dim1], lda, &a[*kl + i + i * a_dim1], &c__1, &
+ c_b13, &work[1], &c__1);
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ d__1 = -tau;
+ dger_(&i__2, &i__3, &d__1, &a[*kl + i + i * a_dim1], &c__1, &
+ work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
+ a[*kl + i + i * a_dim1] = -wa;
+ }
+
+/* Computing MIN */
+ i__2 = *n - 1 - *ku;
+ if (i <= min(i__2,*m)) {
+
+/* generate reflection to annihilate A(i,ku+i+1:n
+) */
+
+ i__2 = *n - *ku - i + 1;
+ wn = dnrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ wa = d_sign(&wn, &a[i + (*ku + i) * a_dim1]);
+ if (wn == 0.) {
+ tau = 0.;
+ } else {
+ wb = a[i + (*ku + i) * a_dim1] + wa;
+ i__2 = *n - *ku - i;
+ d__1 = 1. / wb;
+ dscal_(&i__2, &d__1, &a[i + (*ku + i + 1) * a_dim1], lda);
+ a[i + (*ku + i) * a_dim1] = 1.;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(i+1:m,ku+i:n) from the r
+ight */
+
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ dgemv_("No transpose", &i__2, &i__3, &c_b11, &a[i + 1 + (*ku
+ + i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda,
+ &c_b13, &work[1], &c__1);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ d__1 = -tau;
+ dger_(&i__2, &i__3, &d__1, &work[1], &c__1, &a[i + (*ku + i) *
+ a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
+ a[i + (*ku + i) * a_dim1] = -wa;
+ }
+ } else {
+
+/* annihilate superdiagonal elements first (necessary if
+
+ KU = 0)
+
+ Computing MIN */
+ i__2 = *n - 1 - *ku;
+ if (i <= min(i__2,*m)) {
+
+/* generate reflection to annihilate A(i,ku+i+1:n
+) */
+
+ i__2 = *n - *ku - i + 1;
+ wn = dnrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ wa = d_sign(&wn, &a[i + (*ku + i) * a_dim1]);
+ if (wn == 0.) {
+ tau = 0.;
+ } else {
+ wb = a[i + (*ku + i) * a_dim1] + wa;
+ i__2 = *n - *ku - i;
+ d__1 = 1. / wb;
+ dscal_(&i__2, &d__1, &a[i + (*ku + i + 1) * a_dim1], lda);
+ a[i + (*ku + i) * a_dim1] = 1.;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(i+1:m,ku+i:n) from the r
+ight */
+
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ dgemv_("No transpose", &i__2, &i__3, &c_b11, &a[i + 1 + (*ku
+ + i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda,
+ &c_b13, &work[1], &c__1);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ d__1 = -tau;
+ dger_(&i__2, &i__3, &d__1, &work[1], &c__1, &a[i + (*ku + i) *
+ a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
+ a[i + (*ku + i) * a_dim1] = -wa;
+ }
+
+/* Computing MIN */
+ i__2 = *m - 1 - *kl;
+ if (i <= min(i__2,*n)) {
+
+/* generate reflection to annihilate A(kl+i+1:m,i
+) */
+
+ i__2 = *m - *kl - i + 1;
+ wn = dnrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
+ wa = d_sign(&wn, &a[*kl + i + i * a_dim1]);
+ if (wn == 0.) {
+ tau = 0.;
+ } else {
+ wb = a[*kl + i + i * a_dim1] + wa;
+ i__2 = *m - *kl - i;
+ d__1 = 1. / wb;
+ dscal_(&i__2, &d__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
+ a[*kl + i + i * a_dim1] = 1.;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(kl+i:m,i+1:n) from the l
+eft */
+
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ dgemv_("Transpose", &i__2, &i__3, &c_b11, &a[*kl + i + (i + 1)
+ * a_dim1], lda, &a[*kl + i + i * a_dim1], &c__1, &
+ c_b13, &work[1], &c__1);
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ d__1 = -tau;
+ dger_(&i__2, &i__3, &d__1, &a[*kl + i + i * a_dim1], &c__1, &
+ work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
+ a[*kl + i + i * a_dim1] = -wa;
+ }
+ }
+
+ i__2 = *m;
+ for (j = *kl + i + 1; j <= i__2; ++j) {
+ a[j + i * a_dim1] = 0.;
+/* L50: */
+ }
+
+ i__2 = *n;
+ for (j = *ku + i + 1; j <= i__2; ++j) {
+ a[i + j * a_dim1] = 0.;
+/* L60: */
+ }
+/* L70: */
+ }
+ return 0;
+
+/* End of DLAGGE */
+
+} /* dlagge_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlagsy.c b/SuperLU_5.2.0/TESTING/MATGEN/dlagsy.c
new file mode 100644
index 0000000..c56ec79
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlagsy.c
@@ -0,0 +1,276 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__3 = 3;
+static integer c__1 = 1;
+static doublereal c_b12 = 0.;
+static doublereal c_b19 = -1.;
+static doublereal c_b26 = 1.;
+
+/* Subroutine */ int dlagsy_slu(integer *n, integer *k, doublereal *d,
+ doublereal *a, integer *lda, integer *iseed, doublereal *work,
+ integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ doublereal d__1;
+
+ /* Builtin functions */
+ double d_sign(doublereal *, doublereal *);
+
+ /* Local variables */
+ extern /* Subroutine */ int dger_(integer *, integer *, doublereal *,
+ doublereal *, integer *, doublereal *, integer *, doublereal *,
+ integer *);
+ extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *,
+ integer *), dnrm2_(integer *, doublereal *, integer *);
+ extern /* Subroutine */ int dsyr2_(char *, integer *, doublereal *,
+ doublereal *, integer *, doublereal *, integer *, doublereal *,
+ integer *);
+ static integer i, j;
+ static doublereal alpha;
+ extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
+ integer *), dgemv_(char *, integer *, integer *, doublereal *,
+ doublereal *, integer *, doublereal *, integer *, doublereal *,
+ doublereal *, integer *), daxpy_(integer *, doublereal *,
+ doublereal *, integer *, doublereal *, integer *), dsymv_(char *,
+ integer *, doublereal *, doublereal *, integer *, doublereal *,
+ integer *, doublereal *, doublereal *, integer *);
+ static doublereal wa, wb, wn;
+ extern /* Subroutine */ int dlarnv_slu(integer *, integer *, integer *, doublereal *);
+ extern int input_error(char *, int *);
+ static doublereal tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0)
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ DLAGSY generates a real symmetric matrix A, by pre- and post-
+ multiplying a real diagonal matrix D with a random orthogonal matrix:
+
+ A = U*D*U'. The semi-bandwidth may then be reduced to k by additional
+
+ orthogonal transformations.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ K (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= K <= N-1.
+
+ D (input) DOUBLE PRECISION array, dimension (N)
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) DOUBLE PRECISION array, dimension (LDA,N)
+ The generated n by n symmetric matrix A (the full matrix is
+ stored).
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) DOUBLE PRECISION array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*k < 0 || *k > *n - 1) {
+ *info = -2;
+ } else if (*lda < max(1,*n)) {
+ *info = -5;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("DLAGSY", &i__1);
+ return 0;
+ }
+
+/* initialize lower triangle of A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ a[i + j * a_dim1] = 0.;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ a[i + i * a_dim1] = d[i];
+/* L30: */
+ }
+
+/* Generate lower triangle of symmetric matrix */
+
+ for (i = *n - 1; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ dlarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = dnrm2_(&i__1, &work[1], &c__1);
+ wa = d_sign(&wn, &work[1]);
+ if (wn == 0.) {
+ tau = 0.;
+ } else {
+ wb = work[1] + wa;
+ i__1 = *n - i;
+ d__1 = 1. / wb;
+ dscal_(&i__1, &d__1, &work[2], &c__1);
+ work[1] = 1.;
+ tau = wb / wa;
+ }
+
+/* apply random reflection to A(i:n,i:n) from the left
+ and the right
+
+ compute y := tau * A * u */
+
+ i__1 = *n - i + 1;
+ dsymv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
+ &c_b12, &work[*n + 1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( y, u ) * u */
+
+ i__1 = *n - i + 1;
+ alpha = tau * -.5 * ddot_(&i__1, &work[*n + 1], &c__1, &work[1], &
+ c__1);
+ i__1 = *n - i + 1;
+ daxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
+
+/* apply the transformation as a rank-2 update to A(i:n,i:n) */
+
+ i__1 = *n - i + 1;
+ dsyr2_("Lower", &i__1, &c_b19, &work[1], &c__1, &work[*n + 1], &c__1,
+ &a[i + i * a_dim1], lda);
+/* L40: */
+ }
+
+/* Reduce number of subdiagonals to K */
+
+ i__1 = *n - 1 - *k;
+ for (i = 1; i <= i__1; ++i) {
+
+/* generate reflection to annihilate A(k+i+1:n,i) */
+
+ i__2 = *n - *k - i + 1;
+ wn = dnrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
+ wa = d_sign(&wn, &a[*k + i + i * a_dim1]);
+ if (wn == 0.) {
+ tau = 0.;
+ } else {
+ wb = a[*k + i + i * a_dim1] + wa;
+ i__2 = *n - *k - i;
+ d__1 = 1. / wb;
+ dscal_(&i__2, &d__1, &a[*k + i + 1 + i * a_dim1], &c__1);
+ a[*k + i + i * a_dim1] = 1.;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
+
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ dgemv_("Transpose", &i__2, &i__3, &c_b26, &a[*k + i + (i + 1) *
+ a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b12, &work[1]
+ , &c__1);
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ d__1 = -tau;
+ dger_(&i__2, &i__3, &d__1, &a[*k + i + i * a_dim1], &c__1, &work[1], &
+ c__1, &a[*k + i + (i + 1) * a_dim1], lda);
+
+/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
+ht
+
+ compute y := tau * A * u */
+
+ i__2 = *n - *k - i + 1;
+ dsymv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
+ k + i + i * a_dim1], &c__1, &c_b12, &work[1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( y, u ) * u */
+
+ i__2 = *n - *k - i + 1;
+ alpha = tau * -.5 * ddot_(&i__2, &work[1], &c__1, &a[*k + i + i *
+ a_dim1], &c__1);
+ i__2 = *n - *k - i + 1;
+ daxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
+ ;
+
+/* apply symmetric rank-2 update to A(k+i:n,k+i:n) */
+
+ i__2 = *n - *k - i + 1;
+ dsyr2_("Lower", &i__2, &c_b19, &a[*k + i + i * a_dim1], &c__1, &work[
+ 1], &c__1, &a[*k + i + (*k + i) * a_dim1], lda);
+
+ a[*k + i + i * a_dim1] = -wa;
+ i__2 = *n;
+ for (j = *k + i + 1; j <= i__2; ++j) {
+ a[j + i * a_dim1] = 0.;
+/* L50: */
+ }
+/* L60: */
+ }
+
+/* Store full symmetric matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ a[j + i * a_dim1] = a[i + j * a_dim1];
+/* L70: */
+ }
+/* L80: */
+ }
+ return 0;
+
+/* End of DLAGSY */
+
+} /* dlagsy_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlaran.c b/SuperLU_5.2.0/TESTING/MATGEN/dlaran.c
new file mode 100644
index 0000000..606f736
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlaran.c
@@ -0,0 +1,92 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+doublereal dlaran_slu(integer *iseed)
+{
+ /* System generated locals */
+ doublereal ret_val;
+
+ /* Local variables */
+ static integer it1, it2, it3, it4;
+
+
+/* -- LAPACK auxiliary routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ DLARAN returns a random real number from a uniform (0,1)
+ distribution.
+
+ Arguments
+ =========
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ Further Details
+ ===============
+
+ This routine uses a multiplicative congruential method with modulus
+ 2**48 and multiplier 33952834046453 (see G.S.Fishman,
+ 'Multiplicative congruential random number generators with modulus
+ 2**b: an exhaustive analysis for b = 32 and a partial analysis for
+ b = 48', Math. Comp. 189, pp 331-344, 1990).
+
+ 48-bit integers are stored in 4 integer array elements with 12 bits
+ per element. Hence the routine is portable across machines with
+ integers of 32 bits or more.
+
+ =====================================================================
+
+
+
+ multiply the seed by the multiplier modulo 2**48
+
+ Parameter adjustments */
+ --iseed;
+
+ /* Function Body */
+ it4 = iseed[4] * 2549;
+ it3 = it4 / 4096;
+ it4 -= it3 << 12;
+ it3 = it3 + iseed[3] * 2549 + iseed[4] * 2508;
+ it2 = it3 / 4096;
+ it3 -= it2 << 12;
+ it2 = it2 + iseed[2] * 2549 + iseed[3] * 2508 + iseed[4] * 322;
+ it1 = it2 / 4096;
+ it2 -= it1 << 12;
+ it1 = it1 + iseed[1] * 2549 + iseed[2] * 2508 + iseed[3] * 322 + iseed[4]
+ * 494;
+ it1 %= 4096;
+
+/* return updated seed */
+
+ iseed[1] = it1;
+ iseed[2] = it2;
+ iseed[3] = it3;
+ iseed[4] = it4;
+
+/* convert 48-bit integer to a real number in the interval (0,1) */
+
+ ret_val = ((doublereal) it1 + ((doublereal) it2 + ((doublereal) it3 + (
+ doublereal) it4 * 2.44140625e-4) * 2.44140625e-4) * 2.44140625e-4)
+ * 2.44140625e-4;
+ return ret_val;
+
+/* End of DLARAN */
+
+} /* dlaran_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlarge.c b/SuperLU_5.2.0/TESTING/MATGEN/dlarge.c
new file mode 100644
index 0000000..a2a1ddd
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlarge.c
@@ -0,0 +1,154 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__3 = 3;
+static integer c__1 = 1;
+static doublereal c_b8 = 1.;
+static doublereal c_b10 = 0.;
+
+/* Subroutine */ int dlarge_slu(integer *n, doublereal *a, integer *lda, integer
+ *iseed, doublereal *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1;
+ doublereal d__1;
+
+ /* Builtin functions */
+ double d_sign(doublereal *, doublereal *);
+
+ /* Local variables */
+ extern /* Subroutine */ int dger_(integer *, integer *, doublereal *,
+ doublereal *, integer *, doublereal *, integer *, doublereal *,
+ integer *);
+ extern doublereal dnrm2_(integer *, doublereal *, integer *);
+ static integer i;
+ extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
+ integer *), dgemv_(char *, integer *, integer *, doublereal *,
+ doublereal *, integer *, doublereal *, integer *, doublereal *,
+ doublereal *, integer *);
+ static doublereal wa, wb, wn;
+ extern /* Subroutine */ int dlarnv_slu(integer *, integer *, integer *, doublereal *);
+ extern int input_error(char *, int *);
+ static doublereal tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0)
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ DLARGE pre- and post-multiplies a real general n by n matrix A
+ with a random orthogonal matrix: A = U*D*U'.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
+ On entry, the original n by n matrix A.
+ On exit, A is overwritten by U*A*U' for some random
+ orthogonal matrix U.
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) DOUBLE PRECISION array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*lda < max(1,*n)) {
+ *info = -3;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("DLARGE", &i__1);
+ return 0;
+ }
+
+/* pre- and post-multiply A by random orthogonal matrix */
+
+ for (i = *n; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ dlarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = dnrm2_(&i__1, &work[1], &c__1);
+ wa = d_sign(&wn, &work[1]);
+ if (wn == 0.) {
+ tau = 0.;
+ } else {
+ wb = work[1] + wa;
+ i__1 = *n - i;
+ d__1 = 1. / wb;
+ dscal_(&i__1, &d__1, &work[2], &c__1);
+ work[1] = 1.;
+ tau = wb / wa;
+ }
+
+/* multiply A(i:n,1:n) by random reflection from the left */
+
+ i__1 = *n - i + 1;
+ dgemv_("Transpose", &i__1, n, &c_b8, &a[i + a_dim1], lda, &work[1], &
+ c__1, &c_b10, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ d__1 = -tau;
+ dger_(&i__1, n, &d__1, &work[1], &c__1, &work[*n + 1], &c__1, &a[i +
+ a_dim1], lda);
+
+/* multiply A(1:n,i:n) by random reflection from the right */
+
+ i__1 = *n - i + 1;
+ dgemv_("No transpose", n, &i__1, &c_b8, &a[i * a_dim1 + 1], lda, &
+ work[1], &c__1, &c_b10, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ d__1 = -tau;
+ dger_(n, &i__1, &d__1, &work[*n + 1], &c__1, &work[1], &c__1, &a[i *
+ a_dim1 + 1], lda);
+/* L10: */
+ }
+ return 0;
+
+/* End of DLARGE */
+
+} /* dlarge_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlarnd.c b/SuperLU_5.2.0/TESTING/MATGEN/dlarnd.c
new file mode 100644
index 0000000..9dee811
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlarnd.c
@@ -0,0 +1,94 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+doublereal dlarnd_slu(integer *idist, integer *iseed)
+{
+ /* System generated locals */
+ doublereal ret_val;
+
+ /* Builtin functions */
+ double log(doublereal), sqrt(doublereal), cos(doublereal);
+
+ /* Local variables */
+ static doublereal t1, t2;
+ extern doublereal dlaran_slu(integer *);
+
+
+/* -- 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
+
+
+ Purpose
+ =======
+
+ DLARND returns a random real number from a uniform or normal
+ distribution.
+
+ Arguments
+ =========
+
+ IDIST (input) INTEGER
+ Specifies the distribution of the random numbers:
+ = 1: uniform (0,1)
+ = 2: uniform (-1,1)
+ = 3: normal (0,1)
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ Further Details
+ ===============
+
+ This routine calls the auxiliary routine DLARAN to generate a random
+
+ real number from a uniform (0,1) distribution. The Box-Muller method
+
+ is used to transform numbers from a uniform to a normal distribution.
+
+
+ =====================================================================
+
+
+
+ Generate a real random number from a uniform (0,1) distribution
+
+ Parameter adjustments */
+ --iseed;
+
+ /* Function Body */
+ t1 = dlaran_slu(&iseed[1]);
+
+ if (*idist == 1) {
+
+/* uniform (0,1) */
+
+ ret_val = t1;
+ } else if (*idist == 2) {
+
+/* uniform (-1,1) */
+
+ ret_val = t1 * 2. - 1.;
+ } else if (*idist == 3) {
+
+/* normal (0,1) */
+
+ t2 = dlaran_slu(&iseed[1]);
+ ret_val = sqrt(log(t1) * -2.) * cos(t2 *
+ 6.2831853071795864769252867663);
+ }
+ return ret_val;
+
+/* End of DLARND */
+
+} /* dlarnd_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlarnv.c b/SuperLU_5.2.0/TESTING/MATGEN/dlarnv.c
new file mode 100644
index 0000000..a32c635
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlarnv.c
@@ -0,0 +1,126 @@
+#include "f2c.h"
+
+/* Subroutine */ int dlarnv_slu(integer *idist, integer *iseed, integer *n,
+ doublereal *x)
+{
+/* -- 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
+
+
+ Purpose
+ =======
+
+ DLARNV returns a vector of n random real numbers from a uniform or
+ normal distribution.
+
+ Arguments
+ =========
+
+ IDIST (input) INTEGER
+ Specifies the distribution of the random numbers:
+ = 1: uniform (0,1)
+ = 2: uniform (-1,1)
+ = 3: normal (0,1)
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ N (input) INTEGER
+ The number of random numbers to be generated.
+
+ X (output) DOUBLE PRECISION array, dimension (N)
+ The generated random numbers.
+
+ Further Details
+ ===============
+
+ This routine calls the auxiliary routine DLARUV to generate random
+ real numbers from a uniform (0,1) distribution, in batches of up to
+ 128 using vectorisable code. The Box-Muller method is used to
+ transform numbers from a uniform to a normal distribution.
+
+ =====================================================================
+
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer i__1, i__2, i__3;
+ /* Builtin functions */
+ double log(doublereal), sqrt(doublereal), cos(doublereal);
+ /* Local variables */
+ static integer i;
+ static doublereal u[128];
+ static integer il, iv;
+ extern /* Subroutine */ int dlaruv_slu(integer *, integer *, doublereal *);
+ static integer il2;
+
+
+#define U(I) u[(I)]
+#define X(I) x[(I)-1]
+#define ISEED(I) iseed[(I)-1]
+
+
+ i__1 = *n;
+ for (iv = 1; iv <= *n; iv += 64) {
+/* Computing MIN */
+ i__2 = 64, i__3 = *n - iv + 1;
+ il = min(i__2,i__3);
+ if (*idist == 3) {
+ il2 = il << 1;
+ } else {
+ il2 = il;
+ }
+
+/* Call DLARUV to generate IL2 numbers from a uniform (0,1)
+ distribution (IL2 <= LV) */
+
+ dlaruv_slu(&ISEED(1), &il2, u);
+
+ if (*idist == 1) {
+
+/* Copy generated numbers */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ X(iv + i - 1) = U(i - 1);
+/* L10: */
+ }
+ } else if (*idist == 2) {
+
+/* Convert generated numbers to uniform (-1,1) distribut
+ion */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ X(iv + i - 1) = U(i - 1) * 2. - 1.;
+/* L20: */
+ }
+ } else if (*idist == 3) {
+
+/* Convert generated numbers to normal (0,1) distributio
+n */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ X(iv + i - 1) = sqrt(log(U((i << 1) - 2)) * -2.) * cos(U((i <<
+ 1) - 1) * 6.2831853071795864769252867663);
+/* L30: */
+ }
+ }
+/* L40: */
+ }
+ return 0;
+
+/* End of DLARNV */
+
+} /* dlarnv_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlaror.c b/SuperLU_5.2.0/TESTING/MATGEN/dlaror.c
new file mode 100644
index 0000000..3231862
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlaror.c
@@ -0,0 +1,290 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static doublereal c_b9 = 0.;
+static doublereal c_b10 = 1.;
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int dlaror_slu(char *side, char *init, integer *m, integer *n,
+ doublereal *a, integer *lda, integer *iseed, doublereal *x, integer *
+ info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+ doublereal d__1;
+
+ /* Builtin functions */
+ double d_sign(doublereal *, doublereal *);
+
+ /* Local variables */
+ static integer kbeg;
+ extern /* Subroutine */ int dger_(integer *, integer *, doublereal *,
+ doublereal *, integer *, doublereal *, integer *, doublereal *,
+ integer *);
+ static integer jcol, irow;
+ extern doublereal dnrm2_(integer *, doublereal *, integer *);
+ static integer j;
+ extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
+ integer *);
+ extern /* Subroutine */ int dgemv_(char *, integer *, integer *,
+ doublereal *, doublereal *, integer *, doublereal *, integer *,
+ doublereal *, doublereal *, integer *);
+ static integer ixfrm, itype, nxfrm;
+ static doublereal xnorm;
+ extern doublereal dlarnd_slu(integer *, integer *);
+ extern /* Subroutine */ int dlaset_slu(char *, integer *, integer *,
+ doublereal *, doublereal *, doublereal *, integer *);
+ extern int input_error(char *, int *);
+ static doublereal factor, xnorms;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ DLAROR pre- or post-multiplies an M by N matrix A by a random
+ orthogonal matrix U, overwriting A. A may optionally be initialized
+
+ to the identity matrix before multiplying by U. U is generated using
+
+ the method of G.W. Stewart (SIAM J. Numer. Anal. 17, 1980, 403-409).
+
+
+ Arguments
+ =========
+
+ SIDE (input) CHARACTER*1
+ Specifies whether A is multiplied on the left or right by U.
+
+ = 'L': Multiply A on the left (premultiply) by U
+ = 'R': Multiply A on the right (postmultiply) by U'
+ = 'C' or 'T': Multiply A on the left by U and the right
+ by U' (Here, U' means U-transpose.)
+
+ INIT (input) CHARACTER*1
+ Specifies whether or not A should be initialized to the
+ identity matrix.
+ = 'I': Initialize A to (a section of) the identity matrix
+ before applying U.
+ = 'N': No initialization. Apply U to the input matrix A.
+
+ INIT = 'I' may be used to generate square or rectangular
+ orthogonal matrices:
+
+ For M = N and SIDE = 'L' or 'R', the rows will be orthogonal
+
+ to each other, as will the columns.
+
+ If M < N, SIDE = 'R' produces a dense matrix whose rows are
+ orthogonal and whose columns are not, while SIDE = 'L'
+ produces a matrix whose rows are orthogonal, and whose first
+
+ M columns are orthogonal, and whose remaining columns are
+ zero.
+
+ If M > N, SIDE = 'L' produces a dense matrix whose columns
+ are orthogonal and whose rows are not, while SIDE = 'R'
+ produces a matrix whose columns are orthogonal, and whose
+ first M rows are orthogonal, and whose remaining rows are
+ zero.
+
+ M (input) INTEGER
+ The number of rows of A.
+
+ N (input) INTEGER
+ The number of columns of A.
+
+ A (input/output) DOUBLE PRECISION array, dimension (LDA, N)
+ On entry, the array A.
+ On exit, overwritten by U A ( if SIDE = 'L' ),
+ or by A U ( if SIDE = 'R' ),
+ or by U A U' ( if SIDE = 'C' or 'T').
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= max(1,M).
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry ISEED specifies the seed of the random number
+ generator. The array elements should be between 0 and 4095;
+ if not they will be reduced mod 4096. Also, ISEED(4) must
+ be odd. The random number generator uses a linear
+ congruential sequence limited to small integers, and so
+ should produce machine independent random numbers. The
+ values of ISEED are changed on exit, and can be used in the
+ next call to DLAROR to continue the same random number
+ sequence.
+
+ X (workspace) DOUBLE PRECISION array, dimension (3*MAX( M, N ))
+
+ Workspace of length
+ 2*M + N if SIDE = 'L',
+ 2*N + M if SIDE = 'R',
+ 3*N if SIDE = 'C' or 'T'.
+
+ INFO (output) INTEGER
+ An error flag. It is set to:
+ = 0: normal return
+ < 0: if INFO = -k, the k-th argument had an illegal value
+ = 1: if the random numbers generated by DLARND are bad.
+
+ =====================================================================
+
+
+
+ Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --x;
+
+ /* Function Body */
+ if (*n == 0 || *m == 0) {
+ return 0;
+ }
+
+ itype = 0;
+ if (strncmp(side, "L", 1)==0) {
+ itype = 1;
+ } else if (strncmp(side, "R", 1)==0) {
+ itype = 2;
+ } else if (strncmp(side, "C", 1)==0 || strncmp(side, "T", 1)==0) {
+ itype = 3;
+ }
+
+/* Check for argument errors. */
+
+ *info = 0;
+ if (itype == 0) {
+ *info = -1;
+ } else if (*m < 0) {
+ *info = -3;
+ } else if (*n < 0 || itype == 3 && *n != *m) {
+ *info = -4;
+ } else if (*lda < *m) {
+ *info = -6;
+ }
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("DLAROR", &i__1);
+ return 0;
+ }
+
+ if (itype == 1) {
+ nxfrm = *m;
+ } else {
+ nxfrm = *n;
+ }
+
+/* Initialize A to the identity matrix if desired */
+
+ if (strncmp(init, "I", 1)==0) {
+ dlaset_slu("Full", m, n, &c_b9, &c_b10, &a[a_offset], lda);
+ }
+
+/* If no rotation possible, multiply by random +/-1
+
+ Compute rotation by computing Householder transformations
+ H(2), H(3), ..., H(nhouse) */
+
+ i__1 = nxfrm;
+ for (j = 1; j <= i__1; ++j) {
+ x[j] = 0.;
+/* L10: */
+ }
+
+ i__1 = nxfrm;
+ for (ixfrm = 2; ixfrm <= i__1; ++ixfrm) {
+ kbeg = nxfrm - ixfrm + 1;
+
+/* Generate independent normal( 0, 1 ) random numbers */
+
+ i__2 = nxfrm;
+ for (j = kbeg; j <= i__2; ++j) {
+ x[j] = dlarnd_slu(&c__3, &iseed[1]);
+/* L20: */
+ }
+
+/* Generate a Householder transformation from the random vector
+ X */
+
+ xnorm = dnrm2_(&ixfrm, &x[kbeg], &c__1);
+ xnorms = d_sign(&xnorm, &x[kbeg]);
+ d__1 = -x[kbeg];
+ x[kbeg + nxfrm] = d_sign(&c_b10, &d__1);
+ factor = xnorms * (xnorms + x[kbeg]);
+ if (abs(factor) < 1e-20) {
+ *info = 1;
+ input_error("DLAROR", info);
+ return 0;
+ } else {
+ factor = 1. / factor;
+ }
+ x[kbeg] += xnorms;
+
+/* Apply Householder transformation to A */
+
+ if (itype == 1 || itype == 3) {
+
+/* Apply H(k) from the left. */
+
+ dgemv_("T", &ixfrm, n, &c_b10, &a[kbeg + a_dim1], lda, &x[kbeg], &
+ c__1, &c_b9, &x[(nxfrm << 1) + 1], &c__1);
+ d__1 = -factor;
+ dger_(&ixfrm, n, &d__1, &x[kbeg], &c__1, &x[(nxfrm << 1) + 1], &
+ c__1, &a[kbeg + a_dim1], lda);
+
+ }
+
+ if (itype == 2 || itype == 3) {
+
+/* Apply H(k) from the right. */
+
+ dgemv_("N", m, &ixfrm, &c_b10, &a[kbeg * a_dim1 + 1], lda, &x[
+ kbeg], &c__1, &c_b9, &x[(nxfrm << 1) + 1], &c__1);
+ d__1 = -factor;
+ dger_(m, &ixfrm, &d__1, &x[(nxfrm << 1) + 1], &c__1, &x[kbeg], &
+ c__1, &a[kbeg * a_dim1 + 1], lda);
+
+ }
+/* L30: */
+ }
+
+ d__1 = dlarnd_slu(&c__3, &iseed[1]);
+ x[nxfrm * 2] = d_sign(&c_b10, &d__1);
+
+/* Scale the matrix A by D. */
+
+ if (itype == 1 || itype == 3) {
+ i__1 = *m;
+ for (irow = 1; irow <= i__1; ++irow) {
+ dscal_(n, &x[nxfrm + irow], &a[irow + a_dim1], lda);
+/* L40: */
+ }
+ }
+
+ if (itype == 2 || itype == 3) {
+ i__1 = *n;
+ for (jcol = 1; jcol <= i__1; ++jcol) {
+ dscal_(m, &x[nxfrm + jcol], &a[jcol * a_dim1 + 1], &c__1);
+/* L50: */
+ }
+ }
+ return 0;
+
+/* End of DLAROR */
+
+} /* dlaror_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlarot.c b/SuperLU_5.2.0/TESTING/MATGEN/dlarot.c
new file mode 100644
index 0000000..ff63e20
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlarot.c
@@ -0,0 +1,299 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__4 = 4;
+static integer c__8 = 8;
+static integer c__1 = 1;
+
+/* Subroutine */ int dlarot_slu(logical *lrows, logical *lleft, logical *lright,
+ integer *nl, doublereal *c, doublereal *s, doublereal *a, integer *
+ lda, doublereal *xleft, doublereal *xright)
+{
+ /* System generated locals */
+ integer i__1;
+
+ /* Local variables */
+ static integer iinc;
+ extern /* Subroutine */ int drot_(integer *, doublereal *, integer *,
+ doublereal *, integer *, doublereal *, doublereal *);
+ static integer inext, ix, iy, nt;
+ static doublereal xt[2], yt[2];
+ extern int input_error(char *, int *);
+ static integer iyt;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ DLAROT applies a (Givens) rotation to two adjacent rows or
+ columns, where one element of the first and/or last column/row
+ may be a separate variable. This is specifically indended
+ for use on matrices stored in some format other than GE, so
+ that elements of the matrix may be used or modified for which
+ no array element is provided.
+
+ One example is a symmetric matrix in SB format (bandwidth=4), for
+
+ which UPLO='L': Two adjacent rows will have the format:
+
+ row j: * * * * * . . . .
+ row j+1: * * * * * . . . .
+
+ '*' indicates elements for which storage is provided,
+ '.' indicates elements for which no storage is provided, but
+ are not necessarily zero; their values are determined by
+ symmetry. ' ' indicates elements which are necessarily zero,
+ and have no storage provided.
+
+ Those columns which have two '*'s can be handled by DROT.
+ Those columns which have no '*'s can be ignored, since as long
+ as the Givens rotations are carefully applied to preserve
+ symmetry, their values are determined.
+ Those columns which have one '*' have to be handled separately,
+ by using separate variables "p" and "q":
+
+ row j: * * * * * p . . .
+ row j+1: q * * * * * . . . .
+
+ The element p would have to be set correctly, then that column
+ is rotated, setting p to its new value. The next call to
+ DLAROT would rotate columns j and j+1, using p, and restore
+ symmetry. The element q would start out being zero, and be
+ made non-zero by the rotation. Later, rotations would presumably
+
+ be chosen to zero q out.
+
+ Typical Calling Sequences: rotating the i-th and (i+1)-st rows.
+ ------- ------- ---------
+
+ General dense matrix:
+
+ CALL DLAROT(.TRUE.,.FALSE.,.FALSE., N, C,S,
+ A(i,1),LDA, DUMMY, DUMMY)
+
+ General banded matrix in GB format:
+
+ j = MAX(1, i-KL )
+ NL = MIN( N, i+KU+1 ) + 1-j
+ CALL DLAROT( .TRUE., i-KL.GE.1, i+KU.LT.N, NL, C,S,
+ A(KU+i+1-j,j),LDA-1, XLEFT, XRIGHT )
+
+ [ note that i+1-j is just MIN(i,KL+1) ]
+
+ Symmetric banded matrix in SY format, bandwidth K,
+ lower triangle only:
+
+ j = MAX(1, i-K )
+ NL = MIN( K+1, i ) + 1
+ CALL DLAROT( .TRUE., i-K.GE.1, .TRUE., NL, C,S,
+ A(i,j), LDA, XLEFT, XRIGHT )
+
+ Same, but upper triangle only:
+
+ NL = MIN( K+1, N-i ) + 1
+ CALL DLAROT( .TRUE., .TRUE., i+K.LT.N, NL, C,S,
+ A(i,i), LDA, XLEFT, XRIGHT )
+
+ Symmetric banded matrix in SB format, bandwidth K,
+ lower triangle only:
+
+ [ same as for SY, except:]
+ . . . .
+ A(i+1-j,j), LDA-1, XLEFT, XRIGHT )
+
+ [ note that i+1-j is just MIN(i,K+1) ]
+
+ Same, but upper triangle only:
+ . . .
+ A(K+1,i), LDA-1, XLEFT, XRIGHT )
+
+ Rotating columns is just the transpose of rotating rows, except
+
+ for GB and SB: (rotating columns i and i+1)
+
+ GB:
+ j = MAX(1, i-KU )
+ NL = MIN( N, i+KL+1 ) + 1-j
+ CALL DLAROT( .TRUE., i-KU.GE.1, i+KL.LT.N, NL, C,S,
+ A(KU+j+1-i,i),LDA-1, XTOP, XBOTTM )
+
+ [note that KU+j+1-i is just MAX(1,KU+2-i)]
+
+ SB: (upper triangle)
+
+ . . . . . .
+ A(K+j+1-i,i),LDA-1, XTOP, XBOTTM )
+
+ SB: (lower triangle)
+
+ . . . . . .
+ A(1,i),LDA-1, XTOP, XBOTTM )
+
+ Arguments
+ =========
+
+ LROWS - LOGICAL
+ If .TRUE., then DLAROT will rotate two rows. If .FALSE.,
+ then it will rotate two columns.
+ Not modified.
+
+ LLEFT - LOGICAL
+ If .TRUE., then XLEFT will be used instead of the
+ corresponding element of A for the first element in the
+ second row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.)
+ If .FALSE., then the corresponding element of A will be
+ used.
+ Not modified.
+
+ LRIGHT - LOGICAL
+ If .TRUE., then XRIGHT will be used instead of the
+ corresponding element of A for the last element in the
+ first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
+
+ .FALSE., then the corresponding element of A will be used.
+ Not modified.
+
+ NL - INTEGER
+ The length of the rows (if LROWS=.TRUE.) or columns (if
+ LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
+ used, the columns/rows they are in should be included in
+ NL, e.g., if LLEFT = LRIGHT = .TRUE., then NL must be at
+ least 2. The number of rows/columns to be rotated
+ exclusive of those involving XLEFT and/or XRIGHT may
+ not be negative, i.e., NL minus how many of LLEFT and
+ LRIGHT are .TRUE. must be at least zero; if not, INPUT_ERROR
+ will be called.
+ Not modified.
+
+ C, S - DOUBLE PRECISION
+ Specify the Givens rotation to be applied. If LROWS is
+ true, then the matrix ( c s )
+ (-s c ) is applied from the left;
+ if false, then the transpose thereof is applied from the
+ right. For a Givens rotation, C**2 + S**2 should be 1,
+ but this is not checked.
+ Not modified.
+
+ A - DOUBLE PRECISION array.
+ The array containing the rows/columns to be rotated. The
+ first element of A should be the upper left element to
+ be rotated.
+ Read and modified.
+
+ LDA - INTEGER
+ The "effective" leading dimension of A. If A contains
+ a matrix stored in GE or SY format, then this is just
+ the leading dimension of A as dimensioned in the calling
+ routine. If A contains a matrix stored in band (GB or SB)
+ format, then this should be *one less* than the leading
+ dimension used in the calling routine. Thus, if
+ A were dimensioned A(LDA,*) in DLAROT, then A(1,j) would
+ be the j-th element in the first of the two rows
+ to be rotated, and A(2,j) would be the j-th in the second,
+ regardless of how the array may be stored in the calling
+ routine. [A cannot, however, actually be dimensioned thus,
+
+ since for band format, the row number may exceed LDA, which
+
+ is not legal FORTRAN.]
+ If LROWS=.TRUE., then LDA must be at least 1, otherwise
+ it must be at least NL minus the number of .TRUE. values
+ in XLEFT and XRIGHT.
+ Not modified.
+
+ XLEFT - DOUBLE PRECISION
+ If LLEFT is .TRUE., then XLEFT will be used and modified
+ instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
+ (if LROWS=.FALSE.).
+ Read and modified.
+
+ XRIGHT - DOUBLE PRECISION
+ If LRIGHT is .TRUE., then XRIGHT will be used and modified
+ instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
+ (if LROWS=.FALSE.).
+ Read and modified.
+
+ =====================================================================
+
+
+
+ Set up indices, arrays for ends
+
+ Parameter adjustments */
+ --a;
+
+ /* Function Body */
+ if (*lrows) {
+ iinc = *lda;
+ inext = 1;
+ } else {
+ iinc = 1;
+ inext = *lda;
+ }
+
+ if (*lleft) {
+ nt = 1;
+ ix = iinc + 1;
+ iy = *lda + 2;
+ xt[0] = a[1];
+ yt[0] = *xleft;
+ } else {
+ nt = 0;
+ ix = 1;
+ iy = inext + 1;
+ }
+
+ if (*lright) {
+ iyt = inext + 1 + (*nl - 1) * iinc;
+ ++nt;
+ xt[nt - 1] = *xright;
+ yt[nt - 1] = a[iyt];
+ }
+
+/* Check for errors */
+
+ if (*nl < nt) {
+ input_error("DLAROT", &c__4);
+ return 0;
+ }
+ if (*lda <= 0 || ! (*lrows) && *lda < *nl - nt) {
+ input_error("DLAROT", &c__8);
+ return 0;
+ }
+
+/* Rotate */
+
+ i__1 = *nl - nt;
+ drot_(&i__1, &a[ix], &iinc, &a[iy], &iinc, c, s);
+ drot_(&nt, xt, &c__1, yt, &c__1, c, s);
+
+/* Stuff values back into XLEFT, XRIGHT, etc. */
+
+ if (*lleft) {
+ a[1] = xt[0];
+ *xleft = yt[0];
+ }
+
+ if (*lright) {
+ *xright = xt[nt - 1];
+ a[iyt] = yt[nt - 1];
+ }
+
+ return 0;
+
+/* End of DLAROT */
+
+} /* dlarot_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlartg.c b/SuperLU_5.2.0/TESTING/MATGEN/dlartg.c
new file mode 100644
index 0000000..e563ccc
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlartg.c
@@ -0,0 +1,158 @@
+#include "f2c.h"
+
+/* Subroutine */ int dlartg_slu(doublereal *f, doublereal *g, doublereal *cs,
+ doublereal *sn, doublereal *r)
+{
+/* -- 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
+
+
+ Purpose
+ =======
+
+ DLARTG generate a plane rotation so that
+
+ [ CS SN ] . [ F ] = [ R ] where CS**2 + SN**2 = 1.
+ [ -SN CS ] [ G ] [ 0 ]
+
+ This is a slower, more accurate version of the BLAS1 routine DROTG,
+ with the following other differences:
+ F and G are unchanged on return.
+ If G=0, then CS=1 and SN=0.
+ If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any
+ floating point operations (saves work in DBDSQR when
+ there are zeros on the diagonal).
+
+ If F exceeds G in magnitude, CS will be positive.
+
+ Arguments
+ =========
+
+ F (input) DOUBLE PRECISION
+ The first component of vector to be rotated.
+
+ G (input) DOUBLE PRECISION
+ The second component of vector to be rotated.
+
+ CS (output) DOUBLE PRECISION
+ The cosine of the rotation.
+
+ SN (output) DOUBLE PRECISION
+ The sine of the rotation.
+
+ R (output) DOUBLE PRECISION
+ The nonzero component of the rotated vector.
+
+ =====================================================================
+*/
+ /* Initialized data */
+ static logical first = TRUE_;
+ /* System generated locals */
+ integer i__1;
+ doublereal d__1, d__2;
+ /* Builtin functions */
+ double log(doublereal), pow_di(doublereal *, integer *), sqrt(doublereal);
+ /* Local variables */
+ static integer i;
+ static doublereal scale;
+ static integer count;
+ static doublereal f1, g1, safmn2, safmx2;
+ extern doublereal dmach(char *);
+ static doublereal safmin, eps;
+
+
+
+ if (first) {
+ first = FALSE_;
+ safmin = dmach("S");
+ eps = dmach("E");
+ d__1 = dmach("B");
+ i__1 = (integer) (log(safmin / eps) / log(dmach("B")) / 2.);
+ safmn2 = pow_di(&d__1, &i__1);
+ safmx2 = 1. / safmn2;
+ }
+ if (*g == 0.) {
+ *cs = 1.;
+ *sn = 0.;
+ *r = *f;
+ } else if (*f == 0.) {
+ *cs = 0.;
+ *sn = 1.;
+ *r = *g;
+ } else {
+ f1 = *f;
+ g1 = *g;
+/* Computing MAX */
+ d__1 = abs(f1), d__2 = abs(g1);
+ scale = max(d__1,d__2);
+ if (scale >= safmx2) {
+ count = 0;
+L10:
+ ++count;
+ f1 *= safmn2;
+ g1 *= safmn2;
+/* Computing MAX */
+ d__1 = abs(f1), d__2 = abs(g1);
+ scale = max(d__1,d__2);
+ if (scale >= safmx2) {
+ goto L10;
+ }
+/* Computing 2nd power */
+ d__1 = f1;
+/* Computing 2nd power */
+ d__2 = g1;
+ *r = sqrt(d__1 * d__1 + d__2 * d__2);
+ *cs = f1 / *r;
+ *sn = g1 / *r;
+ i__1 = count;
+ for (i = 1; i <= count; ++i) {
+ *r *= safmx2;
+/* L20: */
+ }
+ } else if (scale <= safmn2) {
+ count = 0;
+L30:
+ ++count;
+ f1 *= safmx2;
+ g1 *= safmx2;
+/* Computing MAX */
+ d__1 = abs(f1), d__2 = abs(g1);
+ scale = max(d__1,d__2);
+ if (scale <= safmn2) {
+ goto L30;
+ }
+/* Computing 2nd power */
+ d__1 = f1;
+/* Computing 2nd power */
+ d__2 = g1;
+ *r = sqrt(d__1 * d__1 + d__2 * d__2);
+ *cs = f1 / *r;
+ *sn = g1 / *r;
+ i__1 = count;
+ for (i = 1; i <= count; ++i) {
+ *r *= safmn2;
+/* L40: */
+ }
+ } else {
+/* Computing 2nd power */
+ d__1 = f1;
+/* Computing 2nd power */
+ d__2 = g1;
+ *r = sqrt(d__1 * d__1 + d__2 * d__2);
+ *cs = f1 / *r;
+ *sn = g1 / *r;
+ }
+ if (abs(*f) > abs(*g) && *cs < 0.) {
+ *cs = -(*cs);
+ *sn = -(*sn);
+ *r = -(*r);
+ }
+ }
+ return 0;
+
+/* End of DLARTG */
+
+} /* dlartg_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlaruv.c b/SuperLU_5.2.0/TESTING/MATGEN/dlaruv.c
new file mode 100644
index 0000000..54c47d2
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlaruv.c
@@ -0,0 +1,152 @@
+#include "f2c.h"
+
+/* Subroutine */ int dlaruv_slu(integer *iseed, integer *n, doublereal *x)
+{
+/* -- 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
+ =======
+
+ DLARUV returns a vector of n random real numbers from a uniform (0,1)
+
+ distribution (n <= 128).
+
+ This is an auxiliary routine called by DLARNV and ZLARNV.
+
+ Arguments
+ =========
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ N (input) INTEGER
+ The number of random numbers to be generated. N <= 128.
+
+ X (output) DOUBLE PRECISION array, dimension (N)
+ The generated random numbers.
+
+ Further Details
+ ===============
+
+ This routine uses a multiplicative congruential method with modulus
+ 2**48 and multiplier 33952834046453 (see G.S.Fishman,
+ 'Multiplicative congruential random number generators with modulus
+ 2**b: an exhaustive analysis for b = 32 and a partial analysis for
+ b = 48', Math. Comp. 189, pp 331-344, 1990).
+
+ 48-bit integers are stored in 4 integer array elements with 12 bits
+ per element. Hence the routine is portable across machines with
+ integers of 32 bits or more.
+
+ =====================================================================
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* Initialized data */
+ static integer mm[512] /* was [128][4] */ = { 494,2637,255,2008,1253,
+ 3344,4084,1739,3143,3468,688,1657,1238,3166,1292,3422,1270,2016,
+ 154,2862,697,1706,491,931,1444,444,3577,3944,2184,1661,3482,657,
+ 3023,3618,1267,1828,164,3798,3087,2400,2870,3876,1905,1593,1797,
+ 1234,3460,328,2861,1950,617,2070,3331,769,1558,2412,2800,189,287,
+ 2045,1227,2838,209,2770,3654,3993,192,2253,3491,2889,2857,2094,
+ 1818,688,1407,634,3231,815,3524,1914,516,164,303,2144,3480,119,
+ 3357,837,2826,2332,2089,3780,1700,3712,150,2000,3375,1621,3090,
+ 3765,1149,3146,33,3082,2741,359,3316,1749,185,2784,2202,2199,1364,
+ 1244,2020,3160,2785,2772,1217,1822,1245,2252,3904,2774,997,2573,
+ 1148,545,322,789,1440,752,2859,123,1848,643,2405,2638,2344,46,
+ 3814,913,3649,339,3808,822,2832,3078,3633,2970,637,2249,2081,4019,
+ 1478,242,481,2075,4058,622,3376,812,234,641,4005,1122,3135,2640,
+ 2302,40,1832,2247,2034,2637,1287,1691,496,1597,2394,2584,1843,336,
+ 1472,2407,433,2096,1761,2810,566,442,41,1238,1086,603,840,3168,
+ 1499,1084,3438,2408,1589,2391,288,26,512,1456,171,1677,2657,2270,
+ 2587,2961,1970,1817,676,1410,3723,2803,3185,184,663,499,3784,1631,
+ 1925,3912,1398,1349,1441,2224,2411,1907,3192,2786,382,37,759,2948,
+ 1862,3802,2423,2051,2295,1332,1832,2405,3638,3661,327,3660,716,
+ 1842,3987,1368,1848,2366,2508,3754,1766,3572,2893,307,1297,3966,
+ 758,2598,3406,2922,1038,2934,2091,2451,1580,1958,2055,1507,1078,
+ 3273,17,854,2916,3971,2889,3831,2621,1541,893,736,3992,787,2125,
+ 2364,2460,257,1574,3912,1216,3248,3401,2124,2762,149,2245,166,466,
+ 4018,1399,190,2879,153,2320,18,712,2159,2318,2091,3443,1510,449,
+ 1956,2201,3137,3399,1321,2271,3667,2703,629,2365,2431,1113,3922,
+ 2554,184,2099,3228,4012,1921,3452,3901,572,3309,3171,817,3039,
+ 1696,1256,3715,2077,3019,1497,1101,717,51,981,1978,1813,3881,76,
+ 3846,3694,1682,124,1660,3997,479,1141,886,3514,1301,3604,1888,
+ 1836,1990,2058,692,1194,20,3285,2046,2107,3508,3525,3801,2549,
+ 1145,2253,305,3301,1065,3133,2913,3285,1241,1197,3729,2501,1673,
+ 541,2753,949,2361,1165,4081,2725,3305,3069,3617,3733,409,2157,
+ 1361,3973,1865,2525,1409,3445,3577,77,3761,2149,1449,3005,225,85,
+ 3673,3117,3089,1349,2057,413,65,1845,697,3085,3441,1573,3689,2941,
+ 929,533,2841,4077,721,2821,2249,2397,2817,245,1913,1997,3121,997,
+ 1833,2877,1633,981,2009,941,2449,197,2441,285,1473,2741,3129,909,
+ 2801,421,4073,2813,2337,1429,1177,1901,81,1669,2633,2269,129,1141,
+ 249,3917,2481,3941,2217,2749,3041,1877,345,2861,1809,3141,2825,
+ 157,2881,3637,1465,2829,2161,3365,361,2685,3745,2325,3609,3821,
+ 3537,517,3017,2141,1537 };
+ /* System generated locals */
+ integer i__1;
+ /* Local variables */
+ static integer i, i1, i2, i3, i4, it1, it2, it3, it4;
+
+
+#define MM(I) mm[(I)]
+#define WAS(I) was[(I)]
+#define ISEED(I) iseed[(I)-1]
+#define X(I) x[(I)-1]
+
+
+
+ i1 = ISEED(1);
+ i2 = ISEED(2);
+ i3 = ISEED(3);
+ i4 = ISEED(4);
+
+ i__1 = min(*n,128);
+ for (i = 1; i <= min(*n,128); ++i) {
+
+/* Multiply the seed by i-th power of the multiplier modulo 2**
+48 */
+
+ it4 = i4 * MM(i + 383);
+ it3 = it4 / 4096;
+ it4 -= it3 << 12;
+ it3 = it3 + i3 * MM(i + 383) + i4 * MM(i + 255);
+ it2 = it3 / 4096;
+ it3 -= it2 << 12;
+ it2 = it2 + i2 * MM(i + 383) + i3 * MM(i + 255) + i4 * MM(i + 127);
+ it1 = it2 / 4096;
+ it2 -= it1 << 12;
+ it1 = it1 + i1 * MM(i + 383) + i2 * MM(i + 255) + i3 * MM(i + 127) +
+ i4 * MM(i - 1);
+ it1 %= 4096;
+
+/* Convert 48-bit integer to a real number in the interval (0,1
+) */
+
+ X(i) = ((doublereal) it1 + ((doublereal) it2 + ((doublereal) it3 + (
+ doublereal) it4 * 2.44140625e-4) * 2.44140625e-4) *
+ 2.44140625e-4) * 2.44140625e-4;
+/* L10: */
+ }
+
+/* Return final value of seed */
+
+ ISEED(1) = it1;
+ ISEED(2) = it2;
+ ISEED(3) = it3;
+ ISEED(4) = it4;
+ return 0;
+
+/* End of DLARUV */
+
+} /* dlaruv_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlaset.c b/SuperLU_5.2.0/TESTING/MATGEN/dlaset.c
new file mode 100644
index 0000000..9dd2909
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlaset.c
@@ -0,0 +1,131 @@
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int dlaset_slu(char *uplo, integer *m, integer *n, doublereal *
+ alpha, doublereal *beta, doublereal *a, integer *lda)
+{
+/* -- 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
+ =======
+
+ DLASET initializes an m-by-n matrix A to BETA on the diagonal and
+ ALPHA on the offdiagonals.
+
+ Arguments
+ =========
+
+ UPLO (input) CHARACTER*1
+ Specifies the part of the matrix A to be set.
+ = 'U': Upper triangular part is set; the strictly lower
+
+ triangular part of A is not changed.
+ = 'L': Lower triangular part is set; the strictly upper
+
+ triangular part of A is not changed.
+ Otherwise: All of the matrix A is set.
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ ALPHA (input) DOUBLE PRECISION
+ The constant to which the offdiagonal elements are to be set.
+
+
+ BETA (input) DOUBLE PRECISION
+ The constant to which the diagonal elements are to be set.
+
+ A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
+ On exit, the leading m-by-n submatrix of A is set as follows:
+
+
+ if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n,
+ if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n,
+ otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j,
+
+ and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n).
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= max(1,M).
+
+ =====================================================================
+
+ Function Body */
+ /* System generated locals */
+ integer i__1, i__2, i__3;
+ /* Local variables */
+ static integer i, j;
+
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Set the strictly upper triangular or trapezoidal part of the
+
+ array to ALPHA. */
+
+ i__1 = *n;
+ for (j = 2; j <= *n; ++j) {
+/* Computing MIN */
+ i__3 = j - 1;
+ i__2 = min(i__3,*m);
+ for (i = 1; i <= min(j-1,*m); ++i) {
+ A(i,j) = *alpha;
+/* L10: */
+ }
+/* L20: */
+ }
+
+ } else if (strncmp(uplo, "L", 1)==0) {
+
+/* Set the strictly lower triangular or trapezoidal part of the
+
+ array to ALPHA. */
+
+ i__1 = min(*m,*n);
+ for (j = 1; j <= min(*m,*n); ++j) {
+ i__2 = *m;
+ for (i = j + 1; i <= *m; ++i) {
+ A(i,j) = *alpha;
+/* L30: */
+ }
+/* L40: */
+ }
+
+ } else {
+
+/* Set the leading m-by-n submatrix to ALPHA. */
+
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ A(i,j) = *alpha;
+/* L50: */
+ }
+/* L60: */
+ }
+ }
+
+/* Set the first min(M,N) diagonal elements to BETA. */
+
+ i__1 = min(*m,*n);
+ for (i = 1; i <= min(*m,*n); ++i) {
+ A(i,i) = *beta;
+/* L70: */
+ }
+
+ return 0;
+
+/* End of DLASET */
+
+} /* dlaset_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlatb4.c b/SuperLU_5.2.0/TESTING/MATGEN/dlatb4.c
new file mode 100644
index 0000000..80264d0
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlatb4.c
@@ -0,0 +1,458 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__2 = 2;
+
+/* Subroutine */ int dlatb4_slu(char *path, integer *imat, integer *m, integer *
+ n, char *type, integer *kl, integer *ku, doublereal *anorm, integer *
+ mode, doublereal *cndnum, char *dist)
+{
+ /* Initialized data */
+
+ static logical first = TRUE_;
+
+ /* System generated locals */
+ integer i__1;
+
+ /* Builtin functions */
+ double sqrt(doublereal);
+
+ /* Local variables */
+ static doublereal badc1, badc2, large, small;
+ static char c2[2];
+ extern /* Subroutine */ int dlabad_slu(doublereal *, doublereal *);
+ extern doublereal dmach(char *);
+ static integer mat;
+ static doublereal eps;
+
+/* -- LAPACK test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+ Purpose
+ =======
+
+ DLATB4 sets parameters for the matrix generator based on the type of
+
+ matrix to be generated.
+
+ Arguments
+ =========
+
+ PATH (input) CHARACTER*3
+ The LAPACK path name.
+
+ IMAT (input) INTEGER
+ An integer key describing which matrix to generate for this
+ path.
+
+ M (input) INTEGER
+ The number of rows in the matrix to be generated.
+
+ N (input) INTEGER
+ The number of columns in the matrix to be generated.
+
+ TYPE (output) CHARACTER*1
+ The type of the matrix to be generated:
+ = 'S': symmetric matrix
+ = 'P': symmetric positive (semi)definite matrix
+ = 'N': nonsymmetric matrix
+
+ KL (output) INTEGER
+ The lower band width of the matrix to be generated.
+
+ KU (output) INTEGER
+ The upper band width of the matrix to be generated.
+
+ ANORM (output) DOUBLE PRECISION
+ The desired norm of the matrix to be generated. The diagonal
+
+ matrix of singular values or eigenvalues is scaled by this
+ value.
+
+ MODE (output) INTEGER
+ A key indicating how to choose the vector of eigenvalues.
+
+ CNDNUM (output) DOUBLE PRECISION
+ The desired condition number.
+
+ DIST (output) CHARACTER*1
+ The type of distribution to be used by the random number
+ generator.
+
+ =====================================================================
+
+
+
+ Set some constants for use in the subroutine. */
+
+ if (first) {
+ first = FALSE_;
+ eps = dmach("Precision");
+ badc2 = .1 / eps;
+ badc1 = sqrt(badc2);
+ small = dmach("Safe minimum");
+ large = 1. / small;
+
+/* If it looks like we're on a Cray, take the square root of
+ SMALL and LARGE to avoid overflow and underflow problems. */
+
+ dlabad_slu(&small, &large);
+ small = small / eps * .25;
+ large = 1. / small;
+ }
+
+ strncpy(c2, path + 1, 2);
+
+/* Set some parameters we don't plan to change. */
+
+ *(unsigned char *)dist = 'S';
+ *mode = 3;
+
+ if (strncmp(c2, "QR", 2)==0 || strncmp(c2, "LQ", 2)==0 ||
+ strncmp(c2, "QL", 2)==0 || strncmp(c2, "RQ", 2)==0) {
+
+/* xQR, xLQ, xQL, xRQ: Set parameters to generate a general
+ M x N matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat == 2) {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ } else if (*imat == 3) {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "GE", 2)==0) {
+
+/* xGE: Set parameters to generate a general M x N matrix.
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat == 2) {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ } else if (*imat == 3) {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (*imat == 8) {
+ *cndnum = badc1;
+ } else if (*imat == 9) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 10) {
+ *anorm = small;
+ } else if (*imat == 11) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "GB", 2)==0) {
+
+/* xGB: Set parameters to generate a general banded matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the condition number and norm. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2 * .1;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "GT", 2)==0) {
+
+/* xGT: Set parameters to generate a general tridiagonal matrix.
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+ *kl = 1;
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 3) {
+ *cndnum = badc1;
+ } else if (*imat == 4) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 5 || *imat == 11) {
+ *anorm = small;
+ } else if (*imat == 6 || *imat == 12) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "PO", 2)==0 || strncmp(c2, "PP", 2)==0 ||
+ strncmp(c2, "SY", 2)==0 || strncmp(c2, "SP", 2)==0) {
+
+/* xPO, xPP, xSY, xSP: Set parameters to generate a
+ symmetric matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = *(unsigned char *)c2;
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *n - 1;
+ *kl = max(i__1,0);
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 6) {
+ *cndnum = badc1;
+ } else if (*imat == 7) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 8) {
+ *anorm = small;
+ } else if (*imat == 9) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "PB", 2)==0) {
+
+/* xPB: Set parameters to generate a symmetric band matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'P';
+
+/* Set the norm and condition number. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "PT", 2)==0) {
+
+/* xPT: Set parameters to generate a symmetric positive defini
+te
+ tridiagonal matrix. */
+
+ *(unsigned char *)type = 'P';
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+ *kl = 1;
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 3) {
+ *cndnum = badc1;
+ } else if (*imat == 4) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 5 || *imat == 11) {
+ *anorm = small;
+ } else if (*imat == 6 || *imat == 12) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "TR", 2)==0 || strncmp(c2, "TP", 2)==0) {
+
+/* xTR, xTP: Set parameters to generate a triangular matrix
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ mat = abs(*imat);
+ if (mat == 1 || mat == 7) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat < 0) {
+/* Computing MAX */
+ i__1 = *n - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (mat == 3 || mat == 9) {
+ *cndnum = badc1;
+ } else if (mat == 4) {
+ *cndnum = badc2;
+ } else if (mat == 10) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (mat == 5) {
+ *anorm = small;
+ } else if (mat == 6) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "TB", 2)==0) {
+
+/* xTB: Set parameters to generate a triangular band matrix.
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the norm and condition number. */
+
+ if (*imat == 2 || *imat == 8) {
+ *cndnum = badc1;
+ } else if (*imat == 3 || *imat == 9) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 4) {
+ *anorm = small;
+ } else if (*imat == 5) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+ }
+ if (*n <= 1) {
+ *cndnum = 1.;
+ }
+
+ return 0;
+
+/* End of DLATB4 */
+
+} /* dlatb4_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlatm1.c b/SuperLU_5.2.0/TESTING/MATGEN/dlatm1.c
new file mode 100644
index 0000000..2ce956b
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlatm1.c
@@ -0,0 +1,266 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Subroutine */ int dlatm1_slu(integer *mode, doublereal *cond, integer *irsign,
+ integer *idist, integer *iseed, doublereal *d, integer *n, integer *
+ info)
+{
+ /* System generated locals */
+ integer i__1, i__2;
+ doublereal d__1;
+
+ /* Builtin functions */
+ double pow_dd(doublereal *, doublereal *), pow_di(doublereal *, integer *)
+ , log(doublereal), exp(doublereal);
+
+ /* Local variables */
+ static doublereal temp;
+ static integer i;
+ static doublereal alpha;
+ extern doublereal dlaran_slu(integer *);
+ extern /* Subroutine */ int dlarnv_slu(integer *, integer *, integer *, doublereal *);
+ extern int input_error(char *, int *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ DLATM1 computes the entries of D(1..N) as specified by
+ MODE, COND and IRSIGN. IDIST and ISEED determine the generation
+ of random numbers. DLATM1 is called by SLATMR to generate
+ random test matrices for LAPACK programs.
+
+ Arguments
+ =========
+
+ MODE - INTEGER
+ On entry describes how D is to be computed:
+ MODE = 0 means do not change D.
+ MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
+ MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
+ MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
+ MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
+ MODE = 5 sets D to random numbers in the range
+ ( 1/COND , 1 ) such that their logarithms
+ are uniformly distributed.
+ MODE = 6 set D to random numbers from same distribution
+ as the rest of the matrix.
+ MODE < 0 has the same meaning as ABS(MODE), except that
+ the order of the elements of D is reversed.
+ Thus if MODE is positive, D has entries ranging from
+ 1 to 1/COND, if negative, from 1/COND to 1,
+ Not modified.
+
+ COND - DOUBLE PRECISION
+ On entry, used as described under MODE above.
+ If used, it must be >= 1. Not modified.
+
+ IRSIGN - INTEGER
+ On entry, if MODE neither -6, 0 nor 6, determines sign of
+ entries of D
+ 0 => leave entries of D unchanged
+ 1 => multiply each entry of D by 1 or -1 with probability .5
+
+
+ IDIST - CHARACTER*1
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => UNIFORM( 0, 1 )
+ 2 => UNIFORM( -1, 1 )
+ 3 => NORMAL( 0, 1 )
+ Not modified.
+
+ ISEED - INTEGER array, dimension ( 4 )
+ On entry ISEED specifies the seed of the random number
+ generator. The random number generator uses a
+ linear congruential sequence limited to small
+ integers, and so should produce machine independent
+ random numbers. The values of ISEED are changed on
+ exit, and can be used in the next call to DLATM1
+ to continue the same random number sequence.
+ Changed on exit.
+
+ D - DOUBLE PRECISION array, dimension ( MIN( M , N ) )
+ Array to be computed according to MODE, COND and IRSIGN.
+ May be changed on exit if MODE is nonzero.
+
+ N - INTEGER
+ Number of entries of D. Not modified.
+
+ INFO - INTEGER
+ 0 => normal termination
+ -1 => if MODE not in range -6 to 6
+ -2 => if MODE neither -6, 0 nor 6, and
+ IRSIGN neither 0 nor 1
+ -3 => if MODE neither -6, 0 nor 6 and COND less than 1
+ -4 => if MODE equals 6 or -6 and IDIST not in range 1 to 3
+
+ -7 => if N negative
+
+ =====================================================================
+
+
+
+ Decode and Test the input parameters. Initialize flags & seed.
+
+ Parameter adjustments */
+ --d;
+ --iseed;
+
+ /* Function Body */
+ *info = 0;
+
+/* Quick return if possible */
+
+ if (*n == 0) {
+ return 0;
+ }
+
+/* Set INFO if an error */
+
+ if (*mode < -6 || *mode > 6) {
+ *info = -1;
+ } else if (*mode != -6 && *mode != 0 && *mode != 6 && (*irsign != 0 && *
+ irsign != 1)) {
+ *info = -2;
+ } else if (*mode != -6 && *mode != 0 && *mode != 6 && *cond < 1.) {
+ *info = -3;
+ } else if ((*mode == 6 || *mode == -6) && (*idist < 1 || *idist > 3)) {
+ *info = -4;
+ } else if (*n < 0) {
+ *info = -7;
+ }
+
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("DLATM1", &i__1);
+ return 0;
+ }
+
+/* Compute D according to COND and MODE */
+
+ if (*mode != 0) {
+ switch (abs(*mode)) {
+ case 1: goto L10;
+ case 2: goto L30;
+ case 3: goto L50;
+ case 4: goto L70;
+ case 5: goto L90;
+ case 6: goto L110;
+ }
+
+/* One large D value: */
+
+L10:
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ d[i] = 1. / *cond;
+/* L20: */
+ }
+ d[1] = 1.;
+ goto L120;
+
+/* One small D value: */
+
+L30:
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ d[i] = 1.;
+/* L40: */
+ }
+ d[*n] = 1. / *cond;
+ goto L120;
+
+/* Exponentially distributed D values: */
+
+L50:
+ d[1] = 1.;
+ if (*n > 1) {
+ d__1 = -1. / (doublereal) (*n - 1);
+ alpha = pow_dd(cond, &d__1);
+ i__1 = *n;
+ for (i = 2; i <= i__1; ++i) {
+ i__2 = i - 1;
+ d[i] = pow_di(&alpha, &i__2);
+/* L60: */
+ }
+ }
+ goto L120;
+
+/* Arithmetically distributed D values: */
+
+L70:
+ d[1] = 1.;
+ if (*n > 1) {
+ temp = 1. / *cond;
+ alpha = (1. - temp) / (doublereal) (*n - 1);
+ i__1 = *n;
+ for (i = 2; i <= i__1; ++i) {
+ d[i] = (doublereal) (*n - i) * alpha + temp;
+/* L80: */
+ }
+ }
+ goto L120;
+
+/* Randomly distributed D values on ( 1/COND , 1): */
+
+L90:
+ alpha = log(1. / *cond);
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ d[i] = exp(alpha * dlaran_slu(&iseed[1]));
+/* L100: */
+ }
+ goto L120;
+
+/* Randomly distributed D values from IDIST */
+
+L110:
+ dlarnv_slu(idist, &iseed[1], n, &d[1]);
+
+L120:
+
+/* If MODE neither -6 nor 0 nor 6, and IRSIGN = 1, assign
+ random signs to D */
+
+ if (*mode != -6 && *mode != 0 && *mode != 6 && *irsign == 1) {
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ temp = dlaran_slu(&iseed[1]);
+ if (temp > .5) {
+ d[i] = -d[i];
+ }
+/* L130: */
+ }
+ }
+
+/* Reverse if MODE < 0 */
+
+ if (*mode < 0) {
+ i__1 = *n / 2;
+ for (i = 1; i <= i__1; ++i) {
+ temp = d[i];
+ d[i] = d[*n + 1 - i];
+ d[*n + 1 - i] = temp;
+/* L140: */
+ }
+ }
+
+ }
+
+ return 0;
+
+/* End of DLATM1 */
+
+} /* dlatm1_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlatm2.c b/SuperLU_5.2.0/TESTING/MATGEN/dlatm2.c
new file mode 100644
index 0000000..8985f47
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlatm2.c
@@ -0,0 +1,241 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+doublereal dlatm2_slu(integer *m, integer *n, integer *i, integer *j, integer *
+ kl, integer *ku, integer *idist, integer *iseed, doublereal *d,
+ integer *igrade, doublereal *dl, doublereal *dr, integer *ipvtng,
+ integer *iwork, doublereal *sparse)
+{
+ /* System generated locals */
+ doublereal ret_val;
+
+ /* Local variables */
+ static integer isub, jsub;
+ static doublereal temp;
+ extern doublereal dlaran_slu(integer *), dlarnd_slu(integer *, integer *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+
+
+
+ Purpose
+ =======
+
+ DLATM2 returns the (I,J) entry of a random matrix of dimension
+ (M, N) described by the other paramters. It is called by the
+ DLATMR routine in order to build random test matrices. No error
+ checking on parameters is done, because this routine is called in
+
+ a tight loop by DLATMR which has already checked the parameters.
+
+ Use of DLATM2 differs from SLATM3 in the order in which the random
+
+ number generator is called to fill in random matrix entries.
+ With DLATM2, the generator is called to fill in the pivoted matrix
+
+ columnwise. With DLATM3, the generator is called to fill in the
+ matrix columnwise, after which it is pivoted. Thus, DLATM3 can
+ be used to construct random matrices which differ only in their
+ order of rows and/or columns. DLATM2 is used to construct band
+ matrices while avoiding calling the random number generator for
+ entries outside the band (and therefore generating random numbers
+
+
+ The matrix whose (I,J) entry is returned is constructed as
+ follows (this routine only computes one entry):
+
+ If I is outside (1..M) or J is outside (1..N), return zero
+ (this is convenient for generating matrices in band format).
+
+
+ Generate a matrix A with random entries of distribution IDIST.
+
+ Set the diagonal to D.
+
+ Grade the matrix, if desired, from the left (by DL) and/or
+ from the right (by DR or DL) as specified by IGRADE.
+
+ Permute, if desired, the rows and/or columns as specified by
+ IPVTNG and IWORK.
+
+ Band the matrix to have lower bandwidth KL and upper
+ bandwidth KU.
+
+ Set random entries to zero as specified by SPARSE.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ Number of rows of matrix. Not modified.
+
+ N - INTEGER
+ Number of columns of matrix. Not modified.
+
+ I - INTEGER
+ Row of entry to be returned. Not modified.
+
+ J - INTEGER
+ Column of entry to be returned. Not modified.
+
+ KL - INTEGER
+ Lower bandwidth. Not modified.
+
+ KU - INTEGER
+ Upper bandwidth. Not modified.
+
+ IDIST - INTEGER
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => UNIFORM( 0, 1 )
+ 2 => UNIFORM( -1, 1 )
+ 3 => NORMAL( 0, 1 )
+ Not modified.
+
+ ISEED - INTEGER array of dimension ( 4 )
+ Seed for random number generator.
+ Changed on exit.
+
+ D - DOUBLE PRECISION array of dimension ( MIN( I , J ) )
+ Diagonal entries of matrix. Not modified.
+
+ IGRADE - INTEGER
+ Specifies grading of matrix as follows:
+ 0 => no grading
+ 1 => matrix premultiplied by diag( DL )
+ 2 => matrix postmultiplied by diag( DR )
+ 3 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DR )
+ 4 => matrix premultiplied by diag( DL ) and
+ postmultiplied by inv( diag( DL ) )
+ 5 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DL )
+ Not modified.
+
+ DL - DOUBLE PRECISION array ( I or J, as appropriate )
+ Left scale factors for grading matrix. Not modified.
+
+ DR - DOUBLE PRECISION array ( I or J, as appropriate )
+ Right scale factors for grading matrix. Not modified.
+
+ IPVTNG - INTEGER
+ On entry specifies pivoting permutations as follows:
+ 0 => none.
+ 1 => row pivoting.
+ 2 => column pivoting.
+ 3 => full pivoting, i.e., on both sides.
+ Not modified.
+
+ IWORK - INTEGER array ( I or J, as appropriate )
+ This array specifies the permutation used. The
+ row (or column) in position K was originally in
+ position IWORK( K ).
+ This differs from IWORK for DLATM3. Not modified.
+
+ SPARSE - DOUBLE PRECISION between 0. and 1.
+ On entry specifies the sparsity of the matrix
+ if sparse matix is to be generated.
+ SPARSE should lie between 0 and 1.
+ A uniform ( 0, 1 ) random number x is generated and
+ compared to SPARSE; if x is larger the matrix entry
+ is unchanged and if x is smaller the entry is set
+ to zero. Thus on the average a fraction SPARSE of the
+ entries will be set to zero.
+ Not modified.
+
+ =====================================================================
+
+
+
+
+
+
+
+
+ -----------------------------------------------------------------------
+
+
+
+
+ Check for I and J in range
+
+ Parameter adjustments */
+ --iwork;
+ --dr;
+ --dl;
+ --d;
+ --iseed;
+
+ /* Function Body */
+ if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
+ ret_val = 0.;
+ return ret_val;
+ }
+
+/* Check for banding */
+
+ if (*j > *i + *ku || *j < *i - *kl) {
+ ret_val = 0.;
+ return ret_val;
+ }
+
+/* Check for sparsity */
+
+ if (*sparse > 0.) {
+ if (dlaran_slu(&iseed[1]) < *sparse) {
+ ret_val = 0.;
+ return ret_val;
+ }
+ }
+
+/* Compute subscripts depending on IPVTNG */
+
+ if (*ipvtng == 0) {
+ isub = *i;
+ jsub = *j;
+ } else if (*ipvtng == 1) {
+ isub = iwork[*i];
+ jsub = *j;
+ } else if (*ipvtng == 2) {
+ isub = *i;
+ jsub = iwork[*j];
+ } else if (*ipvtng == 3) {
+ isub = iwork[*i];
+ jsub = iwork[*j];
+ }
+
+/* Compute entry and grade it according to IGRADE */
+
+ if (isub == jsub) {
+ temp = d[isub];
+ } else {
+ temp = dlarnd_slu(idist, &iseed[1]);
+ }
+ if (*igrade == 1) {
+ temp *= dl[isub];
+ } else if (*igrade == 2) {
+ temp *= dr[jsub];
+ } else if (*igrade == 3) {
+ temp = temp * dl[isub] * dr[jsub];
+ } else if (*igrade == 4 && isub != jsub) {
+ temp = temp * dl[isub] / dl[jsub];
+ } else if (*igrade == 5) {
+ temp = temp * dl[isub] * dl[jsub];
+ }
+ ret_val = temp;
+ return ret_val;
+
+/* End of DLATM2 */
+
+} /* dlatm2_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlatm3.c b/SuperLU_5.2.0/TESTING/MATGEN/dlatm3.c
new file mode 100644
index 0000000..c9d66ae
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlatm3.c
@@ -0,0 +1,252 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+doublereal dlatm3_slu(integer *m, integer *n, integer *i, integer *j, integer *
+ isub, integer *jsub, integer *kl, integer *ku, integer *idist,
+ integer *iseed, doublereal *d, integer *igrade, doublereal *dl,
+ doublereal *dr, integer *ipvtng, integer *iwork, doublereal *sparse)
+{
+ /* System generated locals */
+ doublereal ret_val;
+
+ /* Local variables */
+ static doublereal temp;
+ extern doublereal dlaran_slu(integer *), dlarnd_slu(integer *, integer *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+
+
+
+ Purpose
+ =======
+
+ DLATM3 returns the (ISUB,JSUB) entry of a random matrix of
+ dimension (M, N) described by the other paramters. (ISUB,JSUB)
+ is the final position of the (I,J) entry after pivoting
+ according to IPVTNG and IWORK. DLATM3 is called by the
+ DLATMR routine in order to build random test matrices. No error
+ checking on parameters is done, because this routine is called in
+
+ a tight loop by DLATMR which has already checked the parameters.
+
+ Use of DLATM3 differs from SLATM2 in the order in which the random
+
+ number generator is called to fill in random matrix entries.
+ With DLATM2, the generator is called to fill in the pivoted matrix
+
+ columnwise. With DLATM3, the generator is called to fill in the
+ matrix columnwise, after which it is pivoted. Thus, DLATM3 can
+ be used to construct random matrices which differ only in their
+ order of rows and/or columns. DLATM2 is used to construct band
+ matrices while avoiding calling the random number generator for
+ entries outside the band (and therefore generating random numbers
+
+ in different orders for different pivot orders).
+
+ The matrix whose (ISUB,JSUB) entry is returned is constructed as
+ follows (this routine only computes one entry):
+
+ If ISUB is outside (1..M) or JSUB is outside (1..N), return zero
+
+ (this is convenient for generating matrices in band format).
+
+
+ Generate a matrix A with random entries of distribution IDIST.
+
+ Set the diagonal to D.
+
+ Grade the matrix, if desired, from the left (by DL) and/or
+ from the right (by DR or DL) as specified by IGRADE.
+
+ Permute, if desired, the rows and/or columns as specified by
+ IPVTNG and IWORK.
+
+ Band the matrix to have lower bandwidth KL and upper
+ bandwidth KU.
+
+ Set random entries to zero as specified by SPARSE.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ Number of rows of matrix. Not modified.
+
+ N - INTEGER
+ Number of columns of matrix. Not modified.
+
+ I - INTEGER
+ Row of unpivoted entry to be returned. Not modified.
+
+ J - INTEGER
+ Column of unpivoted entry to be returned. Not modified.
+
+ ISUB - INTEGER
+ Row of pivoted entry to be returned. Changed on exit.
+
+ JSUB - INTEGER
+ Column of pivoted entry to be returned. Changed on exit.
+
+ KL - INTEGER
+ Lower bandwidth. Not modified.
+
+ KU - INTEGER
+ Upper bandwidth. Not modified.
+
+ IDIST - INTEGER
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => UNIFORM( 0, 1 )
+ 2 => UNIFORM( -1, 1 )
+ 3 => NORMAL( 0, 1 )
+ Not modified.
+
+ ISEED - INTEGER array of dimension ( 4 )
+ Seed for random number generator.
+ Changed on exit.
+
+ D - DOUBLE PRECISION array of dimension ( MIN( I , J ) )
+ Diagonal entries of matrix. Not modified.
+
+ IGRADE - INTEGER
+ Specifies grading of matrix as follows:
+ 0 => no grading
+ 1 => matrix premultiplied by diag( DL )
+ 2 => matrix postmultiplied by diag( DR )
+ 3 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DR )
+ 4 => matrix premultiplied by diag( DL ) and
+ postmultiplied by inv( diag( DL ) )
+ 5 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DL )
+ Not modified.
+
+ DL - DOUBLE PRECISION array ( I or J, as appropriate )
+ Left scale factors for grading matrix. Not modified.
+
+ DR - DOUBLE PRECISION array ( I or J, as appropriate )
+ Right scale factors for grading matrix. Not modified.
+
+ IPVTNG - INTEGER
+ On entry specifies pivoting permutations as follows:
+ 0 => none.
+ 1 => row pivoting.
+ 2 => column pivoting.
+ 3 => full pivoting, i.e., on both sides.
+ Not modified.
+
+ IWORK - INTEGER array ( I or J, as appropriate )
+ This array specifies the permutation used. The
+ row (or column) originally in position K is in
+ position IWORK( K ) after pivoting.
+ This differs from IWORK for DLATM2. Not modified.
+
+ SPARSE - DOUBLE PRECISION between 0. and 1.
+ On entry specifies the sparsity of the matrix
+ if sparse matix is to be generated.
+ SPARSE should lie between 0 and 1.
+ A uniform ( 0, 1 ) random number x is generated and
+ compared to SPARSE; if x is larger the matrix entry
+ is unchanged and if x is smaller the entry is set
+ to zero. Thus on the average a fraction SPARSE of the
+ entries will be set to zero.
+ Not modified.
+
+ =====================================================================
+
+
+
+
+
+
+
+
+ -----------------------------------------------------------------------
+
+
+
+
+ Check for I and J in range
+
+ Parameter adjustments */
+ --iwork;
+ --dr;
+ --dl;
+ --d;
+ --iseed;
+
+ /* Function Body */
+ if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
+ *isub = *i;
+ *jsub = *j;
+ ret_val = 0.;
+ return ret_val;
+ }
+
+/* Compute subscripts depending on IPVTNG */
+
+ if (*ipvtng == 0) {
+ *isub = *i;
+ *jsub = *j;
+ } else if (*ipvtng == 1) {
+ *isub = iwork[*i];
+ *jsub = *j;
+ } else if (*ipvtng == 2) {
+ *isub = *i;
+ *jsub = iwork[*j];
+ } else if (*ipvtng == 3) {
+ *isub = iwork[*i];
+ *jsub = iwork[*j];
+ }
+
+/* Check for banding */
+
+ if (*jsub > *isub + *ku || *jsub < *isub - *kl) {
+ ret_val = 0.;
+ return ret_val;
+ }
+
+/* Check for sparsity */
+
+ if (*sparse > 0.) {
+ if (dlaran_slu(&iseed[1]) < *sparse) {
+ ret_val = 0.;
+ return ret_val;
+ }
+ }
+
+/* Compute entry and grade it according to IGRADE */
+
+ if (*i == *j) {
+ temp = d[*i];
+ } else {
+ temp = dlarnd_slu(idist, &iseed[1]);
+ }
+ if (*igrade == 1) {
+ temp *= dl[*i];
+ } else if (*igrade == 2) {
+ temp *= dr[*j];
+ } else if (*igrade == 3) {
+ temp = temp * dl[*i] * dr[*j];
+ } else if (*igrade == 4 && *i != *j) {
+ temp = temp * dl[*i] / dl[*j];
+ } else if (*igrade == 5) {
+ temp = temp * dl[*i] * dl[*j];
+ }
+ ret_val = temp;
+ return ret_val;
+
+/* End of DLATM3 */
+
+} /* dlatm3_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/dlatms.c b/SuperLU_5.2.0/TESTING/MATGEN/dlatms.c
new file mode 100644
index 0000000..a47417f
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/dlatms.c
@@ -0,0 +1,1340 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__1 = 1;
+static doublereal c_b22 = 0.;
+static logical c_true = TRUE_;
+static logical c_false = FALSE_;
+
+int
+dlatms_slu(integer *m, integer *n, char *dist, integer *
+ iseed, char *sym, doublereal *d, integer *mode, doublereal *cond,
+ doublereal *dmax__, integer *kl, integer *ku, char *pack,
+ doublereal *a, integer *lda, doublereal *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
+ doublereal d__1, d__2, d__3;
+ logical L__1;
+
+ /* Builtin functions */
+ double cos(doublereal), sin(doublereal);
+
+ /* Local variables */
+ static integer ilda, icol;
+ static doublereal temp;
+ static integer irow, isym;
+ static doublereal c;
+ static integer i, j, k;
+ static doublereal s, alpha, angle;
+ static integer ipack;
+ extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
+ integer *);
+ static integer ioffg;
+ static integer iinfo, idist, mnmin;
+ extern /* Subroutine */ int dcopy_(integer *, doublereal *, integer *,
+ doublereal *, integer *);
+ static integer iskew;
+ static doublereal extra, dummy;
+ extern /* Subroutine */ int dlatm1_slu(integer *, doublereal *, integer *,
+ integer *, integer *, doublereal *, integer *, integer *);
+ static integer ic, jc, nc;
+ extern /* Subroutine */ int dlagge_slu(integer *, integer *, integer *,
+ integer *, doublereal *, doublereal *, integer *, integer *,
+ doublereal *, integer *);
+ static integer il, iendch, ir, jr, ipackg, mr, minlda;
+ extern doublereal dlarnd_slu(integer *, integer *);
+ extern /* Subroutine */ int dlaset_slu(char *, integer *, integer *,
+ doublereal *, doublereal *, doublereal *, integer *),
+ dlartg_slu(doublereal *, doublereal *, doublereal *, doublereal *, doublereal *),
+ dlagsy_slu(integer *, integer *, doublereal *, doublereal *, integer *,
+ integer *, doublereal *, integer *), dlarot_slu(logical *, logical *,
+ logical *, integer *, doublereal *, doublereal *, doublereal *,
+ integer *, doublereal *, doublereal *);
+ extern int input_error(char *, int *);
+ static logical iltemp, givens;
+ static integer ioffst, irsign;
+ static logical ilextr, topdwn;
+ static integer ir1, ir2, isympk, jch, llb, jkl, jku, uub;
+
+
+/* -- LAPACK test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ DLATMS generates random matrices with specified singular values
+ (or symmetric/hermitian with specified eigenvalues)
+ for testing LAPACK programs.
+
+ DLATMS operates by applying the following sequence of
+ operations:
+
+ Set the diagonal to D, where D may be input or
+ computed according to MODE, COND, DMAX, and SYM
+ as described below.
+
+ Generate a matrix with the appropriate band structure, by one
+ of two methods:
+
+ Method A:
+ Generate a dense M x N matrix by multiplying D on the left
+ and the right by random unitary matrices, then:
+
+ Reduce the bandwidth according to KL and KU, using
+ Householder transformations.
+
+ Method B:
+ Convert the bandwidth-0 (i.e., diagonal) matrix to a
+ bandwidth-1 matrix using Givens rotations, "chasing"
+ out-of-band elements back, much as in QR; then
+ convert the bandwidth-1 to a bandwidth-2 matrix, etc.
+ Note that for reasonably small bandwidths (relative to
+ M and N) this requires less storage, as a dense matrix
+ is not generated. Also, for symmetric matrices, only
+ one triangle is generated.
+
+ Method A is chosen if the bandwidth is a large fraction of the
+ order of the matrix, and LDA is at least M (so a dense
+ matrix can be stored.) Method B is chosen if the bandwidth
+
+ is small (< 1/2 N for symmetric, < .3 N+M for
+ non-symmetric), or LDA is less than M and not less than the
+
+ bandwidth.
+
+ Pack the matrix if desired. Options specified by PACK are:
+ no packing
+ zero out upper half (if symmetric)
+ zero out lower half (if symmetric)
+ store the upper half columnwise (if symmetric or upper
+ triangular)
+ store the lower half columnwise (if symmetric or lower
+ triangular)
+ store the lower triangle in banded format (if symmetric
+ or lower triangular)
+ store the upper triangle in banded format (if symmetric
+ or upper triangular)
+ store the entire matrix in banded format
+ If Method B is chosen, and band format is specified, then the
+ matrix will be generated in the band format, so no repacking
+
+ will be necessary.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ The number of rows of A. Not modified.
+
+ N - INTEGER
+ The number of columns of A. Not modified.
+
+ DIST - CHARACTER*1
+ On entry, DIST specifies the type of distribution to be used
+
+ to generate the random eigen-/singular values.
+ 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
+ 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
+ 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
+ Not modified.
+
+ ISEED - INTEGER array, dimension ( 4 )
+ On entry ISEED specifies the seed of the random number
+ generator. They should lie between 0 and 4095 inclusive,
+ and ISEED(4) should be odd. The random number generator
+ uses a linear congruential sequence limited to small
+ integers, and so should produce machine independent
+ random numbers. The values of ISEED are changed on
+ exit, and can be used in the next call to DLATMS
+ to continue the same random number sequence.
+ Changed on exit.
+
+ SYM - CHARACTER*1
+ If SYM='S' or 'H', the generated matrix is symmetric, with
+ eigenvalues specified by D, COND, MODE, and DMAX; they
+ may be positive, negative, or zero.
+ If SYM='P', the generated matrix is symmetric, with
+ eigenvalues (= singular values) specified by D, COND,
+ MODE, and DMAX; they will not be negative.
+ If SYM='N', the generated matrix is nonsymmetric, with
+ singular values specified by D, COND, MODE, and DMAX;
+ they will not be negative.
+ Not modified.
+
+ D - DOUBLE PRECISION array, dimension ( MIN( M , N ) )
+ This array is used to specify the singular values or
+ eigenvalues of A (see SYM, above.) If MODE=0, then D is
+ assumed to contain the singular/eigenvalues, otherwise
+ they will be computed according to MODE, COND, and DMAX,
+ and placed in D.
+ Modified if MODE is nonzero.
+
+ MODE - INTEGER
+ On entry this describes how the singular/eigenvalues are to
+
+ be specified:
+ MODE = 0 means use D as input
+ MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
+ MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
+ MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
+ MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
+ MODE = 5 sets D to random numbers in the range
+ ( 1/COND , 1 ) such that their logarithms
+ are uniformly distributed.
+ MODE = 6 set D to random numbers from same distribution
+ as the rest of the matrix.
+ MODE < 0 has the same meaning as ABS(MODE), except that
+ the order of the elements of D is reversed.
+ Thus if MODE is positive, D has entries ranging from
+ 1 to 1/COND, if negative, from 1/COND to 1,
+ If SYM='S' or 'H', and MODE is neither 0, 6, nor -6, then
+ the elements of D will also be multiplied by a random
+ sign (i.e., +1 or -1.)
+ Not modified.
+
+ COND - DOUBLE PRECISION
+ On entry, this is used as described under MODE above.
+ If used, it must be >= 1. Not modified.
+
+ DMAX - DOUBLE PRECISION
+ If MODE is neither -6, 0 nor 6, the contents of D, as
+ computed according to MODE and COND, will be scaled by
+ DMAX / max(abs(D(i))); thus, the maximum absolute eigen- or
+
+ singular value (which is to say the norm) will be abs(DMAX).
+
+ Note that DMAX need not be positive: if DMAX is negative
+ (or zero), D will be scaled by a negative number (or zero).
+
+ Not modified.
+
+ KL - INTEGER
+ This specifies the lower bandwidth of the matrix. For
+ example, KL=0 implies upper triangular, KL=1 implies upper
+ Hessenberg, and KL being at least M-1 means that the matrix
+
+ has full lower bandwidth. KL must equal KU if the matrix
+ is symmetric.
+ Not modified.
+
+ KU - INTEGER
+ This specifies the upper bandwidth of the matrix. For
+ example, KU=0 implies lower triangular, KU=1 implies lower
+ Hessenberg, and KU being at least N-1 means that the matrix
+
+ has full upper bandwidth. KL must equal KU if the matrix
+ is symmetric.
+ Not modified.
+
+ PACK - CHARACTER*1
+ This specifies packing of matrix as follows:
+ 'N' => no packing
+ 'U' => zero out all subdiagonal entries (if symmetric)
+ 'L' => zero out all superdiagonal entries (if symmetric)
+ 'C' => store the upper triangle columnwise
+ (only if the matrix is symmetric or upper triangular)
+
+ 'R' => store the lower triangle columnwise
+ (only if the matrix is symmetric or lower triangular)
+
+ 'B' => store the lower triangle in band storage scheme
+ (only if matrix symmetric or lower triangular)
+ 'Q' => store the upper triangle in band storage scheme
+ (only if matrix symmetric or upper triangular)
+ 'Z' => store the entire matrix in band storage scheme
+ (pivoting can be provided for by using this
+ option to store A in the trailing rows of
+ the allocated storage)
+
+ Using these options, the various LAPACK packed and banded
+ storage schemes can be obtained:
+ GB - use 'Z'
+ PB, SB or TB - use 'B' or 'Q'
+ PP, SP or TP - use 'C' or 'R'
+
+ If two calls to DLATMS differ only in the PACK parameter,
+ they will generate mathematically equivalent matrices.
+ Not modified.
+
+ A - DOUBLE PRECISION array, dimension ( LDA, N )
+ On exit A is the desired test matrix. A is first generated
+ in full (unpacked) form, and then packed, if so specified
+ by PACK. Thus, the first M elements of the first N
+ columns will always be modified. If PACK specifies a
+ packed or banded storage scheme, all LDA elements of the
+ first N columns will be modified; the elements of the
+ array which do not correspond to elements of the generated
+ matrix are set to zero.
+ Modified.
+
+ LDA - INTEGER
+ LDA specifies the first dimension of A as declared in the
+ calling program. If PACK='N', 'U', 'L', 'C', or 'R', then
+ LDA must be at least M. If PACK='B' or 'Q', then LDA must
+ be at least MIN( KL, M-1) (which is equal to MIN(KU,N-1)).
+ If PACK='Z', LDA must be large enough to hold the packed
+ array: MIN( KU, N-1) + MIN( KL, M-1) + 1.
+ Not modified.
+
+ WORK - DOUBLE PRECISION array, dimension ( 3*MAX( N , M ) )
+ Workspace.
+ Modified.
+
+ INFO - INTEGER
+ Error code. On exit, INFO will be set to one of the
+ following values:
+ 0 => normal return
+ -1 => M negative or unequal to N and SYM='S', 'H', or 'P'
+ -2 => N negative
+ -3 => DIST illegal string
+ -5 => SYM illegal string
+ -7 => MODE not in range -6 to 6
+ -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
+ -10 => KL negative
+ -11 => KU negative, or SYM='S' or 'H' and KU not equal to KL
+
+ -12 => PACK illegal string, or PACK='U' or 'L', and SYM='N';
+
+ or PACK='C' or 'Q' and SYM='N' and KL is not zero;
+ or PACK='R' or 'B' and SYM='N' and KU is not zero;
+ or PACK='U', 'L', 'C', 'R', 'B', or 'Q', and M is not
+
+ N.
+ -14 => LDA is less than M, or PACK='Z' and LDA is less than
+
+ MIN(KU,N-1) + MIN(KL,M-1) + 1.
+ 1 => Error return from DLATM1
+ 2 => Cannot scale to DMAX (max. sing. value is 0)
+ 3 => Error return from DLAGGE or SLAGSY
+
+ =====================================================================
+
+
+
+ 1) Decode and Test the input parameters.
+ Initialize flags & seed.
+
+ Parameter adjustments */
+ --iseed;
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+
+/* Quick return if possible */
+
+ if (*m == 0 || *n == 0) {
+ return 0;
+ }
+
+/* Decode DIST */
+
+ if (strncmp(dist, "U", 1)==0) {
+ idist = 1;
+ } else if (strncmp(dist, "S", 1)==0) {
+ idist = 2;
+ } else if (strncmp(dist, "N", 1)==0) {
+ idist = 3;
+ } else {
+ idist = -1;
+ }
+
+/* Decode SYM */
+
+ if (strncmp(sym, "N", 1)==0) {
+ isym = 1;
+ irsign = 0;
+ } else if (strncmp(sym, "P", 1)==0) {
+ isym = 2;
+ irsign = 0;
+ } else if (strncmp(sym, "S", 1)==0) {
+ isym = 2;
+ irsign = 1;
+ } else if (strncmp(sym, "H", 1)==0) {
+ isym = 2;
+ irsign = 1;
+ } else {
+ isym = -1;
+ }
+
+/* Decode PACK */
+
+ isympk = 0;
+ if (strncmp(pack, "N", 1)==0) {
+ ipack = 0;
+ } else if (strncmp(pack, "U", 1)==0) {
+ ipack = 1;
+ isympk = 1;
+ } else if (strncmp(pack, "L", 1)==0) {
+ ipack = 2;
+ isympk = 1;
+ } else if (strncmp(pack, "C", 1)==0) {
+ ipack = 3;
+ isympk = 2;
+ } else if (strncmp(pack, "R", 1)==0) {
+ ipack = 4;
+ isympk = 3;
+ } else if (strncmp(pack, "B", 1)==0) {
+ ipack = 5;
+ isympk = 3;
+ } else if (strncmp(pack, "Q", 1)==0) {
+ ipack = 6;
+ isympk = 2;
+ } else if (strncmp(pack, "Z", 1)==0) {
+ ipack = 7;
+ } else {
+ ipack = -1;
+ }
+
+/* Set certain internal parameters */
+
+ mnmin = min(*m,*n);
+/* Computing MIN */
+ i__1 = *kl, i__2 = *m - 1;
+ llb = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *ku, i__2 = *n - 1;
+ uub = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *m, i__2 = *n + llb;
+ mr = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *n, i__2 = *m + uub;
+ nc = min(i__1,i__2);
+
+ if (ipack == 5 || ipack == 6) {
+ minlda = uub + 1;
+ } else if (ipack == 7) {
+ minlda = llb + uub + 1;
+ } else {
+ minlda = *m;
+ }
+
+/* Use Givens rotation method if bandwidth small enough,
+ or if LDA is too small to store the matrix unpacked. */
+
+ givens = FALSE_;
+ if (isym == 1) {
+/* Computing MAX */
+ i__1 = 1, i__2 = mr + nc;
+ if ((doublereal) (llb + uub) < (doublereal) max(i__1,i__2) * .3) {
+ givens = TRUE_;
+ }
+ } else {
+ if (llb << 1 < *m) {
+ givens = TRUE_;
+ }
+ }
+ if (*lda < *m && *lda >= minlda) {
+ givens = TRUE_;
+ }
+
+/* Set INFO if an error */
+
+ if (*m < 0) {
+ *info = -1;
+ } else if (*m != *n && isym != 1) {
+ *info = -1;
+ } else if (*n < 0) {
+ *info = -2;
+ } else if (idist == -1) {
+ *info = -3;
+ } else if (isym == -1) {
+ *info = -5;
+ } else if (abs(*mode) > 6) {
+ *info = -7;
+ } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.) {
+ *info = -8;
+ } else if (*kl < 0) {
+ *info = -10;
+ } else if (*ku < 0 || isym != 1 && *kl != *ku) {
+ *info = -11;
+ } else if (ipack == -1 || isympk == 1 && isym == 1 || isympk == 2 && isym
+ == 1 && *kl > 0 || isympk == 3 && isym == 1 && *ku > 0 || isympk
+ != 0 && *m != *n) {
+ *info = -12;
+ } else if (*lda < max(1,minlda)) {
+ *info = -14;
+ }
+
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("DLATMS", &i__1);
+ return 0;
+ }
+
+/* Initialize random number generator */
+
+ for (i = 1; i <= 4; ++i) {
+ iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
+/* L10: */
+ }
+
+ if (iseed[4] % 2 != 1) {
+ ++iseed[4];
+ }
+
+/* 2) Set up D if indicated.
+
+ Compute D according to COND and MODE */
+
+ dlatm1_slu(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, &iinfo);
+ if (iinfo != 0) {
+ *info = 1;
+ return 0;
+ }
+
+/* Choose Top-Down if D is (apparently) increasing,
+ Bottom-Up if D is (apparently) decreasing. */
+
+ if (abs(d[1]) <= (d__1 = d[mnmin], abs(d__1))) {
+ topdwn = TRUE_;
+ } else {
+ topdwn = FALSE_;
+ }
+
+ if (*mode != 0 && abs(*mode) != 6) {
+
+/* Scale by DMAX */
+
+ temp = abs(d[1]);
+ i__1 = mnmin;
+ for (i = 2; i <= i__1; ++i) {
+/* Computing MAX */
+ d__2 = temp, d__3 = (d__1 = d[i], abs(d__1));
+ temp = max(d__2,d__3);
+/* L20: */
+ }
+
+ if (temp > 0.) {
+ alpha = *dmax__ / temp;
+ } else {
+ *info = 2;
+ return 0;
+ }
+
+ dscal_(&mnmin, &alpha, &d[1], &c__1);
+
+ }
+
+/* 3) Generate Banded Matrix using Givens rotations.
+ Also the special case of UUB=LLB=0
+
+ Compute Addressing constants to cover all
+ storage formats. Whether GE, SY, GB, or SB,
+ upper or lower triangle or both,
+ the (i,j)-th element is in
+ A( i - ISKEW*j + IOFFST, j ) */
+
+ if (ipack > 4) {
+ ilda = *lda - 1;
+ iskew = 1;
+ if (ipack > 5) {
+ ioffst = uub + 1;
+ } else {
+ ioffst = 1;
+ }
+ } else {
+ ilda = *lda;
+ iskew = 0;
+ ioffst = 0;
+ }
+
+/* IPACKG is the format that the matrix is generated in. If this is
+ different from IPACK, then the matrix must be repacked at the
+ end. It also signals how to compute the norm, for scaling. */
+
+ ipackg = 0;
+ dlaset_slu("Full", lda, n, &c_b22, &c_b22, &a[a_offset], lda);
+
+/* Diagonal Matrix -- We are done, unless it
+ is to be stored SP/PP/TP (PACK='R' or 'C') */
+
+ if (llb == 0 && uub == 0) {
+ i__1 = ilda + 1;
+ dcopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffst + a_dim1], &i__1);
+ if (ipack <= 2 || ipack >= 5) {
+ ipackg = ipack;
+ }
+
+ } else if (givens) {
+
+/* Check whether to use Givens rotations,
+ Householder transformations, or nothing. */
+
+ if (isym == 1) {
+
+/* Non-symmetric -- A = U D V */
+
+ if (ipack > 4) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+
+ i__1 = ilda + 1;
+ dcopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffst + a_dim1], &
+ i__1);
+
+ if (topdwn) {
+ jkl = 0;
+ i__1 = uub;
+ for (jku = 1; jku <= i__1; ++jku) {
+
+/* Transform from bandwidth JKL, JKU-1 to
+JKL, JKU
+
+ Last row actually rotated is M
+ Last column actually rotated is MIN( M+
+JKU, N )
+
+ Computing MIN */
+ i__3 = *m + jku;
+ i__2 = min(i__3,*n) + jkl - 1;
+ for (jr = 1; jr <= i__2; ++jr) {
+ extra = 0.;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ c = cos(angle);
+ s = sin(angle);
+/* Computing MAX */
+ i__3 = 1, i__4 = jr - jkl;
+ icol = max(i__3,i__4);
+ if (jr < *m) {
+/* Computing MIN */
+ i__3 = *n, i__4 = jr + jku;
+ il = min(i__3,i__4) + 1 - icol;
+ L__1 = jr > jkl;
+ dlarot_slu(&c_true, &L__1, &c_false, &il, &c, &s, &a[
+ jr - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &extra, &dummy);
+ }
+
+/* Chase "EXTRA" back up */
+
+ ir = jr;
+ ic = icol;
+ i__3 = -jkl - jku;
+ for (jch = jr - jkl; i__3 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__3) {
+ if (ir < *m) {
+ dlartg_slu(&a[ir + 1 - iskew * (ic + 1) + ioffst
+ + (ic + 1) * a_dim1], &extra, &c, &s,
+ &dummy);
+ }
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jku;
+ irow = max(i__4,i__5);
+ il = ir + 2 - irow;
+ temp = 0.;
+ iltemp = jch > jku;
+ d__1 = -s;
+ dlarot_slu(&c_false, &iltemp, &c_true, &il, &c, &
+ d__1, &a[irow - iskew * ic + ioffst + ic *
+ a_dim1], &ilda, &temp, &extra);
+ if (iltemp) {
+ dlartg_slu(&a[irow + 1 - iskew * (ic + 1) +
+ ioffst + (ic + 1) * a_dim1], &temp, &
+ c, &s, &dummy);
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jku - jkl;
+ icol = max(i__4,i__5);
+ il = ic + 2 - icol;
+ extra = 0.;
+ L__1 = jch > jku + jkl;
+ d__1 = -s;
+ dlarot_slu(&c_true, &L__1, &c_true, &il, &c, &
+ d__1, &a[irow - iskew * icol + ioffst
+ + icol * a_dim1], &ilda, &extra, &
+ temp);
+ ic = icol;
+ ir = irow;
+ }
+/* L30: */
+ }
+/* L40: */
+ }
+/* L50: */
+ }
+
+ jku = uub;
+ i__1 = llb;
+ for (jkl = 1; jkl <= i__1; ++jkl) {
+
+/* Transform from bandwidth JKL-1, JKU to
+JKL, JKU
+
+ Computing MIN */
+ i__3 = *n + jkl;
+ i__2 = min(i__3,*m) + jku - 1;
+ for (jc = 1; jc <= i__2; ++jc) {
+ extra = 0.;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ c = cos(angle);
+ s = sin(angle);
+/* Computing MAX */
+ i__3 = 1, i__4 = jc - jku;
+ irow = max(i__3,i__4);
+ if (jc < *n) {
+/* Computing MIN */
+ i__3 = *m, i__4 = jc + jkl;
+ il = min(i__3,i__4) + 1 - irow;
+ L__1 = jc > jku;
+ dlarot_slu(&c_false, &L__1, &c_false, &il, &c, &s, &
+ a[irow - iskew * jc + ioffst + jc *
+ a_dim1], &ilda, &extra, &dummy);
+ }
+
+/* Chase "EXTRA" back up */
+
+ ic = jc;
+ ir = irow;
+ i__3 = -jkl - jku;
+ for (jch = jc - jku; i__3 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__3) {
+ if (ic < *n) {
+ dlartg_slu(&a[ir + 1 - iskew * (ic + 1) + ioffst
+ + (ic + 1) * a_dim1], &extra, &c, &s,
+ &dummy);
+ }
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jkl;
+ icol = max(i__4,i__5);
+ il = ic + 2 - icol;
+ temp = 0.;
+ iltemp = jch > jkl;
+ d__1 = -s;
+ dlarot_slu(&c_true, &iltemp, &c_true, &il, &c, &d__1,
+ &a[ir - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &temp, &extra);
+ if (iltemp) {
+ dlartg_slu(&a[ir + 1 - iskew * (icol + 1) +
+ ioffst + (icol + 1) * a_dim1], &temp,
+ &c, &s, &dummy);
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jkl - jku;
+ irow = max(i__4,i__5);
+ il = ir + 2 - irow;
+ extra = 0.;
+ L__1 = jch > jkl + jku;
+ d__1 = -s;
+ dlarot_slu(&c_false, &L__1, &c_true, &il, &c, &
+ d__1, &a[irow - iskew * icol + ioffst
+ + icol * a_dim1], &ilda, &extra, &
+ temp);
+ ic = icol;
+ ir = irow;
+ }
+/* L60: */
+ }
+/* L70: */
+ }
+/* L80: */
+ }
+
+ } else {
+
+/* Bottom-Up -- Start at the bottom right. */
+
+ jkl = 0;
+ i__1 = uub;
+ for (jku = 1; jku <= i__1; ++jku) {
+
+/* Transform from bandwidth JKL, JKU-1 to
+JKL, JKU
+
+ First row actually rotated is M
+ First column actually rotated is MIN( M
++JKU, N )
+
+ Computing MIN */
+ i__2 = *m, i__3 = *n + jkl;
+ iendch = min(i__2,i__3) - 1;
+/* Computing MIN */
+ i__2 = *m + jku;
+ i__3 = 1 - jkl;
+ for (jc = min(i__2,*n) - 1; jc >= i__3; --jc) {
+ extra = 0.;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ c = cos(angle);
+ s = sin(angle);
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - jku + 1;
+ irow = max(i__2,i__4);
+ if (jc > 0) {
+/* Computing MIN */
+ i__2 = *m, i__4 = jc + jkl + 1;
+ il = min(i__2,i__4) + 1 - irow;
+ L__1 = jc + jkl < *m;
+ dlarot_slu(&c_false, &c_false, &L__1, &il, &c, &s, &
+ a[irow - iskew * jc + ioffst + jc *
+ a_dim1], &ilda, &dummy, &extra);
+ }
+
+/* Chase "EXTRA" back down */
+
+ ic = jc;
+ i__2 = iendch;
+ i__4 = jkl + jku;
+ for (jch = jc + jkl; i__4 < 0 ? jch >= i__2 : jch <=
+ i__2; jch += i__4) {
+ ilextr = ic > 0;
+ if (ilextr) {
+ dlartg_slu(&a[jch - iskew * ic + ioffst + ic *
+ a_dim1], &extra, &c, &s, &dummy);
+ }
+ ic = max(1,ic);
+/* Computing MIN */
+ i__5 = *n - 1, i__6 = jch + jku;
+ icol = min(i__5,i__6);
+ iltemp = jch + jku < *n;
+ temp = 0.;
+ i__5 = icol + 2 - ic;
+ dlarot_slu(&c_true, &ilextr, &iltemp, &i__5, &c, &s,
+ &a[jch - iskew * ic + ioffst + ic *
+ a_dim1], &ilda, &extra, &temp);
+ if (iltemp) {
+ dlartg_slu(&a[jch - iskew * icol + ioffst + icol
+ * a_dim1], &temp, &c, &s, &dummy);
+/* Computing MIN */
+ i__5 = iendch, i__6 = jch + jkl + jku;
+ il = min(i__5,i__6) + 2 - jch;
+ extra = 0.;
+ L__1 = jch + jkl + jku <= iendch;
+ dlarot_slu(&c_false, &c_true, &L__1, &il, &c, &s,
+ &a[jch - iskew * icol + ioffst +
+ icol * a_dim1], &ilda, &temp, &extra);
+ ic = icol;
+ }
+/* L90: */
+ }
+/* L100: */
+ }
+/* L110: */
+ }
+
+ jku = uub;
+ i__1 = llb;
+ for (jkl = 1; jkl <= i__1; ++jkl) {
+
+/* Transform from bandwidth JKL-1, JKU to
+JKL, JKU
+
+ First row actually rotated is MIN( N+JK
+L, M )
+ First column actually rotated is N
+
+ Computing MIN */
+ i__3 = *n, i__4 = *m + jku;
+ iendch = min(i__3,i__4) - 1;
+/* Computing MIN */
+ i__3 = *n + jkl;
+ i__4 = 1 - jku;
+ for (jr = min(i__3,*m) - 1; jr >= i__4; --jr) {
+ extra = 0.;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ c = cos(angle);
+ s = sin(angle);
+/* Computing MAX */
+ i__3 = 1, i__2 = jr - jkl + 1;
+ icol = max(i__3,i__2);
+ if (jr > 0) {
+/* Computing MIN */
+ i__3 = *n, i__2 = jr + jku + 1;
+ il = min(i__3,i__2) + 1 - icol;
+ L__1 = jr + jku < *n;
+ dlarot_slu(&c_true, &c_false, &L__1, &il, &c, &s, &a[
+ jr - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &dummy, &extra);
+ }
+
+/* Chase "EXTRA" back down */
+
+ ir = jr;
+ i__3 = iendch;
+ i__2 = jkl + jku;
+ for (jch = jr + jku; i__2 < 0 ? jch >= i__3 : jch <=
+ i__3; jch += i__2) {
+ ilextr = ir > 0;
+ if (ilextr) {
+ dlartg_slu(&a[ir - iskew * jch + ioffst + jch *
+ a_dim1], &extra, &c, &s, &dummy);
+ }
+ ir = max(1,ir);
+/* Computing MIN */
+ i__5 = *m - 1, i__6 = jch + jkl;
+ irow = min(i__5,i__6);
+ iltemp = jch + jkl < *m;
+ temp = 0.;
+ i__5 = irow + 2 - ir;
+ dlarot_slu(&c_false, &ilextr, &iltemp, &i__5, &c, &s,
+ &a[ir - iskew * jch + ioffst + jch *
+ a_dim1], &ilda, &extra, &temp);
+ if (iltemp) {
+ dlartg_slu(&a[irow - iskew * jch + ioffst + jch *
+ a_dim1], &temp, &c, &s, &dummy);
+/* Computing MIN */
+ i__5 = iendch, i__6 = jch + jkl + jku;
+ il = min(i__5,i__6) + 2 - jch;
+ extra = 0.;
+ L__1 = jch + jkl + jku <= iendch;
+ dlarot_slu(&c_true, &c_true, &L__1, &il, &c, &s,
+ &a[irow - iskew * jch + ioffst + jch *
+ a_dim1], &ilda, &temp, &extra);
+ ir = irow;
+ }
+/* L120: */
+ }
+/* L130: */
+ }
+/* L140: */
+ }
+ }
+
+ } else {
+
+/* Symmetric -- A = U D U' */
+
+ ipackg = ipack;
+ ioffg = ioffst;
+
+ if (topdwn) {
+
+/* Top-Down -- Generate Upper triangle only */
+
+ if (ipack >= 5) {
+ ipackg = 6;
+ ioffg = uub + 1;
+ } else {
+ ipackg = 1;
+ }
+ i__1 = ilda + 1;
+ dcopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffg + a_dim1], &
+ i__1);
+
+ i__1 = uub;
+ for (k = 1; k <= i__1; ++k) {
+ i__4 = *n - 1;
+ for (jc = 1; jc <= i__4; ++jc) {
+/* Computing MAX */
+ i__2 = 1, i__3 = jc - k;
+ irow = max(i__2,i__3);
+/* Computing MIN */
+ i__2 = jc + 1, i__3 = k + 2;
+ il = min(i__2,i__3);
+ extra = 0.;
+ temp = a[jc - iskew * (jc + 1) + ioffg + (jc + 1) *
+ a_dim1];
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ c = cos(angle);
+ s = sin(angle);
+ L__1 = jc > k;
+ dlarot_slu(&c_false, &L__1, &c_true, &il, &c, &s, &a[
+ irow - iskew * jc + ioffg + jc * a_dim1], &
+ ilda, &extra, &temp);
+/* Computing MIN */
+ i__3 = k, i__5 = *n - jc;
+ i__2 = min(i__3,i__5) + 1;
+ dlarot_slu(&c_true, &c_true, &c_false, &i__2, &c, &s, &a[
+ (1 - iskew) * jc + ioffg + jc * a_dim1], &
+ ilda, &temp, &dummy);
+
+/* Chase EXTRA back up the matrix
+*/
+
+ icol = jc;
+ i__2 = -k;
+ for (jch = jc - k; i__2 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__2) {
+ dlartg_slu(&a[jch + 1 - iskew * (icol + 1) + ioffg +
+ (icol + 1) * a_dim1], &extra, &c, &s, &
+ dummy);
+ temp = a[jch - iskew * (jch + 1) + ioffg + (jch +
+ 1) * a_dim1];
+ i__3 = k + 2;
+ d__1 = -s;
+ dlarot_slu(&c_true, &c_true, &c_true, &i__3, &c, &
+ d__1, &a[(1 - iskew) * jch + ioffg + jch *
+ a_dim1], &ilda, &temp, &extra);
+/* Computing MAX */
+ i__3 = 1, i__5 = jch - k;
+ irow = max(i__3,i__5);
+/* Computing MIN */
+ i__3 = jch + 1, i__5 = k + 2;
+ il = min(i__3,i__5);
+ extra = 0.;
+ L__1 = jch > k;
+ d__1 = -s;
+ dlarot_slu(&c_false, &L__1, &c_true, &il, &c, &d__1,
+ &a[irow - iskew * jch + ioffg + jch *
+ a_dim1], &ilda, &extra, &temp);
+ icol = jch;
+/* L150: */
+ }
+/* L160: */
+ }
+/* L170: */
+ }
+
+/* If we need lower triangle, copy from upper. No
+te that
+ the order of copying is chosen to work for 'q'
+ -> 'b' */
+
+ if (ipack != ipackg && ipack != 3) {
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ irow = ioffst - iskew * jc;
+/* Computing MIN */
+ i__2 = *n, i__3 = jc + uub;
+ i__4 = min(i__2,i__3);
+ for (jr = jc; jr <= i__4; ++jr) {
+ a[jr + irow + jc * a_dim1] = a[jc - iskew * jr +
+ ioffg + jr * a_dim1];
+/* L180: */
+ }
+/* L190: */
+ }
+ if (ipack == 5) {
+ i__1 = *n;
+ for (jc = *n - uub + 1; jc <= i__1; ++jc) {
+ i__4 = uub + 1;
+ for (jr = *n + 2 - jc; jr <= i__4; ++jr) {
+ a[jr + jc * a_dim1] = 0.;
+/* L200: */
+ }
+/* L210: */
+ }
+ }
+ if (ipackg == 6) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+ }
+ } else {
+
+/* Bottom-Up -- Generate Lower triangle only */
+
+ if (ipack >= 5) {
+ ipackg = 5;
+ if (ipack == 6) {
+ ioffg = 1;
+ }
+ } else {
+ ipackg = 2;
+ }
+ i__1 = ilda + 1;
+ dcopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffg + a_dim1], &
+ i__1);
+
+ i__1 = uub;
+ for (k = 1; k <= i__1; ++k) {
+ for (jc = *n - 1; jc >= 1; --jc) {
+/* Computing MIN */
+ i__4 = *n + 1 - jc, i__2 = k + 2;
+ il = min(i__4,i__2);
+ extra = 0.;
+ temp = a[(1 - iskew) * jc + 1 + ioffg + jc * a_dim1];
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ c = cos(angle);
+ s = -sin(angle);
+ L__1 = *n - jc > k;
+ dlarot_slu(&c_false, &c_true, &L__1, &il, &c, &s, &a[(1
+ - iskew) * jc + ioffg + jc * a_dim1], &ilda, &
+ temp, &extra);
+/* Computing MAX */
+ i__4 = 1, i__2 = jc - k + 1;
+ icol = max(i__4,i__2);
+ i__4 = jc + 2 - icol;
+ dlarot_slu(&c_true, &c_false, &c_true, &i__4, &c, &s, &a[
+ jc - iskew * icol + ioffg + icol * a_dim1], &
+ ilda, &dummy, &temp);
+
+/* Chase EXTRA back down the matrix
+ */
+
+ icol = jc;
+ i__4 = *n - 1;
+ i__2 = k;
+ for (jch = jc + k; i__2 < 0 ? jch >= i__4 : jch <=
+ i__4; jch += i__2) {
+ dlartg_slu(&a[jch - iskew * icol + ioffg + icol *
+ a_dim1], &extra, &c, &s, &dummy);
+ temp = a[(1 - iskew) * jch + 1 + ioffg + jch *
+ a_dim1];
+ i__3 = k + 2;
+ dlarot_slu(&c_true, &c_true, &c_true, &i__3, &c, &s,
+ &a[jch - iskew * icol + ioffg + icol *
+ a_dim1], &ilda, &extra, &temp);
+/* Computing MIN */
+ i__3 = *n + 1 - jch, i__5 = k + 2;
+ il = min(i__3,i__5);
+ extra = 0.;
+ L__1 = *n - jch > k;
+ dlarot_slu(&c_false, &c_true, &L__1, &il, &c, &s, &a[
+ (1 - iskew) * jch + ioffg + jch * a_dim1],
+ &ilda, &temp, &extra);
+ icol = jch;
+/* L220: */
+ }
+/* L230: */
+ }
+/* L240: */
+ }
+
+/* If we need upper triangle, copy from lower. No
+te that
+ the order of copying is chosen to work for 'b'
+ -> 'q' */
+
+ if (ipack != ipackg && ipack != 4) {
+ for (jc = *n; jc >= 1; --jc) {
+ irow = ioffst - iskew * jc;
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - uub;
+ i__1 = max(i__2,i__4);
+ for (jr = jc; jr >= i__1; --jr) {
+ a[jr + irow + jc * a_dim1] = a[jc - iskew * jr +
+ ioffg + jr * a_dim1];
+/* L250: */
+ }
+/* L260: */
+ }
+ if (ipack == 6) {
+ i__1 = uub;
+ for (jc = 1; jc <= i__1; ++jc) {
+ i__2 = uub + 1 - jc;
+ for (jr = 1; jr <= i__2; ++jr) {
+ a[jr + jc * a_dim1] = 0.;
+/* L270: */
+ }
+/* L280: */
+ }
+ }
+ if (ipackg == 5) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+ }
+ }
+ }
+
+ } else {
+
+/* 4) Generate Banded Matrix by first
+ Rotating by random Unitary matrices,
+ then reducing the bandwidth using Householder
+ transformations.
+
+ Note: we should get here only if LDA .ge. N */
+
+ if (isym == 1) {
+
+/* Non-symmetric -- A = U D V */
+
+ dlagge_slu(&mr, &nc, &llb, &uub, &d[1], &a[a_offset], lda, &iseed[1],
+ &work[1], &iinfo);
+ } else {
+
+/* Symmetric -- A = U D U' */
+
+ dlagsy_slu(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1], &
+ iinfo);
+
+ }
+ if (iinfo != 0) {
+ *info = 3;
+ return 0;
+ }
+ }
+
+/* 5) Pack the matrix */
+
+ if (ipack != ipackg) {
+ if (ipack == 1) {
+
+/* 'U' -- Upper triangular, not packed */
+
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = j + 1; i <= i__2; ++i) {
+ a[i + j * a_dim1] = 0.;
+/* L290: */
+ }
+/* L300: */
+ }
+
+ } else if (ipack == 2) {
+
+/* 'L' -- Lower triangular, not packed */
+
+ i__1 = *m;
+ for (j = 2; j <= i__1; ++j) {
+ i__2 = j - 1;
+ for (i = 1; i <= i__2; ++i) {
+ a[i + j * a_dim1] = 0.;
+/* L310: */
+ }
+/* L320: */
+ }
+
+ } else if (ipack == 3) {
+
+/* 'C' -- Upper triangle packed Columnwise. */
+
+ icol = 1;
+ irow = 0;
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = j;
+ for (i = 1; i <= i__2; ++i) {
+ ++irow;
+ if (irow > *lda) {
+ irow = 1;
+ ++icol;
+ }
+ a[irow + icol * a_dim1] = a[i + j * a_dim1];
+/* L330: */
+ }
+/* L340: */
+ }
+
+ } else if (ipack == 4) {
+
+/* 'R' -- Lower triangle packed Columnwise. */
+
+ icol = 1;
+ irow = 0;
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = j; i <= i__2; ++i) {
+ ++irow;
+ if (irow > *lda) {
+ irow = 1;
+ ++icol;
+ }
+ a[irow + icol * a_dim1] = a[i + j * a_dim1];
+/* L350: */
+ }
+/* L360: */
+ }
+
+ } else if (ipack >= 5) {
+
+/* 'B' -- The lower triangle is packed as a band matrix.
+
+ 'Q' -- The upper triangle is packed as a band matrix.
+
+ 'Z' -- The whole matrix is packed as a band matrix.
+*/
+
+ if (ipack == 5) {
+ uub = 0;
+ }
+ if (ipack == 6) {
+ llb = 0;
+ }
+
+ i__1 = uub;
+ for (j = 1; j <= i__1; ++j) {
+/* Computing MIN */
+ i__2 = j + llb;
+ for (i = min(i__2,*m); i >= 1; --i) {
+ a[i - j + uub + 1 + j * a_dim1] = a[i + j * a_dim1];
+/* L370: */
+ }
+/* L380: */
+ }
+
+ i__1 = *n;
+ for (j = uub + 2; j <= i__1; ++j) {
+/* Computing MIN */
+ i__4 = j + llb;
+ i__2 = min(i__4,*m);
+ for (i = j - uub; i <= i__2; ++i) {
+ a[i - j + uub + 1 + j * a_dim1] = a[i + j * a_dim1];
+/* L390: */
+ }
+/* L400: */
+ }
+ }
+
+/* If packed, zero out extraneous elements.
+
+ Symmetric/Triangular Packed --
+ zero out everything after A(IROW,ICOL) */
+
+ if (ipack == 3 || ipack == 4) {
+ i__1 = *m;
+ for (jc = icol; jc <= i__1; ++jc) {
+ i__2 = *lda;
+ for (jr = irow + 1; jr <= i__2; ++jr) {
+ a[jr + jc * a_dim1] = 0.;
+/* L410: */
+ }
+ irow = 0;
+/* L420: */
+ }
+
+ } else if (ipack >= 5) {
+
+/* Packed Band --
+ 1st row is now in A( UUB+2-j, j), zero above it
+ m-th row is now in A( M+UUB-j,j), zero below it
+ last non-zero diagonal is now in A( UUB+LLB+1,j ),
+
+ zero below it, too. */
+
+ ir1 = uub + llb + 2;
+ ir2 = uub + *m + 2;
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ i__2 = uub + 1 - jc;
+ for (jr = 1; jr <= i__2; ++jr) {
+ a[jr + jc * a_dim1] = 0.;
+/* L430: */
+ }
+/* Computing MAX
+ Computing MIN */
+ i__3 = ir1, i__5 = ir2 - jc;
+ i__2 = 1, i__4 = min(i__3,i__5);
+ i__6 = *lda;
+ for (jr = max(i__2,i__4); jr <= i__6; ++jr) {
+ a[jr + jc * a_dim1] = 0.;
+/* L440: */
+ }
+/* L450: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of DLATMS */
+
+} /* dlatms_slu */
+
diff --git a/TESTING/MATGEN/f2c.h b/SuperLU_5.2.0/TESTING/MATGEN/f2c.h
similarity index 100%
rename from TESTING/MATGEN/f2c.h
rename to SuperLU_5.2.0/TESTING/MATGEN/f2c.h
diff --git a/TESTING/MATGEN/pow_dd.c b/SuperLU_5.2.0/TESTING/MATGEN/pow_dd.c
similarity index 100%
rename from TESTING/MATGEN/pow_dd.c
rename to SuperLU_5.2.0/TESTING/MATGEN/pow_dd.c
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/pow_di.c b/SuperLU_5.2.0/TESTING/MATGEN/pow_di.c
new file mode 100644
index 0000000..4ab2a38
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/pow_di.c
@@ -0,0 +1,22 @@
+double pow_di(double *ap, int *bp)
+{
+ double pow, x;
+ int n;
+
+ pow = 1;
+ x = *ap;
+ n = *bp;
+
+ if ( n != 0 ) {
+ if(n < 0) {
+ n = -n;
+ x = 1/x;
+ }
+ for( ; ; ) {
+ if(n & 01) pow *= x;
+ if(n >>= 1) x *= x;
+ else break;
+ }
+ }
+ return(pow);
+}
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/pow_ri.c b/SuperLU_5.2.0/TESTING/MATGEN/pow_ri.c
new file mode 100644
index 0000000..81f7cca
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/pow_ri.c
@@ -0,0 +1,25 @@
+
+double pow_ri (float * ap, int * bp)
+{
+ double pow, x;
+ int n;
+ unsigned long u;
+
+ pow = 1;
+ x = *ap;
+ n = *bp;
+
+ if (n != 0) {
+ if (n < 0) {
+ n = -n;
+ x = 1 / x;
+ }
+ for (u = n;;) {
+ if (u & 01) pow *= x;
+ if (u >>= 1) x *= x;
+ else break;
+ }
+ }
+ return (pow);
+}
+
diff --git a/TESTING/MATGEN/r_lg10.c b/SuperLU_5.2.0/TESTING/MATGEN/r_lg10.c
similarity index 100%
rename from TESTING/MATGEN/r_lg10.c
rename to SuperLU_5.2.0/TESTING/MATGEN/r_lg10.c
diff --git a/TESTING/MATGEN/r_sign.c b/SuperLU_5.2.0/TESTING/MATGEN/r_sign.c
similarity index 100%
rename from TESTING/MATGEN/r_sign.c
rename to SuperLU_5.2.0/TESTING/MATGEN/r_sign.c
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slabad.c b/SuperLU_5.2.0/TESTING/MATGEN/slabad.c
new file mode 100644
index 0000000..23f0d9f
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slabad.c
@@ -0,0 +1,60 @@
+#include "f2c.h"
+
+/* Subroutine */ int slabad_slu(real *small, real *large)
+{
+/* -- 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
+ =======
+
+ SLABAD takes as input the values computed by SLAMCH for underflow and
+
+ overflow, and returns the square root of each of these values if the
+
+ log of LARGE is sufficiently large. This subroutine is intended to
+ identify machines with a large exponent range, such as the Crays, and
+
+ redefine the underflow and overflow limits to be the square roots of
+
+ the values computed by SLAMCH. This subroutine is needed because
+ SLAMCH does not compensate for poor arithmetic in the upper half of
+ the exponent range, as is found on a Cray.
+
+ Arguments
+ =========
+
+ SMALL (input/output) REAL
+ On entry, the underflow threshold as computed by SLAMCH.
+ On exit, if LOG10(LARGE) is sufficiently large, the square
+ root of SMALL, otherwise unchanged.
+
+ LARGE (input/output) REAL
+ On entry, the overflow threshold as computed by SLAMCH.
+ On exit, if LOG10(LARGE) is sufficiently large, the square
+ root of LARGE, otherwise unchanged.
+
+ =====================================================================
+
+
+
+ If it looks like we're on a Cray, take the square root of
+ SMALL and LARGE to avoid overflow and underflow problems. */
+ /* Builtin functions */
+ double r_lg10(real *), sqrt(doublereal);
+
+
+ if (r_lg10(large) > 2e3f) {
+ *small = sqrt(*small);
+ *large = sqrt(*large);
+ }
+
+ return 0;
+
+/* End of SLABAD */
+
+} /* slabad_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slagge.c b/SuperLU_5.2.0/TESTING/MATGEN/slagge.c
new file mode 100644
index 0000000..c136884
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slagge.c
@@ -0,0 +1,400 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__3 = 3;
+static integer c__1 = 1;
+static real c_b11 = 1.f;
+static real c_b13 = 0.f;
+
+/* Subroutine */ int slagge_slu(integer *m, integer *n, integer *kl, integer *ku,
+ real *d, real *a, integer *lda, integer *iseed, real *work, integer *
+ info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ real r__1;
+
+ /* Builtin functions */
+ double r_sign(real *, real *);
+
+ /* Local variables */
+ extern /* Subroutine */ int sger_(integer *, integer *, real *, real *,
+ integer *, real *, integer *, real *, integer *);
+ extern real snrm2_(integer *, real *, integer *);
+ static integer i, j;
+ extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *),
+ sgemv_(char *, integer *, integer *, real *, real *, integer *,
+ real *, integer *, real *, real *, integer *);
+ static real wa, wb, wn;
+ extern /* Subroutine */ int slarnv_slu(integer *, integer *, integer *, real *);
+ extern int input_error(char *, int *);
+ static real tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0)
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ SLAGGE generates a real general m by n matrix A, by pre- and post-
+ multiplying a real diagonal matrix D with random orthogonal matrices:
+
+ A = U*D*V. The lower and upper bandwidths may then be reduced to
+ kl and ku by additional orthogonal transformations.
+
+ Arguments
+ =========
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ KL (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= KL <= M-1.
+
+ KU (input) INTEGER
+ The number of nonzero superdiagonals within the band of A.
+ 0 <= KU <= N-1.
+
+ D (input) REAL array, dimension (min(M,N))
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) REAL array, dimension (LDA,N)
+ The generated m by n matrix A.
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= M.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) REAL array, dimension (M+N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*m < 0) {
+ *info = -1;
+ } else if (*n < 0) {
+ *info = -2;
+ } else if (*kl < 0 || *kl > *m - 1) {
+ *info = -3;
+ } else if (*ku < 0 || *ku > *n - 1) {
+ *info = -4;
+ } else if (*lda < max(1,*m)) {
+ *info = -7;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("SLAGGE", &i__1);
+ return 0;
+ }
+
+/* initialize A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = 1; i <= i__2; ++i) {
+ a[i + j * a_dim1] = 0.f;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = min(*m,*n);
+ for (i = 1; i <= i__1; ++i) {
+ a[i + i * a_dim1] = d[i];
+/* L30: */
+ }
+
+/* pre- and post-multiply A by random orthogonal matrices */
+
+ for (i = min(*m,*n); i >= 1; --i) {
+ if (i < *m) {
+
+/* generate random reflection */
+
+ i__1 = *m - i + 1;
+ slarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *m - i + 1;
+ wn = snrm2_(&i__1, &work[1], &c__1);
+ wa = r_sign(&wn, &work[1]);
+ if (wn == 0.f) {
+ tau = 0.f;
+ } else {
+ wb = work[1] + wa;
+ i__1 = *m - i;
+ r__1 = 1.f / wb;
+ sscal_(&i__1, &r__1, &work[2], &c__1);
+ work[1] = 1.f;
+ tau = wb / wa;
+ }
+
+/* multiply A(i:m,i:n) by random reflection from the lef
+t */
+
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ sgemv_("Transpose", &i__1, &i__2, &c_b11, &a[i + i * a_dim1], lda,
+ &work[1], &c__1, &c_b13, &work[*m + 1], &c__1);
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ r__1 = -(doublereal)tau;
+ sger_(&i__1, &i__2, &r__1, &work[1], &c__1, &work[*m + 1], &c__1,
+ &a[i + i * a_dim1], lda);
+ }
+ if (i < *n) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ slarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = snrm2_(&i__1, &work[1], &c__1);
+ wa = r_sign(&wn, &work[1]);
+ if (wn == 0.f) {
+ tau = 0.f;
+ } else {
+ wb = work[1] + wa;
+ i__1 = *n - i;
+ r__1 = 1.f / wb;
+ sscal_(&i__1, &r__1, &work[2], &c__1);
+ work[1] = 1.f;
+ tau = wb / wa;
+ }
+
+/* multiply A(i:m,i:n) by random reflection from the rig
+ht */
+
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ sgemv_("No transpose", &i__1, &i__2, &c_b11, &a[i + i * a_dim1],
+ lda, &work[1], &c__1, &c_b13, &work[*n + 1], &c__1);
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ r__1 = -(doublereal)tau;
+ sger_(&i__1, &i__2, &r__1, &work[*n + 1], &c__1, &work[1], &c__1,
+ &a[i + i * a_dim1], lda);
+ }
+/* L40: */
+ }
+
+/* Reduce number of subdiagonals to KL and number of superdiagonals
+ to KU
+
+ Computing MAX */
+ i__2 = *m - 1 - *kl, i__3 = *n - 1 - *ku;
+ i__1 = max(i__2,i__3);
+ for (i = 1; i <= i__1; ++i) {
+ if (*kl <= *ku) {
+
+/* annihilate subdiagonal elements first (necessary if K
+L = 0)
+
+ Computing MIN */
+ i__2 = *m - 1 - *kl;
+ if (i <= min(i__2,*n)) {
+
+/* generate reflection to annihilate A(kl+i+1:m,i
+) */
+
+ i__2 = *m - *kl - i + 1;
+ wn = snrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
+ wa = r_sign(&wn, &a[*kl + i + i * a_dim1]);
+ if (wn == 0.f) {
+ tau = 0.f;
+ } else {
+ wb = a[*kl + i + i * a_dim1] + wa;
+ i__2 = *m - *kl - i;
+ r__1 = 1.f / wb;
+ sscal_(&i__2, &r__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
+ a[*kl + i + i * a_dim1] = 1.f;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(kl+i:m,i+1:n) from the l
+eft */
+
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ sgemv_("Transpose", &i__2, &i__3, &c_b11, &a[*kl + i + (i + 1)
+ * a_dim1], lda, &a[*kl + i + i * a_dim1], &c__1, &
+ c_b13, &work[1], &c__1);
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ r__1 = -(doublereal)tau;
+ sger_(&i__2, &i__3, &r__1, &a[*kl + i + i * a_dim1], &c__1, &
+ work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
+ a[*kl + i + i * a_dim1] = -(doublereal)wa;
+ }
+
+/* Computing MIN */
+ i__2 = *n - 1 - *ku;
+ if (i <= min(i__2,*m)) {
+
+/* generate reflection to annihilate A(i,ku+i+1:n
+) */
+
+ i__2 = *n - *ku - i + 1;
+ wn = snrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ wa = r_sign(&wn, &a[i + (*ku + i) * a_dim1]);
+ if (wn == 0.f) {
+ tau = 0.f;
+ } else {
+ wb = a[i + (*ku + i) * a_dim1] + wa;
+ i__2 = *n - *ku - i;
+ r__1 = 1.f / wb;
+ sscal_(&i__2, &r__1, &a[i + (*ku + i + 1) * a_dim1], lda);
+ a[i + (*ku + i) * a_dim1] = 1.f;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(i+1:m,ku+i:n) from the r
+ight */
+
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ sgemv_("No transpose", &i__2, &i__3, &c_b11, &a[i + 1 + (*ku
+ + i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda,
+ &c_b13, &work[1], &c__1);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ r__1 = -(doublereal)tau;
+ sger_(&i__2, &i__3, &r__1, &work[1], &c__1, &a[i + (*ku + i) *
+ a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
+ a[i + (*ku + i) * a_dim1] = -(doublereal)wa;
+ }
+ } else {
+
+/* annihilate superdiagonal elements first (necessary if
+
+ KU = 0)
+
+ Computing MIN */
+ i__2 = *n - 1 - *ku;
+ if (i <= min(i__2,*m)) {
+
+/* generate reflection to annihilate A(i,ku+i+1:n
+) */
+
+ i__2 = *n - *ku - i + 1;
+ wn = snrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ wa = r_sign(&wn, &a[i + (*ku + i) * a_dim1]);
+ if (wn == 0.f) {
+ tau = 0.f;
+ } else {
+ wb = a[i + (*ku + i) * a_dim1] + wa;
+ i__2 = *n - *ku - i;
+ r__1 = 1.f / wb;
+ sscal_(&i__2, &r__1, &a[i + (*ku + i + 1) * a_dim1], lda);
+ a[i + (*ku + i) * a_dim1] = 1.f;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(i+1:m,ku+i:n) from the r
+ight */
+
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ sgemv_("No transpose", &i__2, &i__3, &c_b11, &a[i + 1 + (*ku
+ + i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda,
+ &c_b13, &work[1], &c__1);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ r__1 = -(doublereal)tau;
+ sger_(&i__2, &i__3, &r__1, &work[1], &c__1, &a[i + (*ku + i) *
+ a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
+ a[i + (*ku + i) * a_dim1] = -(doublereal)wa;
+ }
+
+/* Computing MIN */
+ i__2 = *m - 1 - *kl;
+ if (i <= min(i__2,*n)) {
+
+/* generate reflection to annihilate A(kl+i+1:m,i
+) */
+
+ i__2 = *m - *kl - i + 1;
+ wn = snrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
+ wa = r_sign(&wn, &a[*kl + i + i * a_dim1]);
+ if (wn == 0.f) {
+ tau = 0.f;
+ } else {
+ wb = a[*kl + i + i * a_dim1] + wa;
+ i__2 = *m - *kl - i;
+ r__1 = 1.f / wb;
+ sscal_(&i__2, &r__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
+ a[*kl + i + i * a_dim1] = 1.f;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(kl+i:m,i+1:n) from the l
+eft */
+
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ sgemv_("Transpose", &i__2, &i__3, &c_b11, &a[*kl + i + (i + 1)
+ * a_dim1], lda, &a[*kl + i + i * a_dim1], &c__1, &
+ c_b13, &work[1], &c__1);
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ r__1 = -(doublereal)tau;
+ sger_(&i__2, &i__3, &r__1, &a[*kl + i + i * a_dim1], &c__1, &
+ work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
+ a[*kl + i + i * a_dim1] = -(doublereal)wa;
+ }
+ }
+
+ i__2 = *m;
+ for (j = *kl + i + 1; j <= i__2; ++j) {
+ a[j + i * a_dim1] = 0.f;
+/* L50: */
+ }
+
+ i__2 = *n;
+ for (j = *ku + i + 1; j <= i__2; ++j) {
+ a[i + j * a_dim1] = 0.f;
+/* L60: */
+ }
+/* L70: */
+ }
+ return 0;
+
+/* End of SLAGGE */
+
+} /* slagge_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slagsy.c b/SuperLU_5.2.0/TESTING/MATGEN/slagsy.c
new file mode 100644
index 0000000..841e158
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slagsy.c
@@ -0,0 +1,272 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__3 = 3;
+static integer c__1 = 1;
+static real c_b12 = 0.f;
+static real c_b19 = -1.f;
+static real c_b26 = 1.f;
+
+/* Subroutine */ int slagsy_slu(integer *n, integer *k, real *d, real *a,
+ integer *lda, integer *iseed, real *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ real r__1;
+
+ /* Builtin functions */
+ double r_sign(real *, real *);
+
+ /* Local variables */
+ extern /* Subroutine */ int sger_(integer *, integer *, real *, real *,
+ integer *, real *, integer *, real *, integer *);
+ extern real sdot_(integer *, real *, integer *, real *, integer *),
+ snrm2_(integer *, real *, integer *);
+ static integer i, j;
+ extern /* Subroutine */ int ssyr2_(char *, integer *, real *, real *,
+ integer *, real *, integer *, real *, integer *);
+ static real alpha;
+ extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *),
+ sgemv_(char *, integer *, integer *, real *, real *, integer *,
+ real *, integer *, real *, real *, integer *), saxpy_(
+ integer *, real *, real *, integer *, real *, integer *), ssymv_(
+ char *, integer *, real *, real *, integer *, real *, integer *,
+ real *, real *, integer *);
+ static real wa, wb, wn;
+ extern /* Subroutine */ int slarnv_slu(integer *, integer *, integer *, real *);
+ extern int input_error(char *, int *);
+ static real tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0)
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ SLAGSY generates a real symmetric matrix A, by pre- and post-
+ multiplying a real diagonal matrix D with a random orthogonal matrix:
+
+ A = U*D*U'. The semi-bandwidth may then be reduced to k by additional
+
+ orthogonal transformations.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ K (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= K <= N-1.
+
+ D (input) REAL array, dimension (N)
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) REAL array, dimension (LDA,N)
+ The generated n by n symmetric matrix A (the full matrix is
+ stored).
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) REAL array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*k < 0 || *k > *n - 1) {
+ *info = -2;
+ } else if (*lda < max(1,*n)) {
+ *info = -5;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("SLAGSY", &i__1);
+ return 0;
+ }
+
+/* initialize lower triangle of A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ a[i + j * a_dim1] = 0.f;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ a[i + i * a_dim1] = d[i];
+/* L30: */
+ }
+
+/* Generate lower triangle of symmetric matrix */
+
+ for (i = *n - 1; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ slarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = snrm2_(&i__1, &work[1], &c__1);
+ wa = r_sign(&wn, &work[1]);
+ if (wn == 0.f) {
+ tau = 0.f;
+ } else {
+ wb = work[1] + wa;
+ i__1 = *n - i;
+ r__1 = 1.f / wb;
+ sscal_(&i__1, &r__1, &work[2], &c__1);
+ work[1] = 1.f;
+ tau = wb / wa;
+ }
+
+/* apply random reflection to A(i:n,i:n) from the left
+ and the right
+
+ compute y := tau * A * u */
+
+ i__1 = *n - i + 1;
+ ssymv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
+ &c_b12, &work[*n + 1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( y, u ) * u */
+
+ i__1 = *n - i + 1;
+ alpha = tau * -.5f * sdot_(&i__1, &work[*n + 1], &c__1, &work[1], &
+ c__1);
+ i__1 = *n - i + 1;
+ saxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
+
+/* apply the transformation as a rank-2 update to A(i:n,i:n) */
+
+ i__1 = *n - i + 1;
+ ssyr2_("Lower", &i__1, &c_b19, &work[1], &c__1, &work[*n + 1], &c__1,
+ &a[i + i * a_dim1], lda);
+/* L40: */
+ }
+
+/* Reduce number of subdiagonals to K */
+
+ i__1 = *n - 1 - *k;
+ for (i = 1; i <= i__1; ++i) {
+
+/* generate reflection to annihilate A(k+i+1:n,i) */
+
+ i__2 = *n - *k - i + 1;
+ wn = snrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
+ wa = r_sign(&wn, &a[*k + i + i * a_dim1]);
+ if (wn == 0.f) {
+ tau = 0.f;
+ } else {
+ wb = a[*k + i + i * a_dim1] + wa;
+ i__2 = *n - *k - i;
+ r__1 = 1.f / wb;
+ sscal_(&i__2, &r__1, &a[*k + i + 1 + i * a_dim1], &c__1);
+ a[*k + i + i * a_dim1] = 1.f;
+ tau = wb / wa;
+ }
+
+/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
+
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ sgemv_("Transpose", &i__2, &i__3, &c_b26, &a[*k + i + (i + 1) *
+ a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b12, &work[1]
+ , &c__1);
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ r__1 = -(doublereal)tau;
+ sger_(&i__2, &i__3, &r__1, &a[*k + i + i * a_dim1], &c__1, &work[1], &
+ c__1, &a[*k + i + (i + 1) * a_dim1], lda);
+
+/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
+ht
+
+ compute y := tau * A * u */
+
+ i__2 = *n - *k - i + 1;
+ ssymv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
+ k + i + i * a_dim1], &c__1, &c_b12, &work[1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( y, u ) * u */
+
+ i__2 = *n - *k - i + 1;
+ alpha = tau * -.5f * sdot_(&i__2, &work[1], &c__1, &a[*k + i + i *
+ a_dim1], &c__1);
+ i__2 = *n - *k - i + 1;
+ saxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
+ ;
+
+/* apply symmetric rank-2 update to A(k+i:n,k+i:n) */
+
+ i__2 = *n - *k - i + 1;
+ ssyr2_("Lower", &i__2, &c_b19, &a[*k + i + i * a_dim1], &c__1, &work[
+ 1], &c__1, &a[*k + i + (*k + i) * a_dim1], lda);
+
+ a[*k + i + i * a_dim1] = -(doublereal)wa;
+ i__2 = *n;
+ for (j = *k + i + 1; j <= i__2; ++j) {
+ a[j + i * a_dim1] = 0.f;
+/* L50: */
+ }
+/* L60: */
+ }
+
+/* Store full symmetric matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ a[j + i * a_dim1] = a[i + j * a_dim1];
+/* L70: */
+ }
+/* L80: */
+ }
+ return 0;
+
+/* End of SLAGSY */
+
+} /* slagsy_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slaran.c b/SuperLU_5.2.0/TESTING/MATGEN/slaran.c
new file mode 100644
index 0000000..7934657
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slaran.c
@@ -0,0 +1,92 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+doublereal dlaran_sluslu(integer *iseed)
+{
+ /* System generated locals */
+ real ret_val;
+
+ /* Local variables */
+ static integer it1, it2, it3, it4;
+
+
+/* -- LAPACK auxiliary routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ SLARAN returns a random real number from a uniform (0,1)
+ distribution.
+
+ Arguments
+ =========
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ Further Details
+ ===============
+
+ This routine uses a multiplicative congruential method with modulus
+ 2**48 and multiplier 33952834046453 (see G.S.Fishman,
+ 'Multiplicative congruential random number generators with modulus
+ 2**b: an exhaustive analysis for b = 32 and a partial analysis for
+ b = 48', Math. Comp. 189, pp 331-344, 1990).
+
+ 48-bit integers are stored in 4 integer array elements with 12 bits
+ per element. Hence the routine is portable across machines with
+ integers of 32 bits or more.
+
+ =====================================================================
+
+
+
+ multiply the seed by the multiplier modulo 2**48
+
+ Parameter adjustments */
+ --iseed;
+
+ /* Function Body */
+ it4 = iseed[4] * 2549;
+ it3 = it4 / 4096;
+ it4 -= it3 << 12;
+ it3 = it3 + iseed[3] * 2549 + iseed[4] * 2508;
+ it2 = it3 / 4096;
+ it3 -= it2 << 12;
+ it2 = it2 + iseed[2] * 2549 + iseed[3] * 2508 + iseed[4] * 322;
+ it1 = it2 / 4096;
+ it2 -= it1 << 12;
+ it1 = it1 + iseed[1] * 2549 + iseed[2] * 2508 + iseed[3] * 322 + iseed[4]
+ * 494;
+ it1 %= 4096;
+
+/* return updated seed */
+
+ iseed[1] = it1;
+ iseed[2] = it2;
+ iseed[3] = it3;
+ iseed[4] = it4;
+
+/* convert 48-bit integer to a real number in the interval (0,1) */
+
+ ret_val = ((real) it1 + ((real) it2 + ((real) it3 + (real) it4 *
+ 2.44140625e-4f) * 2.44140625e-4f) * 2.44140625e-4f) *
+ 2.44140625e-4f;
+ return ret_val;
+
+/* End of SLARAN */
+
+} /* dlaran_sluslu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slarge.c b/SuperLU_5.2.0/TESTING/MATGEN/slarge.c
new file mode 100644
index 0000000..ac08946
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slarge.c
@@ -0,0 +1,152 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__3 = 3;
+static integer c__1 = 1;
+static real c_b8 = 1.f;
+static real c_b10 = 0.f;
+
+/* Subroutine */ int slarge_slu(integer *n, real *a, integer *lda, integer *
+ iseed, real *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1;
+ real r__1;
+
+ /* Builtin functions */
+ double r_sign(real *, real *);
+
+ /* Local variables */
+ extern /* Subroutine */ int sger_(integer *, integer *, real *, real *,
+ integer *, real *, integer *, real *, integer *);
+ extern real snrm2_(integer *, real *, integer *);
+ static integer i;
+ extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *),
+ sgemv_(char *, integer *, integer *, real *, real *, integer *,
+ real *, integer *, real *, real *, integer *);
+ static real wa, wb, wn;
+ extern /* Subroutine */ int slarnv_slu(integer *, integer *, integer *, real *);
+ extern int input_error(char *, int *);
+ static real tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0)
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ SLARGE pre- and post-multiplies a real general n by n matrix A
+ with a random orthogonal matrix: A = U*D*U'.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ A (input/output) REAL array, dimension (LDA,N)
+ On entry, the original n by n matrix A.
+ On exit, A is overwritten by U*A*U' for some random
+ orthogonal matrix U.
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) REAL array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*lda < max(1,*n)) {
+ *info = -3;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("SLARGE", &i__1);
+ return 0;
+ }
+
+/* pre- and post-multiply A by random orthogonal matrix */
+
+ for (i = *n; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ slarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = snrm2_(&i__1, &work[1], &c__1);
+ wa = r_sign(&wn, &work[1]);
+ if (wn == 0.f) {
+ tau = 0.f;
+ } else {
+ wb = work[1] + wa;
+ i__1 = *n - i;
+ r__1 = 1.f / wb;
+ sscal_(&i__1, &r__1, &work[2], &c__1);
+ work[1] = 1.f;
+ tau = wb / wa;
+ }
+
+/* multiply A(i:n,1:n) by random reflection from the left */
+
+ i__1 = *n - i + 1;
+ sgemv_("Transpose", &i__1, n, &c_b8, &a[i + a_dim1], lda, &work[1], &
+ c__1, &c_b10, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ r__1 = -(doublereal)tau;
+ sger_(&i__1, n, &r__1, &work[1], &c__1, &work[*n + 1], &c__1, &a[i +
+ a_dim1], lda);
+
+/* multiply A(1:n,i:n) by random reflection from the right */
+
+ i__1 = *n - i + 1;
+ sgemv_("No transpose", n, &i__1, &c_b8, &a[i * a_dim1 + 1], lda, &
+ work[1], &c__1, &c_b10, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ r__1 = -(doublereal)tau;
+ sger_(n, &i__1, &r__1, &work[*n + 1], &c__1, &work[1], &c__1, &a[i *
+ a_dim1 + 1], lda);
+/* L10: */
+ }
+ return 0;
+
+/* End of SLARGE */
+
+} /* slarge_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slarnd.c b/SuperLU_5.2.0/TESTING/MATGEN/slarnd.c
new file mode 100644
index 0000000..59f7f5a
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slarnd.c
@@ -0,0 +1,94 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+doublereal slarnd_slu(integer *idist, integer *iseed)
+{
+ /* System generated locals */
+ real ret_val;
+
+ /* Builtin functions */
+ double log(doublereal), sqrt(doublereal), cos(doublereal);
+
+ /* Local variables */
+ static real t1, t2;
+ extern doublereal dlaran_sluslu(integer *);
+
+
+/* -- 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
+
+
+ Purpose
+ =======
+
+ SLARND returns a random real number from a uniform or normal
+ distribution.
+
+ Arguments
+ =========
+
+ IDIST (input) INTEGER
+ Specifies the distribution of the random numbers:
+ = 1: uniform (0,1)
+ = 2: uniform (-1,1)
+ = 3: normal (0,1)
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ Further Details
+ ===============
+
+ This routine calls the auxiliary routine SLARAN to generate a random
+
+ real number from a uniform (0,1) distribution. The Box-Muller method
+
+ is used to transform numbers from a uniform to a normal distribution.
+
+
+ =====================================================================
+
+
+
+ Generate a real random number from a uniform (0,1) distribution
+
+ Parameter adjustments */
+ --iseed;
+
+ /* Function Body */
+ t1 = dlaran_sluslu(&iseed[1]);
+
+ if (*idist == 1) {
+
+/* uniform (0,1) */
+
+ ret_val = t1;
+ } else if (*idist == 2) {
+
+/* uniform (-1,1) */
+
+ ret_val = t1 * 2.f - 1.f;
+ } else if (*idist == 3) {
+
+/* normal (0,1) */
+
+ t2 = dlaran_sluslu(&iseed[1]);
+ ret_val = sqrt(log(t1) * -2.f) * cos(t2 *
+ 6.2831853071795864769252867663f);
+ }
+ return ret_val;
+
+/* End of SLARND */
+
+} /* slarnd_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slarnv.c b/SuperLU_5.2.0/TESTING/MATGEN/slarnv.c
new file mode 100644
index 0000000..b8e8a00
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slarnv.c
@@ -0,0 +1,124 @@
+#include "f2c.h"
+
+/* Subroutine */ int slarnv_slu(integer *idist, integer *iseed, integer *n, real
+ *x)
+{
+/* -- 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
+
+
+ Purpose
+ =======
+
+ SLARNV returns a vector of n random real numbers from a uniform or
+ normal distribution.
+
+ Arguments
+ =========
+
+ IDIST (input) INTEGER
+ Specifies the distribution of the random numbers:
+ = 1: uniform (0,1)
+ = 2: uniform (-1,1)
+ = 3: normal (0,1)
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ N (input) INTEGER
+ The number of random numbers to be generated.
+
+ X (output) REAL array, dimension (N)
+ The generated random numbers.
+
+ Further Details
+ ===============
+
+ This routine calls the auxiliary routine SLARUV to generate random
+ real numbers from a uniform (0,1) distribution, in batches of up to
+ 128 using vectorisable code. The Box-Muller method is used to
+ transform numbers from a uniform to a normal distribution.
+
+ =====================================================================
+
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer i__1, i__2, i__3;
+ /* Builtin functions */
+ double log(doublereal), sqrt(doublereal), cos(doublereal);
+ /* Local variables */
+ static integer i;
+ static real u[128];
+ static integer il, iv, il2;
+ extern /* Subroutine */ int slaruv_slu(integer *, integer *, real *);
+
+
+#define X(I) x[(I)-1]
+#define ISEED(I) iseed[(I)-1]
+
+
+ i__1 = *n;
+ for (iv = 1; iv <= *n; iv += 64) {
+/* Computing MIN */
+ i__2 = 64, i__3 = *n - iv + 1;
+ il = min(i__2,i__3);
+ if (*idist == 3) {
+ il2 = il << 1;
+ } else {
+ il2 = il;
+ }
+
+/* Call SLARUV to generate IL2 numbers from a uniform (0,1)
+ distribution (IL2 <= LV) */
+
+ slaruv_slu(&ISEED(1), &il2, u);
+
+ if (*idist == 1) {
+
+/* Copy generated numbers */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ X(iv + i - 1) = u[i - 1];
+/* L10: */
+ }
+ } else if (*idist == 2) {
+
+/* Convert generated numbers to uniform (-1,1) distribut
+ion */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ X(iv + i - 1) = u[i - 1] * 2.f - 1.f;
+/* L20: */
+ }
+ } else if (*idist == 3) {
+
+/* Convert generated numbers to normal (0,1) distributio
+n */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ X(iv + i - 1) = sqrt(log(u[(i << 1) - 2]) * -2.f) * cos(u[(i
+ << 1) - 1] * 6.2831853071795864769252867663f);
+/* L30: */
+ }
+ }
+/* L40: */
+ }
+ return 0;
+
+/* End of SLARNV */
+
+} /* slarnv_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slaror.c b/SuperLU_5.2.0/TESTING/MATGEN/slaror.c
new file mode 100644
index 0000000..2402601
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slaror.c
@@ -0,0 +1,286 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static real c_b9 = 0.f;
+static real c_b10 = 1.f;
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int slaror_slu(char *side, char *init, integer *m, integer *n,
+ real *a, integer *lda, integer *iseed, real *x, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+ real r__1;
+
+ /* Builtin functions */
+ double r_sign(real *, real *);
+
+ /* Local variables */
+ static integer kbeg, jcol;
+ extern /* Subroutine */ int sger_(integer *, integer *, real *, real *,
+ integer *, real *, integer *, real *, integer *);
+ static integer irow;
+ extern real snrm2_(integer *, real *, integer *);
+ static integer j;
+ extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *),
+ sgemv_(char *, integer *, integer *, real *, real *, integer *,
+ real *, integer *, real *, real *, integer *);
+ static integer ixfrm, itype, nxfrm;
+ static real xnorm;
+ extern int input_error(char *, int *);
+ static real factor;
+ extern doublereal slarnd_slu(integer *, integer *);
+ extern /* Subroutine */ int slaset_slu(char *, integer *, integer *, real *,
+ real *, real *, integer *);
+ static real xnorms;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ SLAROR pre- or post-multiplies an M by N matrix A by a random
+ orthogonal matrix U, overwriting A. A may optionally be initialized
+
+ to the identity matrix before multiplying by U. U is generated using
+
+ the method of G.W. Stewart (SIAM J. Numer. Anal. 17, 1980, 403-409).
+
+
+ Arguments
+ =========
+
+ SIDE (input) CHARACTER*1
+ Specifies whether A is multiplied on the left or right by U.
+
+ = 'L': Multiply A on the left (premultiply) by U
+ = 'R': Multiply A on the right (postmultiply) by U'
+ = 'C' or 'T': Multiply A on the left by U and the right
+ by U' (Here, U' means U-transpose.)
+
+ INIT (input) CHARACTER*1
+ Specifies whether or not A should be initialized to the
+ identity matrix.
+ = 'I': Initialize A to (a section of) the identity matrix
+ before applying U.
+ = 'N': No initialization. Apply U to the input matrix A.
+
+ INIT = 'I' may be used to generate square or rectangular
+ orthogonal matrices:
+
+ For M = N and SIDE = 'L' or 'R', the rows will be orthogonal
+
+ to each other, as will the columns.
+
+ If M < N, SIDE = 'R' produces a dense matrix whose rows are
+ orthogonal and whose columns are not, while SIDE = 'L'
+ produces a matrix whose rows are orthogonal, and whose first
+
+ M columns are orthogonal, and whose remaining columns are
+ zero.
+
+ If M > N, SIDE = 'L' produces a dense matrix whose columns
+ are orthogonal and whose rows are not, while SIDE = 'R'
+ produces a matrix whose columns are orthogonal, and whose
+ first M rows are orthogonal, and whose remaining rows are
+ zero.
+
+ M (input) INTEGER
+ The number of rows of A.
+
+ N (input) INTEGER
+ The number of columns of A.
+
+ A (input/output) REAL array, dimension (LDA, N)
+ On entry, the array A.
+ On exit, overwritten by U A ( if SIDE = 'L' ),
+ or by A U ( if SIDE = 'R' ),
+ or by U A U' ( if SIDE = 'C' or 'T').
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= max(1,M).
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry ISEED specifies the seed of the random number
+ generator. The array elements should be between 0 and 4095;
+ if not they will be reduced mod 4096. Also, ISEED(4) must
+ be odd. The random number generator uses a linear
+ congruential sequence limited to small integers, and so
+ should produce machine independent random numbers. The
+ values of ISEED are changed on exit, and can be used in the
+ next call to SLAROR to continue the same random number
+ sequence.
+
+ X (workspace) REAL array, dimension (3*MAX( M, N ))
+ Workspace of length
+ 2*M + N if SIDE = 'L',
+ 2*N + M if SIDE = 'R',
+ 3*N if SIDE = 'C' or 'T'.
+
+ INFO (output) INTEGER
+ An error flag. It is set to:
+ = 0: normal return
+ < 0: if INFO = -k, the k-th argument had an illegal value
+ = 1: if the random numbers generated by SLARND are bad.
+
+ =====================================================================
+
+
+
+ Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --x;
+
+ /* Function Body */
+ if (*n == 0 || *m == 0) {
+ return 0;
+ }
+
+ itype = 0;
+ if (strncmp(side, "L", 1)==0) {
+ itype = 1;
+ } else if (strncmp(side, "R", 1)==0) {
+ itype = 2;
+ } else if (strncmp(side, "C", 1)==0 || strncmp(side, "T", 1)==0) {
+ itype = 3;
+ }
+
+/* Check for argument errors. */
+
+ *info = 0;
+ if (itype == 0) {
+ *info = -1;
+ } else if (*m < 0) {
+ *info = -3;
+ } else if (*n < 0 || itype == 3 && *n != *m) {
+ *info = -4;
+ } else if (*lda < *m) {
+ *info = -6;
+ }
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("SLAROR", &i__1);
+ return 0;
+ }
+
+ if (itype == 1) {
+ nxfrm = *m;
+ } else {
+ nxfrm = *n;
+ }
+
+/* Initialize A to the identity matrix if desired */
+
+ if (strncmp(init, "I", 1)==0) {
+ slaset_slu("Full", m, n, &c_b9, &c_b10, &a[a_offset], lda);
+ }
+
+/* If no rotation possible, multiply by random +/-1
+
+ Compute rotation by computing Householder transformations
+ H(2), H(3), ..., H(nhouse) */
+
+ i__1 = nxfrm;
+ for (j = 1; j <= i__1; ++j) {
+ x[j] = 0.f;
+/* L10: */
+ }
+
+ i__1 = nxfrm;
+ for (ixfrm = 2; ixfrm <= i__1; ++ixfrm) {
+ kbeg = nxfrm - ixfrm + 1;
+
+/* Generate independent normal( 0, 1 ) random numbers */
+
+ i__2 = nxfrm;
+ for (j = kbeg; j <= i__2; ++j) {
+ x[j] = slarnd_slu(&c__3, &iseed[1]);
+/* L20: */
+ }
+
+/* Generate a Householder transformation from the random vector
+ X */
+
+ xnorm = snrm2_(&ixfrm, &x[kbeg], &c__1);
+ xnorms = r_sign(&xnorm, &x[kbeg]);
+ r__1 = -(doublereal)x[kbeg];
+ x[kbeg + nxfrm] = r_sign(&c_b10, &r__1);
+ factor = xnorms * (xnorms + x[kbeg]);
+ if (dabs(factor) < 1e-20f) {
+ *info = 1;
+ input_error("SLAROR", info);
+ return 0;
+ } else {
+ factor = 1.f / factor;
+ }
+ x[kbeg] += xnorms;
+
+/* Apply Householder transformation to A */
+
+ if (itype == 1 || itype == 3) {
+
+/* Apply H(k) from the left. */
+
+ sgemv_("T", &ixfrm, n, &c_b10, &a[kbeg + a_dim1], lda, &x[kbeg], &
+ c__1, &c_b9, &x[(nxfrm << 1) + 1], &c__1);
+ r__1 = -(doublereal)factor;
+ sger_(&ixfrm, n, &r__1, &x[kbeg], &c__1, &x[(nxfrm << 1) + 1], &
+ c__1, &a[kbeg + a_dim1], lda);
+
+ }
+
+ if (itype == 2 || itype == 3) {
+
+/* Apply H(k) from the right. */
+
+ sgemv_("N", m, &ixfrm, &c_b10, &a[kbeg * a_dim1 + 1], lda, &x[
+ kbeg], &c__1, &c_b9, &x[(nxfrm << 1) + 1], &c__1);
+ r__1 = -(doublereal)factor;
+ sger_(m, &ixfrm, &r__1, &x[(nxfrm << 1) + 1], &c__1, &x[kbeg], &
+ c__1, &a[kbeg * a_dim1 + 1], lda);
+
+ }
+/* L30: */
+ }
+
+ r__1 = slarnd_slu(&c__3, &iseed[1]);
+ x[nxfrm * 2] = r_sign(&c_b10, &r__1);
+
+/* Scale the matrix A by D. */
+
+ if (itype == 1 || itype == 3) {
+ i__1 = *m;
+ for (irow = 1; irow <= i__1; ++irow) {
+ sscal_(n, &x[nxfrm + irow], &a[irow + a_dim1], lda);
+/* L40: */
+ }
+ }
+
+ if (itype == 2 || itype == 3) {
+ i__1 = *n;
+ for (jcol = 1; jcol <= i__1; ++jcol) {
+ sscal_(m, &x[nxfrm + jcol], &a[jcol * a_dim1 + 1], &c__1);
+/* L50: */
+ }
+ }
+ return 0;
+
+/* End of SLAROR */
+
+} /* slaror_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slarot.c b/SuperLU_5.2.0/TESTING/MATGEN/slarot.c
new file mode 100644
index 0000000..efc7d26
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slarot.c
@@ -0,0 +1,299 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__4 = 4;
+static integer c__8 = 8;
+static integer c__1 = 1;
+
+/* Subroutine */ int slarot_slu(logical *lrows, logical *lleft, logical *lright,
+ integer *nl, real *c, real *s, real *a, integer *lda, real *xleft,
+ real *xright)
+{
+ /* System generated locals */
+ integer i__1;
+
+ /* Local variables */
+ static integer iinc;
+ extern /* Subroutine */ int srot_(integer *, real *, integer *, real *,
+ integer *, real *, real *);
+ static integer inext, ix, iy, nt;
+ static real xt[2], yt[2];
+ extern int input_error(char *, int *);
+ static integer iyt;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ SLAROT applies a (Givens) rotation to two adjacent rows or
+ columns, where one element of the first and/or last column/row
+ may be a separate variable. This is specifically indended
+ for use on matrices stored in some format other than GE, so
+ that elements of the matrix may be used or modified for which
+ no array element is provided.
+
+ One example is a symmetric matrix in SB format (bandwidth=4), for
+
+ which UPLO='L': Two adjacent rows will have the format:
+
+ row j: * * * * * . . . .
+ row j+1: * * * * * . . . .
+
+ '*' indicates elements for which storage is provided,
+ '.' indicates elements for which no storage is provided, but
+ are not necessarily zero; their values are determined by
+ symmetry. ' ' indicates elements which are necessarily zero,
+ and have no storage provided.
+
+ Those columns which have two '*'s can be handled by SROT.
+ Those columns which have no '*'s can be ignored, since as long
+ as the Givens rotations are carefully applied to preserve
+ symmetry, their values are determined.
+ Those columns which have one '*' have to be handled separately,
+ by using separate variables "p" and "q":
+
+ row j: * * * * * p . . .
+ row j+1: q * * * * * . . . .
+
+ The element p would have to be set correctly, then that column
+ is rotated, setting p to its new value. The next call to
+ SLAROT would rotate columns j and j+1, using p, and restore
+ symmetry. The element q would start out being zero, and be
+ made non-zero by the rotation. Later, rotations would presumably
+
+ be chosen to zero q out.
+
+ Typical Calling Sequences: rotating the i-th and (i+1)-st rows.
+ ------- ------- ---------
+
+ General dense matrix:
+
+ CALL SLAROT(.TRUE.,.FALSE.,.FALSE., N, C,S,
+ A(i,1),LDA, DUMMY, DUMMY)
+
+ General banded matrix in GB format:
+
+ j = MAX(1, i-KL )
+ NL = MIN( N, i+KU+1 ) + 1-j
+ CALL SLAROT( .TRUE., i-KL.GE.1, i+KU.LT.N, NL, C,S,
+ A(KU+i+1-j,j),LDA-1, XLEFT, XRIGHT )
+
+ [ note that i+1-j is just MIN(i,KL+1) ]
+
+ Symmetric banded matrix in SY format, bandwidth K,
+ lower triangle only:
+
+ j = MAX(1, i-K )
+ NL = MIN( K+1, i ) + 1
+ CALL SLAROT( .TRUE., i-K.GE.1, .TRUE., NL, C,S,
+ A(i,j), LDA, XLEFT, XRIGHT )
+
+ Same, but upper triangle only:
+
+ NL = MIN( K+1, N-i ) + 1
+ CALL SLAROT( .TRUE., .TRUE., i+K.LT.N, NL, C,S,
+ A(i,i), LDA, XLEFT, XRIGHT )
+
+ Symmetric banded matrix in SB format, bandwidth K,
+ lower triangle only:
+
+ [ same as for SY, except:]
+ . . . .
+ A(i+1-j,j), LDA-1, XLEFT, XRIGHT )
+
+ [ note that i+1-j is just MIN(i,K+1) ]
+
+ Same, but upper triangle only:
+ . . .
+ A(K+1,i), LDA-1, XLEFT, XRIGHT )
+
+ Rotating columns is just the transpose of rotating rows, except
+
+ for GB and SB: (rotating columns i and i+1)
+
+ GB:
+ j = MAX(1, i-KU )
+ NL = MIN( N, i+KL+1 ) + 1-j
+ CALL SLAROT( .TRUE., i-KU.GE.1, i+KL.LT.N, NL, C,S,
+ A(KU+j+1-i,i),LDA-1, XTOP, XBOTTM )
+
+ [note that KU+j+1-i is just MAX(1,KU+2-i)]
+
+ SB: (upper triangle)
+
+ . . . . . .
+ A(K+j+1-i,i),LDA-1, XTOP, XBOTTM )
+
+ SB: (lower triangle)
+
+ . . . . . .
+ A(1,i),LDA-1, XTOP, XBOTTM )
+
+ Arguments
+ =========
+
+ LROWS - LOGICAL
+ If .TRUE., then SLAROT will rotate two rows. If .FALSE.,
+ then it will rotate two columns.
+ Not modified.
+
+ LLEFT - LOGICAL
+ If .TRUE., then XLEFT will be used instead of the
+ corresponding element of A for the first element in the
+ second row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.)
+ If .FALSE., then the corresponding element of A will be
+ used.
+ Not modified.
+
+ LRIGHT - LOGICAL
+ If .TRUE., then XRIGHT will be used instead of the
+ corresponding element of A for the last element in the
+ first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
+
+ .FALSE., then the corresponding element of A will be used.
+ Not modified.
+
+ NL - INTEGER
+ The length of the rows (if LROWS=.TRUE.) or columns (if
+ LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
+ used, the columns/rows they are in should be included in
+ NL, e.g., if LLEFT = LRIGHT = .TRUE., then NL must be at
+ least 2. The number of rows/columns to be rotated
+ exclusive of those involving XLEFT and/or XRIGHT may
+ not be negative, i.e., NL minus how many of LLEFT and
+ LRIGHT are .TRUE. must be at least zero; if not, INPUT_ERROR
+ will be called.
+ Not modified.
+
+ C, S - REAL
+ Specify the Givens rotation to be applied. If LROWS is
+ true, then the matrix ( c s )
+ (-s c ) is applied from the left;
+ if false, then the transpose thereof is applied from the
+ right. For a Givens rotation, C**2 + S**2 should be 1,
+ but this is not checked.
+ Not modified.
+
+ A - REAL array.
+ The array containing the rows/columns to be rotated. The
+ first element of A should be the upper left element to
+ be rotated.
+ Read and modified.
+
+ LDA - INTEGER
+ The "effective" leading dimension of A. If A contains
+ a matrix stored in GE or SY format, then this is just
+ the leading dimension of A as dimensioned in the calling
+ routine. If A contains a matrix stored in band (GB or SB)
+ format, then this should be *one less* than the leading
+ dimension used in the calling routine. Thus, if
+ A were dimensioned A(LDA,*) in SLAROT, then A(1,j) would
+ be the j-th element in the first of the two rows
+ to be rotated, and A(2,j) would be the j-th in the second,
+ regardless of how the array may be stored in the calling
+ routine. [A cannot, however, actually be dimensioned thus,
+
+ since for band format, the row number may exceed LDA, which
+
+ is not legal FORTRAN.]
+ If LROWS=.TRUE., then LDA must be at least 1, otherwise
+ it must be at least NL minus the number of .TRUE. values
+ in XLEFT and XRIGHT.
+ Not modified.
+
+ XLEFT - REAL
+ If LLEFT is .TRUE., then XLEFT will be used and modified
+ instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
+ (if LROWS=.FALSE.).
+ Read and modified.
+
+ XRIGHT - REAL
+ If LRIGHT is .TRUE., then XRIGHT will be used and modified
+ instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
+ (if LROWS=.FALSE.).
+ Read and modified.
+
+ =====================================================================
+
+
+
+ Set up indices, arrays for ends
+
+ Parameter adjustments */
+ --a;
+
+ /* Function Body */
+ if (*lrows) {
+ iinc = *lda;
+ inext = 1;
+ } else {
+ iinc = 1;
+ inext = *lda;
+ }
+
+ if (*lleft) {
+ nt = 1;
+ ix = iinc + 1;
+ iy = *lda + 2;
+ xt[0] = a[1];
+ yt[0] = *xleft;
+ } else {
+ nt = 0;
+ ix = 1;
+ iy = inext + 1;
+ }
+
+ if (*lright) {
+ iyt = inext + 1 + (*nl - 1) * iinc;
+ ++nt;
+ xt[nt - 1] = *xright;
+ yt[nt - 1] = a[iyt];
+ }
+
+/* Check for errors */
+
+ if (*nl < nt) {
+ input_error("SLAROT", &c__4);
+ return 0;
+ }
+ if (*lda <= 0 || ! (*lrows) && *lda < *nl - nt) {
+ input_error("SLAROT", &c__8);
+ return 0;
+ }
+
+/* Rotate */
+
+ i__1 = *nl - nt;
+ srot_(&i__1, &a[ix], &iinc, &a[iy], &iinc, c, s);
+ srot_(&nt, xt, &c__1, yt, &c__1, c, s);
+
+/* Stuff values back into XLEFT, XRIGHT, etc. */
+
+ if (*lleft) {
+ a[1] = xt[0];
+ *xleft = yt[0];
+ }
+
+ if (*lright) {
+ *xright = xt[nt - 1];
+ a[iyt] = yt[nt - 1];
+ }
+
+ return 0;
+
+/* End of SLAROT */
+
+} /* slarot_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slartg.c b/SuperLU_5.2.0/TESTING/MATGEN/slartg.c
new file mode 100644
index 0000000..28a62a3
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slartg.c
@@ -0,0 +1,156 @@
+#include "f2c.h"
+
+/* Subroutine */ int slartg_slu(real *f, real *g, real *cs, real *sn, real *r)
+{
+/* -- 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
+
+
+ Purpose
+ =======
+
+ SLARTG generate a plane rotation so that
+
+ [ CS SN ] . [ F ] = [ R ] where CS**2 + SN**2 = 1.
+ [ -SN CS ] [ G ] [ 0 ]
+
+ This is a slower, more accurate version of the BLAS1 routine SROTG,
+ with the following other differences:
+ F and G are unchanged on return.
+ If G=0, then CS=1 and SN=0.
+ If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any
+ floating point operations (saves work in SBDSQR when
+ there are zeros on the diagonal).
+
+ If F exceeds G in magnitude, CS will be positive.
+
+ Arguments
+ =========
+
+ F (input) REAL
+ The first component of vector to be rotated.
+
+ G (input) REAL
+ The second component of vector to be rotated.
+
+ CS (output) REAL
+ The cosine of the rotation.
+
+ SN (output) REAL
+ The sine of the rotation.
+
+ R (output) REAL
+ The nonzero component of the rotated vector.
+
+ =====================================================================
+*/
+ /* Initialized data */
+ static logical first = TRUE_;
+ /* System generated locals */
+ integer i__1;
+ real r__1, r__2;
+ /* Builtin functions */
+ double log(doublereal), pow_ri(real *, integer *), sqrt(doublereal);
+ /* Local variables */
+ static integer i;
+ static real scale;
+ static integer count;
+ static real f1, g1, safmn2, safmx2;
+ extern float smach(char *);
+ static real safmin, eps;
+
+
+ if (first) {
+ first = FALSE_;
+ safmin = smach("S");
+ eps = smach("E");
+ r__1 = smach("B");
+ i__1 = (integer) (log(safmin / eps) / log(smach("B")) / 2.f);
+ safmn2 = pow_ri(&r__1, &i__1);
+ safmx2 = 1.f / safmn2;
+ }
+ if (*g == 0.f) {
+ *cs = 1.f;
+ *sn = 0.f;
+ *r = *f;
+ } else if (*f == 0.f) {
+ *cs = 0.f;
+ *sn = 1.f;
+ *r = *g;
+ } else {
+ f1 = *f;
+ g1 = *g;
+/* Computing MAX */
+ r__1 = dabs(f1), r__2 = dabs(g1);
+ scale = dmax(r__1,r__2);
+ if (scale >= safmx2) {
+ count = 0;
+L10:
+ ++count;
+ f1 *= safmn2;
+ g1 *= safmn2;
+/* Computing MAX */
+ r__1 = dabs(f1), r__2 = dabs(g1);
+ scale = dmax(r__1,r__2);
+ if (scale >= safmx2) {
+ goto L10;
+ }
+/* Computing 2nd power */
+ r__1 = f1;
+/* Computing 2nd power */
+ r__2 = g1;
+ *r = sqrt(r__1 * r__1 + r__2 * r__2);
+ *cs = f1 / *r;
+ *sn = g1 / *r;
+ i__1 = count;
+ for (i = 1; i <= count; ++i) {
+ *r *= safmx2;
+/* L20: */
+ }
+ } else if (scale <= safmn2) {
+ count = 0;
+L30:
+ ++count;
+ f1 *= safmx2;
+ g1 *= safmx2;
+/* Computing MAX */
+ r__1 = dabs(f1), r__2 = dabs(g1);
+ scale = dmax(r__1,r__2);
+ if (scale <= safmn2) {
+ goto L30;
+ }
+/* Computing 2nd power */
+ r__1 = f1;
+/* Computing 2nd power */
+ r__2 = g1;
+ *r = sqrt(r__1 * r__1 + r__2 * r__2);
+ *cs = f1 / *r;
+ *sn = g1 / *r;
+ i__1 = count;
+ for (i = 1; i <= count; ++i) {
+ *r *= safmn2;
+/* L40: */
+ }
+ } else {
+/* Computing 2nd power */
+ r__1 = f1;
+/* Computing 2nd power */
+ r__2 = g1;
+ *r = sqrt(r__1 * r__1 + r__2 * r__2);
+ *cs = f1 / *r;
+ *sn = g1 / *r;
+ }
+ if (dabs(*f) > dabs(*g) && *cs < 0.f) {
+ *cs = -(doublereal)(*cs);
+ *sn = -(doublereal)(*sn);
+ *r = -(doublereal)(*r);
+ }
+ }
+ return 0;
+
+/* End of SLARTG */
+
+} /* slartg_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slaruv.c b/SuperLU_5.2.0/TESTING/MATGEN/slaruv.c
new file mode 100644
index 0000000..4ffb883
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slaruv.c
@@ -0,0 +1,152 @@
+#include "f2c.h"
+
+/* Subroutine */ int slaruv_slu(integer *iseed, integer *n, real *x)
+{
+/* -- 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
+ =======
+
+ SLARUV returns a vector of n random real numbers from a uniform (0,1)
+
+ distribution (n <= 128).
+
+ This is an auxiliary routine called by SLARNV and CLARNV.
+
+ Arguments
+ =========
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ N (input) INTEGER
+ The number of random numbers to be generated. N <= 128.
+
+ X (output) REAL array, dimension (N)
+ The generated random numbers.
+
+ Further Details
+ ===============
+
+ This routine uses a multiplicative congruential method with modulus
+ 2**48 and multiplier 33952834046453 (see G.S.Fishman,
+ 'Multiplicative congruential random number generators with modulus
+ 2**b: an exhaustive analysis for b = 32 and a partial analysis for
+ b = 48', Math. Comp. 189, pp 331-344, 1990).
+
+ 48-bit integers are stored in 4 integer array elements with 12 bits
+ per element. Hence the routine is portable across machines with
+ integers of 32 bits or more.
+
+ =====================================================================
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* Initialized data */
+ static integer mm[512] /* was [128][4] */ = { 494,2637,255,2008,1253,
+ 3344,4084,1739,3143,3468,688,1657,1238,3166,1292,3422,1270,2016,
+ 154,2862,697,1706,491,931,1444,444,3577,3944,2184,1661,3482,657,
+ 3023,3618,1267,1828,164,3798,3087,2400,2870,3876,1905,1593,1797,
+ 1234,3460,328,2861,1950,617,2070,3331,769,1558,2412,2800,189,287,
+ 2045,1227,2838,209,2770,3654,3993,192,2253,3491,2889,2857,2094,
+ 1818,688,1407,634,3231,815,3524,1914,516,164,303,2144,3480,119,
+ 3357,837,2826,2332,2089,3780,1700,3712,150,2000,3375,1621,3090,
+ 3765,1149,3146,33,3082,2741,359,3316,1749,185,2784,2202,2199,1364,
+ 1244,2020,3160,2785,2772,1217,1822,1245,2252,3904,2774,997,2573,
+ 1148,545,322,789,1440,752,2859,123,1848,643,2405,2638,2344,46,
+ 3814,913,3649,339,3808,822,2832,3078,3633,2970,637,2249,2081,4019,
+ 1478,242,481,2075,4058,622,3376,812,234,641,4005,1122,3135,2640,
+ 2302,40,1832,2247,2034,2637,1287,1691,496,1597,2394,2584,1843,336,
+ 1472,2407,433,2096,1761,2810,566,442,41,1238,1086,603,840,3168,
+ 1499,1084,3438,2408,1589,2391,288,26,512,1456,171,1677,2657,2270,
+ 2587,2961,1970,1817,676,1410,3723,2803,3185,184,663,499,3784,1631,
+ 1925,3912,1398,1349,1441,2224,2411,1907,3192,2786,382,37,759,2948,
+ 1862,3802,2423,2051,2295,1332,1832,2405,3638,3661,327,3660,716,
+ 1842,3987,1368,1848,2366,2508,3754,1766,3572,2893,307,1297,3966,
+ 758,2598,3406,2922,1038,2934,2091,2451,1580,1958,2055,1507,1078,
+ 3273,17,854,2916,3971,2889,3831,2621,1541,893,736,3992,787,2125,
+ 2364,2460,257,1574,3912,1216,3248,3401,2124,2762,149,2245,166,466,
+ 4018,1399,190,2879,153,2320,18,712,2159,2318,2091,3443,1510,449,
+ 1956,2201,3137,3399,1321,2271,3667,2703,629,2365,2431,1113,3922,
+ 2554,184,2099,3228,4012,1921,3452,3901,572,3309,3171,817,3039,
+ 1696,1256,3715,2077,3019,1497,1101,717,51,981,1978,1813,3881,76,
+ 3846,3694,1682,124,1660,3997,479,1141,886,3514,1301,3604,1888,
+ 1836,1990,2058,692,1194,20,3285,2046,2107,3508,3525,3801,2549,
+ 1145,2253,305,3301,1065,3133,2913,3285,1241,1197,3729,2501,1673,
+ 541,2753,949,2361,1165,4081,2725,3305,3069,3617,3733,409,2157,
+ 1361,3973,1865,2525,1409,3445,3577,77,3761,2149,1449,3005,225,85,
+ 3673,3117,3089,1349,2057,413,65,1845,697,3085,3441,1573,3689,2941,
+ 929,533,2841,4077,721,2821,2249,2397,2817,245,1913,1997,3121,997,
+ 1833,2877,1633,981,2009,941,2449,197,2441,285,1473,2741,3129,909,
+ 2801,421,4073,2813,2337,1429,1177,1901,81,1669,2633,2269,129,1141,
+ 249,3917,2481,3941,2217,2749,3041,1877,345,2861,1809,3141,2825,
+ 157,2881,3637,1465,2829,2161,3365,361,2685,3745,2325,3609,3821,
+ 3537,517,3017,2141,1537 };
+ /* System generated locals */
+ integer i__1;
+ /* Local variables */
+ static integer i, i1, i2, i3, i4, it1, it2, it3, it4;
+
+
+#define MM(I) mm[(I)]
+#define WAS(I) was[(I)]
+#define ISEED(I) iseed[(I)-1]
+#define X(I) x[(I)-1]
+
+
+
+ i1 = ISEED(1);
+ i2 = ISEED(2);
+ i3 = ISEED(3);
+ i4 = ISEED(4);
+
+ i__1 = min(*n,128);
+ for (i = 1; i <= min(*n,128); ++i) {
+
+/* Multiply the seed by i-th power of the multiplier modulo 2**
+48 */
+
+ it4 = i4 * MM(i + 383);
+ it3 = it4 / 4096;
+ it4 -= it3 << 12;
+ it3 = it3 + i3 * MM(i + 383) + i4 * MM(i + 255);
+ it2 = it3 / 4096;
+ it3 -= it2 << 12;
+ it2 = it2 + i2 * MM(i + 383) + i3 * MM(i + 255) + i4 * MM(i + 127);
+ it1 = it2 / 4096;
+ it2 -= it1 << 12;
+ it1 = it1 + i1 * MM(i + 383) + i2 * MM(i + 255) + i3 * MM(i + 127) +
+ i4 * MM(i - 1);
+ it1 %= 4096;
+
+/* Convert 48-bit integer to a real number in the interval (0,1
+) */
+
+ X(i) = ((real) it1 + ((real) it2 + ((real) it3 + (real) it4 *
+ 2.44140625e-4f) * 2.44140625e-4f) * 2.44140625e-4f) *
+ 2.44140625e-4f;
+/* L10: */
+ }
+
+/* Return final value of seed */
+
+ ISEED(1) = it1;
+ ISEED(2) = it2;
+ ISEED(3) = it3;
+ ISEED(4) = it4;
+ return 0;
+
+/* End of SLARUV */
+
+} /* slaruv_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slaset.c b/SuperLU_5.2.0/TESTING/MATGEN/slaset.c
new file mode 100644
index 0000000..f8a4498
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slaset.c
@@ -0,0 +1,135 @@
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int slaset_slu(char *uplo, integer *m, integer *n, real *alpha,
+ real *beta, real *a, integer *lda)
+{
+/* -- 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
+ =======
+
+ SLASET initializes an m-by-n matrix A to BETA on the diagonal and
+ ALPHA on the offdiagonals.
+
+ Arguments
+ =========
+
+ UPLO (input) CHARACTER*1
+ Specifies the part of the matrix A to be set.
+ = 'U': Upper triangular part is set; the strictly lower
+
+ triangular part of A is not changed.
+ = 'L': Lower triangular part is set; the strictly upper
+
+ triangular part of A is not changed.
+ Otherwise: All of the matrix A is set.
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ ALPHA (input) REAL
+ The constant to which the offdiagonal elements are to be set.
+
+
+ BETA (input) REAL
+ The constant to which the diagonal elements are to be set.
+
+ A (input/output) REAL array, dimension (LDA,N)
+ On exit, the leading m-by-n submatrix of A is set as follows:
+
+
+ if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n,
+ if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n,
+ otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j,
+
+ and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n).
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= max(1,M).
+
+ =====================================================================
+
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ /* Local variables */
+ static integer i, j;
+
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Set the strictly upper triangular or trapezoidal part of the
+
+ array to ALPHA. */
+
+ i__1 = *n;
+ for (j = 2; j <= *n; ++j) {
+/* Computing MIN */
+ i__3 = j - 1;
+ i__2 = min(i__3,*m);
+ for (i = 1; i <= min(j-1,*m); ++i) {
+ A(i,j) = *alpha;
+/* L10: */
+ }
+/* L20: */
+ }
+
+ } else if (strncmp(uplo, "L", 1)==0) {
+
+/* Set the strictly lower triangular or trapezoidal part of the
+
+ array to ALPHA. */
+
+ i__1 = min(*m,*n);
+ for (j = 1; j <= min(*m,*n); ++j) {
+ i__2 = *m;
+ for (i = j + 1; i <= *m; ++i) {
+ A(i,j) = *alpha;
+/* L30: */
+ }
+/* L40: */
+ }
+
+ } else {
+
+/* Set the leading m-by-n submatrix to ALPHA. */
+
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ A(i,j) = *alpha;
+/* L50: */
+ }
+/* L60: */
+ }
+ }
+
+/* Set the first min(M,N) diagonal elements to BETA. */
+
+ i__1 = min(*m,*n);
+ for (i = 1; i <= min(*m,*n); ++i) {
+ A(i,i) = *beta;
+/* L70: */
+ }
+
+ return 0;
+
+/* End of SLASET */
+
+} /* slaset_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slatb4.c b/SuperLU_5.2.0/TESTING/MATGEN/slatb4.c
new file mode 100644
index 0000000..a5d2477
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slatb4.c
@@ -0,0 +1,462 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__2 = 2;
+
+/* Subroutine */ int slatb4_slu(char *path, integer *imat, integer *m, integer *
+ n, char *type, integer *kl, integer *ku, real *anorm, integer *mode,
+ real *cndnum, char *dist)
+{
+ /* Initialized data */
+
+ static logical first = TRUE_;
+
+ /* System generated locals */
+ integer i__1;
+
+ /* Builtin functions */
+ double sqrt(doublereal);
+
+ /* Local variables */
+ static real badc1, badc2, large, small;
+ static char c2[2];
+ extern /* Subroutine */ int slabad_slu(real *, real *);
+ extern float smach(char *);
+ static integer mat;
+ static real eps;
+
+
+/* -- LAPACK test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ SLATB4 sets parameters for the matrix generator based on the type of
+
+ matrix to be generated.
+
+ Arguments
+ =========
+
+ PATH (input) CHARACTER*3
+ The LAPACK path name.
+
+ IMAT (input) INTEGER
+ An integer key describing which matrix to generate for this
+ path.
+
+ M (input) INTEGER
+ The number of rows in the matrix to be generated.
+
+ N (input) INTEGER
+ The number of columns in the matrix to be generated.
+
+ TYPE (output) CHARACTER*1
+ The type of the matrix to be generated:
+ = 'S': symmetric matrix
+ = 'P': symmetric positive (semi)definite matrix
+ = 'N': nonsymmetric matrix
+
+ KL (output) INTEGER
+ The lower band width of the matrix to be generated.
+
+ KU (output) INTEGER
+ The upper band width of the matrix to be generated.
+
+ ANORM (output) REAL
+ The desired norm of the matrix to be generated. The diagonal
+
+ matrix of singular values or eigenvalues is scaled by this
+ value.
+
+ MODE (output) INTEGER
+ A key indicating how to choose the vector of eigenvalues.
+
+ CNDNUM (output) REAL
+ The desired condition number.
+
+ DIST (output) CHARACTER*1
+ The type of distribution to be used by the random number
+ generator.
+
+ =====================================================================
+
+
+
+ Set some constants for use in the subroutine. */
+
+ if (first) {
+ first = FALSE_;
+ eps = smach("Precision");
+ badc2 = .1f / eps;
+ badc1 = sqrt(badc2);
+ small = smach("Safe minimum");
+ large = 1.f / small;
+
+/* If it looks like we're on a Cray, take the square root of
+ SMALL and LARGE to avoid overflow and underflow problems. */
+
+ slabad_slu(&small, &large);
+ small = small / eps * .25f;
+ large = 1.f / small;
+ }
+
+ strncpy(c2, path + 1, 2);
+
+/* Set some parameters we don't plan to change. */
+
+ *(unsigned char *)dist = 'S';
+ *mode = 3;
+
+ if (strncmp(c2, "QR", 2)==0 || strncmp(c2, "LQ", 2)==0 ||
+ strncmp(c2, "QL", 2)==0 || strncmp(c2, "RQ", 2)==0 ) {
+
+/* xQR, xLQ, xQL, xRQ: Set parameters to generate a general
+ M x N matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat == 2) {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ } else if (*imat == 3) {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "GE", 2)==0) {
+
+/* xGE: Set parameters to generate a general M x N matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat == 2) {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ } else if (*imat == 3) {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (*imat == 8) {
+ *cndnum = badc1;
+ } else if (*imat == 9) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 10) {
+ *anorm = small;
+ } else if (*imat == 11) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "GB", 2)==0) {
+
+/* xGB: Set parameters to generate a general banded matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the condition number and norm. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2 * .1f;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "GT", 2)==0) {
+
+/* xGT: Set parameters to generate a general tridiagonal matri
+x.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+ *kl = 1;
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 3) {
+ *cndnum = badc1;
+ } else if (*imat == 4) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 5 || *imat == 11) {
+ *anorm = small;
+ } else if (*imat == 6 || *imat == 12) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "PO", 2)==0 || strncmp(c2, "PP", 2)==0 || strncmp(c2, "SY", 2)==0 ||
+ strncmp(c2, "SP", 2)==0) {
+
+/* xPO, xPP, xSY, xSP: Set parameters to generate a
+ symmetric matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = *(unsigned char *)c2;
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *n - 1;
+ *kl = max(i__1,0);
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 6) {
+ *cndnum = badc1;
+ } else if (*imat == 7) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 8) {
+ *anorm = small;
+ } else if (*imat == 9) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "PB", 2)==0) {
+
+/* xPB: Set parameters to generate a symmetric band matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'P';
+
+/* Set the norm and condition number. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "PT", 2)==0) {
+
+/* xPT: Set parameters to generate a symmetric positive defini
+te
+ tridiagonal matrix. */
+
+ *(unsigned char *)type = 'P';
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+ *kl = 1;
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 3) {
+ *cndnum = badc1;
+ } else if (*imat == 4) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 5 || *imat == 11) {
+ *anorm = small;
+ } else if (*imat == 6 || *imat == 12) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "TR", 2)==0 || strncmp(c2, "TP", 2)==0) {
+
+/* xTR, xTP: Set parameters to generate a triangular matrix
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ mat = abs(*imat);
+ if (mat == 1 || mat == 7) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat < 0) {
+/* Computing MAX */
+ i__1 = *n - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (mat == 3 || mat == 9) {
+ *cndnum = badc1;
+ } else if (mat == 4) {
+ *cndnum = badc2;
+ } else if (mat == 10) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (mat == 5) {
+ *anorm = small;
+ } else if (mat == 6) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+
+ } else if (strncmp(c2, "TB", 2)==0) {
+
+/* xTB: Set parameters to generate a triangular band matrix.
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the norm and condition number. */
+
+ if (*imat == 2 || *imat == 8) {
+ *cndnum = badc1;
+ } else if (*imat == 3 || *imat == 9) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.f;
+ }
+
+ if (*imat == 4) {
+ *anorm = small;
+ } else if (*imat == 5) {
+ *anorm = large;
+ } else {
+ *anorm = 1.f;
+ }
+ }
+ if (*n <= 1) {
+ *cndnum = 1.f;
+ }
+
+ return 0;
+
+/* End of SLATB4 */
+
+} /* slatb4_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slatm1.c b/SuperLU_5.2.0/TESTING/MATGEN/slatm1.c
new file mode 100644
index 0000000..6d16aa0
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slatm1.c
@@ -0,0 +1,267 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Subroutine */ int slatm1_slu(integer *mode, real *cond, integer *irsign,
+ integer *idist, integer *iseed, real *d, integer *n, integer *info)
+{
+ /* System generated locals */
+ integer i__1, i__2;
+ doublereal d__1, d__2;
+
+ /* Builtin functions */
+ double pow_dd(doublereal *, doublereal *), pow_ri(real *, integer *), log(
+ doublereal), exp(doublereal);
+
+ /* Local variables */
+ static real temp;
+ static integer i;
+ static real alpha;
+ extern int input_error(char *, int *);
+ extern doublereal dlaran_sluslu(integer *);
+ extern /* Subroutine */ int slarnv_slu(integer *, integer *, integer *, real
+ *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ SLATM1 computes the entries of D(1..N) as specified by
+ MODE, COND and IRSIGN. IDIST and ISEED determine the generation
+ of random numbers. SLATM1 is called by SLATMR to generate
+ random test matrices for LAPACK programs.
+
+ Arguments
+ =========
+
+ MODE - INTEGER
+ On entry describes how D is to be computed:
+ MODE = 0 means do not change D.
+ MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
+ MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
+ MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
+ MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
+ MODE = 5 sets D to random numbers in the range
+ ( 1/COND , 1 ) such that their logarithms
+ are uniformly distributed.
+ MODE = 6 set D to random numbers from same distribution
+ as the rest of the matrix.
+ MODE < 0 has the same meaning as ABS(MODE), except that
+ the order of the elements of D is reversed.
+ Thus if MODE is positive, D has entries ranging from
+ 1 to 1/COND, if negative, from 1/COND to 1,
+ Not modified.
+
+ COND - REAL
+ On entry, used as described under MODE above.
+ If used, it must be >= 1. Not modified.
+
+ IRSIGN - INTEGER
+ On entry, if MODE neither -6, 0 nor 6, determines sign of
+ entries of D
+ 0 => leave entries of D unchanged
+ 1 => multiply each entry of D by 1 or -1 with probability .5
+
+
+ IDIST - CHARACTER*1
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => UNIFORM( 0, 1 )
+ 2 => UNIFORM( -1, 1 )
+ 3 => NORMAL( 0, 1 )
+ Not modified.
+
+ ISEED - INTEGER array, dimension ( 4 )
+ On entry ISEED specifies the seed of the random number
+ generator. The random number generator uses a
+ linear congruential sequence limited to small
+ integers, and so should produce machine independent
+ random numbers. The values of ISEED are changed on
+ exit, and can be used in the next call to SLATM1
+ to continue the same random number sequence.
+ Changed on exit.
+
+ D - REAL array, dimension ( MIN( M , N ) )
+ Array to be computed according to MODE, COND and IRSIGN.
+ May be changed on exit if MODE is nonzero.
+
+ N - INTEGER
+ Number of entries of D. Not modified.
+
+ INFO - INTEGER
+ 0 => normal termination
+ -1 => if MODE not in range -6 to 6
+ -2 => if MODE neither -6, 0 nor 6, and
+ IRSIGN neither 0 nor 1
+ -3 => if MODE neither -6, 0 nor 6 and COND less than 1
+ -4 => if MODE equals 6 or -6 and IDIST not in range 1 to 3
+
+ -7 => if N negative
+
+ =====================================================================
+
+
+
+ Decode and Test the input parameters. Initialize flags & seed.
+
+ Parameter adjustments */
+ --d;
+ --iseed;
+
+ /* Function Body */
+ *info = 0;
+
+/* Quick return if possible */
+
+ if (*n == 0) {
+ return 0;
+ }
+
+/* Set INFO if an error */
+
+ if (*mode < -6 || *mode > 6) {
+ *info = -1;
+ } else if (*mode != -6 && *mode != 0 && *mode != 6 && (*irsign != 0 && *
+ irsign != 1)) {
+ *info = -2;
+ } else if (*mode != -6 && *mode != 0 && *mode != 6 && *cond < 1.f) {
+ *info = -3;
+ } else if ((*mode == 6 || *mode == -6) && (*idist < 1 || *idist > 3)) {
+ *info = -4;
+ } else if (*n < 0) {
+ *info = -7;
+ }
+
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("SLATM1", &i__1);
+ return 0;
+ }
+
+/* Compute D according to COND and MODE */
+
+ if (*mode != 0) {
+ switch (abs(*mode)) {
+ case 1: goto L10;
+ case 2: goto L30;
+ case 3: goto L50;
+ case 4: goto L70;
+ case 5: goto L90;
+ case 6: goto L110;
+ }
+
+/* One large D value: */
+
+L10:
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ d[i] = 1.f / *cond;
+/* L20: */
+ }
+ d[1] = 1.f;
+ goto L120;
+
+/* One small D value: */
+
+L30:
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ d[i] = 1.f;
+/* L40: */
+ }
+ d[*n] = 1.f / *cond;
+ goto L120;
+
+/* Exponentially distributed D values: */
+
+L50:
+ d[1] = 1.f;
+ if (*n > 1) {
+ d__1 = (doublereal) (*cond);
+ d__2 = (doublereal) (-1.f / (real) (*n - 1));
+ alpha = pow_dd(&d__1, &d__2);
+ i__1 = *n;
+ for (i = 2; i <= i__1; ++i) {
+ i__2 = i - 1;
+ d[i] = pow_ri(&alpha, &i__2);
+/* L60: */
+ }
+ }
+ goto L120;
+
+/* Arithmetically distributed D values: */
+
+L70:
+ d[1] = 1.f;
+ if (*n > 1) {
+ temp = 1.f / *cond;
+ alpha = (1.f - temp) / (real) (*n - 1);
+ i__1 = *n;
+ for (i = 2; i <= i__1; ++i) {
+ d[i] = (real) (*n - i) * alpha + temp;
+/* L80: */
+ }
+ }
+ goto L120;
+
+/* Randomly distributed D values on ( 1/COND , 1): */
+
+L90:
+ alpha = log(1.f / *cond);
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ d[i] = exp(alpha * dlaran_sluslu(&iseed[1]));
+/* L100: */
+ }
+ goto L120;
+
+/* Randomly distributed D values from IDIST */
+
+L110:
+ slarnv_slu(idist, &iseed[1], n, &d[1]);
+
+L120:
+
+/* If MODE neither -6 nor 0 nor 6, and IRSIGN = 1, assign
+ random signs to D */
+
+ if (*mode != -6 && *mode != 0 && *mode != 6 && *irsign == 1) {
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ temp = dlaran_sluslu(&iseed[1]);
+ if (temp > .5f) {
+ d[i] = -(doublereal)d[i];
+ }
+/* L130: */
+ }
+ }
+
+/* Reverse if MODE < 0 */
+
+ if (*mode < 0) {
+ i__1 = *n / 2;
+ for (i = 1; i <= i__1; ++i) {
+ temp = d[i];
+ d[i] = d[*n + 1 - i];
+ d[*n + 1 - i] = temp;
+/* L140: */
+ }
+ }
+
+ }
+
+ return 0;
+
+/* End of SLATM1 */
+
+} /* slatm1_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slatm2.c b/SuperLU_5.2.0/TESTING/MATGEN/slatm2.c
new file mode 100644
index 0000000..1df9795
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slatm2.c
@@ -0,0 +1,241 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+doublereal slatm2_slu(integer *m, integer *n, integer *i, integer *j, integer *
+ kl, integer *ku, integer *idist, integer *iseed, real *d, integer *
+ igrade, real *dl, real *dr, integer *ipvtng, integer *iwork, real *
+ sparse)
+{
+ /* System generated locals */
+ real ret_val;
+
+ /* Local variables */
+ static integer isub, jsub;
+ static real temp;
+ extern doublereal dlaran_sluslu(integer *), slarnd_slu(integer *, integer *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+
+
+
+ Purpose
+ =======
+
+ SLATM2 returns the (I,J) entry of a random matrix of dimension
+ (M, N) described by the other paramters. It is called by the
+ SLATMR routine in order to build random test matrices. No error
+ checking on parameters is done, because this routine is called in
+
+ a tight loop by SLATMR which has already checked the parameters.
+
+ Use of SLATM2 differs from SLATM3 in the order in which the random
+
+ number generator is called to fill in random matrix entries.
+ With SLATM2, the generator is called to fill in the pivoted matrix
+
+ columnwise. With SLATM3, the generator is called to fill in the
+ matrix columnwise, after which it is pivoted. Thus, SLATM3 can
+ be used to construct random matrices which differ only in their
+ order of rows and/or columns. SLATM2 is used to construct band
+ matrices while avoiding calling the random number generator for
+ entries outside the band (and therefore generating random numbers
+
+
+ The matrix whose (I,J) entry is returned is constructed as
+ follows (this routine only computes one entry):
+
+ If I is outside (1..M) or J is outside (1..N), return zero
+ (this is convenient for generating matrices in band format).
+
+
+ Generate a matrix A with random entries of distribution IDIST.
+
+ Set the diagonal to D.
+
+ Grade the matrix, if desired, from the left (by DL) and/or
+ from the right (by DR or DL) as specified by IGRADE.
+
+ Permute, if desired, the rows and/or columns as specified by
+ IPVTNG and IWORK.
+
+ Band the matrix to have lower bandwidth KL and upper
+ bandwidth KU.
+
+ Set random entries to zero as specified by SPARSE.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ Number of rows of matrix. Not modified.
+
+ N - INTEGER
+ Number of columns of matrix. Not modified.
+
+ I - INTEGER
+ Row of entry to be returned. Not modified.
+
+ J - INTEGER
+ Column of entry to be returned. Not modified.
+
+ KL - INTEGER
+ Lower bandwidth. Not modified.
+
+ KU - INTEGER
+ Upper bandwidth. Not modified.
+
+ IDIST - INTEGER
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => UNIFORM( 0, 1 )
+ 2 => UNIFORM( -1, 1 )
+ 3 => NORMAL( 0, 1 )
+ Not modified.
+
+ ISEED - INTEGER array of dimension ( 4 )
+ Seed for random number generator.
+ Changed on exit.
+
+ D - REAL array of dimension ( MIN( I , J ) )
+ Diagonal entries of matrix. Not modified.
+
+ IGRADE - INTEGER
+ Specifies grading of matrix as follows:
+ 0 => no grading
+ 1 => matrix premultiplied by diag( DL )
+ 2 => matrix postmultiplied by diag( DR )
+ 3 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DR )
+ 4 => matrix premultiplied by diag( DL ) and
+ postmultiplied by inv( diag( DL ) )
+ 5 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DL )
+ Not modified.
+
+ DL - REAL array ( I or J, as appropriate )
+ Left scale factors for grading matrix. Not modified.
+
+ DR - REAL array ( I or J, as appropriate )
+ Right scale factors for grading matrix. Not modified.
+
+ IPVTNG - INTEGER
+ On entry specifies pivoting permutations as follows:
+ 0 => none.
+ 1 => row pivoting.
+ 2 => column pivoting.
+ 3 => full pivoting, i.e., on both sides.
+ Not modified.
+
+ IWORK - INTEGER array ( I or J, as appropriate )
+ This array specifies the permutation used. The
+ row (or column) in position K was originally in
+ position IWORK( K ).
+ This differs from IWORK for SLATM3. Not modified.
+
+ SPARSE - REAL between 0. and 1.
+ On entry specifies the sparsity of the matrix
+ if sparse matix is to be generated.
+ SPARSE should lie between 0 and 1.
+ A uniform ( 0, 1 ) random number x is generated and
+ compared to SPARSE; if x is larger the matrix entry
+ is unchanged and if x is smaller the entry is set
+ to zero. Thus on the average a fraction SPARSE of the
+ entries will be set to zero.
+ Not modified.
+
+ =====================================================================
+
+
+
+
+
+
+
+
+ -----------------------------------------------------------------------
+
+
+
+
+ Check for I and J in range
+
+ Parameter adjustments */
+ --iwork;
+ --dr;
+ --dl;
+ --d;
+ --iseed;
+
+ /* Function Body */
+ if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
+ ret_val = 0.f;
+ return ret_val;
+ }
+
+/* Check for banding */
+
+ if (*j > *i + *ku || *j < *i - *kl) {
+ ret_val = 0.f;
+ return ret_val;
+ }
+
+/* Check for sparsity */
+
+ if (*sparse > 0.f) {
+ if (dlaran_sluslu(&iseed[1]) < *sparse) {
+ ret_val = 0.f;
+ return ret_val;
+ }
+ }
+
+/* Compute subscripts depending on IPVTNG */
+
+ if (*ipvtng == 0) {
+ isub = *i;
+ jsub = *j;
+ } else if (*ipvtng == 1) {
+ isub = iwork[*i];
+ jsub = *j;
+ } else if (*ipvtng == 2) {
+ isub = *i;
+ jsub = iwork[*j];
+ } else if (*ipvtng == 3) {
+ isub = iwork[*i];
+ jsub = iwork[*j];
+ }
+
+/* Compute entry and grade it according to IGRADE */
+
+ if (isub == jsub) {
+ temp = d[isub];
+ } else {
+ temp = slarnd_slu(idist, &iseed[1]);
+ }
+ if (*igrade == 1) {
+ temp *= dl[isub];
+ } else if (*igrade == 2) {
+ temp *= dr[jsub];
+ } else if (*igrade == 3) {
+ temp = temp * dl[isub] * dr[jsub];
+ } else if (*igrade == 4 && isub != jsub) {
+ temp = temp * dl[isub] / dl[jsub];
+ } else if (*igrade == 5) {
+ temp = temp * dl[isub] * dl[jsub];
+ }
+ ret_val = temp;
+ return ret_val;
+
+/* End of SLATM2 */
+
+} /* slatm2_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slatm3.c b/SuperLU_5.2.0/TESTING/MATGEN/slatm3.c
new file mode 100644
index 0000000..c42aa81
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slatm3.c
@@ -0,0 +1,252 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+doublereal slatm3_slu(integer *m, integer *n, integer *i, integer *j, integer *
+ isub, integer *jsub, integer *kl, integer *ku, integer *idist,
+ integer *iseed, real *d, integer *igrade, real *dl, real *dr, integer
+ *ipvtng, integer *iwork, real *sparse)
+{
+ /* System generated locals */
+ real ret_val;
+
+ /* Local variables */
+ static real temp;
+ extern doublereal dlaran_sluslu(integer *), slarnd_slu(integer *, integer *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+
+
+
+ Purpose
+ =======
+
+ SLATM3 returns the (ISUB,JSUB) entry of a random matrix of
+ dimension (M, N) described by the other paramters. (ISUB,JSUB)
+ is the final position of the (I,J) entry after pivoting
+ according to IPVTNG and IWORK. SLATM3 is called by the
+ SLATMR routine in order to build random test matrices. No error
+ checking on parameters is done, because this routine is called in
+
+ a tight loop by SLATMR which has already checked the parameters.
+
+ Use of SLATM3 differs from SLATM2 in the order in which the random
+
+ number generator is called to fill in random matrix entries.
+ With SLATM2, the generator is called to fill in the pivoted matrix
+
+ columnwise. With SLATM3, the generator is called to fill in the
+ matrix columnwise, after which it is pivoted. Thus, SLATM3 can
+ be used to construct random matrices which differ only in their
+ order of rows and/or columns. SLATM2 is used to construct band
+ matrices while avoiding calling the random number generator for
+ entries outside the band (and therefore generating random numbers
+
+ in different orders for different pivot orders).
+
+ The matrix whose (ISUB,JSUB) entry is returned is constructed as
+ follows (this routine only computes one entry):
+
+ If ISUB is outside (1..M) or JSUB is outside (1..N), return zero
+
+ (this is convenient for generating matrices in band format).
+
+
+ Generate a matrix A with random entries of distribution IDIST.
+
+ Set the diagonal to D.
+
+ Grade the matrix, if desired, from the left (by DL) and/or
+ from the right (by DR or DL) as specified by IGRADE.
+
+ Permute, if desired, the rows and/or columns as specified by
+ IPVTNG and IWORK.
+
+ Band the matrix to have lower bandwidth KL and upper
+ bandwidth KU.
+
+ Set random entries to zero as specified by SPARSE.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ Number of rows of matrix. Not modified.
+
+ N - INTEGER
+ Number of columns of matrix. Not modified.
+
+ I - INTEGER
+ Row of unpivoted entry to be returned. Not modified.
+
+ J - INTEGER
+ Column of unpivoted entry to be returned. Not modified.
+
+ ISUB - INTEGER
+ Row of pivoted entry to be returned. Changed on exit.
+
+ JSUB - INTEGER
+ Column of pivoted entry to be returned. Changed on exit.
+
+ KL - INTEGER
+ Lower bandwidth. Not modified.
+
+ KU - INTEGER
+ Upper bandwidth. Not modified.
+
+ IDIST - INTEGER
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => UNIFORM( 0, 1 )
+ 2 => UNIFORM( -1, 1 )
+ 3 => NORMAL( 0, 1 )
+ Not modified.
+
+ ISEED - INTEGER array of dimension ( 4 )
+ Seed for random number generator.
+ Changed on exit.
+
+ D - REAL array of dimension ( MIN( I , J ) )
+ Diagonal entries of matrix. Not modified.
+
+ IGRADE - INTEGER
+ Specifies grading of matrix as follows:
+ 0 => no grading
+ 1 => matrix premultiplied by diag( DL )
+ 2 => matrix postmultiplied by diag( DR )
+ 3 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DR )
+ 4 => matrix premultiplied by diag( DL ) and
+ postmultiplied by inv( diag( DL ) )
+ 5 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DL )
+ Not modified.
+
+ DL - REAL array ( I or J, as appropriate )
+ Left scale factors for grading matrix. Not modified.
+
+ DR - REAL array ( I or J, as appropriate )
+ Right scale factors for grading matrix. Not modified.
+
+ IPVTNG - INTEGER
+ On entry specifies pivoting permutations as follows:
+ 0 => none.
+ 1 => row pivoting.
+ 2 => column pivoting.
+ 3 => full pivoting, i.e., on both sides.
+ Not modified.
+
+ IWORK - INTEGER array ( I or J, as appropriate )
+ This array specifies the permutation used. The
+ row (or column) originally in position K is in
+ position IWORK( K ) after pivoting.
+ This differs from IWORK for SLATM2. Not modified.
+
+ SPARSE - REAL between 0. and 1.
+ On entry specifies the sparsity of the matrix
+ if sparse matix is to be generated.
+ SPARSE should lie between 0 and 1.
+ A uniform ( 0, 1 ) random number x is generated and
+ compared to SPARSE; if x is larger the matrix entry
+ is unchanged and if x is smaller the entry is set
+ to zero. Thus on the average a fraction SPARSE of the
+ entries will be set to zero.
+ Not modified.
+
+ =====================================================================
+
+
+
+
+
+
+
+
+ -----------------------------------------------------------------------
+
+
+
+
+ Check for I and J in range
+
+ Parameter adjustments */
+ --iwork;
+ --dr;
+ --dl;
+ --d;
+ --iseed;
+
+ /* Function Body */
+ if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
+ *isub = *i;
+ *jsub = *j;
+ ret_val = 0.f;
+ return ret_val;
+ }
+
+/* Compute subscripts depending on IPVTNG */
+
+ if (*ipvtng == 0) {
+ *isub = *i;
+ *jsub = *j;
+ } else if (*ipvtng == 1) {
+ *isub = iwork[*i];
+ *jsub = *j;
+ } else if (*ipvtng == 2) {
+ *isub = *i;
+ *jsub = iwork[*j];
+ } else if (*ipvtng == 3) {
+ *isub = iwork[*i];
+ *jsub = iwork[*j];
+ }
+
+/* Check for banding */
+
+ if (*jsub > *isub + *ku || *jsub < *isub - *kl) {
+ ret_val = 0.f;
+ return ret_val;
+ }
+
+/* Check for sparsity */
+
+ if (*sparse > 0.f) {
+ if (dlaran_sluslu(&iseed[1]) < *sparse) {
+ ret_val = 0.f;
+ return ret_val;
+ }
+ }
+
+/* Compute entry and grade it according to IGRADE */
+
+ if (*i == *j) {
+ temp = d[*i];
+ } else {
+ temp = slarnd_slu(idist, &iseed[1]);
+ }
+ if (*igrade == 1) {
+ temp *= dl[*i];
+ } else if (*igrade == 2) {
+ temp *= dr[*j];
+ } else if (*igrade == 3) {
+ temp = temp * dl[*i] * dr[*j];
+ } else if (*igrade == 4 && *i != *j) {
+ temp = temp * dl[*i] / dl[*j];
+ } else if (*igrade == 5) {
+ temp = temp * dl[*i] * dl[*j];
+ }
+ ret_val = temp;
+ return ret_val;
+
+/* End of SLATM3 */
+
+} /* slatm3_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slatms.c b/SuperLU_5.2.0/TESTING/MATGEN/slatms.c
new file mode 100644
index 0000000..e9ccdd4
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slatms.c
@@ -0,0 +1,1336 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__1 = 1;
+static real c_b22 = 0.f;
+static logical c_true = TRUE_;
+static logical c_false = FALSE_;
+
+/* Subroutine */ int slatms_slu(integer *m, integer *n, char *dist, integer *
+ iseed, char *sym, real *d, integer *mode, real *cond, real *dmax__,
+ integer *kl, integer *ku, char *pack, real *a, integer *lda, real *
+ work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
+ real r__1, r__2, r__3;
+ logical L__1;
+
+ /* Builtin functions */
+ double cos(doublereal), sin(doublereal);
+
+ /* Local variables */
+ static integer ilda, icol;
+ static real temp;
+ static integer irow, isym;
+ static real c;
+ static integer i, j, k;
+ static real s, alpha, angle;
+ static integer ipack, ioffg;
+ static integer iinfo;
+ extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *);
+ static integer idist, mnmin, iskew;
+ static real extra, dummy;
+ extern /* Subroutine */ int scopy_(integer *, real *, integer *, real *,
+ integer *), slatm1_slu(integer *, real *, integer *, integer *,
+ integer *, real *, integer *, integer *);
+ static integer ic, jc, nc, il, iendch, ir, jr, ipackg, mr;
+ extern /* Subroutine */ int slagge_slu(integer *, integer *, integer *,
+ integer *, real *, real *, integer *, integer *, real *, integer *
+ );
+ static integer minlda;
+ extern int input_error(char *, int *);
+ extern doublereal slarnd_slu(integer *, integer *);
+ static logical iltemp, givens;
+ static integer ioffst, irsign;
+ extern /* Subroutine */ int slartg_slu(real *, real *, real *, real *, real *
+ ), slaset_slu(char *, integer *, integer *, real *, real *, real *,
+ integer *), slagsy_slu(integer *, integer *, real *, real *,
+ integer *, integer *, real *, integer *), slarot_slu(logical *,
+ logical *, logical *, integer *, real *, real *, real *, integer *
+ , real *, real *);
+ static logical ilextr, topdwn;
+ static integer ir1, ir2, isympk, jch, llb, jkl, jku, uub;
+
+
+/* -- LAPACK test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ SLATMS generates random matrices with specified singular values
+ (or symmetric/hermitian with specified eigenvalues)
+ for testing LAPACK programs.
+
+ SLATMS operates by applying the following sequence of
+ operations:
+
+ Set the diagonal to D, where D may be input or
+ computed according to MODE, COND, DMAX, and SYM
+ as described below.
+
+ Generate a matrix with the appropriate band structure, by one
+ of two methods:
+
+ Method A:
+ Generate a dense M x N matrix by multiplying D on the left
+ and the right by random unitary matrices, then:
+
+ Reduce the bandwidth according to KL and KU, using
+ Householder transformations.
+
+ Method B:
+ Convert the bandwidth-0 (i.e., diagonal) matrix to a
+ bandwidth-1 matrix using Givens rotations, "chasing"
+ out-of-band elements back, much as in QR; then
+ convert the bandwidth-1 to a bandwidth-2 matrix, etc.
+ Note that for reasonably small bandwidths (relative to
+ M and N) this requires less storage, as a dense matrix
+ is not generated. Also, for symmetric matrices, only
+ one triangle is generated.
+
+ Method A is chosen if the bandwidth is a large fraction of the
+ order of the matrix, and LDA is at least M (so a dense
+ matrix can be stored.) Method B is chosen if the bandwidth
+
+ is small (< 1/2 N for symmetric, < .3 N+M for
+ non-symmetric), or LDA is less than M and not less than the
+
+ bandwidth.
+
+ Pack the matrix if desired. Options specified by PACK are:
+ no packing
+ zero out upper half (if symmetric)
+ zero out lower half (if symmetric)
+ store the upper half columnwise (if symmetric or upper
+ triangular)
+ store the lower half columnwise (if symmetric or lower
+ triangular)
+ store the lower triangle in banded format (if symmetric
+ or lower triangular)
+ store the upper triangle in banded format (if symmetric
+ or upper triangular)
+ store the entire matrix in banded format
+ If Method B is chosen, and band format is specified, then the
+ matrix will be generated in the band format, so no repacking
+
+ will be necessary.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ The number of rows of A. Not modified.
+
+ N - INTEGER
+ The number of columns of A. Not modified.
+
+ DIST - CHARACTER*1
+ On entry, DIST specifies the type of distribution to be used
+
+ to generate the random eigen-/singular values.
+ 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
+ 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
+ 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
+ Not modified.
+
+ ISEED - INTEGER array, dimension ( 4 )
+ On entry ISEED specifies the seed of the random number
+ generator. They should lie between 0 and 4095 inclusive,
+ and ISEED(4) should be odd. The random number generator
+ uses a linear congruential sequence limited to small
+ integers, and so should produce machine independent
+ random numbers. The values of ISEED are changed on
+ exit, and can be used in the next call to SLATMS
+ to continue the same random number sequence.
+ Changed on exit.
+
+ SYM - CHARACTER*1
+ If SYM='S' or 'H', the generated matrix is symmetric, with
+ eigenvalues specified by D, COND, MODE, and DMAX; they
+ may be positive, negative, or zero.
+ If SYM='P', the generated matrix is symmetric, with
+ eigenvalues (= singular values) specified by D, COND,
+ MODE, and DMAX; they will not be negative.
+ If SYM='N', the generated matrix is nonsymmetric, with
+ singular values specified by D, COND, MODE, and DMAX;
+ they will not be negative.
+ Not modified.
+
+ D - REAL array, dimension ( MIN( M , N ) )
+ This array is used to specify the singular values or
+ eigenvalues of A (see SYM, above.) If MODE=0, then D is
+ assumed to contain the singular/eigenvalues, otherwise
+ they will be computed according to MODE, COND, and DMAX,
+ and placed in D.
+ Modified if MODE is nonzero.
+
+ MODE - INTEGER
+ On entry this describes how the singular/eigenvalues are to
+
+ be specified:
+ MODE = 0 means use D as input
+ MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
+ MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
+ MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
+ MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
+ MODE = 5 sets D to random numbers in the range
+ ( 1/COND , 1 ) such that their logarithms
+ are uniformly distributed.
+ MODE = 6 set D to random numbers from same distribution
+ as the rest of the matrix.
+ MODE < 0 has the same meaning as ABS(MODE), except that
+ the order of the elements of D is reversed.
+ Thus if MODE is positive, D has entries ranging from
+ 1 to 1/COND, if negative, from 1/COND to 1,
+ If SYM='S' or 'H', and MODE is neither 0, 6, nor -6, then
+ the elements of D will also be multiplied by a random
+ sign (i.e., +1 or -1.)
+ Not modified.
+
+ COND - REAL
+ On entry, this is used as described under MODE above.
+ If used, it must be >= 1. Not modified.
+
+ DMAX - REAL
+ If MODE is neither -6, 0 nor 6, the contents of D, as
+ computed according to MODE and COND, will be scaled by
+ DMAX / max(abs(D(i))); thus, the maximum absolute eigen- or
+
+ singular value (which is to say the norm) will be abs(DMAX).
+
+ Note that DMAX need not be positive: if DMAX is negative
+ (or zero), D will be scaled by a negative number (or zero).
+
+ Not modified.
+
+ KL - INTEGER
+ This specifies the lower bandwidth of the matrix. For
+ example, KL=0 implies upper triangular, KL=1 implies upper
+ Hessenberg, and KL being at least M-1 means that the matrix
+
+ has full lower bandwidth. KL must equal KU if the matrix
+ is symmetric.
+ Not modified.
+
+ KU - INTEGER
+ This specifies the upper bandwidth of the matrix. For
+ example, KU=0 implies lower triangular, KU=1 implies lower
+ Hessenberg, and KU being at least N-1 means that the matrix
+
+ has full upper bandwidth. KL must equal KU if the matrix
+ is symmetric.
+ Not modified.
+
+ PACK - CHARACTER*1
+ This specifies packing of matrix as follows:
+ 'N' => no packing
+ 'U' => zero out all subdiagonal entries (if symmetric)
+ 'L' => zero out all superdiagonal entries (if symmetric)
+ 'C' => store the upper triangle columnwise
+ (only if the matrix is symmetric or upper triangular)
+
+ 'R' => store the lower triangle columnwise
+ (only if the matrix is symmetric or lower triangular)
+
+ 'B' => store the lower triangle in band storage scheme
+ (only if matrix symmetric or lower triangular)
+ 'Q' => store the upper triangle in band storage scheme
+ (only if matrix symmetric or upper triangular)
+ 'Z' => store the entire matrix in band storage scheme
+ (pivoting can be provided for by using this
+ option to store A in the trailing rows of
+ the allocated storage)
+
+ Using these options, the various LAPACK packed and banded
+ storage schemes can be obtained:
+ GB - use 'Z'
+ PB, SB or TB - use 'B' or 'Q'
+ PP, SP or TP - use 'C' or 'R'
+
+ If two calls to SLATMS differ only in the PACK parameter,
+ they will generate mathematically equivalent matrices.
+ Not modified.
+
+ A - REAL array, dimension ( LDA, N )
+ On exit A is the desired test matrix. A is first generated
+
+ in full (unpacked) form, and then packed, if so specified
+ by PACK. Thus, the first M elements of the first N
+ columns will always be modified. If PACK specifies a
+ packed or banded storage scheme, all LDA elements of the
+ first N columns will be modified; the elements of the
+ array which do not correspond to elements of the generated
+ matrix are set to zero.
+ Modified.
+
+ LDA - INTEGER
+ LDA specifies the first dimension of A as declared in the
+ calling program. If PACK='N', 'U', 'L', 'C', or 'R', then
+ LDA must be at least M. If PACK='B' or 'Q', then LDA must
+ be at least MIN( KL, M-1) (which is equal to MIN(KU,N-1)).
+ If PACK='Z', LDA must be large enough to hold the packed
+ array: MIN( KU, N-1) + MIN( KL, M-1) + 1.
+ Not modified.
+
+ WORK - REAL array, dimension ( 3*MAX( N , M ) )
+ Workspace.
+ Modified.
+
+ INFO - INTEGER
+ Error code. On exit, INFO will be set to one of the
+ following values:
+ 0 => normal return
+ -1 => M negative or unequal to N and SYM='S', 'H', or 'P'
+ -2 => N negative
+ -3 => DIST illegal string
+ -5 => SYM illegal string
+ -7 => MODE not in range -6 to 6
+ -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
+ -10 => KL negative
+ -11 => KU negative, or SYM='S' or 'H' and KU not equal to KL
+
+ -12 => PACK illegal string, or PACK='U' or 'L', and SYM='N';
+
+ or PACK='C' or 'Q' and SYM='N' and KL is not zero;
+ or PACK='R' or 'B' and SYM='N' and KU is not zero;
+ or PACK='U', 'L', 'C', 'R', 'B', or 'Q', and M is not
+
+ N.
+ -14 => LDA is less than M, or PACK='Z' and LDA is less than
+
+ MIN(KU,N-1) + MIN(KL,M-1) + 1.
+ 1 => Error return from SLATM1
+ 2 => Cannot scale to DMAX (max. sing. value is 0)
+ 3 => Error return from SLAGGE or SLAGSY
+
+ =====================================================================
+
+
+
+ 1) Decode and Test the input parameters.
+ Initialize flags & seed.
+
+ Parameter adjustments */
+ --iseed;
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+
+/* Quick return if possible */
+
+ if (*m == 0 || *n == 0) {
+ return 0;
+ }
+
+/* Decode DIST */
+
+ if (strncmp(dist, "U", 1)==0) {
+ idist = 1;
+ } else if (strncmp(dist, "S", 1)==0) {
+ idist = 2;
+ } else if (strncmp(dist, "N", 1)==0) {
+ idist = 3;
+ } else {
+ idist = -1;
+ }
+
+/* Decode SYM */
+
+ if (strncmp(sym, "N", 1)==0) {
+ isym = 1;
+ irsign = 0;
+ } else if (strncmp(sym, "P", 1)==0) {
+ isym = 2;
+ irsign = 0;
+ } else if (strncmp(sym, "S", 1)==0) {
+ isym = 2;
+ irsign = 1;
+ } else if (strncmp(sym, "H", 1)==0) {
+ isym = 2;
+ irsign = 1;
+ } else {
+ isym = -1;
+ }
+
+/* Decode PACK */
+
+ isympk = 0;
+ if (strncmp(pack, "N", 1)==0) {
+ ipack = 0;
+ } else if (strncmp(pack, "U", 1)==0) {
+ ipack = 1;
+ isympk = 1;
+ } else if (strncmp(pack, "L", 1)==0) {
+ ipack = 2;
+ isympk = 1;
+ } else if (strncmp(pack, "C", 1)==0) {
+ ipack = 3;
+ isympk = 2;
+ } else if (strncmp(pack, "R", 1)==0) {
+ ipack = 4;
+ isympk = 3;
+ } else if (strncmp(pack, "B", 1)==0) {
+ ipack = 5;
+ isympk = 3;
+ } else if (strncmp(pack, "Q", 1)==0) {
+ ipack = 6;
+ isympk = 2;
+ } else if (strncmp(pack, "Z", 1)==0) {
+ ipack = 7;
+ } else {
+ ipack = -1;
+ }
+
+/* Set certain internal parameters */
+
+ mnmin = min(*m,*n);
+/* Computing MIN */
+ i__1 = *kl, i__2 = *m - 1;
+ llb = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *ku, i__2 = *n - 1;
+ uub = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *m, i__2 = *n + llb;
+ mr = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *n, i__2 = *m + uub;
+ nc = min(i__1,i__2);
+
+ if (ipack == 5 || ipack == 6) {
+ minlda = uub + 1;
+ } else if (ipack == 7) {
+ minlda = llb + uub + 1;
+ } else {
+ minlda = *m;
+ }
+
+/* Use Givens rotation method if bandwidth small enough,
+ or if LDA is too small to store the matrix unpacked. */
+
+ givens = FALSE_;
+ if (isym == 1) {
+/* Computing MAX */
+ i__1 = 1, i__2 = mr + nc;
+ if ((real) (llb + uub) < (real) max(i__1,i__2) * .3f) {
+ givens = TRUE_;
+ }
+ } else {
+ if (llb << 1 < *m) {
+ givens = TRUE_;
+ }
+ }
+ if (*lda < *m && *lda >= minlda) {
+ givens = TRUE_;
+ }
+
+/* Set INFO if an error */
+
+ if (*m < 0) {
+ *info = -1;
+ } else if (*m != *n && isym != 1) {
+ *info = -1;
+ } else if (*n < 0) {
+ *info = -2;
+ } else if (idist == -1) {
+ *info = -3;
+ } else if (isym == -1) {
+ *info = -5;
+ } else if (abs(*mode) > 6) {
+ *info = -7;
+ } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.f) {
+ *info = -8;
+ } else if (*kl < 0) {
+ *info = -10;
+ } else if (*ku < 0 || isym != 1 && *kl != *ku) {
+ *info = -11;
+ } else if (ipack == -1 || isympk == 1 && isym == 1 || isympk == 2 && isym
+ == 1 && *kl > 0 || isympk == 3 && isym == 1 && *ku > 0 || isympk
+ != 0 && *m != *n) {
+ *info = -12;
+ } else if (*lda < max(1,minlda)) {
+ *info = -14;
+ }
+
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("SLATMS", &i__1);
+ return 0;
+ }
+
+/* Initialize random number generator */
+
+ for (i = 1; i <= 4; ++i) {
+ iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
+/* L10: */
+ }
+
+ if (iseed[4] % 2 != 1) {
+ ++iseed[4];
+ }
+
+/* 2) Set up D if indicated.
+
+ Compute D according to COND and MODE */
+
+ slatm1_slu(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, &iinfo);
+ if (iinfo != 0) {
+ *info = 1;
+ return 0;
+ }
+
+/* Choose Top-Down if D is (apparently) increasing,
+ Bottom-Up if D is (apparently) decreasing. */
+
+ if (dabs(d[1]) <= (r__1 = d[mnmin], dabs(r__1))) {
+ topdwn = TRUE_;
+ } else {
+ topdwn = FALSE_;
+ }
+
+ if (*mode != 0 && abs(*mode) != 6) {
+
+/* Scale by DMAX */
+
+ temp = dabs(d[1]);
+ i__1 = mnmin;
+ for (i = 2; i <= i__1; ++i) {
+/* Computing MAX */
+ r__2 = temp, r__3 = (r__1 = d[i], dabs(r__1));
+ temp = dmax(r__2,r__3);
+/* L20: */
+ }
+
+ if (temp > 0.f) {
+ alpha = *dmax__ / temp;
+ } else {
+ *info = 2;
+ return 0;
+ }
+
+ sscal_(&mnmin, &alpha, &d[1], &c__1);
+
+ }
+
+/* 3) Generate Banded Matrix using Givens rotations.
+ Also the special case of UUB=LLB=0
+
+ Compute Addressing constants to cover all
+ storage formats. Whether GE, SY, GB, or SB,
+ upper or lower triangle or both,
+ the (i,j)-th element is in
+ A( i - ISKEW*j + IOFFST, j ) */
+
+ if (ipack > 4) {
+ ilda = *lda - 1;
+ iskew = 1;
+ if (ipack > 5) {
+ ioffst = uub + 1;
+ } else {
+ ioffst = 1;
+ }
+ } else {
+ ilda = *lda;
+ iskew = 0;
+ ioffst = 0;
+ }
+
+/* IPACKG is the format that the matrix is generated in. If this is
+ different from IPACK, then the matrix must be repacked at the
+ end. It also signals how to compute the norm, for scaling. */
+
+ ipackg = 0;
+ slaset_slu("Full", lda, n, &c_b22, &c_b22, &a[a_offset], lda);
+
+/* Diagonal Matrix -- We are done, unless it
+ is to be stored SP/PP/TP (PACK='R' or 'C') */
+
+ if (llb == 0 && uub == 0) {
+ i__1 = ilda + 1;
+ scopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffst + a_dim1], &i__1);
+ if (ipack <= 2 || ipack >= 5) {
+ ipackg = ipack;
+ }
+
+ } else if (givens) {
+
+/* Check whether to use Givens rotations,
+ Householder transformations, or nothing. */
+
+ if (isym == 1) {
+
+/* Non-symmetric -- A = U D V */
+
+ if (ipack > 4) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+
+ i__1 = ilda + 1;
+ scopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffst + a_dim1], &
+ i__1);
+
+ if (topdwn) {
+ jkl = 0;
+ i__1 = uub;
+ for (jku = 1; jku <= i__1; ++jku) {
+
+/* Transform from bandwidth JKL, JKU-1 to
+JKL, JKU
+
+ Last row actually rotated is M
+ Last column actually rotated is MIN( M+
+JKU, N )
+
+ Computing MIN */
+ i__3 = *m + jku;
+ i__2 = min(i__3,*n) + jkl - 1;
+ for (jr = 1; jr <= i__2; ++jr) {
+ extra = 0.f;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ c = cos(angle);
+ s = sin(angle);
+/* Computing MAX */
+ i__3 = 1, i__4 = jr - jkl;
+ icol = max(i__3,i__4);
+ if (jr < *m) {
+/* Computing MIN */
+ i__3 = *n, i__4 = jr + jku;
+ il = min(i__3,i__4) + 1 - icol;
+ L__1 = jr > jkl;
+ slarot_slu(&c_true, &L__1, &c_false, &il, &c, &s, &a[
+ jr - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &extra, &dummy);
+ }
+
+/* Chase "EXTRA" back up */
+
+ ir = jr;
+ ic = icol;
+ i__3 = -jkl - jku;
+ for (jch = jr - jkl; i__3 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__3) {
+ if (ir < *m) {
+ slartg_slu(&a[ir + 1 - iskew * (ic + 1) + ioffst
+ + (ic + 1) * a_dim1], &extra, &c, &s,
+ &dummy);
+ }
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jku;
+ irow = max(i__4,i__5);
+ il = ir + 2 - irow;
+ temp = 0.f;
+ iltemp = jch > jku;
+ r__1 = -(doublereal)s;
+ slarot_slu(&c_false, &iltemp, &c_true, &il, &c, &
+ r__1, &a[irow - iskew * ic + ioffst + ic *
+ a_dim1], &ilda, &temp, &extra);
+ if (iltemp) {
+ slartg_slu(&a[irow + 1 - iskew * (ic + 1) +
+ ioffst + (ic + 1) * a_dim1], &temp, &
+ c, &s, &dummy);
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jku - jkl;
+ icol = max(i__4,i__5);
+ il = ic + 2 - icol;
+ extra = 0.f;
+ L__1 = jch > jku + jkl;
+ r__1 = -(doublereal)s;
+ slarot_slu(&c_true, &L__1, &c_true, &il, &c, &
+ r__1, &a[irow - iskew * icol + ioffst
+ + icol * a_dim1], &ilda, &extra, &
+ temp);
+ ic = icol;
+ ir = irow;
+ }
+/* L30: */
+ }
+/* L40: */
+ }
+/* L50: */
+ }
+
+ jku = uub;
+ i__1 = llb;
+ for (jkl = 1; jkl <= i__1; ++jkl) {
+
+/* Transform from bandwidth JKL-1, JKU to
+JKL, JKU
+
+ Computing MIN */
+ i__3 = *n + jkl;
+ i__2 = min(i__3,*m) + jku - 1;
+ for (jc = 1; jc <= i__2; ++jc) {
+ extra = 0.f;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ c = cos(angle);
+ s = sin(angle);
+/* Computing MAX */
+ i__3 = 1, i__4 = jc - jku;
+ irow = max(i__3,i__4);
+ if (jc < *n) {
+/* Computing MIN */
+ i__3 = *m, i__4 = jc + jkl;
+ il = min(i__3,i__4) + 1 - irow;
+ L__1 = jc > jku;
+ slarot_slu(&c_false, &L__1, &c_false, &il, &c, &s, &
+ a[irow - iskew * jc + ioffst + jc *
+ a_dim1], &ilda, &extra, &dummy);
+ }
+
+/* Chase "EXTRA" back up */
+
+ ic = jc;
+ ir = irow;
+ i__3 = -jkl - jku;
+ for (jch = jc - jku; i__3 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__3) {
+ if (ic < *n) {
+ slartg_slu(&a[ir + 1 - iskew * (ic + 1) + ioffst
+ + (ic + 1) * a_dim1], &extra, &c, &s,
+ &dummy);
+ }
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jkl;
+ icol = max(i__4,i__5);
+ il = ic + 2 - icol;
+ temp = 0.f;
+ iltemp = jch > jkl;
+ r__1 = -(doublereal)s;
+ slarot_slu(&c_true, &iltemp, &c_true, &il, &c, &r__1,
+ &a[ir - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &temp, &extra);
+ if (iltemp) {
+ slartg_slu(&a[ir + 1 - iskew * (icol + 1) +
+ ioffst + (icol + 1) * a_dim1], &temp,
+ &c, &s, &dummy);
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jkl - jku;
+ irow = max(i__4,i__5);
+ il = ir + 2 - irow;
+ extra = 0.f;
+ L__1 = jch > jkl + jku;
+ r__1 = -(doublereal)s;
+ slarot_slu(&c_false, &L__1, &c_true, &il, &c, &
+ r__1, &a[irow - iskew * icol + ioffst
+ + icol * a_dim1], &ilda, &extra, &
+ temp);
+ ic = icol;
+ ir = irow;
+ }
+/* L60: */
+ }
+/* L70: */
+ }
+/* L80: */
+ }
+
+ } else {
+
+/* Bottom-Up -- Start at the bottom right. */
+
+ jkl = 0;
+ i__1 = uub;
+ for (jku = 1; jku <= i__1; ++jku) {
+
+/* Transform from bandwidth JKL, JKU-1 to
+JKL, JKU
+
+ First row actually rotated is M
+ First column actually rotated is MIN( M
++JKU, N )
+
+ Computing MIN */
+ i__2 = *m, i__3 = *n + jkl;
+ iendch = min(i__2,i__3) - 1;
+/* Computing MIN */
+ i__2 = *m + jku;
+ i__3 = 1 - jkl;
+ for (jc = min(i__2,*n) - 1; jc >= i__3; --jc) {
+ extra = 0.f;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ c = cos(angle);
+ s = sin(angle);
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - jku + 1;
+ irow = max(i__2,i__4);
+ if (jc > 0) {
+/* Computing MIN */
+ i__2 = *m, i__4 = jc + jkl + 1;
+ il = min(i__2,i__4) + 1 - irow;
+ L__1 = jc + jkl < *m;
+ slarot_slu(&c_false, &c_false, &L__1, &il, &c, &s, &
+ a[irow - iskew * jc + ioffst + jc *
+ a_dim1], &ilda, &dummy, &extra);
+ }
+
+/* Chase "EXTRA" back down */
+
+ ic = jc;
+ i__2 = iendch;
+ i__4 = jkl + jku;
+ for (jch = jc + jkl; i__4 < 0 ? jch >= i__2 : jch <=
+ i__2; jch += i__4) {
+ ilextr = ic > 0;
+ if (ilextr) {
+ slartg_slu(&a[jch - iskew * ic + ioffst + ic *
+ a_dim1], &extra, &c, &s, &dummy);
+ }
+ ic = max(1,ic);
+/* Computing MIN */
+ i__5 = *n - 1, i__6 = jch + jku;
+ icol = min(i__5,i__6);
+ iltemp = jch + jku < *n;
+ temp = 0.f;
+ i__5 = icol + 2 - ic;
+ slarot_slu(&c_true, &ilextr, &iltemp, &i__5, &c, &s,
+ &a[jch - iskew * ic + ioffst + ic *
+ a_dim1], &ilda, &extra, &temp);
+ if (iltemp) {
+ slartg_slu(&a[jch - iskew * icol + ioffst + icol
+ * a_dim1], &temp, &c, &s, &dummy);
+/* Computing MIN */
+ i__5 = iendch, i__6 = jch + jkl + jku;
+ il = min(i__5,i__6) + 2 - jch;
+ extra = 0.f;
+ L__1 = jch + jkl + jku <= iendch;
+ slarot_slu(&c_false, &c_true, &L__1, &il, &c, &s,
+ &a[jch - iskew * icol + ioffst +
+ icol * a_dim1], &ilda, &temp, &extra);
+ ic = icol;
+ }
+/* L90: */
+ }
+/* L100: */
+ }
+/* L110: */
+ }
+
+ jku = uub;
+ i__1 = llb;
+ for (jkl = 1; jkl <= i__1; ++jkl) {
+
+/* Transform from bandwidth JKL-1, JKU to
+JKL, JKU
+
+ First row actually rotated is MIN( N+JK
+L, M )
+ First column actually rotated is N
+
+ Computing MIN */
+ i__3 = *n, i__4 = *m + jku;
+ iendch = min(i__3,i__4) - 1;
+/* Computing MIN */
+ i__3 = *n + jkl;
+ i__4 = 1 - jku;
+ for (jr = min(i__3,*m) - 1; jr >= i__4; --jr) {
+ extra = 0.f;
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ c = cos(angle);
+ s = sin(angle);
+/* Computing MAX */
+ i__3 = 1, i__2 = jr - jkl + 1;
+ icol = max(i__3,i__2);
+ if (jr > 0) {
+/* Computing MIN */
+ i__3 = *n, i__2 = jr + jku + 1;
+ il = min(i__3,i__2) + 1 - icol;
+ L__1 = jr + jku < *n;
+ slarot_slu(&c_true, &c_false, &L__1, &il, &c, &s, &a[
+ jr - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &dummy, &extra);
+ }
+
+/* Chase "EXTRA" back down */
+
+ ir = jr;
+ i__3 = iendch;
+ i__2 = jkl + jku;
+ for (jch = jr + jku; i__2 < 0 ? jch >= i__3 : jch <=
+ i__3; jch += i__2) {
+ ilextr = ir > 0;
+ if (ilextr) {
+ slartg_slu(&a[ir - iskew * jch + ioffst + jch *
+ a_dim1], &extra, &c, &s, &dummy);
+ }
+ ir = max(1,ir);
+/* Computing MIN */
+ i__5 = *m - 1, i__6 = jch + jkl;
+ irow = min(i__5,i__6);
+ iltemp = jch + jkl < *m;
+ temp = 0.f;
+ i__5 = irow + 2 - ir;
+ slarot_slu(&c_false, &ilextr, &iltemp, &i__5, &c, &s,
+ &a[ir - iskew * jch + ioffst + jch *
+ a_dim1], &ilda, &extra, &temp);
+ if (iltemp) {
+ slartg_slu(&a[irow - iskew * jch + ioffst + jch *
+ a_dim1], &temp, &c, &s, &dummy);
+/* Computing MIN */
+ i__5 = iendch, i__6 = jch + jkl + jku;
+ il = min(i__5,i__6) + 2 - jch;
+ extra = 0.f;
+ L__1 = jch + jkl + jku <= iendch;
+ slarot_slu(&c_true, &c_true, &L__1, &il, &c, &s,
+ &a[irow - iskew * jch + ioffst + jch *
+ a_dim1], &ilda, &temp, &extra);
+ ir = irow;
+ }
+/* L120: */
+ }
+/* L130: */
+ }
+/* L140: */
+ }
+ }
+
+ } else {
+
+/* Symmetric -- A = U D U' */
+
+ ipackg = ipack;
+ ioffg = ioffst;
+
+ if (topdwn) {
+
+/* Top-Down -- Generate Upper triangle only */
+
+ if (ipack >= 5) {
+ ipackg = 6;
+ ioffg = uub + 1;
+ } else {
+ ipackg = 1;
+ }
+ i__1 = ilda + 1;
+ scopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffg + a_dim1], &
+ i__1);
+
+ i__1 = uub;
+ for (k = 1; k <= i__1; ++k) {
+ i__4 = *n - 1;
+ for (jc = 1; jc <= i__4; ++jc) {
+/* Computing MAX */
+ i__2 = 1, i__3 = jc - k;
+ irow = max(i__2,i__3);
+/* Computing MIN */
+ i__2 = jc + 1, i__3 = k + 2;
+ il = min(i__2,i__3);
+ extra = 0.f;
+ temp = a[jc - iskew * (jc + 1) + ioffg + (jc + 1) *
+ a_dim1];
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ c = cos(angle);
+ s = sin(angle);
+ L__1 = jc > k;
+ slarot_slu(&c_false, &L__1, &c_true, &il, &c, &s, &a[
+ irow - iskew * jc + ioffg + jc * a_dim1], &
+ ilda, &extra, &temp);
+/* Computing MIN */
+ i__3 = k, i__5 = *n - jc;
+ i__2 = min(i__3,i__5) + 1;
+ slarot_slu(&c_true, &c_true, &c_false, &i__2, &c, &s, &a[
+ (1 - iskew) * jc + ioffg + jc * a_dim1], &
+ ilda, &temp, &dummy);
+
+/* Chase EXTRA back up the matrix
+*/
+
+ icol = jc;
+ i__2 = -k;
+ for (jch = jc - k; i__2 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__2) {
+ slartg_slu(&a[jch + 1 - iskew * (icol + 1) + ioffg +
+ (icol + 1) * a_dim1], &extra, &c, &s, &
+ dummy);
+ temp = a[jch - iskew * (jch + 1) + ioffg + (jch +
+ 1) * a_dim1];
+ i__3 = k + 2;
+ r__1 = -(doublereal)s;
+ slarot_slu(&c_true, &c_true, &c_true, &i__3, &c, &
+ r__1, &a[(1 - iskew) * jch + ioffg + jch *
+ a_dim1], &ilda, &temp, &extra);
+/* Computing MAX */
+ i__3 = 1, i__5 = jch - k;
+ irow = max(i__3,i__5);
+/* Computing MIN */
+ i__3 = jch + 1, i__5 = k + 2;
+ il = min(i__3,i__5);
+ extra = 0.f;
+ L__1 = jch > k;
+ r__1 = -(doublereal)s;
+ slarot_slu(&c_false, &L__1, &c_true, &il, &c, &r__1,
+ &a[irow - iskew * jch + ioffg + jch *
+ a_dim1], &ilda, &extra, &temp);
+ icol = jch;
+/* L150: */
+ }
+/* L160: */
+ }
+/* L170: */
+ }
+
+/* If we need lower triangle, copy from upper. No
+te that
+ the order of copying is chosen to work for 'q'
+ -> 'b' */
+
+ if (ipack != ipackg && ipack != 3) {
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ irow = ioffst - iskew * jc;
+/* Computing MIN */
+ i__2 = *n, i__3 = jc + uub;
+ i__4 = min(i__2,i__3);
+ for (jr = jc; jr <= i__4; ++jr) {
+ a[jr + irow + jc * a_dim1] = a[jc - iskew * jr +
+ ioffg + jr * a_dim1];
+/* L180: */
+ }
+/* L190: */
+ }
+ if (ipack == 5) {
+ i__1 = *n;
+ for (jc = *n - uub + 1; jc <= i__1; ++jc) {
+ i__4 = uub + 1;
+ for (jr = *n + 2 - jc; jr <= i__4; ++jr) {
+ a[jr + jc * a_dim1] = 0.f;
+/* L200: */
+ }
+/* L210: */
+ }
+ }
+ if (ipackg == 6) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+ }
+ } else {
+
+/* Bottom-Up -- Generate Lower triangle only */
+
+ if (ipack >= 5) {
+ ipackg = 5;
+ if (ipack == 6) {
+ ioffg = 1;
+ }
+ } else {
+ ipackg = 2;
+ }
+ i__1 = ilda + 1;
+ scopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffg + a_dim1], &
+ i__1);
+
+ i__1 = uub;
+ for (k = 1; k <= i__1; ++k) {
+ for (jc = *n - 1; jc >= 1; --jc) {
+/* Computing MIN */
+ i__4 = *n + 1 - jc, i__2 = k + 2;
+ il = min(i__4,i__2);
+ extra = 0.f;
+ temp = a[(1 - iskew) * jc + 1 + ioffg + jc * a_dim1];
+ angle = slarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663f;
+ c = cos(angle);
+ s = -(doublereal)sin(angle);
+ L__1 = *n - jc > k;
+ slarot_slu(&c_false, &c_true, &L__1, &il, &c, &s, &a[(1
+ - iskew) * jc + ioffg + jc * a_dim1], &ilda, &
+ temp, &extra);
+/* Computing MAX */
+ i__4 = 1, i__2 = jc - k + 1;
+ icol = max(i__4,i__2);
+ i__4 = jc + 2 - icol;
+ slarot_slu(&c_true, &c_false, &c_true, &i__4, &c, &s, &a[
+ jc - iskew * icol + ioffg + icol * a_dim1], &
+ ilda, &dummy, &temp);
+
+/* Chase EXTRA back down the matrix
+ */
+
+ icol = jc;
+ i__4 = *n - 1;
+ i__2 = k;
+ for (jch = jc + k; i__2 < 0 ? jch >= i__4 : jch <=
+ i__4; jch += i__2) {
+ slartg_slu(&a[jch - iskew * icol + ioffg + icol *
+ a_dim1], &extra, &c, &s, &dummy);
+ temp = a[(1 - iskew) * jch + 1 + ioffg + jch *
+ a_dim1];
+ i__3 = k + 2;
+ slarot_slu(&c_true, &c_true, &c_true, &i__3, &c, &s,
+ &a[jch - iskew * icol + ioffg + icol *
+ a_dim1], &ilda, &extra, &temp);
+/* Computing MIN */
+ i__3 = *n + 1 - jch, i__5 = k + 2;
+ il = min(i__3,i__5);
+ extra = 0.f;
+ L__1 = *n - jch > k;
+ slarot_slu(&c_false, &c_true, &L__1, &il, &c, &s, &a[
+ (1 - iskew) * jch + ioffg + jch * a_dim1],
+ &ilda, &temp, &extra);
+ icol = jch;
+/* L220: */
+ }
+/* L230: */
+ }
+/* L240: */
+ }
+
+/* If we need upper triangle, copy from lower. No
+te that
+ the order of copying is chosen to work for 'b'
+ -> 'q' */
+
+ if (ipack != ipackg && ipack != 4) {
+ for (jc = *n; jc >= 1; --jc) {
+ irow = ioffst - iskew * jc;
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - uub;
+ i__1 = max(i__2,i__4);
+ for (jr = jc; jr >= i__1; --jr) {
+ a[jr + irow + jc * a_dim1] = a[jc - iskew * jr +
+ ioffg + jr * a_dim1];
+/* L250: */
+ }
+/* L260: */
+ }
+ if (ipack == 6) {
+ i__1 = uub;
+ for (jc = 1; jc <= i__1; ++jc) {
+ i__2 = uub + 1 - jc;
+ for (jr = 1; jr <= i__2; ++jr) {
+ a[jr + jc * a_dim1] = 0.f;
+/* L270: */
+ }
+/* L280: */
+ }
+ }
+ if (ipackg == 5) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+ }
+ }
+ }
+
+ } else {
+
+/* 4) Generate Banded Matrix by first
+ Rotating by random Unitary matrices,
+ then reducing the bandwidth using Householder
+ transformations.
+
+ Note: we should get here only if LDA .ge. N */
+
+ if (isym == 1) {
+
+/* Non-symmetric -- A = U D V */
+
+ slagge_slu(&mr, &nc, &llb, &uub, &d[1], &a[a_offset], lda, &iseed[1],
+ &work[1], &iinfo);
+ } else {
+
+/* Symmetric -- A = U D U' */
+
+ slagsy_slu(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1], &
+ iinfo);
+
+ }
+ if (iinfo != 0) {
+ *info = 3;
+ return 0;
+ }
+ }
+
+/* 5) Pack the matrix */
+
+ if (ipack != ipackg) {
+ if (ipack == 1) {
+
+/* 'U' -- Upper triangular, not packed */
+
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = j + 1; i <= i__2; ++i) {
+ a[i + j * a_dim1] = 0.f;
+/* L290: */
+ }
+/* L300: */
+ }
+
+ } else if (ipack == 2) {
+
+/* 'L' -- Lower triangular, not packed */
+
+ i__1 = *m;
+ for (j = 2; j <= i__1; ++j) {
+ i__2 = j - 1;
+ for (i = 1; i <= i__2; ++i) {
+ a[i + j * a_dim1] = 0.f;
+/* L310: */
+ }
+/* L320: */
+ }
+
+ } else if (ipack == 3) {
+
+/* 'C' -- Upper triangle packed Columnwise. */
+
+ icol = 1;
+ irow = 0;
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = j;
+ for (i = 1; i <= i__2; ++i) {
+ ++irow;
+ if (irow > *lda) {
+ irow = 1;
+ ++icol;
+ }
+ a[irow + icol * a_dim1] = a[i + j * a_dim1];
+/* L330: */
+ }
+/* L340: */
+ }
+
+ } else if (ipack == 4) {
+
+/* 'R' -- Lower triangle packed Columnwise. */
+
+ icol = 1;
+ irow = 0;
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = j; i <= i__2; ++i) {
+ ++irow;
+ if (irow > *lda) {
+ irow = 1;
+ ++icol;
+ }
+ a[irow + icol * a_dim1] = a[i + j * a_dim1];
+/* L350: */
+ }
+/* L360: */
+ }
+
+ } else if (ipack >= 5) {
+
+/* 'B' -- The lower triangle is packed as a band matrix.
+
+ 'Q' -- The upper triangle is packed as a band matrix.
+
+ 'Z' -- The whole matrix is packed as a band matrix.
+*/
+
+ if (ipack == 5) {
+ uub = 0;
+ }
+ if (ipack == 6) {
+ llb = 0;
+ }
+
+ i__1 = uub;
+ for (j = 1; j <= i__1; ++j) {
+/* Computing MIN */
+ i__2 = j + llb;
+ for (i = min(i__2,*m); i >= 1; --i) {
+ a[i - j + uub + 1 + j * a_dim1] = a[i + j * a_dim1];
+/* L370: */
+ }
+/* L380: */
+ }
+
+ i__1 = *n;
+ for (j = uub + 2; j <= i__1; ++j) {
+/* Computing MIN */
+ i__4 = j + llb;
+ i__2 = min(i__4,*m);
+ for (i = j - uub; i <= i__2; ++i) {
+ a[i - j + uub + 1 + j * a_dim1] = a[i + j * a_dim1];
+/* L390: */
+ }
+/* L400: */
+ }
+ }
+
+/* If packed, zero out extraneous elements.
+
+ Symmetric/Triangular Packed --
+ zero out everything after A(IROW,ICOL) */
+
+ if (ipack == 3 || ipack == 4) {
+ i__1 = *m;
+ for (jc = icol; jc <= i__1; ++jc) {
+ i__2 = *lda;
+ for (jr = irow + 1; jr <= i__2; ++jr) {
+ a[jr + jc * a_dim1] = 0.f;
+/* L410: */
+ }
+ irow = 0;
+/* L420: */
+ }
+
+ } else if (ipack >= 5) {
+
+/* Packed Band --
+ 1st row is now in A( UUB+2-j, j), zero above it
+ m-th row is now in A( M+UUB-j,j), zero below it
+ last non-zero diagonal is now in A( UUB+LLB+1,j ),
+
+ zero below it, too. */
+
+ ir1 = uub + llb + 2;
+ ir2 = uub + *m + 2;
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ i__2 = uub + 1 - jc;
+ for (jr = 1; jr <= i__2; ++jr) {
+ a[jr + jc * a_dim1] = 0.f;
+/* L430: */
+ }
+/* Computing MAX
+ Computing MIN */
+ i__3 = ir1, i__5 = ir2 - jc;
+ i__2 = 1, i__4 = min(i__3,i__5);
+ i__6 = *lda;
+ for (jr = max(i__2,i__4); jr <= i__6; ++jr) {
+ a[jr + jc * a_dim1] = 0.f;
+/* L440: */
+ }
+/* L450: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of SLATMS */
+
+} /* slatms_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/slu_Cnames.h b/SuperLU_5.2.0/TESTING/MATGEN/slu_Cnames.h
new file mode 100644
index 0000000..9ea6b62
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/slu_Cnames.h
@@ -0,0 +1,444 @@
+/*! @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
+ *
+ * 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>
+ */
+#ifndef __SUPERLU_CNAMES /* allow multiple inclusions */
+#define __SUPERLU_CNAMES
+
+
+#define ADD_ 0
+#define ADD__ 1
+#define NOCHANGE 2
+#define UPCASE 3
+#define OLD_CRAY 4
+#define C_CALL 5
+
+#ifdef UpCase
+#define F77_CALL_C UPCASE
+#endif
+
+#ifdef NoChange
+#define F77_CALL_C NOCHANGE
+#endif
+
+#ifdef Add_
+#define F77_CALL_C ADD_
+#endif
+
+#ifdef 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_
+#endif
+
+
+#if (F77_CALL_C == ADD_)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine
+ * No redefinition necessary to have following Fortran to C interface:
+ * FORTRAN CALL C DECLARATION
+ * call dgemm(...) void dgemm_(...)
+ *
+ * This is the default.
+ */
+
+#endif
+
+#if (F77_CALL_C == ADD__)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine
+ * for following Fortran to C interface:
+ * FORTRAN CALL C DECLARATION
+ * call dgemm(...) void dgemm__(...)
+ */
+/* 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 saxpy_ saxpy__
+#define ssyr2_ ssyr2__
+#define srot_ srot__
+#define sgemv_ sgemv__
+#define strsv_ strsv__
+#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 caxpy_ caxpy__
+#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 zaxpy_ zaxpy__
+#define zgemv_ zgemv__
+#define ztrsv_ ztrsv__
+#define zgemm_ zgemm__
+#define ztrsm_ ztrsm__
+#define zgerc_ zgerc__
+#define zhemv_ zhemv__
+#define zher2_ zher2__
+
+/* LAPACK */
+#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 == UPCASE)
+/*
+ * 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 DGEMM(...)
+ */
+/* 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 saxpy_ SAXPY
+#define ssyr2_ SSYR2
+#define srot_ SROT
+#define sgemv_ SGEMV
+#define strsv_ STRSV
+#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 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
+#define dscal_ SSCAL
+#define dger_ SGER
+#define dnrm2_ SNRM2
+#define dsymv_ SSYMV
+#define ddot_ SDOT
+#define dsyr2_ SSYR2
+#define drot_ SROT
+#define dgemv_ SGEMV
+#define dtrsv_ STRSV
+#define dgemm_ SGEMM
+#define dtrsm_ STRSM
+
+#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
+#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 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 == NOCHANGE)
+/*
+ * These defines set up the naming scheme required to have a fortran 77
+ * routine call a C routine
+ * for following Fortran to C interface:
+ * FORTRAN CALL C DECLARATION
+ * call dgemm(...) void dgemm(...)
+ */
+/* 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 saxpy_ saxpy
+#define ssyr2_ ssyr2
+#define srot_ srot
+#define sgemv_ sgemv
+#define strsv_ strsv
+#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 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
+
+
+#endif /* __SUPERLU_CNAMES */
diff --git a/TESTING/MATGEN/zdotc.c b/SuperLU_5.2.0/TESTING/MATGEN/zdotc.c
similarity index 100%
rename from TESTING/MATGEN/zdotc.c
rename to SuperLU_5.2.0/TESTING/MATGEN/zdotc.c
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlacgv.c b/SuperLU_5.2.0/TESTING/MATGEN/zlacgv.c
new file mode 100644
index 0000000..37b4e5f
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlacgv.c
@@ -0,0 +1,76 @@
+#include "f2c.h"
+
+/* Subroutine */ int zlacgv_slu(integer *n, doublecomplex *x, integer *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
+
+
+ Purpose
+ =======
+
+ ZLACGV conjugates a complex vector of length N.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The length of the vector X. N >= 0.
+
+ X (input/output) COMPLEX*16 array, dimension
+ (1+(N-1)*abs(INCX))
+ On entry, the vector of length N to be conjugated.
+ On exit, X is overwritten with conjg(X).
+
+ INCX (input) INTEGER
+ The spacing between successive elements of X.
+
+ =====================================================================
+
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer i__1, i__2;
+ doublecomplex z__1;
+ /* Builtin functions */
+ void d_cnjg(doublecomplex *, doublecomplex *);
+ /* Local variables */
+ static integer ioff, i;
+
+
+#define X(I) x[(I)-1]
+
+
+ if (*incx == 1) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ d_cnjg(&z__1, &X(i));
+ X(i).r = z__1.r, X(i).i = z__1.i;
+/* L10: */
+ }
+ } else {
+ ioff = 1;
+ if (*incx < 0) {
+ ioff = 1 - (*n - 1) * *incx;
+ }
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = ioff;
+ d_cnjg(&z__1, &X(ioff));
+ X(ioff).r = z__1.r, X(ioff).i = z__1.i;
+ ioff += *incx;
+/* L20: */
+ }
+ }
+ return 0;
+
+/* End of ZLACGV */
+
+} /* zlacgv_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlagge.c b/SuperLU_5.2.0/TESTING/MATGEN/zlagge.c
new file mode 100644
index 0000000..3c8558d
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlagge.c
@@ -0,0 +1,465 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static doublecomplex c_b1 = {0.,0.};
+static doublecomplex c_b2 = {1.,0.};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int zlagge_slu(integer *m, integer *n, integer *kl, integer *ku,
+ doublereal *d, doublecomplex *a, integer *lda, integer *iseed,
+ doublecomplex *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ doublereal d__1;
+ doublecomplex z__1;
+
+ /* Builtin functions */
+ double z_abs(doublecomplex *);
+ void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer i, j;
+ extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
+ doublecomplex *, integer *, doublecomplex *, integer *,
+ doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
+ doublecomplex *, integer *), zgemv_(char *, integer *, integer *,
+ doublecomplex *, doublecomplex *, integer *, doublecomplex *,
+ integer *, doublecomplex *, doublecomplex *, integer *);
+ extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
+ static doublecomplex wa, wb;
+ static doublereal wn;
+ extern /* Subroutine */ int zlacgv_slu(integer *, doublecomplex *, integer *), zlarnv_slu(integer *,
+ integer *, integer *, doublecomplex *);
+ extern int input_error(char *, int *);
+ static doublecomplex tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ ZLAGGE generates a complex general m by n matrix A, by pre- and post-
+
+ multiplying a real diagonal matrix D with random unitary matrices:
+ A = U*D*V. The lower and upper bandwidths may then be reduced to
+ kl and ku by additional unitary transformations.
+
+ Arguments
+ =========
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ KL (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= KL <= M-1.
+
+ KU (input) INTEGER
+ The number of nonzero superdiagonals within the band of A.
+ 0 <= KU <= N-1.
+
+ D (input) DOUBLE PRECISION array, dimension (min(M,N))
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) COMPLEX*16 array, dimension (LDA,N)
+ The generated m by n matrix A.
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= M.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) COMPLEX*16 array, dimension (M+N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*m < 0) {
+ *info = -1;
+ } else if (*n < 0) {
+ *info = -2;
+ } else if (*kl < 0 || *kl > *m - 1) {
+ *info = -3;
+ } else if (*ku < 0 || *ku > *n - 1) {
+ *info = -4;
+ } else if (*lda < max(1,*m)) {
+ *info = -7;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("ZLAGGE", &i__1);
+ return 0;
+ }
+
+/* initialize A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = 1; i <= i__2; ++i) {
+ i__3 = i + j * a_dim1;
+ a[i__3].r = 0., a[i__3].i = 0.;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = min(*m,*n);
+ for (i = 1; i <= i__1; ++i) {
+ i__2 = i + i * a_dim1;
+ i__3 = i;
+ a[i__2].r = d[i__3], a[i__2].i = 0.;
+/* L30: */
+ }
+
+/* pre- and post-multiply A by random unitary matrices */
+
+ for (i = min(*m,*n); i >= 1; --i) {
+ if (i < *m) {
+
+/* generate random reflection */
+
+ i__1 = *m - i + 1;
+ zlarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *m - i + 1;
+ wn = dznrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / z_abs(&work[1]);
+ z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__1 = *m - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__1, &z__1, &work[2], &c__1);
+ work[1].r = 1., work[1].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* multiply A(i:m,i:n) by random reflection from the lef
+t */
+
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ zgemv_("Conjugate transpose", &i__1, &i__2, &c_b2, &a[i + i *
+ a_dim1], lda, &work[1], &c__1, &c_b1, &work[*m + 1], &
+ c__1);
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(&i__1, &i__2, &z__1, &work[1], &c__1, &work[*m + 1], &c__1,
+ &a[i + i * a_dim1], lda);
+ }
+ if (i < *n) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ zlarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = dznrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / z_abs(&work[1]);
+ z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__1 = *n - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__1, &z__1, &work[2], &c__1);
+ work[1].r = 1., work[1].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* multiply A(i:m,i:n) by random reflection from the rig
+ht */
+
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ zgemv_("No transpose", &i__1, &i__2, &c_b2, &a[i + i * a_dim1],
+ lda, &work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
+ i__1 = *m - i + 1;
+ i__2 = *n - i + 1;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(&i__1, &i__2, &z__1, &work[*n + 1], &c__1, &work[1], &c__1,
+ &a[i + i * a_dim1], lda);
+ }
+/* L40: */
+ }
+
+/* Reduce number of subdiagonals to KL and number of superdiagonals
+ to KU
+
+ Computing MAX */
+ i__2 = *m - 1 - *kl, i__3 = *n - 1 - *ku;
+ i__1 = max(i__2,i__3);
+ for (i = 1; i <= i__1; ++i) {
+ if (*kl <= *ku) {
+
+/* annihilate subdiagonal elements first (necessary if K
+L = 0)
+
+ Computing MIN */
+ i__2 = *m - 1 - *kl;
+ if (i <= min(i__2,*n)) {
+
+/* generate reflection to annihilate A(kl+i+1:m,i
+) */
+
+ i__2 = *m - *kl - i + 1;
+ wn = dznrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
+ d__1 = wn / z_abs(&a[*kl + i + i * a_dim1]);
+ i__2 = *kl + i + i * a_dim1;
+ z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ i__2 = *kl + i + i * a_dim1;
+ z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__2 = *m - *kl - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__2, &z__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
+ i__2 = *kl + i + i * a_dim1;
+ a[i__2].r = 1., a[i__2].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* apply reflection to A(kl+i:m,i+1:n) from the l
+eft */
+
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ zgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*kl + i
+ + (i + 1) * a_dim1], lda, &a[*kl + i + i * a_dim1], &
+ c__1, &c_b1, &work[1], &c__1);
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(&i__2, &i__3, &z__1, &a[*kl + i + i * a_dim1], &c__1, &
+ work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
+ i__2 = *kl + i + i * a_dim1;
+ z__1.r = -wa.r, z__1.i = -wa.i;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+ }
+
+/* Computing MIN */
+ i__2 = *n - 1 - *ku;
+ if (i <= min(i__2,*m)) {
+
+/* generate reflection to annihilate A(i,ku+i+1:n
+) */
+
+ i__2 = *n - *ku - i + 1;
+ wn = dznrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ d__1 = wn / z_abs(&a[i + (*ku + i) * a_dim1]);
+ i__2 = i + (*ku + i) * a_dim1;
+ z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ i__2 = i + (*ku + i) * a_dim1;
+ z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__2 = *n - *ku - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__2, &z__1, &a[i + (*ku + i + 1) * a_dim1], lda);
+ i__2 = i + (*ku + i) * a_dim1;
+ a[i__2].r = 1., a[i__2].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* apply reflection to A(i+1:m,ku+i:n) from the r
+ight */
+
+ i__2 = *n - *ku - i + 1;
+ zlacgv_slu(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ zgemv_("No transpose", &i__2, &i__3, &c_b2, &a[i + 1 + (*ku +
+ i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda, &
+ c_b1, &work[1], &c__1);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(&i__2, &i__3, &z__1, &work[1], &c__1, &a[i + (*ku + i)
+ * a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
+ i__2 = i + (*ku + i) * a_dim1;
+ z__1.r = -wa.r, z__1.i = -wa.i;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+ }
+ } else {
+
+/* annihilate superdiagonal elements first (necessary if
+
+ KU = 0)
+
+ Computing MIN */
+ i__2 = *n - 1 - *ku;
+ if (i <= min(i__2,*m)) {
+
+/* generate reflection to annihilate A(i,ku+i+1:n
+) */
+
+ i__2 = *n - *ku - i + 1;
+ wn = dznrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ d__1 = wn / z_abs(&a[i + (*ku + i) * a_dim1]);
+ i__2 = i + (*ku + i) * a_dim1;
+ z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ i__2 = i + (*ku + i) * a_dim1;
+ z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__2 = *n - *ku - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__2, &z__1, &a[i + (*ku + i + 1) * a_dim1], lda);
+ i__2 = i + (*ku + i) * a_dim1;
+ a[i__2].r = 1., a[i__2].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* apply reflection to A(i+1:m,ku+i:n) from the r
+ight */
+
+ i__2 = *n - *ku - i + 1;
+ zlacgv_slu(&i__2, &a[i + (*ku + i) * a_dim1], lda);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ zgemv_("No transpose", &i__2, &i__3, &c_b2, &a[i + 1 + (*ku +
+ i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda, &
+ c_b1, &work[1], &c__1);
+ i__2 = *m - i;
+ i__3 = *n - *ku - i + 1;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(&i__2, &i__3, &z__1, &work[1], &c__1, &a[i + (*ku + i)
+ * a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
+ i__2 = i + (*ku + i) * a_dim1;
+ z__1.r = -wa.r, z__1.i = -wa.i;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+ }
+
+/* Computing MIN */
+ i__2 = *m - 1 - *kl;
+ if (i <= min(i__2,*n)) {
+
+/* generate reflection to annihilate A(kl+i+1:m,i
+) */
+
+ i__2 = *m - *kl - i + 1;
+ wn = dznrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
+ d__1 = wn / z_abs(&a[*kl + i + i * a_dim1]);
+ i__2 = *kl + i + i * a_dim1;
+ z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ i__2 = *kl + i + i * a_dim1;
+ z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__2 = *m - *kl - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__2, &z__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
+ i__2 = *kl + i + i * a_dim1;
+ a[i__2].r = 1., a[i__2].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* apply reflection to A(kl+i:m,i+1:n) from the l
+eft */
+
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ zgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*kl + i
+ + (i + 1) * a_dim1], lda, &a[*kl + i + i * a_dim1], &
+ c__1, &c_b1, &work[1], &c__1);
+ i__2 = *m - *kl - i + 1;
+ i__3 = *n - i;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(&i__2, &i__3, &z__1, &a[*kl + i + i * a_dim1], &c__1, &
+ work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
+ i__2 = *kl + i + i * a_dim1;
+ z__1.r = -wa.r, z__1.i = -wa.i;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+ }
+ }
+
+ i__2 = *m;
+ for (j = *kl + i + 1; j <= i__2; ++j) {
+ i__3 = j + i * a_dim1;
+ a[i__3].r = 0., a[i__3].i = 0.;
+/* L50: */
+ }
+
+ i__2 = *n;
+ for (j = *ku + i + 1; j <= i__2; ++j) {
+ i__3 = i + j * a_dim1;
+ a[i__3].r = 0., a[i__3].i = 0.;
+/* L60: */
+ }
+/* L70: */
+ }
+ return 0;
+
+/* End of ZLAGGE */
+
+} /* zlagge_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlaghe.c b/SuperLU_5.2.0/TESTING/MATGEN/zlaghe.c
new file mode 100644
index 0000000..d43380a
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlaghe.c
@@ -0,0 +1,314 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static doublecomplex c_b1 = {0.,0.};
+static doublecomplex c_b2 = {1.,0.};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int zlaghe_slu(integer *n, integer *k, doublereal *d,
+ doublecomplex *a, integer *lda, integer *iseed, doublecomplex *work,
+ integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ doublereal d__1;
+ doublecomplex z__1, z__2, z__3, z__4;
+
+ /* Builtin functions */
+ double z_abs(doublecomplex *);
+ void z_div(doublecomplex *, doublecomplex *, doublecomplex *), d_cnjg(
+ doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ extern /* Subroutine */ int zher2_(char *, integer *, doublecomplex *,
+ doublecomplex *, integer *, doublecomplex *, integer *,
+ doublecomplex *, integer *);
+ static integer i, j;
+ static doublecomplex alpha;
+ extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
+ doublecomplex *, integer *, doublecomplex *, integer *,
+ doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
+ doublecomplex *, integer *);
+ extern /* Double Complex */ VOID zdotc_(doublecomplex *, integer *,
+ doublecomplex *, integer *, doublecomplex *, integer *);
+ extern /* Subroutine */ int zgemv_(char *, integer *, integer *,
+ doublecomplex *, doublecomplex *, integer *, doublecomplex *,
+ integer *, doublecomplex *, doublecomplex *, integer *),
+ zhemv_(char *, integer *, doublecomplex *, doublecomplex *,
+ integer *, doublecomplex *, integer *, doublecomplex *,
+ doublecomplex *, integer *), zaxpy_(integer *,
+ doublecomplex *, doublecomplex *, integer *, doublecomplex *,
+ integer *);
+ extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
+ static doublecomplex wa, wb;
+ static doublereal wn;
+ extern /* Subroutine */ int zlarnv_slu(integer *, integer *, integer *, doublecomplex *);
+ extern int input_error(char *, int *);
+ static doublecomplex tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ ZLAGHE generates a complex hermitian matrix A, by pre- and post-
+ multiplying a real diagonal matrix D with a random unitary matrix:
+ A = U*D*U'. The semi-bandwidth may then be reduced to k by additional
+
+ unitary transformations.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ K (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= K <= N-1.
+
+ D (input) DOUBLE PRECISION array, dimension (N)
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) COMPLEX*16 array, dimension (LDA,N)
+ The generated n by n hermitian matrix A (the full matrix is
+ stored).
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) COMPLEX*16 array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*k < 0 || *k > *n - 1) {
+ *info = -2;
+ } else if (*lda < max(1,*n)) {
+ *info = -5;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("ZLAGHE", &i__1);
+ return 0;
+ }
+
+/* initialize lower triangle of A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__3 = i + j * a_dim1;
+ a[i__3].r = 0., a[i__3].i = 0.;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ i__2 = i + i * a_dim1;
+ i__3 = i;
+ a[i__2].r = d[i__3], a[i__2].i = 0.;
+/* L30: */
+ }
+
+/* Generate lower triangle of hermitian matrix */
+
+ for (i = *n - 1; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ zlarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = dznrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / z_abs(&work[1]);
+ z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__1 = *n - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__1, &z__1, &work[2], &c__1);
+ work[1].r = 1., work[1].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* apply random reflection to A(i:n,i:n) from the left
+ and the right
+
+ compute y := tau * A * u */
+
+ i__1 = *n - i + 1;
+ zhemv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
+ &c_b1, &work[*n + 1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( y, u ) * u */
+
+ z__3.r = -.5, z__3.i = 0.;
+ z__2.r = z__3.r * tau.r - z__3.i * tau.i, z__2.i = z__3.r * tau.i +
+ z__3.i * tau.r;
+ i__1 = *n - i + 1;
+ zdotc_(&z__4, &i__1, &work[*n + 1], &c__1, &work[1], &c__1);
+ z__1.r = z__2.r * z__4.r - z__2.i * z__4.i, z__1.i = z__2.r * z__4.i
+ + z__2.i * z__4.r;
+ alpha.r = z__1.r, alpha.i = z__1.i;
+ i__1 = *n - i + 1;
+ zaxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
+
+/* apply the transformation as a rank-2 update to A(i:n,i:n) */
+
+ i__1 = *n - i + 1;
+ z__1.r = -1., z__1.i = 0.;
+ zher2_("Lower", &i__1, &z__1, &work[1], &c__1, &work[*n + 1], &c__1, &
+ a[i + i * a_dim1], lda);
+/* L40: */
+ }
+
+/* Reduce number of subdiagonals to K */
+
+ i__1 = *n - 1 - *k;
+ for (i = 1; i <= i__1; ++i) {
+
+/* generate reflection to annihilate A(k+i+1:n,i) */
+
+ i__2 = *n - *k - i + 1;
+ wn = dznrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
+ d__1 = wn / z_abs(&a[*k + i + i * a_dim1]);
+ i__2 = *k + i + i * a_dim1;
+ z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ i__2 = *k + i + i * a_dim1;
+ z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__2 = *n - *k - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__2, &z__1, &a[*k + i + 1 + i * a_dim1], &c__1);
+ i__2 = *k + i + i * a_dim1;
+ a[i__2].r = 1., a[i__2].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
+
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ zgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*k + i + (i + 1)
+ * a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b1, &work[
+ 1], &c__1);
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(&i__2, &i__3, &z__1, &a[*k + i + i * a_dim1], &c__1, &work[1],
+ &c__1, &a[*k + i + (i + 1) * a_dim1], lda);
+
+/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
+ht
+
+ compute y := tau * A * u */
+
+ i__2 = *n - *k - i + 1;
+ zhemv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
+ k + i + i * a_dim1], &c__1, &c_b1, &work[1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( y, u ) * u */
+
+ z__3.r = -.5, z__3.i = 0.;
+ z__2.r = z__3.r * tau.r - z__3.i * tau.i, z__2.i = z__3.r * tau.i +
+ z__3.i * tau.r;
+ i__2 = *n - *k - i + 1;
+ zdotc_(&z__4, &i__2, &work[1], &c__1, &a[*k + i + i * a_dim1], &c__1);
+ z__1.r = z__2.r * z__4.r - z__2.i * z__4.i, z__1.i = z__2.r * z__4.i
+ + z__2.i * z__4.r;
+ alpha.r = z__1.r, alpha.i = z__1.i;
+ i__2 = *n - *k - i + 1;
+ zaxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
+ ;
+
+/* apply hermitian rank-2 update to A(k+i:n,k+i:n) */
+
+ i__2 = *n - *k - i + 1;
+ z__1.r = -1., z__1.i = 0.;
+ zher2_("Lower", &i__2, &z__1, &a[*k + i + i * a_dim1], &c__1, &work[1]
+ , &c__1, &a[*k + i + (*k + i) * a_dim1], lda);
+
+ i__2 = *k + i + i * a_dim1;
+ z__1.r = -wa.r, z__1.i = -wa.i;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+ i__2 = *n;
+ for (j = *k + i + 1; j <= i__2; ++j) {
+ i__3 = j + i * a_dim1;
+ a[i__3].r = 0., a[i__3].i = 0.;
+/* L50: */
+ }
+/* L60: */
+ }
+
+/* Store full hermitian matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__3 = j + i * a_dim1;
+ d_cnjg(&z__1, &a[i + j * a_dim1]);
+ a[i__3].r = z__1.r, a[i__3].i = z__1.i;
+/* L70: */
+ }
+/* L80: */
+ }
+ return 0;
+
+/* End of ZLAGHE */
+
+} /* zlaghe_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlagsy.c b/SuperLU_5.2.0/TESTING/MATGEN/zlagsy.c
new file mode 100644
index 0000000..fd43425
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlagsy.c
@@ -0,0 +1,365 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static doublecomplex c_b1 = {0.,0.};
+static doublecomplex c_b2 = {1.,0.};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int zlagsy_slu(integer *n, integer *k, doublereal *d,
+ doublecomplex *a, integer *lda, integer *iseed, doublecomplex *work,
+ integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6, i__7, i__8,
+ i__9;
+ doublereal d__1;
+ doublecomplex z__1, z__2, z__3, z__4;
+
+ /* Builtin functions */
+ double z_abs(doublecomplex *);
+ void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer i, j;
+ static doublecomplex alpha;
+ extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
+ doublecomplex *, integer *, doublecomplex *, integer *,
+ doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
+ doublecomplex *, integer *);
+ extern /* Double Complex */ VOID zdotc_(doublecomplex *, integer *,
+ doublecomplex *, integer *, doublecomplex *, integer *);
+ extern /* Subroutine */ int zgemv_(char *, integer *, integer *,
+ doublecomplex *, doublecomplex *, integer *, doublecomplex *,
+ integer *, doublecomplex *, doublecomplex *, integer *),
+ zaxpy_(integer *, doublecomplex *, doublecomplex *, integer *,
+ doublecomplex *, integer *), zsymv_(char *, integer *,
+ doublecomplex *, doublecomplex *, integer *, doublecomplex *,
+ integer *, doublecomplex *, doublecomplex *, integer *);
+ extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
+ static integer ii, jj;
+ static doublecomplex wa, wb;
+ static doublereal wn;
+ extern /* Subroutine */ int zlacgv_slu(integer *, doublecomplex *, integer *), zlarnv_slu(integer *,
+ integer *, integer *, doublecomplex *);
+ extern int input_error(char *, int *);
+ static doublecomplex tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ ZLAGSY generates a complex symmetric matrix A, by pre- and post-
+ multiplying a real diagonal matrix D with a random unitary matrix:
+ A = U*D*U**T. The semi-bandwidth may then be reduced to k by
+ additional unitary transformations.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ K (input) INTEGER
+ The number of nonzero subdiagonals within the band of A.
+ 0 <= K <= N-1.
+
+ D (input) DOUBLE PRECISION array, dimension (N)
+ The diagonal elements of the diagonal matrix D.
+
+ A (output) COMPLEX*16 array, dimension (LDA,N)
+ The generated n by n symmetric matrix A (the full matrix is
+ stored).
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) COMPLEX*16 array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*k < 0 || *k > *n - 1) {
+ *info = -2;
+ } else if (*lda < max(1,*n)) {
+ *info = -5;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("ZLAGSY", &i__1);
+ return 0;
+ }
+
+/* initialize lower triangle of A to diagonal matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__3 = i + j * a_dim1;
+ a[i__3].r = 0., a[i__3].i = 0.;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = *n;
+ for (i = 1; i <= i__1; ++i) {
+ i__2 = i + i * a_dim1;
+ i__3 = i;
+ a[i__2].r = d[i__3], a[i__2].i = 0.;
+/* L30: */
+ }
+
+/* Generate lower triangle of symmetric matrix */
+
+ for (i = *n - 1; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ zlarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = dznrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / z_abs(&work[1]);
+ z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__1 = *n - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__1, &z__1, &work[2], &c__1);
+ work[1].r = 1., work[1].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* apply random reflection to A(i:n,i:n) from the left
+ and the right
+
+ compute y := tau * A * conjg(u) */
+
+ i__1 = *n - i + 1;
+ zlacgv_slu(&i__1, &work[1], &c__1);
+ i__1 = *n - i + 1;
+ zsymv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
+ &c_b1, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ zlacgv_slu(&i__1, &work[1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( u, y ) * u */
+
+ z__3.r = -.5, z__3.i = 0.;
+ z__2.r = z__3.r * tau.r - z__3.i * tau.i, z__2.i = z__3.r * tau.i +
+ z__3.i * tau.r;
+ i__1 = *n - i + 1;
+ zdotc_(&z__4, &i__1, &work[1], &c__1, &work[*n + 1], &c__1);
+ z__1.r = z__2.r * z__4.r - z__2.i * z__4.i, z__1.i = z__2.r * z__4.i
+ + z__2.i * z__4.r;
+ alpha.r = z__1.r, alpha.i = z__1.i;
+ i__1 = *n - i + 1;
+ zaxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
+
+/* apply the transformation as a rank-2 update to A(i:n,i:n)
+
+ CALL ZSYR2( 'Lower', N-I+1, -ONE, WORK, 1, WORK( N+1 ), 1,
+
+ $ A( I, I ), LDA ) */
+
+ i__1 = *n;
+ for (jj = i; jj <= i__1; ++jj) {
+ i__2 = *n;
+ for (ii = jj; ii <= i__2; ++ii) {
+ i__3 = ii + jj * a_dim1;
+ i__4 = ii + jj * a_dim1;
+ i__5 = ii - i + 1;
+ i__6 = *n + jj - i + 1;
+ z__3.r = work[i__5].r * work[i__6].r - work[i__5].i * work[
+ i__6].i, z__3.i = work[i__5].r * work[i__6].i + work[
+ i__5].i * work[i__6].r;
+ z__2.r = a[i__4].r - z__3.r, z__2.i = a[i__4].i - z__3.i;
+ i__7 = *n + ii - i + 1;
+ i__8 = jj - i + 1;
+ z__4.r = work[i__7].r * work[i__8].r - work[i__7].i * work[
+ i__8].i, z__4.i = work[i__7].r * work[i__8].i + work[
+ i__7].i * work[i__8].r;
+ z__1.r = z__2.r - z__4.r, z__1.i = z__2.i - z__4.i;
+ a[i__3].r = z__1.r, a[i__3].i = z__1.i;
+/* L40: */
+ }
+/* L50: */
+ }
+/* L60: */
+ }
+
+/* Reduce number of subdiagonals to K */
+
+ i__1 = *n - 1 - *k;
+ for (i = 1; i <= i__1; ++i) {
+
+/* generate reflection to annihilate A(k+i+1:n,i) */
+
+ i__2 = *n - *k - i + 1;
+ wn = dznrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
+ d__1 = wn / z_abs(&a[*k + i + i * a_dim1]);
+ i__2 = *k + i + i * a_dim1;
+ z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ i__2 = *k + i + i * a_dim1;
+ z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__2 = *n - *k - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__2, &z__1, &a[*k + i + 1 + i * a_dim1], &c__1);
+ i__2 = *k + i + i * a_dim1;
+ a[i__2].r = 1., a[i__2].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
+
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ zgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*k + i + (i + 1)
+ * a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b1, &work[
+ 1], &c__1);
+ i__2 = *n - *k - i + 1;
+ i__3 = *k - 1;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(&i__2, &i__3, &z__1, &a[*k + i + i * a_dim1], &c__1, &work[1],
+ &c__1, &a[*k + i + (i + 1) * a_dim1], lda);
+
+/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
+ht
+
+ compute y := tau * A * conjg(u) */
+
+ i__2 = *n - *k - i + 1;
+ zlacgv_slu(&i__2, &a[*k + i + i * a_dim1], &c__1);
+ i__2 = *n - *k - i + 1;
+ zsymv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
+ k + i + i * a_dim1], &c__1, &c_b1, &work[1], &c__1);
+ i__2 = *n - *k - i + 1;
+ zlacgv_slu(&i__2, &a[*k + i + i * a_dim1], &c__1);
+
+/* compute v := y - 1/2 * tau * ( u, y ) * u */
+
+ z__3.r = -.5, z__3.i = 0.;
+ z__2.r = z__3.r * tau.r - z__3.i * tau.i, z__2.i = z__3.r * tau.i +
+ z__3.i * tau.r;
+ i__2 = *n - *k - i + 1;
+ zdotc_(&z__4, &i__2, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1);
+ z__1.r = z__2.r * z__4.r - z__2.i * z__4.i, z__1.i = z__2.r * z__4.i
+ + z__2.i * z__4.r;
+ alpha.r = z__1.r, alpha.i = z__1.i;
+ i__2 = *n - *k - i + 1;
+ zaxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
+ ;
+
+/* apply symmetric rank-2 update to A(k+i:n,k+i:n)
+
+ CALL ZSYR2( 'Lower', N-K-I+1, -ONE, A( K+I, I ), 1, WORK, 1,
+
+ $ A( K+I, K+I ), LDA ) */
+
+ i__2 = *n;
+ for (jj = *k + i; jj <= i__2; ++jj) {
+ i__3 = *n;
+ for (ii = jj; ii <= i__3; ++ii) {
+ i__4 = ii + jj * a_dim1;
+ i__5 = ii + jj * a_dim1;
+ i__6 = ii + i * a_dim1;
+ i__7 = jj - *k - i + 1;
+ z__3.r = a[i__6].r * work[i__7].r - a[i__6].i * work[i__7].i,
+ z__3.i = a[i__6].r * work[i__7].i + a[i__6].i * work[
+ i__7].r;
+ z__2.r = a[i__5].r - z__3.r, z__2.i = a[i__5].i - z__3.i;
+ i__8 = ii - *k - i + 1;
+ i__9 = jj + i * a_dim1;
+ z__4.r = work[i__8].r * a[i__9].r - work[i__8].i * a[i__9].i,
+ z__4.i = work[i__8].r * a[i__9].i + work[i__8].i * a[
+ i__9].r;
+ z__1.r = z__2.r - z__4.r, z__1.i = z__2.i - z__4.i;
+ a[i__4].r = z__1.r, a[i__4].i = z__1.i;
+/* L70: */
+ }
+/* L80: */
+ }
+
+ i__2 = *k + i + i * a_dim1;
+ z__1.r = -wa.r, z__1.i = -wa.i;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+ i__2 = *n;
+ for (j = *k + i + 1; j <= i__2; ++j) {
+ i__3 = j + i * a_dim1;
+ a[i__3].r = 0., a[i__3].i = 0.;
+/* L90: */
+ }
+/* L100: */
+ }
+
+/* Store full symmetric matrix */
+
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__3 = j + i * a_dim1;
+ i__4 = i + j * a_dim1;
+ a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;
+/* L110: */
+ }
+/* L120: */
+ }
+ return 0;
+
+/* End of ZLAGSY */
+
+} /* zlagsy_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlarge.c b/SuperLU_5.2.0/TESTING/MATGEN/zlarge.c
new file mode 100644
index 0000000..733e132
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlarge.c
@@ -0,0 +1,161 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static doublecomplex c_b1 = {0.,0.};
+static doublecomplex c_b2 = {1.,0.};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int zlarge_slu(integer *n, doublecomplex *a, integer *lda,
+ integer *iseed, doublecomplex *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1;
+ doublereal d__1;
+ doublecomplex z__1;
+
+ /* Builtin functions */
+ double z_abs(doublecomplex *);
+ void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer i;
+ extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
+ doublecomplex *, integer *, doublecomplex *, integer *,
+ doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
+ doublecomplex *, integer *), zgemv_(char *, integer *, integer *,
+ doublecomplex *, doublecomplex *, integer *, doublecomplex *,
+ integer *, doublecomplex *, doublecomplex *, integer *);
+ extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
+ static doublecomplex wa, wb;
+ static doublereal wn;
+ extern /* Subroutine */ int zlarnv_slu(integer *, integer *, integer *, doublecomplex *);
+ extern int input_error(char *, int *);
+ static doublecomplex tau;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ ZLARGE pre- and post-multiplies a complex general n by n matrix A
+ with a random unitary matrix: A = U*D*U'.
+
+ Arguments
+ =========
+
+ N (input) INTEGER
+ The order of the matrix A. N >= 0.
+
+ A (input/output) COMPLEX*16 array, dimension (LDA,N)
+ On entry, the original n by n matrix A.
+ On exit, A is overwritten by U*A*U' for some random
+ unitary matrix U.
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= N.
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ WORK (workspace) COMPLEX*16 array, dimension (2*N)
+
+ INFO (output) INTEGER
+ = 0: successful exit
+ < 0: if INFO = -i, the i-th argument had an illegal value
+
+ =====================================================================
+
+
+
+ Test the input arguments
+
+ Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+ if (*n < 0) {
+ *info = -1;
+ } else if (*lda < max(1,*n)) {
+ *info = -3;
+ }
+ if (*info < 0) {
+ i__1 = -(*info);
+ input_error("ZLARGE", &i__1);
+ return 0;
+ }
+
+/* pre- and post-multiply A by random unitary matrix */
+
+ for (i = *n; i >= 1; --i) {
+
+/* generate random reflection */
+
+ i__1 = *n - i + 1;
+ zlarnv_slu(&c__3, &iseed[1], &i__1, &work[1]);
+ i__1 = *n - i + 1;
+ wn = dznrm2_(&i__1, &work[1], &c__1);
+ d__1 = wn / z_abs(&work[1]);
+ z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
+ wa.r = z__1.r, wa.i = z__1.i;
+ if (wn == 0.) {
+ tau.r = 0., tau.i = 0.;
+ } else {
+ z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
+ wb.r = z__1.r, wb.i = z__1.i;
+ i__1 = *n - i;
+ z_div(&z__1, &c_b2, &wb);
+ zscal_(&i__1, &z__1, &work[2], &c__1);
+ work[1].r = 1., work[1].i = 0.;
+ z_div(&z__1, &wb, &wa);
+ d__1 = z__1.r;
+ tau.r = d__1, tau.i = 0.;
+ }
+
+/* multiply A(i:n,1:n) by random reflection from the left */
+
+ i__1 = *n - i + 1;
+ zgemv_("Conjugate transpose", &i__1, n, &c_b2, &a[i + a_dim1], lda, &
+ work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(&i__1, n, &z__1, &work[1], &c__1, &work[*n + 1], &c__1, &a[i +
+ a_dim1], lda);
+
+/* multiply A(1:n,i:n) by random reflection from the right */
+
+ i__1 = *n - i + 1;
+ zgemv_("No transpose", n, &i__1, &c_b2, &a[i * a_dim1 + 1], lda, &
+ work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
+ i__1 = *n - i + 1;
+ z__1.r = -tau.r, z__1.i = -tau.i;
+ zgerc_(n, &i__1, &z__1, &work[*n + 1], &c__1, &work[1], &c__1, &a[i *
+ a_dim1 + 1], lda);
+/* L10: */
+ }
+ return 0;
+
+/* End of ZLARGE */
+
+} /* zlarge_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlarnd.c b/SuperLU_5.2.0/TESTING/MATGEN/zlarnd.c
new file mode 100644
index 0000000..0c37999
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlarnd.c
@@ -0,0 +1,126 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Double Complex */ VOID zlarnd_slu(doublecomplex * ret_val, integer *idist,
+ integer *iseed)
+{
+ /* System generated locals */
+ doublereal d__1, d__2;
+ doublecomplex z__1, z__2, z__3;
+
+ /* Builtin functions */
+ double log(doublereal), sqrt(doublereal);
+ void z_exp(doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static doublereal t1, t2;
+ extern doublereal dlaran_slu(integer *);
+
+
+/* -- 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
+
+
+ Purpose
+ =======
+
+ ZLARND returns a random complex number from a uniform or normal
+ distribution.
+
+ Arguments
+ =========
+
+ IDIST (input) INTEGER
+ Specifies the distribution of the random numbers:
+ = 1: real and imaginary parts each uniform (0,1)
+ = 2: real and imaginary parts each uniform (-1,1)
+ = 3: real and imaginary parts each normal (0,1)
+ = 4: uniformly distributed on the disc abs(z) <= 1
+ = 5: uniformly distributed on the circle abs(z) = 1
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ Further Details
+ ===============
+
+ This routine calls the auxiliary routine DLARAN to generate a random
+
+ real number from a uniform (0,1) distribution. The Box-Muller method
+
+ is used to transform numbers from a uniform to a normal distribution.
+
+
+ =====================================================================
+
+
+
+ Generate a pair of real random numbers from a uniform (0,1)
+ distribution
+
+ Parameter adjustments */
+ --iseed;
+
+ /* Function Body */
+ t1 = dlaran_slu(&iseed[1]);
+ t2 = dlaran_slu(&iseed[1]);
+
+ if (*idist == 1) {
+
+/* real and imaginary parts each uniform (0,1) */
+
+ z__1.r = t1, z__1.i = t2;
+ ret_val->r = z__1.r, ret_val->i = z__1.i;
+ } else if (*idist == 2) {
+
+/* real and imaginary parts each uniform (-1,1) */
+
+ d__1 = t1 * 2. - 1.;
+ d__2 = t2 * 2. - 1.;
+ z__1.r = d__1, z__1.i = d__2;
+ ret_val->r = z__1.r, ret_val->i = z__1.i;
+ } else if (*idist == 3) {
+
+/* real and imaginary parts each normal (0,1) */
+
+ d__1 = sqrt(log(t1) * -2.);
+ d__2 = t2 * 6.2831853071795864769252867663;
+ z__3.r = 0., z__3.i = d__2;
+ z_exp(&z__2, &z__3);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ ret_val->r = z__1.r, ret_val->i = z__1.i;
+ } else if (*idist == 4) {
+
+/* uniform distribution on the unit disc abs(z) <= 1 */
+
+ d__1 = sqrt(t1);
+ d__2 = t2 * 6.2831853071795864769252867663;
+ z__3.r = 0., z__3.i = d__2;
+ z_exp(&z__2, &z__3);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ ret_val->r = z__1.r, ret_val->i = z__1.i;
+ } else if (*idist == 5) {
+
+/* uniform distribution on the unit circle abs(z) = 1 */
+
+ d__1 = t2 * 6.2831853071795864769252867663;
+ z__2.r = 0., z__2.i = d__1;
+ z_exp(&z__1, &z__2);
+ ret_val->r = z__1.r, ret_val->i = z__1.i;
+ }
+ return ;
+
+/* End of ZLARND */
+
+} /* zlarnd_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlarnv.c b/SuperLU_5.2.0/TESTING/MATGEN/zlarnv.c
new file mode 100644
index 0000000..020ae69
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlarnv.c
@@ -0,0 +1,173 @@
+#include "f2c.h"
+
+/* Subroutine */ int zlarnv_slu(integer *idist, integer *iseed, integer *n,
+ doublecomplex *x)
+{
+/* -- 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
+
+
+ Purpose
+ =======
+
+ ZLARNV returns a vector of n random complex numbers from a uniform or
+
+ normal distribution.
+
+ Arguments
+ =========
+
+ IDIST (input) INTEGER
+ Specifies the distribution of the random numbers:
+ = 1: real and imaginary parts each uniform (0,1)
+ = 2: real and imaginary parts each uniform (-1,1)
+ = 3: real and imaginary parts each normal (0,1)
+ = 4: uniformly distributed on the disc abs(z) < 1
+ = 5: uniformly distributed on the circle abs(z) = 1
+
+ ISEED (input/output) INTEGER array, dimension (4)
+ On entry, the seed of the random number generator; the array
+
+ elements must be between 0 and 4095, and ISEED(4) must be
+ odd.
+ On exit, the seed is updated.
+
+ N (input) INTEGER
+ The number of random numbers to be generated.
+
+ X (output) COMPLEX*16 array, dimension (N)
+ The generated random numbers.
+
+ Further Details
+ ===============
+
+ This routine calls the auxiliary routine DLARUV to generate random
+ real numbers from a uniform (0,1) distribution, in batches of up to
+ 128 using vectorisable code. The Box-Muller method is used to
+ transform numbers from a uniform to a normal distribution.
+
+ =====================================================================
+
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer i__1, i__2, i__3, i__4, i__5;
+ doublereal d__1, d__2;
+ doublecomplex z__1, z__2, z__3;
+ /* Builtin functions */
+ double log(doublereal), sqrt(doublereal);
+ void z_exp(doublecomplex *, doublecomplex *);
+ /* Local variables */
+ static integer i;
+ static doublereal u[128];
+ static integer il, iv;
+ extern /* Subroutine */ int dlaruv_slu(integer *, integer *, doublereal *);
+
+
+#define U(I) u[(I)]
+#define X(I) x[(I)-1]
+#define ISEED(I) iseed[(I)-1]
+
+
+ i__1 = *n;
+ for (iv = 1; iv <= *n; iv += 64) {
+/* Computing MIN */
+ i__2 = 64, i__3 = *n - iv + 1;
+ il = min(i__2,i__3);
+
+/* Call DLARUV to generate 2*IL real numbers from a uniform (0,
+1)
+ distribution (2*IL <= LV) */
+
+ i__2 = il << 1;
+ dlaruv_slu(&ISEED(1), &i__2, u);
+
+ if (*idist == 1) {
+
+/* Copy generated numbers */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ i__4 = (i << 1) - 2;
+ i__5 = (i << 1) - 1;
+ z__1.r = U((i<<1)-2), z__1.i = U((i<<1)-1);
+ X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
+/* L10: */
+ }
+ } else if (*idist == 2) {
+
+/* Convert generated numbers to uniform (-1,1) distribut
+ion */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ d__1 = U((i << 1) - 2) * 2. - 1.;
+ d__2 = U((i << 1) - 1) * 2. - 1.;
+ z__1.r = d__1, z__1.i = d__2;
+ X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
+/* L20: */
+ }
+ } else if (*idist == 3) {
+
+/* Convert generated numbers to normal (0,1) distributio
+n */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ d__1 = sqrt(log(U((i << 1) - 2)) * -2.);
+ d__2 = U((i << 1) - 1) * 6.2831853071795864769252867663;
+ z__3.r = 0., z__3.i = d__2;
+ z_exp(&z__2, &z__3);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
+/* L30: */
+ }
+ } else if (*idist == 4) {
+
+/* Convert generated numbers to complex numbers uniforml
+y
+ distributed on the unit disk */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ d__1 = sqrt(U((i << 1) - 2));
+ d__2 = U((i << 1) - 1) * 6.2831853071795864769252867663;
+ z__3.r = 0., z__3.i = d__2;
+ z_exp(&z__2, &z__3);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
+/* L40: */
+ }
+ } else if (*idist == 5) {
+
+/* Convert generated numbers to complex numbers uniforml
+y
+ distributed on the unit circle */
+
+ i__2 = il;
+ for (i = 1; i <= il; ++i) {
+ i__3 = iv + i - 1;
+ d__1 = U((i << 1) - 1) * 6.2831853071795864769252867663;
+ z__2.r = 0., z__2.i = d__1;
+ z_exp(&z__1, &z__2);
+ X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
+/* L50: */
+ }
+ }
+/* L60: */
+ }
+ return 0;
+
+/* End of ZLARNV */
+
+} /* zlarnv_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlaror.c b/SuperLU_5.2.0/TESTING/MATGEN/zlaror.c
new file mode 100644
index 0000000..0aa6437
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlaror.c
@@ -0,0 +1,355 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static doublecomplex c_b1 = {0.,0.};
+static doublecomplex c_b2 = {1.,0.};
+static integer c__3 = 3;
+static integer c__1 = 1;
+
+/* Subroutine */ int zlaror_slu(char *side, char *init, integer *m, integer *n,
+ doublecomplex *a, integer *lda, integer *iseed, doublecomplex *x,
+ integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ doublecomplex z__1, z__2;
+
+ /* Builtin functions */
+ double z_abs(doublecomplex *);
+ void d_cnjg(doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer kbeg, jcol;
+ static doublereal xabs;
+ static integer irow, j;
+ static doublecomplex csign;
+ extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
+ doublecomplex *, integer *, doublecomplex *, integer *,
+ doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
+ doublecomplex *, integer *);
+ static integer ixfrm;
+ extern /* Subroutine */ int zgemv_(char *, integer *, integer *,
+ doublecomplex *, doublecomplex *, integer *, doublecomplex *,
+ integer *, doublecomplex *, doublecomplex *, integer *);
+ static integer itype, nxfrm;
+ static doublereal xnorm;
+ extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
+ extern int input_error(char *, int *);
+ static doublereal factor;
+ extern /* Subroutine */ int zlacgv_slu(integer *, doublecomplex *, integer *)
+ ;
+ extern /* Double Complex */ VOID zlarnd_slu(doublecomplex *, integer *,
+ integer *);
+ extern /* Subroutine */ int zlaset_slu(char *, integer *, integer *,
+ doublecomplex *, doublecomplex *, doublecomplex *, integer *);
+ static doublecomplex xnorms;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ ZLAROR pre- or post-multiplies an M by N matrix A by a random
+ unitary matrix U, overwriting A. A may optionally be
+ initialized to the identity matrix before multiplying by U.
+ U is generated using the method of G.W. Stewart
+ ( SIAM J. Numer. Anal. 17, 1980, pp. 403-409 ).
+ (BLAS-2 version)
+
+ Arguments
+ =========
+
+ SIDE - CHARACTER*1
+ SIDE specifies whether A is multiplied on the left or right
+
+ by U.
+ SIDE = 'L' Multiply A on the left (premultiply) by U
+ SIDE = 'R' Multiply A on the right (postmultiply) by U*
+ SIDE = 'C' Multiply A on the left by U and the right by U*
+ SIDE = 'T' Multiply A on the left by U and the right by U'
+ Not modified.
+
+ INIT - CHARACTER*1
+ INIT specifies whether or not A should be initialized to
+ the identity matrix.
+ INIT = 'I' Initialize A to (a section of) the
+ identity matrix before applying U.
+ INIT = 'N' No initialization. Apply U to the
+ input matrix A.
+
+ INIT = 'I' may be used to generate square (i.e., unitary)
+ or rectangular orthogonal matrices (orthogonality being
+ in the sense of ZDOTC):
+
+ For square matrices, M=N, and SIDE many be either 'L' or
+ 'R'; the rows will be orthogonal to each other, as will the
+
+ columns.
+ For rectangular matrices where M < N, SIDE = 'R' will
+ produce a dense matrix whose rows will be orthogonal and
+ whose columns will not, while SIDE = 'L' will produce a
+ matrix whose rows will be orthogonal, and whose first M
+ columns will be orthogonal, the remaining columns being
+ zero.
+ For matrices where M > N, just use the previous
+ explaination, interchanging 'L' and 'R' and "rows" and
+ "columns".
+
+ Not modified.
+
+ M - INTEGER
+ Number of rows of A. Not modified.
+
+ N - INTEGER
+ Number of columns of A. Not modified.
+
+ A - COMPLEX*16 array, dimension ( LDA, N )
+ Input and output array. Overwritten by U A ( if SIDE = 'L' )
+
+ or by A U ( if SIDE = 'R' )
+ or by U A U* ( if SIDE = 'C')
+ or by U A U' ( if SIDE = 'T') on exit.
+
+ LDA - INTEGER
+ Leading dimension of A. Must be at least MAX ( 1, M ).
+ Not modified.
+
+ ISEED - INTEGER array, dimension ( 4 )
+ On entry ISEED specifies the seed of the random number
+ generator. The array elements should be between 0 and 4095;
+
+ if not they will be reduced mod 4096. Also, ISEED(4) must
+ be odd. The random number generator uses a linear
+ congruential sequence limited to small integers, and so
+ should produce machine independent random numbers. The
+ values of ISEED are changed on exit, and can be used in the
+
+ next call to ZLAROR to continue the same random number
+ sequence.
+ Modified.
+
+ X - COMPLEX*16 array, dimension ( 3*MAX( M, N ) )
+ Workspace. Of length:
+ 2*M + N if SIDE = 'L',
+ 2*N + M if SIDE = 'R',
+ 3*N if SIDE = 'C' or 'T'.
+ Modified.
+
+ INFO - INTEGER
+ An error flag. It is set to:
+ 0 if no error.
+ 1 if ZLARND returned a bad random number (installation
+ problem)
+ -1 if SIDE is not L, R, C, or T.
+ -3 if M is negative.
+ -4 if N is negative or if SIDE is C or T and N is not equal
+
+ to M.
+ -6 if LDA is less than M.
+
+ =====================================================================
+
+
+
+ Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --iseed;
+ --x;
+
+ /* Function Body */
+ if (*n == 0 || *m == 0) {
+ return 0;
+ }
+
+ itype = 0;
+ if (strncmp(side, "L", 1)==0) {
+ itype = 1;
+ } else if (strncmp(side, "R", 1)==0) {
+ itype = 2;
+ } else if (strncmp(side, "C", 1)==0) {
+ itype = 3;
+ } else if (strncmp(side, "T", 1)==0) {
+ itype = 4;
+ }
+
+/* Check for argument errors. */
+
+ *info = 0;
+ if (itype == 0) {
+ *info = -1;
+ } else if (*m < 0) {
+ *info = -3;
+ } else if (*n < 0 || itype == 3 && *n != *m) {
+ *info = -4;
+ } else if (*lda < *m) {
+ *info = -6;
+ }
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("ZLAROR", &i__1);
+ return 0;
+ }
+
+ if (itype == 1) {
+ nxfrm = *m;
+ } else {
+ nxfrm = *n;
+ }
+
+/* Initialize A to the identity matrix if desired */
+
+ if (strncmp(init, "I", 1)==0) {
+ zlaset_slu("Full", m, n, &c_b1, &c_b2, &a[a_offset], lda);
+ }
+
+/* If no rotation possible, still multiply by
+ a random complex number from the circle |x| = 1
+
+ 2) Compute Rotation by computing Householder
+ Transformations H(2), H(3), ..., H(n). Note that the
+ order in which they are computed is irrelevant. */
+
+ i__1 = nxfrm;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = j;
+ x[i__2].r = 0., x[i__2].i = 0.;
+/* L10: */
+ }
+
+ i__1 = nxfrm;
+ for (ixfrm = 2; ixfrm <= i__1; ++ixfrm) {
+ kbeg = nxfrm - ixfrm + 1;
+
+/* Generate independent normal( 0, 1 ) random numbers */
+
+ i__2 = nxfrm;
+ for (j = kbeg; j <= i__2; ++j) {
+ i__3 = j;
+ zlarnd_slu(&z__1, &c__3, &iseed[1]);
+ x[i__3].r = z__1.r, x[i__3].i = z__1.i;
+/* L20: */
+ }
+
+/* Generate a Householder transformation from the random vector
+ X */
+
+ xnorm = dznrm2_(&ixfrm, &x[kbeg], &c__1);
+ xabs = z_abs(&x[kbeg]);
+ if (xabs != 0.) {
+ i__2 = kbeg;
+ z__1.r = x[i__2].r / xabs, z__1.i = x[i__2].i / xabs;
+ csign.r = z__1.r, csign.i = z__1.i;
+ } else {
+ csign.r = 1., csign.i = 0.;
+ }
+ z__1.r = xnorm * csign.r, z__1.i = xnorm * csign.i;
+ xnorms.r = z__1.r, xnorms.i = z__1.i;
+ i__2 = nxfrm + kbeg;
+ z__1.r = -csign.r, z__1.i = -csign.i;
+ x[i__2].r = z__1.r, x[i__2].i = z__1.i;
+ factor = xnorm * (xnorm + xabs);
+ if (abs(factor) < 1e-20) {
+ *info = 1;
+ i__2 = -(*info);
+ input_error("ZLAROR", &i__2);
+ return 0;
+ } else {
+ factor = 1. / factor;
+ }
+ i__2 = kbeg;
+ i__3 = kbeg;
+ z__1.r = x[i__3].r + xnorms.r, z__1.i = x[i__3].i + xnorms.i;
+ x[i__2].r = z__1.r, x[i__2].i = z__1.i;
+
+/* Apply Householder transformation to A */
+
+ if (itype == 1 || itype == 3 || itype == 4) {
+
+/* Apply H(k) on the left of A */
+
+ zgemv_("C", &ixfrm, n, &c_b2, &a[kbeg + a_dim1], lda, &x[kbeg], &
+ c__1, &c_b1, &x[(nxfrm << 1) + 1], &c__1);
+ z__2.r = factor, z__2.i = 0.;
+ z__1.r = -z__2.r, z__1.i = -z__2.i;
+ zgerc_(&ixfrm, n, &z__1, &x[kbeg], &c__1, &x[(nxfrm << 1) + 1], &
+ c__1, &a[kbeg + a_dim1], lda);
+
+ }
+
+ if (itype >= 2 && itype <= 4) {
+
+/* Apply H(k)* (or H(k)') on the right of A */
+
+ if (itype == 4) {
+ zlacgv_slu(&ixfrm, &x[kbeg], &c__1);
+ }
+
+ zgemv_("N", m, &ixfrm, &c_b2, &a[kbeg * a_dim1 + 1], lda, &x[kbeg]
+ , &c__1, &c_b1, &x[(nxfrm << 1) + 1], &c__1);
+ z__2.r = factor, z__2.i = 0.;
+ z__1.r = -z__2.r, z__1.i = -z__2.i;
+ zgerc_(m, &ixfrm, &z__1, &x[(nxfrm << 1) + 1], &c__1, &x[kbeg], &
+ c__1, &a[kbeg * a_dim1 + 1], lda);
+
+ }
+/* L30: */
+ }
+
+ zlarnd_slu(&z__1, &c__3, &iseed[1]);
+ x[1].r = z__1.r, x[1].i = z__1.i;
+ xabs = z_abs(&x[1]);
+ if (xabs != 0.) {
+ z__1.r = x[1].r / xabs, z__1.i = x[1].i / xabs;
+ csign.r = z__1.r, csign.i = z__1.i;
+ } else {
+ csign.r = 1., csign.i = 0.;
+ }
+ i__1 = nxfrm << 1;
+ x[i__1].r = csign.r, x[i__1].i = csign.i;
+
+/* Scale the matrix A by D. */
+
+ if (itype == 1 || itype == 3 || itype == 4) {
+ i__1 = *m;
+ for (irow = 1; irow <= i__1; ++irow) {
+ d_cnjg(&z__1, &x[nxfrm + irow]);
+ zscal_(n, &z__1, &a[irow + a_dim1], lda);
+/* L40: */
+ }
+ }
+
+ if (itype == 2 || itype == 3) {
+ i__1 = *n;
+ for (jcol = 1; jcol <= i__1; ++jcol) {
+ zscal_(m, &x[nxfrm + jcol], &a[jcol * a_dim1 + 1], &c__1);
+/* L50: */
+ }
+ }
+
+ if (itype == 4) {
+ i__1 = *n;
+ for (jcol = 1; jcol <= i__1; ++jcol) {
+ d_cnjg(&z__1, &x[nxfrm + jcol]);
+ zscal_(m, &z__1, &a[jcol * a_dim1 + 1], &c__1);
+/* L60: */
+ }
+ }
+ return 0;
+
+/* End of ZLAROR */
+
+} /* zlaror_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlarot.c b/SuperLU_5.2.0/TESTING/MATGEN/zlarot.c
new file mode 100644
index 0000000..803785c
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlarot.c
@@ -0,0 +1,365 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__4 = 4;
+static integer c__8 = 8;
+
+/* Subroutine */ int zlarot_slu(logical *lrows, logical *lleft, logical *lright,
+ integer *nl, doublecomplex *c, doublecomplex *s, doublecomplex *a,
+ integer *lda, doublecomplex *xleft, doublecomplex *xright)
+{
+ /* System generated locals */
+ integer i__1, i__2, i__3, i__4;
+ doublecomplex z__1, z__2, z__3, z__4, z__5, z__6;
+
+ /* Builtin functions */
+ void d_cnjg(doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer iinc, j, inext;
+ static doublecomplex tempx;
+ static integer ix, iy, nt;
+ static doublecomplex xt[2], yt[2];
+ extern int input_error(char *, int *);
+ static integer iyt;
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ ZLAROT applies a (Givens) rotation to two adjacent rows or
+ columns, where one element of the first and/or last column/row
+ may be a separate variable. This is specifically indended
+ for use on matrices stored in some format other than GE, so
+ that elements of the matrix may be used or modified for which
+ no array element is provided.
+
+ One example is a symmetric matrix in SB format (bandwidth=4), for
+
+ which UPLO='L': Two adjacent rows will have the format:
+
+ row j: * * * * * . . . .
+ row j+1: * * * * * . . . .
+
+ '*' indicates elements for which storage is provided,
+ '.' indicates elements for which no storage is provided, but
+ are not necessarily zero; their values are determined by
+ symmetry. ' ' indicates elements which are necessarily zero,
+ and have no storage provided.
+
+ Those columns which have two '*'s can be handled by DROT.
+ Those columns which have no '*'s can be ignored, since as long
+ as the Givens rotations are carefully applied to preserve
+ symmetry, their values are determined.
+ Those columns which have one '*' have to be handled separately,
+ by using separate variables "p" and "q":
+
+ row j: * * * * * p . . .
+ row j+1: q * * * * * . . . .
+
+ The element p would have to be set correctly, then that column
+ is rotated, setting p to its new value. The next call to
+ ZLAROT would rotate columns j and j+1, using p, and restore
+ symmetry. The element q would start out being zero, and be
+ made non-zero by the rotation. Later, rotations would presumably
+
+ be chosen to zero q out.
+
+ Typical Calling Sequences: rotating the i-th and (i+1)-st rows.
+ ------- ------- ---------
+
+ General dense matrix:
+
+ CALL ZLAROT(.TRUE.,.FALSE.,.FALSE., N, C,S,
+ A(i,1),LDA, DUMMY, DUMMY)
+
+ General banded matrix in GB format:
+
+ j = MAX(1, i-KL )
+ NL = MIN( N, i+KU+1 ) + 1-j
+ CALL ZLAROT( .TRUE., i-KL.GE.1, i+KU.LT.N, NL, C,S,
+ A(KU+i+1-j,j),LDA-1, XLEFT, XRIGHT )
+
+ [ note that i+1-j is just MIN(i,KL+1) ]
+
+ Symmetric banded matrix in SY format, bandwidth K,
+ lower triangle only:
+
+ j = MAX(1, i-K )
+ NL = MIN( K+1, i ) + 1
+ CALL ZLAROT( .TRUE., i-K.GE.1, .TRUE., NL, C,S,
+ A(i,j), LDA, XLEFT, XRIGHT )
+
+ Same, but upper triangle only:
+
+ NL = MIN( K+1, N-i ) + 1
+ CALL ZLAROT( .TRUE., .TRUE., i+K.LT.N, NL, C,S,
+ A(i,i), LDA, XLEFT, XRIGHT )
+
+ Symmetric banded matrix in SB format, bandwidth K,
+ lower triangle only:
+
+ [ same as for SY, except:]
+ . . . .
+ A(i+1-j,j), LDA-1, XLEFT, XRIGHT )
+
+ [ note that i+1-j is just MIN(i,K+1) ]
+
+ Same, but upper triangle only:
+ . . .
+ A(K+1,i), LDA-1, XLEFT, XRIGHT )
+
+ Rotating columns is just the transpose of rotating rows, except
+
+ for GB and SB: (rotating columns i and i+1)
+
+ GB:
+ j = MAX(1, i-KU )
+ NL = MIN( N, i+KL+1 ) + 1-j
+ CALL ZLAROT( .TRUE., i-KU.GE.1, i+KL.LT.N, NL, C,S,
+ A(KU+j+1-i,i),LDA-1, XTOP, XBOTTM )
+
+ [note that KU+j+1-i is just MAX(1,KU+2-i)]
+
+ SB: (upper triangle)
+
+ . . . . . .
+ A(K+j+1-i,i),LDA-1, XTOP, XBOTTM )
+
+ SB: (lower triangle)
+
+ . . . . . .
+ A(1,i),LDA-1, XTOP, XBOTTM )
+
+ Arguments
+ =========
+
+ LROWS - LOGICAL
+ If .TRUE., then ZLAROT will rotate two rows. If .FALSE.,
+ then it will rotate two columns.
+ Not modified.
+
+ LLEFT - LOGICAL
+ If .TRUE., then XLEFT will be used instead of the
+ corresponding element of A for the first element in the
+ second row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.)
+ If .FALSE., then the corresponding element of A will be
+ used.
+ Not modified.
+
+ LRIGHT - LOGICAL
+ If .TRUE., then XRIGHT will be used instead of the
+ corresponding element of A for the last element in the
+ first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
+
+ .FALSE., then the corresponding element of A will be used.
+ Not modified.
+
+ NL - INTEGER
+ The length of the rows (if LROWS=.TRUE.) or columns (if
+ LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
+ used, the columns/rows they are in should be included in
+ NL, e.g., if LLEFT = LRIGHT = .TRUE., then NL must be at
+ least 2. The number of rows/columns to be rotated
+ exclusive of those involving XLEFT and/or XRIGHT may
+ not be negative, i.e., NL minus how many of LLEFT and
+ LRIGHT are .TRUE. must be at least zero; if not, INPUT_ERROR
+ will be called.
+ Not modified.
+
+ C, S - COMPLEX*16
+ Specify the Givens rotation to be applied. If LROWS is
+ true, then the matrix ( c s )
+ ( _ _ )
+ (-s c ) is applied from the left;
+ if false, then the transpose (not conjugated) thereof is
+ applied from the right. Note that in contrast to the
+ output of ZROTG or to most versions of ZROT, both C and S
+ are complex. For a Givens rotation, |C|**2 + |S|**2 should
+
+ be 1, but this is not checked.
+ Not modified.
+
+ A - COMPLEX*16 array.
+ The array containing the rows/columns to be rotated. The
+ first element of A should be the upper left element to
+ be rotated.
+ Read and modified.
+
+ LDA - INTEGER
+ The "effective" leading dimension of A. If A contains
+ a matrix stored in GE, HE, or SY format, then this is just
+ the leading dimension of A as dimensioned in the calling
+ routine. If A contains a matrix stored in band (GB, HB, or
+
+ SB) format, then this should be *one less* than the leading
+
+ dimension used in the calling routine. Thus, if A were
+ dimensioned A(LDA,*) in ZLAROT, then A(1,j) would be the
+ j-th element in the first of the two rows to be rotated,
+ and A(2,j) would be the j-th in the second, regardless of
+ how the array may be stored in the calling routine. [A
+ cannot, however, actually be dimensioned thus, since for
+ band format, the row number may exceed LDA, which is not
+ legal FORTRAN.]
+ If LROWS=.TRUE., then LDA must be at least 1, otherwise
+ it must be at least NL minus the number of .TRUE. values
+ in XLEFT and XRIGHT.
+ Not modified.
+
+ XLEFT - COMPLEX*16
+ If LLEFT is .TRUE., then XLEFT will be used and modified
+ instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
+ (if LROWS=.FALSE.).
+ Read and modified.
+
+ XRIGHT - COMPLEX*16
+ If LRIGHT is .TRUE., then XRIGHT will be used and modified
+ instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
+ (if LROWS=.FALSE.).
+ Read and modified.
+
+ =====================================================================
+
+
+
+ Set up indices, arrays for ends
+
+ Parameter adjustments */
+ --a;
+
+ /* Function Body */
+ if (*lrows) {
+ iinc = *lda;
+ inext = 1;
+ } else {
+ iinc = 1;
+ inext = *lda;
+ }
+
+ if (*lleft) {
+ nt = 1;
+ ix = iinc + 1;
+ iy = *lda + 2;
+ xt[0].r = a[1].r, xt[0].i = a[1].i;
+ yt[0].r = xleft->r, yt[0].i = xleft->i;
+ } else {
+ nt = 0;
+ ix = 1;
+ iy = inext + 1;
+ }
+
+ if (*lright) {
+ iyt = inext + 1 + (*nl - 1) * iinc;
+ ++nt;
+ i__1 = nt - 1;
+ xt[i__1].r = xright->r, xt[i__1].i = xright->i;
+ i__1 = nt - 1;
+ i__2 = iyt;
+ yt[i__1].r = a[i__2].r, yt[i__1].i = a[i__2].i;
+ }
+
+/* Check for errors */
+
+ if (*nl < nt) {
+ input_error("ZLAROT", &c__4);
+ return 0;
+ }
+ if (*lda <= 0 || ! (*lrows) && *lda < *nl - nt) {
+ input_error("ZLAROT", &c__8);
+ return 0;
+ }
+
+/* Rotate
+
+ ZROT( NL-NT, A(IX),IINC, A(IY),IINC, C, S ) with complex C, S */
+
+ i__1 = *nl - nt - 1;
+ for (j = 0; j <= i__1; ++j) {
+ i__2 = ix + j * iinc;
+ z__2.r = c->r * a[i__2].r - c->i * a[i__2].i, z__2.i = c->r * a[i__2]
+ .i + c->i * a[i__2].r;
+ i__3 = iy + j * iinc;
+ z__3.r = s->r * a[i__3].r - s->i * a[i__3].i, z__3.i = s->r * a[i__3]
+ .i + s->i * a[i__3].r;
+ z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
+ tempx.r = z__1.r, tempx.i = z__1.i;
+ i__2 = iy + j * iinc;
+ d_cnjg(&z__4, s);
+ z__3.r = -z__4.r, z__3.i = -z__4.i;
+ i__3 = ix + j * iinc;
+ z__2.r = z__3.r * a[i__3].r - z__3.i * a[i__3].i, z__2.i = z__3.r * a[
+ i__3].i + z__3.i * a[i__3].r;
+ d_cnjg(&z__6, c);
+ i__4 = iy + j * iinc;
+ z__5.r = z__6.r * a[i__4].r - z__6.i * a[i__4].i, z__5.i = z__6.r * a[
+ i__4].i + z__6.i * a[i__4].r;
+ z__1.r = z__2.r + z__5.r, z__1.i = z__2.i + z__5.i;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+ i__2 = ix + j * iinc;
+ a[i__2].r = tempx.r, a[i__2].i = tempx.i;
+/* L10: */
+ }
+
+/* ZROT( NT, XT,1, YT,1, C, S ) with complex C, S */
+
+ i__1 = nt;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = j - 1;
+ z__2.r = c->r * xt[i__2].r - c->i * xt[i__2].i, z__2.i = c->r * xt[
+ i__2].i + c->i * xt[i__2].r;
+ i__3 = j - 1;
+ z__3.r = s->r * yt[i__3].r - s->i * yt[i__3].i, z__3.i = s->r * yt[
+ i__3].i + s->i * yt[i__3].r;
+ z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
+ tempx.r = z__1.r, tempx.i = z__1.i;
+ i__2 = j - 1;
+ d_cnjg(&z__4, s);
+ z__3.r = -z__4.r, z__3.i = -z__4.i;
+ i__3 = j - 1;
+ z__2.r = z__3.r * xt[i__3].r - z__3.i * xt[i__3].i, z__2.i = z__3.r *
+ xt[i__3].i + z__3.i * xt[i__3].r;
+ d_cnjg(&z__6, c);
+ i__4 = j - 1;
+ z__5.r = z__6.r * yt[i__4].r - z__6.i * yt[i__4].i, z__5.i = z__6.r *
+ yt[i__4].i + z__6.i * yt[i__4].r;
+ z__1.r = z__2.r + z__5.r, z__1.i = z__2.i + z__5.i;
+ yt[i__2].r = z__1.r, yt[i__2].i = z__1.i;
+ i__2 = j - 1;
+ xt[i__2].r = tempx.r, xt[i__2].i = tempx.i;
+/* L20: */
+ }
+
+/* Stuff values back into XLEFT, XRIGHT, etc. */
+
+ if (*lleft) {
+ a[1].r = xt[0].r, a[1].i = xt[0].i;
+ xleft->r = yt[0].r, xleft->i = yt[0].i;
+ }
+
+ if (*lright) {
+ i__1 = nt - 1;
+ xright->r = xt[i__1].r, xright->i = xt[i__1].i;
+ i__1 = iyt;
+ i__2 = nt - 1;
+ a[i__1].r = yt[i__2].r, a[i__1].i = yt[i__2].i;
+ }
+
+ return 0;
+
+/* End of ZLAROT */
+
+} /* zlarot_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlartg.c b/SuperLU_5.2.0/TESTING/MATGEN/zlartg.c
new file mode 100644
index 0000000..f790a6f
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlartg.c
@@ -0,0 +1,146 @@
+#include "f2c.h"
+
+/* Subroutine */ int zlartg_slu(doublecomplex *f, doublecomplex *g, doublereal *
+ cs, doublecomplex *sn, doublecomplex *r)
+{
+/* -- 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
+
+
+ Purpose
+ =======
+
+ ZLARTG generates a plane rotation so that
+
+ [ CS SN ] [ F ] [ R ]
+ [ __ ] . [ ] = [ ] where CS**2 + |SN|**2 = 1.
+ [ -SN CS ] [ G ] [ 0 ]
+
+ This is a faster version of the BLAS1 routine ZROTG, except for
+ the following differences:
+ F and G are unchanged on return.
+ If G=0, then CS=1 and SN=0.
+ If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any
+ floating point operations.
+
+ Arguments
+ =========
+
+ F (input) COMPLEX*16
+ The first component of vector to be rotated.
+
+ G (input) COMPLEX*16
+ The second component of vector to be rotated.
+
+ CS (output) DOUBLE PRECISION
+ The cosine of the rotation.
+
+ SN (output) COMPLEX*16
+ The sine of the rotation.
+
+ R (output) COMPLEX*16
+ The nonzero component of the rotated vector.
+
+ =====================================================================
+
+
+
+ [ 25 or 38 ops for main paths ] */
+ /* System generated locals */
+ doublereal d__1, d__2;
+ doublecomplex z__1, z__2, z__3;
+ /* Builtin functions */
+ void d_cnjg(doublecomplex *, doublecomplex *);
+ double z_abs(doublecomplex *), d_imag(doublecomplex *), sqrt(doublereal);
+ /* Local variables */
+ static doublereal d, f1, f2, g1, g2, fa, ga, di;
+ static doublecomplex fs, gs, ss;
+
+
+ if (g->r == 0. && g->i == 0.) {
+ *cs = 1.;
+ sn->r = 0., sn->i = 0.;
+ r->r = f->r, r->i = f->i;
+ } else if (f->r == 0. && f->i == 0.) {
+ *cs = 0.;
+
+ d_cnjg(&z__2, g);
+ d__1 = z_abs(g);
+ z__1.r = z__2.r / d__1, z__1.i = z__2.i / d__1;
+ sn->r = z__1.r, sn->i = z__1.i;
+ d__1 = z_abs(g);
+ r->r = d__1, r->i = 0.;
+
+/* SN = ONE
+ R = G */
+
+ } else {
+ f1 = (d__1 = f->r, abs(d__1)) + (d__2 = d_imag(f), abs(d__2));
+ g1 = (d__1 = g->r, abs(d__1)) + (d__2 = d_imag(g), abs(d__2));
+ if (f1 >= g1) {
+ z__1.r = g->r / f1, z__1.i = g->i / f1;
+ gs.r = z__1.r, gs.i = z__1.i;
+/* Computing 2nd power */
+ d__1 = gs.r;
+/* Computing 2nd power */
+ d__2 = d_imag(&gs);
+ g2 = d__1 * d__1 + d__2 * d__2;
+ z__1.r = f->r / f1, z__1.i = f->i / f1;
+ fs.r = z__1.r, fs.i = z__1.i;
+/* Computing 2nd power */
+ d__1 = fs.r;
+/* Computing 2nd power */
+ d__2 = d_imag(&fs);
+ f2 = d__1 * d__1 + d__2 * d__2;
+ d = sqrt(g2 / f2 + 1.);
+ *cs = 1. / d;
+ d_cnjg(&z__3, &gs);
+ z__2.r = z__3.r * fs.r - z__3.i * fs.i, z__2.i = z__3.r * fs.i +
+ z__3.i * fs.r;
+ d__1 = *cs / f2;
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ sn->r = z__1.r, sn->i = z__1.i;
+ z__1.r = d * f->r, z__1.i = d * f->i;
+ r->r = z__1.r, r->i = z__1.i;
+ } else {
+ z__1.r = f->r / g1, z__1.i = f->i / g1;
+ fs.r = z__1.r, fs.i = z__1.i;
+/* Computing 2nd power */
+ d__1 = fs.r;
+/* Computing 2nd power */
+ d__2 = d_imag(&fs);
+ f2 = d__1 * d__1 + d__2 * d__2;
+ fa = sqrt(f2);
+ z__1.r = g->r / g1, z__1.i = g->i / g1;
+ gs.r = z__1.r, gs.i = z__1.i;
+/* Computing 2nd power */
+ d__1 = gs.r;
+/* Computing 2nd power */
+ d__2 = d_imag(&gs);
+ g2 = d__1 * d__1 + d__2 * d__2;
+ ga = sqrt(g2);
+ d = sqrt(f2 / g2 + 1.);
+ di = 1. / d;
+ *cs = fa / ga * di;
+ d_cnjg(&z__3, &gs);
+ z__2.r = z__3.r * fs.r - z__3.i * fs.i, z__2.i = z__3.r * fs.i +
+ z__3.i * fs.r;
+ d__1 = fa * ga;
+ z__1.r = z__2.r / d__1, z__1.i = z__2.i / d__1;
+ ss.r = z__1.r, ss.i = z__1.i;
+ z__1.r = di * ss.r, z__1.i = di * ss.i;
+ sn->r = z__1.r, sn->i = z__1.i;
+ z__2.r = g->r * ss.r - g->i * ss.i, z__2.i = g->r * ss.i + g->i *
+ ss.r;
+ z__1.r = d * z__2.r, z__1.i = d * z__2.i;
+ r->r = z__1.r, r->i = z__1.i;
+ }
+ }
+ return 0;
+
+/* End of ZLARTG */
+
+} /* zlartg_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlaset.c b/SuperLU_5.2.0/TESTING/MATGEN/zlaset.c
new file mode 100644
index 0000000..d6f3cfc
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlaset.c
@@ -0,0 +1,144 @@
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int zlaset_slu(char *uplo, integer *m, integer *n,
+ doublecomplex *alpha, doublecomplex *beta, doublecomplex *a, integer *
+ lda)
+{
+/* -- 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
+ =======
+
+ ZLASET initializes a 2-D array A to BETA on the diagonal and
+ ALPHA on the offdiagonals.
+
+ Arguments
+ =========
+
+ UPLO (input) CHARACTER*1
+ Specifies the part of the matrix A to be set.
+ = 'U': Upper triangular part is set. The lower triangle
+
+ is unchanged.
+ = 'L': Lower triangular part is set. The upper triangle
+
+ is unchanged.
+ Otherwise: All of the matrix A is set.
+
+ M (input) INTEGER
+ On entry, M specifies the number of rows of A.
+
+ N (input) INTEGER
+ On entry, N specifies the number of columns of A.
+
+ ALPHA (input) COMPLEX*16
+ All the offdiagonal array elements are set to ALPHA.
+
+ BETA (input) COMPLEX*16
+ All the diagonal array elements are set to BETA.
+
+ A (input/output) COMPLEX*16 array, dimension (LDA,N)
+ On entry, the m by n matrix A.
+ On exit, A(i,j) = ALPHA, 1 <= i <= m, 1 <= j <= n, i.ne.j;
+ A(i,i) = BETA , 1 <= i <= min(m,n)
+
+ LDA (input) INTEGER
+ The leading dimension of the array A. LDA >= max(1,M).
+
+ =====================================================================
+
+
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+ /* Local variables */
+ static integer i, j;
+
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Set the diagonal to BETA and the strictly upper triangular
+
+ part of the array to ALPHA. */
+
+ i__1 = *n;
+ for (j = 2; j <= *n; ++j) {
+/* Computing MIN */
+ i__3 = j - 1;
+ i__2 = min(i__3,*m);
+ for (i = 1; i <= min(j-1,*m); ++i) {
+ i__3 = i + j * a_dim1;
+ A(i,j).r = alpha->r, A(i,j).i = alpha->i;
+/* L10: */
+ }
+/* L20: */
+ }
+ i__1 = min(*n,*m);
+ for (i = 1; i <= min(*n,*m); ++i) {
+ i__2 = i + i * a_dim1;
+ A(i,i).r = beta->r, A(i,i).i = beta->i;
+/* L30: */
+ }
+
+ } else if (strncmp(uplo, "L", 1)==0) {
+
+/* Set the diagonal to BETA and the strictly lower triangular
+
+ part of the array to ALPHA. */
+
+ i__1 = min(*m,*n);
+ for (j = 1; j <= min(*m,*n); ++j) {
+ i__2 = *m;
+ for (i = j + 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ A(i,j).r = alpha->r, A(i,j).i = alpha->i;
+/* L40: */
+ }
+/* L50: */
+ }
+ i__1 = min(*n,*m);
+ for (i = 1; i <= min(*n,*m); ++i) {
+ i__2 = i + i * a_dim1;
+ A(i,i).r = beta->r, A(i,i).i = beta->i;
+/* L60: */
+ }
+
+ } else {
+
+/* Set the array to BETA on the diagonal and ALPHA on the
+ offdiagonal. */
+
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = *m;
+ for (i = 1; i <= *m; ++i) {
+ i__3 = i + j * a_dim1;
+ A(i,j).r = alpha->r, A(i,j).i = alpha->i;
+/* L70: */
+ }
+/* L80: */
+ }
+ i__1 = min(*m,*n);
+ for (i = 1; i <= min(*m,*n); ++i) {
+ i__2 = i + i * a_dim1;
+ A(i,i).r = beta->r, A(i,i).i = beta->i;
+/* L90: */
+ }
+ }
+
+ return 0;
+
+/* End of ZLASET */
+
+} /* zlaset_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlatb4.c b/SuperLU_5.2.0/TESTING/MATGEN/zlatb4.c
new file mode 100644
index 0000000..93773c0
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlatb4.c
@@ -0,0 +1,460 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static integer c__2 = 2;
+
+/* Subroutine */ int zlatb4_slu(char *path, integer *imat, integer *m, integer *
+ n, char *type, integer *kl, integer *ku, doublereal *anorm, integer *
+ mode, doublereal *cndnum, char *dist)
+{
+ /* Initialized data */
+
+ static logical first = TRUE_;
+
+ /* System generated locals */
+ integer i__1;
+
+ /* Builtin functions */
+ double sqrt(doublereal);
+
+
+ /* Local variables */
+ static doublereal badc1, badc2, large, small;
+ static char c2[2];
+ extern /* Subroutine */ int dlabad_slu(doublereal *, doublereal *);
+ extern doublereal dmach(char *);
+ static integer mat;
+ static doublereal eps;
+
+
+/* -- LAPACK test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+ Purpose
+ =======
+
+ ZLATB4 sets parameters for the matrix generator based on the type of
+
+ matrix to be generated.
+
+ Arguments
+ =========
+
+ PATH (input) CHARACTER*3
+ The LAPACK path name.
+
+ IMAT (input) INTEGER
+ An integer key describing which matrix to generate for this
+ path.
+
+ M (input) INTEGER
+ The number of rows in the matrix to be generated.
+
+ N (input) INTEGER
+ The number of columns in the matrix to be generated.
+
+ TYPE (output) CHARACTER*1
+ The type of the matrix to be generated:
+ = 'S': symmetric matrix
+ = 'P': symmetric positive (semi)definite matrix
+ = 'N': nonsymmetric matrix
+
+ KL (output) INTEGER
+ The lower band width of the matrix to be generated.
+
+ KU (output) INTEGER
+ The upper band width of the matrix to be generated.
+
+ ANORM (output) DOUBLE PRECISION
+ The desired norm of the matrix to be generated. The diagonal
+
+ matrix of singular values or eigenvalues is scaled by this
+ value.
+
+ MODE (output) INTEGER
+ A key indicating how to choose the vector of eigenvalues.
+
+ CNDNUM (output) DOUBLE PRECISION
+ The desired condition number.
+
+ DIST (output) CHARACTER*1
+ The type of distribution to be used by the random number
+ generator.
+
+ =====================================================================
+
+
+
+ Set some constants for use in the subroutine. */
+
+ if (first) {
+ first = FALSE_;
+ eps = dmach("Precision");
+ badc2 = .1 / eps;
+ badc1 = sqrt(badc2);
+ small = dmach("Safe minimum");
+ large = 1. / small;
+
+/* If it looks like we're on a Cray, take the square root of
+ SMALL and LARGE to avoid overflow and underflow problems. */
+
+ dlabad_slu(&small, &large);
+ small = small / eps * .25;
+ large = 1. / small;
+ }
+
+/* s_copy(c2, path + 1, 2L, 2L);*/
+ strncpy(c2, path + 1, 2);
+
+/* Set some parameters we don't plan to change. */
+
+ *(unsigned char *)dist = 'S';
+ *mode = 3;
+
+/* xQR, xLQ, xQL, xRQ: Set parameters to generate a general
+ M x N matrix. */
+
+ if (strncmp(c2, "QR", 2)==0 || strncmp(c2, "LQ", 2)==0 ||
+ strncmp(c2, "QL", 2)==0 || strncmp(c2, "RQ", 2)==0) {
+
+/* Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat == 2) {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ } else if (*imat == 3) {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "GE", 2)==0) {
+
+/* xGE: Set parameters to generate a general M x N matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat == 2) {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ } else if (*imat == 3) {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *m - 1;
+ *kl = max(i__1,0);
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (*imat == 8) {
+ *cndnum = badc1;
+ } else if (*imat == 9) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 10) {
+ *anorm = small;
+ } else if (*imat == 11) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "GB", 2)==0) {
+
+/* xGB: Set parameters to generate a general banded matrix.
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the condition number and norm. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2 * .1;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "GT", 2)==0) {
+
+/* xGT: Set parameters to generate a general tridiagonal matri
+x.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+ *kl = 1;
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 3) {
+ *cndnum = badc1;
+ } else if (*imat == 4) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 5 || *imat == 11) {
+ *anorm = small;
+ } else if (*imat == 6 || *imat == 12) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "PO", 2)==0 || strncmp(c2, "PP", 2)==0 || strncmp(c2, "HE",2)==0 ||
+ strncmp(c2, "HP", 2)==0 || strncmp(c2, "SY", 2)==0 || strncmp(c2, "SP", 2)==0) {
+
+/* xPO, xPP, xHE, xHP, xSY, xSP: Set parameters to generate a
+
+ symmetric or Hermitian matrix.
+
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = *(unsigned char *)c2;
+
+/* Set the lower and upper bandwidths. */
+
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+/* Computing MAX */
+ i__1 = *n - 1;
+ *kl = max(i__1,0);
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 6) {
+ *cndnum = badc1;
+ } else if (*imat == 7) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 8) {
+ *anorm = small;
+ } else if (*imat == 9) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "PB", 2)==0) {
+
+/* xPB: Set parameters to generate a symmetric band matrix.
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'P';
+
+/* Set the norm and condition number. */
+
+ if (*imat == 5) {
+ *cndnum = badc1;
+ } else if (*imat == 6) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 7) {
+ *anorm = small;
+ } else if (*imat == 8) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "PT", 2)==0) {
+
+/* xPT: Set parameters to generate a symmetric positive definite
+ tridiagonal matrix. */
+
+ *(unsigned char *)type = 'P';
+ if (*imat == 1) {
+ *kl = 0;
+ } else {
+ *kl = 1;
+ }
+ *ku = *kl;
+
+/* Set the condition number and norm. */
+
+ if (*imat == 3) {
+ *cndnum = badc1;
+ } else if (*imat == 4) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 5 || *imat == 11) {
+ *anorm = small;
+ } else if (*imat == 6 || *imat == 12) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "TR", 2)==0 || strncmp(c2, "TP", 2)==0) {
+
+/* xTR, xTP: Set parameters to generate a triangular matrix
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the lower and upper bandwidths. */
+
+ mat = abs(*imat);
+ if (mat == 1 || mat == 7) {
+ *kl = 0;
+ *ku = 0;
+ } else if (*imat < 0) {
+/* Computing MAX */
+ i__1 = *n - 1;
+ *kl = max(i__1,0);
+ *ku = 0;
+ } else {
+ *kl = 0;
+/* Computing MAX */
+ i__1 = *n - 1;
+ *ku = max(i__1,0);
+ }
+
+/* Set the condition number and norm. */
+
+ if (mat == 3 || mat == 9) {
+ *cndnum = badc1;
+ } else if (mat == 4 || mat == 10) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (mat == 5) {
+ *anorm = small;
+ } else if (mat == 6) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+
+ } else if (strncmp(c2, "TB", 2)==0) {
+
+/* xTB: Set parameters to generate a triangular band matrix.
+ Set TYPE, the type of matrix to be generated. */
+
+ *(unsigned char *)type = 'N';
+
+/* Set the norm and condition number. */
+
+ if (*imat == 2 || *imat == 8) {
+ *cndnum = badc1;
+ } else if (*imat == 3 || *imat == 9) {
+ *cndnum = badc2;
+ } else {
+ *cndnum = 2.;
+ }
+
+ if (*imat == 4) {
+ *anorm = small;
+ } else if (*imat == 5) {
+ *anorm = large;
+ } else {
+ *anorm = 1.;
+ }
+ }
+ if (*n <= 1) {
+ *cndnum = 1.;
+ }
+
+ return 0;
+
+/* End of ZLATB4 */
+
+} /* zlatb4_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlatm2.c b/SuperLU_5.2.0/TESTING/MATGEN/zlatm2.c
new file mode 100644
index 0000000..3bb886e
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlatm2.c
@@ -0,0 +1,286 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Double Complex */ VOID zlatm2_slu(doublecomplex * ret_val, integer *m,
+ integer *n, integer *i, integer *j, integer *kl, integer *ku, integer
+ *idist, integer *iseed, doublecomplex *d, integer *igrade,
+ doublecomplex *dl, doublecomplex *dr, integer *ipvtng, integer *iwork,
+ doublereal *sparse)
+{
+ /* System generated locals */
+ integer i__1, i__2;
+ doublecomplex z__1, z__2, z__3;
+
+ /* Builtin functions */
+ void z_div(doublecomplex *, doublecomplex *, doublecomplex *), d_cnjg(
+ doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer isub, jsub;
+ static doublecomplex ctemp;
+ extern doublereal dlaran_slu(integer *);
+ extern /* Double Complex */ VOID zlarnd_slu(doublecomplex *, integer *,
+ integer *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+
+
+
+ Purpose
+ =======
+
+ ZLATM2 returns the (I,J) entry of a random matrix of dimension
+ (M, N) described by the other paramters. It is called by the
+ ZLATMR routine in order to build random test matrices. No error
+ checking on parameters is done, because this routine is called in
+
+ a tight loop by ZLATMR which has already checked the parameters.
+
+ Use of ZLATM2 differs from CLATM3 in the order in which the random
+
+ number generator is called to fill in random matrix entries.
+ With ZLATM2, the generator is called to fill in the pivoted matrix
+
+ columnwise. With ZLATM3, the generator is called to fill in the
+ matrix columnwise, after which it is pivoted. Thus, ZLATM3 can
+ be used to construct random matrices which differ only in their
+ order of rows and/or columns. ZLATM2 is used to construct band
+ matrices while avoiding calling the random number generator for
+ entries outside the band (and therefore generating random numbers
+
+
+ The matrix whose (I,J) entry is returned is constructed as
+ follows (this routine only computes one entry):
+
+ If I is outside (1..M) or J is outside (1..N), return zero
+ (this is convenient for generating matrices in band format).
+
+
+ Generate a matrix A with random entries of distribution IDIST.
+
+ Set the diagonal to D.
+
+ Grade the matrix, if desired, from the left (by DL) and/or
+ from the right (by DR or DL) as specified by IGRADE.
+
+ Permute, if desired, the rows and/or columns as specified by
+ IPVTNG and IWORK.
+
+ Band the matrix to have lower bandwidth KL and upper
+ bandwidth KU.
+
+ Set random entries to zero as specified by SPARSE.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ Number of rows of matrix. Not modified.
+
+ N - INTEGER
+ Number of columns of matrix. Not modified.
+
+ I - INTEGER
+ Row of entry to be returned. Not modified.
+
+ J - INTEGER
+ Column of entry to be returned. Not modified.
+
+ KL - INTEGER
+ Lower bandwidth. Not modified.
+
+ KU - INTEGER
+ Upper bandwidth. Not modified.
+
+ IDIST - INTEGER
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => real and imaginary parts each UNIFORM( 0, 1 )
+ 2 => real and imaginary parts each UNIFORM( -1, 1 )
+ 3 => real and imaginary parts each NORMAL( 0, 1 )
+ 4 => complex number uniform in DISK( 0 , 1 )
+ Not modified.
+
+ ISEED - INTEGER array of dimension ( 4 )
+ Seed for random number generator.
+ Changed on exit.
+
+ D - COMPLEX*16 array of dimension ( MIN( I , J ) )
+ Diagonal entries of matrix. Not modified.
+
+ IGRADE - INTEGER
+ Specifies grading of matrix as follows:
+ 0 => no grading
+ 1 => matrix premultiplied by diag( DL )
+ 2 => matrix postmultiplied by diag( DR )
+ 3 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DR )
+ 4 => matrix premultiplied by diag( DL ) and
+ postmultiplied by inv( diag( DL ) )
+ 5 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( CONJG(DL) )
+ 6 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DL )
+ Not modified.
+
+ DL - COMPLEX*16 array ( I or J, as appropriate )
+ Left scale factors for grading matrix. Not modified.
+
+ DR - COMPLEX*16 array ( I or J, as appropriate )
+ Right scale factors for grading matrix. Not modified.
+
+ IPVTNG - INTEGER
+ On entry specifies pivoting permutations as follows:
+ 0 => none.
+ 1 => row pivoting.
+ 2 => column pivoting.
+ 3 => full pivoting, i.e., on both sides.
+ Not modified.
+
+ IWORK - INTEGER array ( I or J, as appropriate )
+ This array specifies the permutation used. The
+ row (or column) in position K was originally in
+ position IWORK( K ).
+ This differs from IWORK for ZLATM3. Not modified.
+
+ SPARSE - DOUBLE PRECISION between 0. and 1.
+ On entry specifies the sparsity of the matrix
+ if sparse matix is to be generated.
+ SPARSE should lie between 0 and 1.
+ A uniform ( 0, 1 ) random number x is generated and
+ compared to SPARSE; if x is larger the matrix entry
+ is unchanged and if x is smaller the entry is set
+ to zero. Thus on the average a fraction SPARSE of the
+ entries will be set to zero.
+ Not modified.
+
+ =====================================================================
+
+
+
+
+
+
+
+
+
+
+ -----------------------------------------------------------------------
+
+
+
+
+ Check for I and J in range
+
+ Parameter adjustments */
+ --iwork;
+ --dr;
+ --dl;
+ --d;
+ --iseed;
+
+ /* Function Body */
+ if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
+ ret_val->r = 0., ret_val->i = 0.;
+ return ;
+ }
+
+/* Check for banding */
+
+ if (*j > *i + *ku || *j < *i - *kl) {
+ ret_val->r = 0., ret_val->i = 0.;
+ return ;
+ }
+
+/* Check for sparsity */
+
+ if (*sparse > 0.) {
+ if (dlaran_slu(&iseed[1]) < *sparse) {
+ ret_val->r = 0., ret_val->i = 0.;
+ return ;
+ }
+ }
+
+/* Compute subscripts depending on IPVTNG */
+
+ if (*ipvtng == 0) {
+ isub = *i;
+ jsub = *j;
+ } else if (*ipvtng == 1) {
+ isub = iwork[*i];
+ jsub = *j;
+ } else if (*ipvtng == 2) {
+ isub = *i;
+ jsub = iwork[*j];
+ } else if (*ipvtng == 3) {
+ isub = iwork[*i];
+ jsub = iwork[*j];
+ }
+
+/* Compute entry and grade it according to IGRADE */
+
+ if (isub == jsub) {
+ i__1 = isub;
+ ctemp.r = d[i__1].r, ctemp.i = d[i__1].i;
+ } else {
+ zlarnd_slu(&z__1, idist, &iseed[1]);
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ }
+ if (*igrade == 1) {
+ i__1 = isub;
+ z__1.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__1.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 2) {
+ i__1 = jsub;
+ z__1.r = ctemp.r * dr[i__1].r - ctemp.i * dr[i__1].i, z__1.i =
+ ctemp.r * dr[i__1].i + ctemp.i * dr[i__1].r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 3) {
+ i__1 = isub;
+ z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ i__2 = jsub;
+ z__1.r = z__2.r * dr[i__2].r - z__2.i * dr[i__2].i, z__1.i = z__2.r *
+ dr[i__2].i + z__2.i * dr[i__2].r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 4 && isub != jsub) {
+ i__1 = isub;
+ z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ z_div(&z__1, &z__2, &dl[jsub]);
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 5) {
+ i__1 = isub;
+ z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ d_cnjg(&z__3, &dl[jsub]);
+ z__1.r = z__2.r * z__3.r - z__2.i * z__3.i, z__1.i = z__2.r * z__3.i
+ + z__2.i * z__3.r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 6) {
+ i__1 = isub;
+ z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ i__2 = jsub;
+ z__1.r = z__2.r * dl[i__2].r - z__2.i * dl[i__2].i, z__1.i = z__2.r *
+ dl[i__2].i + z__2.i * dl[i__2].r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ }
+ ret_val->r = ctemp.r, ret_val->i = ctemp.i;
+ return ;
+
+/* End of ZLATM2 */
+
+} /* zlatm2_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlatm3.c b/SuperLU_5.2.0/TESTING/MATGEN/zlatm3.c
new file mode 100644
index 0000000..c58c134
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlatm3.c
@@ -0,0 +1,297 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+
+#include "f2c.h"
+
+/* Double Complex */ VOID zlatm3_slu(doublecomplex * ret_val, integer *m,
+ integer *n, integer *i, integer *j, integer *isub, integer *jsub,
+ integer *kl, integer *ku, integer *idist, integer *iseed,
+ doublecomplex *d, integer *igrade, doublecomplex *dl, doublecomplex *
+ dr, integer *ipvtng, integer *iwork, doublereal *sparse)
+{
+ /* System generated locals */
+ integer i__1, i__2;
+ doublecomplex z__1, z__2, z__3;
+
+ /* Builtin functions */
+ void z_div(doublecomplex *, doublecomplex *, doublecomplex *), d_cnjg(
+ doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static doublecomplex ctemp;
+ extern doublereal dlaran_slu(integer *);
+ extern /* Double Complex */ VOID zlarnd_slu(doublecomplex *, integer *,
+ integer *);
+
+
+/* -- LAPACK auxiliary test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ February 29, 1992
+
+
+
+
+
+ Purpose
+ =======
+
+ ZLATM3 returns the (ISUB,JSUB) entry of a random matrix of
+ dimension (M, N) described by the other paramters. (ISUB,JSUB)
+ is the final position of the (I,J) entry after pivoting
+ according to IPVTNG and IWORK. ZLATM3 is called by the
+ ZLATMR routine in order to build random test matrices. No error
+ checking on parameters is done, because this routine is called in
+
+ a tight loop by ZLATMR which has already checked the parameters.
+
+ Use of ZLATM3 differs from CLATM2 in the order in which the random
+
+ number generator is called to fill in random matrix entries.
+ With ZLATM2, the generator is called to fill in the pivoted matrix
+
+ columnwise. With ZLATM3, the generator is called to fill in the
+ matrix columnwise, after which it is pivoted. Thus, ZLATM3 can
+ be used to construct random matrices which differ only in their
+ order of rows and/or columns. ZLATM2 is used to construct band
+ matrices while avoiding calling the random number generator for
+ entries outside the band (and therefore generating random numbers
+
+ in different orders for different pivot orders).
+
+ The matrix whose (ISUB,JSUB) entry is returned is constructed as
+ follows (this routine only computes one entry):
+
+ If ISUB is outside (1..M) or JSUB is outside (1..N), return zero
+
+ (this is convenient for generating matrices in band format).
+
+
+ Generate a matrix A with random entries of distribution IDIST.
+
+ Set the diagonal to D.
+
+ Grade the matrix, if desired, from the left (by DL) and/or
+ from the right (by DR or DL) as specified by IGRADE.
+
+ Permute, if desired, the rows and/or columns as specified by
+ IPVTNG and IWORK.
+
+ Band the matrix to have lower bandwidth KL and upper
+ bandwidth KU.
+
+ Set random entries to zero as specified by SPARSE.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ Number of rows of matrix. Not modified.
+
+ N - INTEGER
+ Number of columns of matrix. Not modified.
+
+ I - INTEGER
+ Row of unpivoted entry to be returned. Not modified.
+
+ J - INTEGER
+ Column of unpivoted entry to be returned. Not modified.
+
+ ISUB - INTEGER
+ Row of pivoted entry to be returned. Changed on exit.
+
+ JSUB - INTEGER
+ Column of pivoted entry to be returned. Changed on exit.
+
+ KL - INTEGER
+ Lower bandwidth. Not modified.
+
+ KU - INTEGER
+ Upper bandwidth. Not modified.
+
+ IDIST - INTEGER
+ On entry, IDIST specifies the type of distribution to be
+ used to generate a random matrix .
+ 1 => real and imaginary parts each UNIFORM( 0, 1 )
+ 2 => real and imaginary parts each UNIFORM( -1, 1 )
+ 3 => real and imaginary parts each NORMAL( 0, 1 )
+ 4 => complex number uniform in DISK( 0 , 1 )
+ Not modified.
+
+ ISEED - INTEGER array of dimension ( 4 )
+ Seed for random number generator.
+ Changed on exit.
+
+ D - COMPLEX*16 array of dimension ( MIN( I , J ) )
+ Diagonal entries of matrix. Not modified.
+
+ IGRADE - INTEGER
+ Specifies grading of matrix as follows:
+ 0 => no grading
+ 1 => matrix premultiplied by diag( DL )
+ 2 => matrix postmultiplied by diag( DR )
+ 3 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DR )
+ 4 => matrix premultiplied by diag( DL ) and
+ postmultiplied by inv( diag( DL ) )
+ 5 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( CONJG(DL) )
+ 6 => matrix premultiplied by diag( DL ) and
+ postmultiplied by diag( DL )
+ Not modified.
+
+ DL - COMPLEX*16 array ( I or J, as appropriate )
+ Left scale factors for grading matrix. Not modified.
+
+ DR - COMPLEX*16 array ( I or J, as appropriate )
+ Right scale factors for grading matrix. Not modified.
+
+ IPVTNG - INTEGER
+ On entry specifies pivoting permutations as follows:
+ 0 => none.
+ 1 => row pivoting.
+ 2 => column pivoting.
+ 3 => full pivoting, i.e., on both sides.
+ Not modified.
+
+ IWORK - INTEGER array ( I or J, as appropriate )
+ This array specifies the permutation used. The
+ row (or column) originally in position K is in
+ position IWORK( K ) after pivoting.
+ This differs from IWORK for ZLATM2. Not modified.
+
+ SPARSE - DOUBLE PRECISION between 0. and 1.
+ On entry specifies the sparsity of the matrix
+ if sparse matix is to be generated.
+ SPARSE should lie between 0 and 1.
+ A uniform ( 0, 1 ) random number x is generated and
+ compared to SPARSE; if x is larger the matrix entry
+ is unchanged and if x is smaller the entry is set
+ to zero. Thus on the average a fraction SPARSE of the
+ entries will be set to zero.
+ Not modified.
+
+ =====================================================================
+
+
+
+
+
+
+
+
+
+
+ -----------------------------------------------------------------------
+
+
+
+
+ Check for I and J in range
+
+ Parameter adjustments */
+ --iwork;
+ --dr;
+ --dl;
+ --d;
+ --iseed;
+
+ /* Function Body */
+ if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
+ *isub = *i;
+ *jsub = *j;
+ ret_val->r = 0., ret_val->i = 0.;
+ return ;
+ }
+
+/* Compute subscripts depending on IPVTNG */
+
+ if (*ipvtng == 0) {
+ *isub = *i;
+ *jsub = *j;
+ } else if (*ipvtng == 1) {
+ *isub = iwork[*i];
+ *jsub = *j;
+ } else if (*ipvtng == 2) {
+ *isub = *i;
+ *jsub = iwork[*j];
+ } else if (*ipvtng == 3) {
+ *isub = iwork[*i];
+ *jsub = iwork[*j];
+ }
+
+/* Check for banding */
+
+ if (*jsub > *isub + *ku || *jsub < *isub - *kl) {
+ ret_val->r = 0., ret_val->i = 0.;
+ return ;
+ }
+
+/* Check for sparsity */
+
+ if (*sparse > 0.) {
+ if (dlaran_slu(&iseed[1]) < *sparse) {
+ ret_val->r = 0., ret_val->i = 0.;
+ return ;
+ }
+ }
+
+/* Compute entry and grade it according to IGRADE */
+
+ if (*i == *j) {
+ i__1 = *i;
+ ctemp.r = d[i__1].r, ctemp.i = d[i__1].i;
+ } else {
+ zlarnd_slu(&z__1, idist, &iseed[1]);
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ }
+ if (*igrade == 1) {
+ i__1 = *i;
+ z__1.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__1.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 2) {
+ i__1 = *j;
+ z__1.r = ctemp.r * dr[i__1].r - ctemp.i * dr[i__1].i, z__1.i =
+ ctemp.r * dr[i__1].i + ctemp.i * dr[i__1].r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 3) {
+ i__1 = *i;
+ z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ i__2 = *j;
+ z__1.r = z__2.r * dr[i__2].r - z__2.i * dr[i__2].i, z__1.i = z__2.r *
+ dr[i__2].i + z__2.i * dr[i__2].r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 4 && *i != *j) {
+ i__1 = *i;
+ z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ z_div(&z__1, &z__2, &dl[*j]);
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 5) {
+ i__1 = *i;
+ z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ d_cnjg(&z__3, &dl[*j]);
+ z__1.r = z__2.r * z__3.r - z__2.i * z__3.i, z__1.i = z__2.r * z__3.i
+ + z__2.i * z__3.r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ } else if (*igrade == 6) {
+ i__1 = *i;
+ z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
+ ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
+ i__2 = *j;
+ z__1.r = z__2.r * dl[i__2].r - z__2.i * dl[i__2].i, z__1.i = z__2.r *
+ dl[i__2].i + z__2.i * dl[i__2].r;
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ }
+ ret_val->r = ctemp.r, ret_val->i = ctemp.i;
+ return ;
+
+/* End of ZLATM3 */
+
+} /* zlatm3_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zlatms.c b/SuperLU_5.2.0/TESTING/MATGEN/zlatms.c
new file mode 100644
index 0000000..8c2671d
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zlatms.c
@@ -0,0 +1,1648 @@
+/* -- translated by f2c (version 19940927).
+ You must link the resulting object file with the libraries:
+ -lf2c -lm (in that order)
+*/
+#include <string.h>
+#include "f2c.h"
+
+/* Table of constant values */
+
+static doublecomplex c_b1 = {0.,0.};
+static integer c__1 = 1;
+static integer c__5 = 5;
+static logical c_true = TRUE_;
+static logical c_false = FALSE_;
+
+/* Subroutine */ int zlatms_slu(integer *m, integer *n, char *dist, integer *
+ iseed, char *sym, doublereal *d, integer *mode, doublereal *cond,
+ doublereal *dmax__, integer *kl, integer *ku, char *pack,
+ doublecomplex *a, integer *lda, doublecomplex *work, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
+ doublereal d__1, d__2, d__3;
+ doublecomplex z__1, z__2, z__3;
+ logical L__1;
+
+ /* Builtin functions */
+ double cos(doublereal), sin(doublereal);
+ void d_cnjg(doublecomplex *, doublecomplex *);
+
+ /* Local variables */
+ static integer ilda, icol;
+ static doublereal temp;
+ static integer irow, isym;
+ static logical zsym;
+ static doublecomplex c;
+ static integer i, j, k;
+ static doublecomplex s;
+ static doublereal alpha, angle;
+ static integer ipack;
+ static doublereal realc;
+ static integer ioffg;
+ extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
+ integer *);
+ static integer iinfo;
+ static doublecomplex ctemp;
+ static integer idist, mnmin, iskew;
+ static doublecomplex extra, dummy;
+ extern /* Subroutine */ int dlatm1_slu(integer *, doublereal *, integer *,
+ integer *, integer *, doublereal *, integer *, integer *);
+ static integer ic, jc, nc, il;
+ static doublecomplex ct;
+ static integer iendch, ir, jr, ipackg, mr, minlda;
+ extern doublereal dlarnd_slu(integer *, integer *);
+ static doublecomplex st;
+ extern /* Subroutine */ int zlagge_slu(integer *, integer *, integer *,
+ integer *, doublereal *, doublecomplex *, integer *, integer *,
+ doublecomplex *, integer *), zlaghe_slu(integer *, integer *,
+ doublereal *, doublecomplex *, integer *, integer *,
+ doublecomplex *, integer *);
+ extern int input_error(char *, int *);
+ static logical iltemp, givens;
+ static integer ioffst, irsign;
+ extern /* Double Complex */ void zlarnd_slu(doublecomplex *, integer *,
+ integer *);
+ extern /* Subroutine */ int zlaset_slu(char *, integer *, integer *,
+ doublecomplex *, doublecomplex *, doublecomplex *, integer *), zlartg_slu(doublecomplex *, doublecomplex *, doublereal *,
+ doublecomplex *, doublecomplex *);
+ static logical ilextr;
+ extern /* Subroutine */ int zlagsy_slu(integer *, integer *, doublereal *,
+ doublecomplex *, integer *, integer *, doublecomplex *, integer *)
+ ;
+ static logical topdwn;
+ static integer ir1, ir2, isympk;
+ extern /* Subroutine */ int zlarot_slu(logical *, logical *, logical *,
+ integer *, doublecomplex *, doublecomplex *, doublecomplex *,
+ integer *, doublecomplex *, doublecomplex *);
+ static integer jch, llb, jkl, jku, uub;
+
+
+/* -- LAPACK test routine (version 2.0) --
+ Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+ Courant Institute, Argonne National Lab, and Rice University
+ September 30, 1994
+
+
+ Purpose
+ =======
+
+ ZLATMS generates random matrices with specified singular values
+ (or hermitian with specified eigenvalues)
+ for testing LAPACK programs.
+
+ ZLATMS operates by applying the following sequence of
+ operations:
+
+ Set the diagonal to D, where D may be input or
+ computed according to MODE, COND, DMAX, and SYM
+ as described below.
+
+ Generate a matrix with the appropriate band structure, by one
+ of two methods:
+
+ Method A:
+ Generate a dense M x N matrix by multiplying D on the left
+ and the right by random unitary matrices, then:
+
+ Reduce the bandwidth according to KL and KU, using
+ Householder transformations.
+
+ Method B:
+ Convert the bandwidth-0 (i.e., diagonal) matrix to a
+ bandwidth-1 matrix using Givens rotations, "chasing"
+ out-of-band elements back, much as in QR; then convert
+ the bandwidth-1 to a bandwidth-2 matrix, etc. Note
+ that for reasonably small bandwidths (relative to M and
+
+ N) this requires less storage, as a dense matrix is not
+
+ generated. Also, for hermitian or symmetric matrices,
+ only one triangle is generated.
+
+ Method A is chosen if the bandwidth is a large fraction of the
+ order of the matrix, and LDA is at least M (so a dense
+ matrix can be stored.) Method B is chosen if the bandwidth
+
+ is small (< 1/2 N for hermitian or symmetric, < .3 N+M for
+ non-symmetric), or LDA is less than M and not less than the
+
+ bandwidth.
+
+ Pack the matrix if desired. Options specified by PACK are:
+ no packing
+ zero out upper half (if hermitian)
+ zero out lower half (if hermitian)
+ store the upper half columnwise (if hermitian or upper
+ triangular)
+ store the lower half columnwise (if hermitian or lower
+ triangular)
+ store the lower triangle in banded format (if hermitian or
+ lower triangular)
+ store the upper triangle in banded format (if hermitian or
+ upper triangular)
+ store the entire matrix in banded format
+ If Method B is chosen, and band format is specified, then the
+ matrix will be generated in the band format, so no repacking
+
+ will be necessary.
+
+ Arguments
+ =========
+
+ M - INTEGER
+ The number of rows of A. Not modified.
+
+ N - INTEGER
+ The number of columns of A. N must equal M if the matrix
+ is symmetric or hermitian (i.e., if SYM is not 'N')
+ Not modified.
+
+ DIST - CHARACTER*1
+ On entry, DIST specifies the type of distribution to be used
+
+ to generate the random eigen-/singular values.
+ 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
+ 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
+ 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
+ Not modified.
+
+ ISEED - INTEGER array, dimension ( 4 )
+ On entry ISEED specifies the seed of the random number
+ generator. They should lie between 0 and 4095 inclusive,
+ and ISEED(4) should be odd. The random number generator
+ uses a linear congruential sequence limited to small
+ integers, and so should produce machine independent
+ random numbers. The values of ISEED are changed on
+ exit, and can be used in the next call to ZLATMS
+ to continue the same random number sequence.
+ Changed on exit.
+
+ SYM - CHARACTER*1
+ If SYM='H', the generated matrix is hermitian, with
+ eigenvalues specified by D, COND, MODE, and DMAX; they
+ may be positive, negative, or zero.
+ If SYM='P', the generated matrix is hermitian, with
+ eigenvalues (= singular values) specified by D, COND,
+ MODE, and DMAX; they will not be negative.
+ If SYM='N', the generated matrix is nonsymmetric, with
+ singular values specified by D, COND, MODE, and DMAX;
+ they will not be negative.
+ If SYM='S', the generated matrix is (complex) symmetric,
+ with singular values specified by D, COND, MODE, and
+ DMAX; they will not be negative.
+ Not modified.
+
+ D - DOUBLE PRECISION array, dimension ( MIN( M, N ) )
+ This array is used to specify the singular values or
+ eigenvalues of A (see SYM, above.) If MODE=0, then D is
+ assumed to contain the singular/eigenvalues, otherwise
+ they will be computed according to MODE, COND, and DMAX,
+ and placed in D.
+ Modified if MODE is nonzero.
+
+ MODE - INTEGER
+ On entry this describes how the singular/eigenvalues are to
+
+ be specified:
+ MODE = 0 means use D as input
+ MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
+ MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
+ MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
+ MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
+ MODE = 5 sets D to random numbers in the range
+ ( 1/COND , 1 ) such that their logarithms
+ are uniformly distributed.
+ MODE = 6 set D to random numbers from same distribution
+ as the rest of the matrix.
+ MODE < 0 has the same meaning as ABS(MODE), except that
+ the order of the elements of D is reversed.
+ Thus if MODE is positive, D has entries ranging from
+ 1 to 1/COND, if negative, from 1/COND to 1,
+ If SYM='H', and MODE is neither 0, 6, nor -6, then
+ the elements of D will also be multiplied by a random
+ sign (i.e., +1 or -1.)
+ Not modified.
+
+ COND - DOUBLE PRECISION
+ On entry, this is used as described under MODE above.
+ If used, it must be >= 1. Not modified.
+
+ DMAX - DOUBLE PRECISION
+ If MODE is neither -6, 0 nor 6, the contents of D, as
+ computed according to MODE and COND, will be scaled by
+ DMAX / max(abs(D(i))); thus, the maximum absolute eigen- or
+
+ singular value (which is to say the norm) will be abs(DMAX).
+
+ Note that DMAX need not be positive: if DMAX is negative
+ (or zero), D will be scaled by a negative number (or zero).
+
+ Not modified.
+
+ KL - INTEGER
+ This specifies the lower bandwidth of the matrix. For
+ example, KL=0 implies upper triangular, KL=1 implies upper
+ Hessenberg, and KL being at least M-1 means that the matrix
+
+ has full lower bandwidth. KL must equal KU if the matrix
+ is symmetric or hermitian.
+ Not modified.
+
+ KU - INTEGER
+ This specifies the upper bandwidth of the matrix. For
+ example, KU=0 implies lower triangular, KU=1 implies lower
+ Hessenberg, and KU being at least N-1 means that the matrix
+
+ has full upper bandwidth. KL must equal KU if the matrix
+ is symmetric or hermitian.
+ Not modified.
+
+ PACK - CHARACTER*1
+ This specifies packing of matrix as follows:
+ 'N' => no packing
+ 'U' => zero out all subdiagonal entries (if symmetric
+ or hermitian)
+ 'L' => zero out all superdiagonal entries (if symmetric
+ or hermitian)
+ 'C' => store the upper triangle columnwise (only if the
+ matrix is symmetric, hermitian, or upper triangular)
+
+ 'R' => store the lower triangle columnwise (only if the
+ matrix is symmetric, hermitian, or lower triangular)
+
+ 'B' => store the lower triangle in band storage scheme
+ (only if the matrix is symmetric, hermitian, or
+ lower triangular)
+ 'Q' => store the upper triangle in band storage scheme
+ (only if the matrix is symmetric, hermitian, or
+ upper triangular)
+ 'Z' => store the entire matrix in band storage scheme
+ (pivoting can be provided for by using this
+ option to store A in the trailing rows of
+ the allocated storage)
+
+ Using these options, the various LAPACK packed and banded
+ storage schemes can be obtained:
+ GB - use 'Z'
+ PB, SB, HB, or TB - use 'B' or 'Q'
+ PP, SP, HB, or TP - use 'C' or 'R'
+
+ If two calls to ZLATMS differ only in the PACK parameter,
+ they will generate mathematically equivalent matrices.
+ Not modified.
+
+ A - COMPLEX*16 array, dimension ( LDA, N )
+ On exit A is the desired test matrix. A is first generated
+
+ in full (unpacked) form, and then packed, if so specified
+ by PACK. Thus, the first M elements of the first N
+ columns will always be modified. If PACK specifies a
+ packed or banded storage scheme, all LDA elements of the
+ first N columns will be modified; the elements of the
+ array which do not correspond to elements of the generated
+ matrix are set to zero.
+ Modified.
+
+ LDA - INTEGER
+ LDA specifies the first dimension of A as declared in the
+ calling program. If PACK='N', 'U', 'L', 'C', or 'R', then
+ LDA must be at least M. If PACK='B' or 'Q', then LDA must
+ be at least MIN( KL, M-1) (which is equal to MIN(KU,N-1)).
+ If PACK='Z', LDA must be large enough to hold the packed
+ array: MIN( KU, N-1) + MIN( KL, M-1) + 1.
+ Not modified.
+
+ WORK - COMPLEX*16 array, dimension ( 3*MAX( N, M ) )
+ Workspace.
+ Modified.
+
+ INFO - INTEGER
+ Error code. On exit, INFO will be set to one of the
+ following values:
+ 0 => normal return
+ -1 => M negative or unequal to N and SYM='S', 'H', or 'P'
+ -2 => N negative
+ -3 => DIST illegal string
+ -5 => SYM illegal string
+ -7 => MODE not in range -6 to 6
+ -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
+ -10 => KL negative
+ -11 => KU negative, or SYM is not 'N' and KU is not equal to
+
+ KL
+ -12 => PACK illegal string, or PACK='U' or 'L', and SYM='N';
+
+ or PACK='C' or 'Q' and SYM='N' and KL is not zero;
+ or PACK='R' or 'B' and SYM='N' and KU is not zero;
+ or PACK='U', 'L', 'C', 'R', 'B', or 'Q', and M is not
+
+ N.
+ -14 => LDA is less than M, or PACK='Z' and LDA is less than
+
+ MIN(KU,N-1) + MIN(KL,M-1) + 1.
+ 1 => Error return from DLATM1
+ 2 => Cannot scale to DMAX (max. sing. value is 0)
+ 3 => Error return from ZLAGGE, CLAGHE or CLAGSY
+
+ =====================================================================
+
+
+
+ 1) Decode and Test the input parameters.
+ Initialize flags & seed.
+
+ Parameter adjustments */
+ --iseed;
+ --d;
+ a_dim1 = *lda;
+ a_offset = a_dim1 + 1;
+ a -= a_offset;
+ --work;
+
+ /* Function Body */
+ *info = 0;
+
+/* Quick return if possible */
+
+ if (*m == 0 || *n == 0) {
+ return 0;
+ }
+
+/* Decode DIST */
+
+ if (strncmp(dist, "U", 1)==0) {
+ idist = 1;
+ } else if (strncmp(dist, "S", 1)==0) {
+ idist = 2;
+ } else if (strncmp(dist, "N", 1)==0) {
+ idist = 3;
+ } else {
+ idist = -1;
+ }
+
+/* Decode SYM */
+
+ if (strncmp(sym, "N", 1)==0) {
+ isym = 1;
+ irsign = 0;
+ zsym = FALSE_;
+ } else if (strncmp(sym, "P", 1)==0) {
+ isym = 2;
+ irsign = 0;
+ zsym = FALSE_;
+ } else if (strncmp(sym, "S", 1)==0) {
+ isym = 2;
+ irsign = 0;
+ zsym = TRUE_;
+ } else if (strncmp(sym, "H", 1)==0) {
+ isym = 2;
+ irsign = 1;
+ zsym = FALSE_;
+ } else {
+ isym = -1;
+ }
+
+/* Decode PACK */
+
+ isympk = 0;
+ if (strncmp(pack, "N", 1)==0) {
+ ipack = 0;
+ } else if (strncmp(pack, "U", 1)==0) {
+ ipack = 1;
+ isympk = 1;
+ } else if (strncmp(pack, "L", 1)==0) {
+ ipack = 2;
+ isympk = 1;
+ } else if (strncmp(pack, "C", 1)==0) {
+ ipack = 3;
+ isympk = 2;
+ } else if (strncmp(pack, "R", 1)==0) {
+ ipack = 4;
+ isympk = 3;
+ } else if (strncmp(pack, "B", 1)==0) {
+ ipack = 5;
+ isympk = 3;
+ } else if (strncmp(pack, "Q", 1)==0) {
+ ipack = 6;
+ isympk = 2;
+ } else if (strncmp(pack, "Z", 1)==0) {
+ ipack = 7;
+ } else {
+ ipack = -1;
+ }
+
+/* Set certain internal parameters */
+
+ mnmin = min(*m,*n);
+/* Computing MIN */
+ i__1 = *kl, i__2 = *m - 1;
+ llb = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *ku, i__2 = *n - 1;
+ uub = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *m, i__2 = *n + llb;
+ mr = min(i__1,i__2);
+/* Computing MIN */
+ i__1 = *n, i__2 = *m + uub;
+ nc = min(i__1,i__2);
+
+ if (ipack == 5 || ipack == 6) {
+ minlda = uub + 1;
+ } else if (ipack == 7) {
+ minlda = llb + uub + 1;
+ } else {
+ minlda = *m;
+ }
+
+/* Use Givens rotation method if bandwidth small enough,
+ or if LDA is too small to store the matrix unpacked. */
+
+ givens = FALSE_;
+ if (isym == 1) {
+/* Computing MAX */
+ i__1 = 1, i__2 = mr + nc;
+ if ((doublereal) (llb + uub) < (doublereal) max(i__1,i__2) * .3) {
+ givens = TRUE_;
+ }
+ } else {
+ if (llb << 1 < *m) {
+ givens = TRUE_;
+ }
+ }
+ if (*lda < *m && *lda >= minlda) {
+ givens = TRUE_;
+ }
+
+/* Set INFO if an error */
+
+ if (*m < 0) {
+ *info = -1;
+ } else if (*m != *n && isym != 1) {
+ *info = -1;
+ } else if (*n < 0) {
+ *info = -2;
+ } else if (idist == -1) {
+ *info = -3;
+ } else if (isym == -1) {
+ *info = -5;
+ } else if (abs(*mode) > 6) {
+ *info = -7;
+ } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.) {
+ *info = -8;
+ } else if (*kl < 0) {
+ *info = -10;
+ } else if (*ku < 0 || isym != 1 && *kl != *ku) {
+ *info = -11;
+ } else if (ipack == -1 || isympk == 1 && isym == 1 || isympk == 2 && isym
+ == 1 && *kl > 0 || isympk == 3 && isym == 1 && *ku > 0 || isympk
+ != 0 && *m != *n) {
+ *info = -12;
+ } else if (*lda < max(1,minlda)) {
+ *info = -14;
+ }
+
+ if (*info != 0) {
+ i__1 = -(*info);
+ input_error("ZLATMS", &i__1);
+ return 0;
+ }
+
+/* Initialize random number generator */
+
+ for (i = 1; i <= 4; ++i) {
+ iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
+/* L10: */
+ }
+
+ if (iseed[4] % 2 != 1) {
+ ++iseed[4];
+ }
+
+/* 2) Set up D if indicated.
+
+ Compute D according to COND and MODE */
+
+ dlatm1_slu(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, &iinfo);
+ if (iinfo != 0) {
+ *info = 1;
+ return 0;
+ }
+
+/* Choose Top-Down if D is (apparently) increasing,
+ Bottom-Up if D is (apparently) decreasing. */
+
+ if (abs(d[1]) <= (d__1 = d[mnmin], abs(d__1))) {
+ topdwn = TRUE_;
+ } else {
+ topdwn = FALSE_;
+ }
+
+ if (*mode != 0 && abs(*mode) != 6) {
+
+/* Scale by DMAX */
+
+ temp = abs(d[1]);
+ i__1 = mnmin;
+ for (i = 2; i <= i__1; ++i) {
+/* Computing MAX */
+ d__2 = temp, d__3 = (d__1 = d[i], abs(d__1));
+ temp = max(d__2,d__3);
+/* L20: */
+ }
+
+ if (temp > 0.) {
+ alpha = *dmax__ / temp;
+ } else {
+ *info = 2;
+ return 0;
+ }
+
+ dscal_(&mnmin, &alpha, &d[1], &c__1);
+
+ }
+
+ zlaset_slu("Full", lda, n, &c_b1, &c_b1, &a[a_offset], lda);
+
+/* 3) Generate Banded Matrix using Givens rotations.
+ Also the special case of UUB=LLB=0
+
+ Compute Addressing constants to cover all
+ storage formats. Whether GE, HE, SY, GB, HB, or SB,
+ upper or lower triangle or both,
+ the (i,j)-th element is in
+ A( i - ISKEW*j + IOFFST, j ) */
+
+ if (ipack > 4) {
+ ilda = *lda - 1;
+ iskew = 1;
+ if (ipack > 5) {
+ ioffst = uub + 1;
+ } else {
+ ioffst = 1;
+ }
+ } else {
+ ilda = *lda;
+ iskew = 0;
+ ioffst = 0;
+ }
+
+/* IPACKG is the format that the matrix is generated in. If this is
+ different from IPACK, then the matrix must be repacked at the
+ end. It also signals how to compute the norm, for scaling. */
+
+ ipackg = 0;
+
+/* Diagonal Matrix -- We are done, unless it
+ is to be stored HP/SP/PP/TP (PACK='R' or 'C') */
+
+ if (llb == 0 && uub == 0) {
+ i__1 = mnmin;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = (1 - iskew) * j + ioffst + j * a_dim1;
+ i__3 = j;
+ z__1.r = d[i__3], z__1.i = 0.;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+/* L30: */
+ }
+
+ if (ipack <= 2 || ipack >= 5) {
+ ipackg = ipack;
+ }
+
+ } else if (givens) {
+
+/* Check whether to use Givens rotations,
+ Householder transformations, or nothing. */
+
+ if (isym == 1) {
+
+/* Non-symmetric -- A = U D V */
+
+ if (ipack > 4) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+
+ i__1 = mnmin;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = (1 - iskew) * j + ioffst + j * a_dim1;
+ i__3 = j;
+ z__1.r = d[i__3], z__1.i = 0.;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+/* L40: */
+ }
+
+ if (topdwn) {
+ jkl = 0;
+ i__1 = uub;
+ for (jku = 1; jku <= i__1; ++jku) {
+
+/* Transform from bandwidth JKL, JKU-1 to
+JKL, JKU
+
+ Last row actually rotated is M
+ Last column actually rotated is MIN( M+
+JKU, N )
+
+ Computing MIN */
+ i__3 = *m + jku;
+ i__2 = min(i__3,*n) + jkl - 1;
+ for (jr = 1; jr <= i__2; ++jr) {
+ extra.r = 0., extra.i = 0.;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ d__1 = cos(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ c.r = z__1.r, c.i = z__1.i;
+ d__1 = sin(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ s.r = z__1.r, s.i = z__1.i;
+/* Computing MAX */
+ i__3 = 1, i__4 = jr - jkl;
+ icol = max(i__3,i__4);
+ if (jr < *m) {
+/* Computing MIN */
+ i__3 = *n, i__4 = jr + jku;
+ il = min(i__3,i__4) + 1 - icol;
+ L__1 = jr > jkl;
+ zlarot_slu(&c_true, &L__1, &c_false, &il, &c, &s, &a[
+ jr - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &extra, &dummy);
+ }
+
+/* Chase "EXTRA" back up */
+
+ ir = jr;
+ ic = icol;
+ i__3 = -jkl - jku;
+ for (jch = jr - jkl; i__3 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__3) {
+ if (ir < *m) {
+ zlartg_slu(&a[ir + 1 - iskew * (ic + 1) + ioffst
+ + (ic + 1) * a_dim1], &extra, &realc,
+ &s, &dummy);
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__2.r = realc * dummy.r, z__2.i = realc *
+ dummy.i;
+ d_cnjg(&z__1, &z__2);
+ c.r = z__1.r, c.i = z__1.i;
+ z__3.r = -s.r, z__3.i = -s.i;
+ z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
+ z__2.i = z__3.r * dummy.i + z__3.i *
+ dummy.r;
+ d_cnjg(&z__1, &z__2);
+ s.r = z__1.r, s.i = z__1.i;
+ }
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jku;
+ irow = max(i__4,i__5);
+ il = ir + 2 - irow;
+ ctemp.r = 0., ctemp.i = 0.;
+ iltemp = jch > jku;
+ zlarot_slu(&c_false, &iltemp, &c_true, &il, &c, &s, &
+ a[irow - iskew * ic + ioffst + ic *
+ a_dim1], &ilda, &ctemp, &extra);
+ if (iltemp) {
+ zlartg_slu(&a[irow + 1 - iskew * (ic + 1) +
+ ioffst + (ic + 1) * a_dim1], &ctemp, &
+ realc, &s, &dummy);
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__2.r = realc * dummy.r, z__2.i = realc *
+ dummy.i;
+ d_cnjg(&z__1, &z__2);
+ c.r = z__1.r, c.i = z__1.i;
+ z__3.r = -s.r, z__3.i = -s.i;
+ z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
+ z__2.i = z__3.r * dummy.i + z__3.i *
+ dummy.r;
+ d_cnjg(&z__1, &z__2);
+ s.r = z__1.r, s.i = z__1.i;
+
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jku - jkl;
+ icol = max(i__4,i__5);
+ il = ic + 2 - icol;
+ extra.r = 0., extra.i = 0.;
+ L__1 = jch > jku + jkl;
+ zlarot_slu(&c_true, &L__1, &c_true, &il, &c, &s,
+ &a[irow - iskew * icol + ioffst +
+ icol * a_dim1], &ilda, &extra, &ctemp)
+ ;
+ ic = icol;
+ ir = irow;
+ }
+/* L50: */
+ }
+/* L60: */
+ }
+/* L70: */
+ }
+
+ jku = uub;
+ i__1 = llb;
+ for (jkl = 1; jkl <= i__1; ++jkl) {
+
+/* Transform from bandwidth JKL-1, JKU to
+JKL, JKU
+
+ Computing MIN */
+ i__3 = *n + jkl;
+ i__2 = min(i__3,*m) + jku - 1;
+ for (jc = 1; jc <= i__2; ++jc) {
+ extra.r = 0., extra.i = 0.;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ d__1 = cos(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ c.r = z__1.r, c.i = z__1.i;
+ d__1 = sin(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ s.r = z__1.r, s.i = z__1.i;
+/* Computing MAX */
+ i__3 = 1, i__4 = jc - jku;
+ irow = max(i__3,i__4);
+ if (jc < *n) {
+/* Computing MIN */
+ i__3 = *m, i__4 = jc + jkl;
+ il = min(i__3,i__4) + 1 - irow;
+ L__1 = jc > jku;
+ zlarot_slu(&c_false, &L__1, &c_false, &il, &c, &s, &
+ a[irow - iskew * jc + ioffst + jc *
+ a_dim1], &ilda, &extra, &dummy);
+ }
+
+/* Chase "EXTRA" back up */
+
+ ic = jc;
+ ir = irow;
+ i__3 = -jkl - jku;
+ for (jch = jc - jku; i__3 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__3) {
+ if (ic < *n) {
+ zlartg_slu(&a[ir + 1 - iskew * (ic + 1) + ioffst
+ + (ic + 1) * a_dim1], &extra, &realc,
+ &s, &dummy);
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__2.r = realc * dummy.r, z__2.i = realc *
+ dummy.i;
+ d_cnjg(&z__1, &z__2);
+ c.r = z__1.r, c.i = z__1.i;
+ z__3.r = -s.r, z__3.i = -s.i;
+ z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
+ z__2.i = z__3.r * dummy.i + z__3.i *
+ dummy.r;
+ d_cnjg(&z__1, &z__2);
+ s.r = z__1.r, s.i = z__1.i;
+ }
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jkl;
+ icol = max(i__4,i__5);
+ il = ic + 2 - icol;
+ ctemp.r = 0., ctemp.i = 0.;
+ iltemp = jch > jkl;
+ zlarot_slu(&c_true, &iltemp, &c_true, &il, &c, &s, &
+ a[ir - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &ctemp, &extra);
+ if (iltemp) {
+ zlartg_slu(&a[ir + 1 - iskew * (icol + 1) +
+ ioffst + (icol + 1) * a_dim1], &ctemp,
+ &realc, &s, &dummy);
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__2.r = realc * dummy.r, z__2.i = realc *
+ dummy.i;
+ d_cnjg(&z__1, &z__2);
+ c.r = z__1.r, c.i = z__1.i;
+ z__3.r = -s.r, z__3.i = -s.i;
+ z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
+ z__2.i = z__3.r * dummy.i + z__3.i *
+ dummy.r;
+ d_cnjg(&z__1, &z__2);
+ s.r = z__1.r, s.i = z__1.i;
+/* Computing MAX */
+ i__4 = 1, i__5 = jch - jkl - jku;
+ irow = max(i__4,i__5);
+ il = ir + 2 - irow;
+ extra.r = 0., extra.i = 0.;
+ L__1 = jch > jkl + jku;
+ zlarot_slu(&c_false, &L__1, &c_true, &il, &c, &s,
+ &a[irow - iskew * icol + ioffst +
+ icol * a_dim1], &ilda, &extra, &ctemp)
+ ;
+ ic = icol;
+ ir = irow;
+ }
+/* L80: */
+ }
+/* L90: */
+ }
+/* L100: */
+ }
+
+ } else {
+
+/* Bottom-Up -- Start at the bottom right. */
+
+ jkl = 0;
+ i__1 = uub;
+ for (jku = 1; jku <= i__1; ++jku) {
+
+/* Transform from bandwidth JKL, JKU-1 to
+JKL, JKU
+
+ First row actually rotated is M
+ First column actually rotated is MIN( M
++JKU, N )
+
+ Computing MIN */
+ i__2 = *m, i__3 = *n + jkl;
+ iendch = min(i__2,i__3) - 1;
+/* Computing MIN */
+ i__2 = *m + jku;
+ i__3 = 1 - jkl;
+ for (jc = min(i__2,*n) - 1; jc >= i__3; --jc) {
+ extra.r = 0., extra.i = 0.;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ d__1 = cos(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ c.r = z__1.r, c.i = z__1.i;
+ d__1 = sin(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ s.r = z__1.r, s.i = z__1.i;
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - jku + 1;
+ irow = max(i__2,i__4);
+ if (jc > 0) {
+/* Computing MIN */
+ i__2 = *m, i__4 = jc + jkl + 1;
+ il = min(i__2,i__4) + 1 - irow;
+ L__1 = jc + jkl < *m;
+ zlarot_slu(&c_false, &c_false, &L__1, &il, &c, &s, &
+ a[irow - iskew * jc + ioffst + jc *
+ a_dim1], &ilda, &dummy, &extra);
+ }
+
+/* Chase "EXTRA" back down */
+
+ ic = jc;
+ i__2 = iendch;
+ i__4 = jkl + jku;
+ for (jch = jc + jkl; i__4 < 0 ? jch >= i__2 : jch <=
+ i__2; jch += i__4) {
+ ilextr = ic > 0;
+ if (ilextr) {
+ zlartg_slu(&a[jch - iskew * ic + ioffst + ic *
+ a_dim1], &extra, &realc, &s, &dummy);
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__1.r = realc * dummy.r, z__1.i = realc *
+ dummy.i;
+ c.r = z__1.r, c.i = z__1.i;
+ z__1.r = s.r * dummy.r - s.i * dummy.i,
+ z__1.i = s.r * dummy.i + s.i *
+ dummy.r;
+ s.r = z__1.r, s.i = z__1.i;
+ }
+ ic = max(1,ic);
+/* Computing MIN */
+ i__5 = *n - 1, i__6 = jch + jku;
+ icol = min(i__5,i__6);
+ iltemp = jch + jku < *n;
+ ctemp.r = 0., ctemp.i = 0.;
+ i__5 = icol + 2 - ic;
+ zlarot_slu(&c_true, &ilextr, &iltemp, &i__5, &c, &s,
+ &a[jch - iskew * ic + ioffst + ic *
+ a_dim1], &ilda, &extra, &ctemp);
+ if (iltemp) {
+ zlartg_slu(&a[jch - iskew * icol + ioffst + icol
+ * a_dim1], &ctemp, &realc, &s, &dummy)
+ ;
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__1.r = realc * dummy.r, z__1.i = realc *
+ dummy.i;
+ c.r = z__1.r, c.i = z__1.i;
+ z__1.r = s.r * dummy.r - s.i * dummy.i,
+ z__1.i = s.r * dummy.i + s.i *
+ dummy.r;
+ s.r = z__1.r, s.i = z__1.i;
+/* Computing MIN */
+ i__5 = iendch, i__6 = jch + jkl + jku;
+ il = min(i__5,i__6) + 2 - jch;
+ extra.r = 0., extra.i = 0.;
+ L__1 = jch + jkl + jku <= iendch;
+ zlarot_slu(&c_false, &c_true, &L__1, &il, &c, &s,
+ &a[jch - iskew * icol + ioffst +
+ icol * a_dim1], &ilda, &ctemp, &extra)
+ ;
+ ic = icol;
+ }
+/* L110: */
+ }
+/* L120: */
+ }
+/* L130: */
+ }
+
+ jku = uub;
+ i__1 = llb;
+ for (jkl = 1; jkl <= i__1; ++jkl) {
+
+/* Transform from bandwidth JKL-1, JKU to
+JKL, JKU
+
+ First row actually rotated is MIN( N+JK
+L, M )
+ First column actually rotated is N
+
+ Computing MIN */
+ i__3 = *n, i__4 = *m + jku;
+ iendch = min(i__3,i__4) - 1;
+/* Computing MIN */
+ i__3 = *n + jkl;
+ i__4 = 1 - jku;
+ for (jr = min(i__3,*m) - 1; jr >= i__4; --jr) {
+ extra.r = 0., extra.i = 0.;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ d__1 = cos(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ c.r = z__1.r, c.i = z__1.i;
+ d__1 = sin(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ s.r = z__1.r, s.i = z__1.i;
+/* Computing MAX */
+ i__3 = 1, i__2 = jr - jkl + 1;
+ icol = max(i__3,i__2);
+ if (jr > 0) {
+/* Computing MIN */
+ i__3 = *n, i__2 = jr + jku + 1;
+ il = min(i__3,i__2) + 1 - icol;
+ L__1 = jr + jku < *n;
+ zlarot_slu(&c_true, &c_false, &L__1, &il, &c, &s, &a[
+ jr - iskew * icol + ioffst + icol *
+ a_dim1], &ilda, &dummy, &extra);
+ }
+
+/* Chase "EXTRA" back down */
+
+ ir = jr;
+ i__3 = iendch;
+ i__2 = jkl + jku;
+ for (jch = jr + jku; i__2 < 0 ? jch >= i__3 : jch <=
+ i__3; jch += i__2) {
+ ilextr = ir > 0;
+ if (ilextr) {
+ zlartg_slu(&a[ir - iskew * jch + ioffst + jch *
+ a_dim1], &extra, &realc, &s, &dummy);
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__1.r = realc * dummy.r, z__1.i = realc *
+ dummy.i;
+ c.r = z__1.r, c.i = z__1.i;
+ z__1.r = s.r * dummy.r - s.i * dummy.i,
+ z__1.i = s.r * dummy.i + s.i *
+ dummy.r;
+ s.r = z__1.r, s.i = z__1.i;
+ }
+ ir = max(1,ir);
+/* Computing MIN */
+ i__5 = *m - 1, i__6 = jch + jkl;
+ irow = min(i__5,i__6);
+ iltemp = jch + jkl < *m;
+ ctemp.r = 0., ctemp.i = 0.;
+ i__5 = irow + 2 - ir;
+ zlarot_slu(&c_false, &ilextr, &iltemp, &i__5, &c, &s,
+ &a[ir - iskew * jch + ioffst + jch *
+ a_dim1], &ilda, &extra, &ctemp);
+ if (iltemp) {
+ zlartg_slu(&a[irow - iskew * jch + ioffst + jch *
+ a_dim1], &ctemp, &realc, &s, &dummy);
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__1.r = realc * dummy.r, z__1.i = realc *
+ dummy.i;
+ c.r = z__1.r, c.i = z__1.i;
+ z__1.r = s.r * dummy.r - s.i * dummy.i,
+ z__1.i = s.r * dummy.i + s.i *
+ dummy.r;
+ s.r = z__1.r, s.i = z__1.i;
+/* Computing MIN */
+ i__5 = iendch, i__6 = jch + jkl + jku;
+ il = min(i__5,i__6) + 2 - jch;
+ extra.r = 0., extra.i = 0.;
+ L__1 = jch + jkl + jku <= iendch;
+ zlarot_slu(&c_true, &c_true, &L__1, &il, &c, &s,
+ &a[irow - iskew * jch + ioffst + jch *
+ a_dim1], &ilda, &ctemp, &extra);
+ ir = irow;
+ }
+/* L140: */
+ }
+/* L150: */
+ }
+/* L160: */
+ }
+
+ }
+
+ } else {
+
+/* Symmetric -- A = U D U'
+ Hermitian -- A = U D U* */
+
+ ipackg = ipack;
+ ioffg = ioffst;
+
+ if (topdwn) {
+
+/* Top-Down -- Generate Upper triangle only */
+
+ if (ipack >= 5) {
+ ipackg = 6;
+ ioffg = uub + 1;
+ } else {
+ ipackg = 1;
+ }
+
+ i__1 = mnmin;
+ for (j = 1; j <= i__1; ++j) {
+ i__4 = (1 - iskew) * j + ioffg + j * a_dim1;
+ i__2 = j;
+ z__1.r = d[i__2], z__1.i = 0.;
+ a[i__4].r = z__1.r, a[i__4].i = z__1.i;
+/* L170: */
+ }
+
+ i__1 = uub;
+ for (k = 1; k <= i__1; ++k) {
+ i__4 = *n - 1;
+ for (jc = 1; jc <= i__4; ++jc) {
+/* Computing MAX */
+ i__2 = 1, i__3 = jc - k;
+ irow = max(i__2,i__3);
+/* Computing MIN */
+ i__2 = jc + 1, i__3 = k + 2;
+ il = min(i__2,i__3);
+ extra.r = 0., extra.i = 0.;
+ i__2 = jc - iskew * (jc + 1) + ioffg + (jc + 1) *
+ a_dim1;
+ ctemp.r = a[i__2].r, ctemp.i = a[i__2].i;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ d__1 = cos(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ c.r = z__1.r, c.i = z__1.i;
+ d__1 = sin(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ s.r = z__1.r, s.i = z__1.i;
+ if (zsym) {
+ ct.r = c.r, ct.i = c.i;
+ st.r = s.r, st.i = s.i;
+ } else {
+ d_cnjg(&z__1, &ctemp);
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ d_cnjg(&z__1, &c);
+ ct.r = z__1.r, ct.i = z__1.i;
+ d_cnjg(&z__1, &s);
+ st.r = z__1.r, st.i = z__1.i;
+ }
+ L__1 = jc > k;
+ zlarot_slu(&c_false, &L__1, &c_true, &il, &c, &s, &a[
+ irow - iskew * jc + ioffg + jc * a_dim1], &
+ ilda, &extra, &ctemp);
+/* Computing MIN */
+ i__3 = k, i__5 = *n - jc;
+ i__2 = min(i__3,i__5) + 1;
+ zlarot_slu(&c_true, &c_true, &c_false, &i__2, &ct, &st, &
+ a[(1 - iskew) * jc + ioffg + jc * a_dim1], &
+ ilda, &ctemp, &dummy);
+
+/* Chase EXTRA back up the matrix
+*/
+
+ icol = jc;
+ i__2 = -k;
+ for (jch = jc - k; i__2 < 0 ? jch >= 1 : jch <= 1;
+ jch += i__2) {
+ zlartg_slu(&a[jch + 1 - iskew * (icol + 1) + ioffg +
+ (icol + 1) * a_dim1], &extra, &realc, &s,
+ &dummy);
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__2.r = realc * dummy.r, z__2.i = realc *
+ dummy.i;
+ d_cnjg(&z__1, &z__2);
+ c.r = z__1.r, c.i = z__1.i;
+ z__3.r = -s.r, z__3.i = -s.i;
+ z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
+ z__2.i = z__3.r * dummy.i + z__3.i *
+ dummy.r;
+ d_cnjg(&z__1, &z__2);
+ s.r = z__1.r, s.i = z__1.i;
+ i__3 = jch - iskew * (jch + 1) + ioffg + (jch + 1)
+ * a_dim1;
+ ctemp.r = a[i__3].r, ctemp.i = a[i__3].i;
+ if (zsym) {
+ ct.r = c.r, ct.i = c.i;
+ st.r = s.r, st.i = s.i;
+ } else {
+ d_cnjg(&z__1, &ctemp);
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ d_cnjg(&z__1, &c);
+ ct.r = z__1.r, ct.i = z__1.i;
+ d_cnjg(&z__1, &s);
+ st.r = z__1.r, st.i = z__1.i;
+ }
+ i__3 = k + 2;
+ zlarot_slu(&c_true, &c_true, &c_true, &i__3, &c, &s,
+ &a[(1 - iskew) * jch + ioffg + jch *
+ a_dim1], &ilda, &ctemp, &extra);
+/* Computing MAX */
+ i__3 = 1, i__5 = jch - k;
+ irow = max(i__3,i__5);
+/* Computing MIN */
+ i__3 = jch + 1, i__5 = k + 2;
+ il = min(i__3,i__5);
+ extra.r = 0., extra.i = 0.;
+ L__1 = jch > k;
+ zlarot_slu(&c_false, &L__1, &c_true, &il, &ct, &st, &
+ a[irow - iskew * jch + ioffg + jch *
+ a_dim1], &ilda, &extra, &ctemp);
+ icol = jch;
+/* L180: */
+ }
+/* L190: */
+ }
+/* L200: */
+ }
+
+/* If we need lower triangle, copy from upper. No
+te that
+ the order of copying is chosen to work for 'q'
+ -> 'b' */
+
+ if (ipack != ipackg && ipack != 3) {
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ irow = ioffst - iskew * jc;
+ if (zsym) {
+/* Computing MIN */
+ i__2 = *n, i__3 = jc + uub;
+ i__4 = min(i__2,i__3);
+ for (jr = jc; jr <= i__4; ++jr) {
+ i__2 = jr + irow + jc * a_dim1;
+ i__3 = jc - iskew * jr + ioffg + jr * a_dim1;
+ a[i__2].r = a[i__3].r, a[i__2].i = a[i__3].i;
+/* L210: */
+ }
+ } else {
+/* Computing MIN */
+ i__2 = *n, i__3 = jc + uub;
+ i__4 = min(i__2,i__3);
+ for (jr = jc; jr <= i__4; ++jr) {
+ i__2 = jr + irow + jc * a_dim1;
+ d_cnjg(&z__1, &a[jc - iskew * jr + ioffg + jr
+ * a_dim1]);
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+/* L220: */
+ }
+ }
+/* L230: */
+ }
+ if (ipack == 5) {
+ i__1 = *n;
+ for (jc = *n - uub + 1; jc <= i__1; ++jc) {
+ i__4 = uub + 1;
+ for (jr = *n + 2 - jc; jr <= i__4; ++jr) {
+ i__2 = jr + jc * a_dim1;
+ a[i__2].r = 0., a[i__2].i = 0.;
+/* L240: */
+ }
+/* L250: */
+ }
+ }
+ if (ipackg == 6) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+ }
+ } else {
+
+/* Bottom-Up -- Generate Lower triangle only */
+
+ if (ipack >= 5) {
+ ipackg = 5;
+ if (ipack == 6) {
+ ioffg = 1;
+ }
+ } else {
+ ipackg = 2;
+ }
+
+ i__1 = mnmin;
+ for (j = 1; j <= i__1; ++j) {
+ i__4 = (1 - iskew) * j + ioffg + j * a_dim1;
+ i__2 = j;
+ z__1.r = d[i__2], z__1.i = 0.;
+ a[i__4].r = z__1.r, a[i__4].i = z__1.i;
+/* L260: */
+ }
+
+ i__1 = uub;
+ for (k = 1; k <= i__1; ++k) {
+ for (jc = *n - 1; jc >= 1; --jc) {
+/* Computing MIN */
+ i__4 = *n + 1 - jc, i__2 = k + 2;
+ il = min(i__4,i__2);
+ extra.r = 0., extra.i = 0.;
+ i__4 = (1 - iskew) * jc + 1 + ioffg + jc * a_dim1;
+ ctemp.r = a[i__4].r, ctemp.i = a[i__4].i;
+ angle = dlarnd_slu(&c__1, &iseed[1]) *
+ 6.2831853071795864769252867663;
+ d__1 = cos(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ c.r = z__1.r, c.i = z__1.i;
+ d__1 = sin(angle);
+ zlarnd_slu(&z__2, &c__5, &iseed[1]);
+ z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
+ s.r = z__1.r, s.i = z__1.i;
+ if (zsym) {
+ ct.r = c.r, ct.i = c.i;
+ st.r = s.r, st.i = s.i;
+ } else {
+ d_cnjg(&z__1, &ctemp);
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ d_cnjg(&z__1, &c);
+ ct.r = z__1.r, ct.i = z__1.i;
+ d_cnjg(&z__1, &s);
+ st.r = z__1.r, st.i = z__1.i;
+ }
+ L__1 = *n - jc > k;
+ zlarot_slu(&c_false, &c_true, &L__1, &il, &c, &s, &a[(1
+ - iskew) * jc + ioffg + jc * a_dim1], &ilda, &
+ ctemp, &extra);
+/* Computing MAX */
+ i__4 = 1, i__2 = jc - k + 1;
+ icol = max(i__4,i__2);
+ i__4 = jc + 2 - icol;
+ zlarot_slu(&c_true, &c_false, &c_true, &i__4, &ct, &st, &
+ a[jc - iskew * icol + ioffg + icol * a_dim1],
+ &ilda, &dummy, &ctemp);
+
+/* Chase EXTRA back down the matrix
+ */
+
+ icol = jc;
+ i__4 = *n - 1;
+ i__2 = k;
+ for (jch = jc + k; i__2 < 0 ? jch >= i__4 : jch <=
+ i__4; jch += i__2) {
+ zlartg_slu(&a[jch - iskew * icol + ioffg + icol *
+ a_dim1], &extra, &realc, &s, &dummy);
+ zlarnd_slu(&z__1, &c__5, &iseed[1]);
+ dummy.r = z__1.r, dummy.i = z__1.i;
+ z__1.r = realc * dummy.r, z__1.i = realc *
+ dummy.i;
+ c.r = z__1.r, c.i = z__1.i;
+ z__1.r = s.r * dummy.r - s.i * dummy.i, z__1.i =
+ s.r * dummy.i + s.i * dummy.r;
+ s.r = z__1.r, s.i = z__1.i;
+ i__3 = (1 - iskew) * jch + 1 + ioffg + jch *
+ a_dim1;
+ ctemp.r = a[i__3].r, ctemp.i = a[i__3].i;
+ if (zsym) {
+ ct.r = c.r, ct.i = c.i;
+ st.r = s.r, st.i = s.i;
+ } else {
+ d_cnjg(&z__1, &ctemp);
+ ctemp.r = z__1.r, ctemp.i = z__1.i;
+ d_cnjg(&z__1, &c);
+ ct.r = z__1.r, ct.i = z__1.i;
+ d_cnjg(&z__1, &s);
+ st.r = z__1.r, st.i = z__1.i;
+ }
+ i__3 = k + 2;
+ zlarot_slu(&c_true, &c_true, &c_true, &i__3, &c, &s,
+ &a[jch - iskew * icol + ioffg + icol *
+ a_dim1], &ilda, &extra, &ctemp);
+/* Computing MIN */
+ i__3 = *n + 1 - jch, i__5 = k + 2;
+ il = min(i__3,i__5);
+ extra.r = 0., extra.i = 0.;
+ L__1 = *n - jch > k;
+ zlarot_slu(&c_false, &c_true, &L__1, &il, &ct, &st, &
+ a[(1 - iskew) * jch + ioffg + jch *
+ a_dim1], &ilda, &ctemp, &extra);
+ icol = jch;
+/* L270: */
+ }
+/* L280: */
+ }
+/* L290: */
+ }
+
+/* If we need upper triangle, copy from lower. No
+te that
+ the order of copying is chosen to work for 'b'
+ -> 'q' */
+
+ if (ipack != ipackg && ipack != 4) {
+ for (jc = *n; jc >= 1; --jc) {
+ irow = ioffst - iskew * jc;
+ if (zsym) {
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - uub;
+ i__1 = max(i__2,i__4);
+ for (jr = jc; jr >= i__1; --jr) {
+ i__2 = jr + irow + jc * a_dim1;
+ i__4 = jc - iskew * jr + ioffg + jr * a_dim1;
+ a[i__2].r = a[i__4].r, a[i__2].i = a[i__4].i;
+/* L300: */
+ }
+ } else {
+/* Computing MAX */
+ i__2 = 1, i__4 = jc - uub;
+ i__1 = max(i__2,i__4);
+ for (jr = jc; jr >= i__1; --jr) {
+ i__2 = jr + irow + jc * a_dim1;
+ d_cnjg(&z__1, &a[jc - iskew * jr + ioffg + jr
+ * a_dim1]);
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+/* L310: */
+ }
+ }
+/* L320: */
+ }
+ if (ipack == 6) {
+ i__1 = uub;
+ for (jc = 1; jc <= i__1; ++jc) {
+ i__2 = uub + 1 - jc;
+ for (jr = 1; jr <= i__2; ++jr) {
+ i__4 = jr + jc * a_dim1;
+ a[i__4].r = 0., a[i__4].i = 0.;
+/* L330: */
+ }
+/* L340: */
+ }
+ }
+ if (ipackg == 5) {
+ ipackg = ipack;
+ } else {
+ ipackg = 0;
+ }
+ }
+ }
+
+/* Ensure that the diagonal is real if Hermitian */
+
+ if (! zsym) {
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ irow = ioffst + (1 - iskew) * jc;
+ i__2 = irow + jc * a_dim1;
+ i__4 = irow + jc * a_dim1;
+ d__1 = a[i__4].r;
+ z__1.r = d__1, z__1.i = 0.;
+ a[i__2].r = z__1.r, a[i__2].i = z__1.i;
+/* L350: */
+ }
+ }
+
+ }
+
+ } else {
+
+/* 4) Generate Banded Matrix by first
+ Rotating by random Unitary matrices,
+ then reducing the bandwidth using Householder
+ transformations.
+
+ Note: we should get here only if LDA .ge. N */
+
+ if (isym == 1) {
+
+/* Non-symmetric -- A = U D V */
+
+ zlagge_slu(&mr, &nc, &llb, &uub, &d[1], &a[a_offset], lda, &iseed[1],
+ &work[1], &iinfo);
+ } else {
+
+/* Symmetric -- A = U D U' or
+ Hermitian -- A = U D U* */
+
+ if (zsym) {
+ zlagsy_slu(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1]
+ , &iinfo);
+ } else {
+ zlaghe_slu(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1]
+ , &iinfo);
+ }
+ }
+
+ if (iinfo != 0) {
+ *info = 3;
+ return 0;
+ }
+ }
+
+/* 5) Pack the matrix */
+
+ if (ipack != ipackg) {
+ if (ipack == 1) {
+
+/* 'U' -- Upper triangular, not packed */
+
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = j + 1; i <= i__2; ++i) {
+ i__4 = i + j * a_dim1;
+ a[i__4].r = 0., a[i__4].i = 0.;
+/* L360: */
+ }
+/* L370: */
+ }
+
+ } else if (ipack == 2) {
+
+/* 'L' -- Lower triangular, not packed */
+
+ i__1 = *m;
+ for (j = 2; j <= i__1; ++j) {
+ i__2 = j - 1;
+ for (i = 1; i <= i__2; ++i) {
+ i__4 = i + j * a_dim1;
+ a[i__4].r = 0., a[i__4].i = 0.;
+/* L380: */
+ }
+/* L390: */
+ }
+
+ } else if (ipack == 3) {
+
+/* 'C' -- Upper triangle packed Columnwise. */
+
+ icol = 1;
+ irow = 0;
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = j;
+ for (i = 1; i <= i__2; ++i) {
+ ++irow;
+ if (irow > *lda) {
+ irow = 1;
+ ++icol;
+ }
+ i__4 = irow + icol * a_dim1;
+ i__3 = i + j * a_dim1;
+ a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
+/* L400: */
+ }
+/* L410: */
+ }
+
+ } else if (ipack == 4) {
+
+/* 'R' -- Lower triangle packed Columnwise. */
+
+ icol = 1;
+ irow = 0;
+ i__1 = *m;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *m;
+ for (i = j; i <= i__2; ++i) {
+ ++irow;
+ if (irow > *lda) {
+ irow = 1;
+ ++icol;
+ }
+ i__4 = irow + icol * a_dim1;
+ i__3 = i + j * a_dim1;
+ a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
+/* L420: */
+ }
+/* L430: */
+ }
+
+ } else if (ipack >= 5) {
+
+/* 'B' -- The lower triangle is packed as a band matrix.
+
+ 'Q' -- The upper triangle is packed as a band matrix.
+
+ 'Z' -- The whole matrix is packed as a band matrix.
+*/
+
+ if (ipack == 5) {
+ uub = 0;
+ }
+ if (ipack == 6) {
+ llb = 0;
+ }
+
+ i__1 = uub;
+ for (j = 1; j <= i__1; ++j) {
+/* Computing MIN */
+ i__2 = j + llb;
+ for (i = min(i__2,*m); i >= 1; --i) {
+ i__2 = i - j + uub + 1 + j * a_dim1;
+ i__4 = i + j * a_dim1;
+ a[i__2].r = a[i__4].r, a[i__2].i = a[i__4].i;
+/* L440: */
+ }
+/* L450: */
+ }
+
+ i__1 = *n;
+ for (j = uub + 2; j <= i__1; ++j) {
+/* Computing MIN */
+ i__4 = j + llb;
+ i__2 = min(i__4,*m);
+ for (i = j - uub; i <= i__2; ++i) {
+ i__4 = i - j + uub + 1 + j * a_dim1;
+ i__3 = i + j * a_dim1;
+ a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
+/* L460: */
+ }
+/* L470: */
+ }
+ }
+
+/* If packed, zero out extraneous elements.
+
+ Symmetric/Triangular Packed --
+ zero out everything after A(IROW,ICOL) */
+
+ if (ipack == 3 || ipack == 4) {
+ i__1 = *m;
+ for (jc = icol; jc <= i__1; ++jc) {
+ i__2 = *lda;
+ for (jr = irow + 1; jr <= i__2; ++jr) {
+ i__4 = jr + jc * a_dim1;
+ a[i__4].r = 0., a[i__4].i = 0.;
+/* L480: */
+ }
+ irow = 0;
+/* L490: */
+ }
+
+ } else if (ipack >= 5) {
+
+/* Packed Band --
+ 1st row is now in A( UUB+2-j, j), zero above it
+ m-th row is now in A( M+UUB-j,j), zero below it
+ last non-zero diagonal is now in A( UUB+LLB+1,j ),
+
+ zero below it, too. */
+
+ ir1 = uub + llb + 2;
+ ir2 = uub + *m + 2;
+ i__1 = *n;
+ for (jc = 1; jc <= i__1; ++jc) {
+ i__2 = uub + 1 - jc;
+ for (jr = 1; jr <= i__2; ++jr) {
+ i__4 = jr + jc * a_dim1;
+ a[i__4].r = 0., a[i__4].i = 0.;
+/* L500: */
+ }
+/* Computing MAX
+ Computing MIN */
+ i__3 = ir1, i__5 = ir2 - jc;
+ i__2 = 1, i__4 = min(i__3,i__5);
+ i__6 = *lda;
+ for (jr = max(i__2,i__4); jr <= i__6; ++jr) {
+ i__2 = jr + jc * a_dim1;
+ a[i__2].r = 0., a[i__2].i = 0.;
+/* L510: */
+ }
+/* L520: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of ZLATMS */
+
+} /* zlatms_slu */
+
diff --git a/SuperLU_5.2.0/TESTING/MATGEN/zsymv.c b/SuperLU_5.2.0/TESTING/MATGEN/zsymv.c
new file mode 100644
index 0000000..7a15731
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/MATGEN/zsymv.c
@@ -0,0 +1,407 @@
+#include <string.h>
+#include "f2c.h"
+
+/* Subroutine */ int zsymv_(char *uplo, integer *n, doublecomplex *alpha,
+ doublecomplex *a, integer *lda, doublecomplex *x, integer *incx,
+ doublecomplex *beta, doublecomplex *y, integer *incy)
+{
+/* -- 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
+ =======
+
+ ZSYMV performs the matrix-vector operation
+
+ y := alpha*A*x + beta*y,
+
+ where alpha and beta are scalars, x and y are n element vectors and
+ A is an n by n symmetric matrix.
+
+ Arguments
+ ==========
+
+ UPLO - CHARACTER*1
+ On entry, UPLO specifies whether the upper or lower
+ triangular part of the array A is to be referenced as
+ follows:
+
+ UPLO = 'U' or 'u' Only the upper triangular part of A
+ is to be referenced.
+
+ UPLO = 'L' or 'l' Only the lower triangular part of A
+ is to be referenced.
+
+ Unchanged on exit.
+
+ N - INTEGER
+ On entry, N specifies the order of the matrix A.
+ N must be at least zero.
+ Unchanged on exit.
+
+ ALPHA - COMPLEX*16
+ On entry, ALPHA specifies the scalar alpha.
+ Unchanged on exit.
+
+ A - COMPLEX*16 array, dimension ( LDA, N )
+ Before entry, with UPLO = 'U' or 'u', the leading n by n
+ upper triangular part of the array A must contain the upper
+
+ triangular part of the symmetric matrix and the strictly
+ lower triangular part of A is not referenced.
+ Before entry, with UPLO = 'L' or 'l', the leading n by n
+ lower triangular part of the array A must contain the lower
+
+ triangular part of the symmetric matrix and the strictly
+ upper triangular part of A is not referenced.
+ Unchanged on exit.
+
+ LDA - INTEGER
+ On entry, LDA specifies the first dimension of A as declared
+
+ in the calling (sub) program. LDA must be at least
+ max( 1, N ).
+ Unchanged on exit.
+
+ X - COMPLEX*16 array, dimension at least
+ ( 1 + ( N - 1 )*abs( INCX ) ).
+ Before entry, the incremented array X must contain the N-
+ element vector x.
+ Unchanged on exit.
+
+ INCX - INTEGER
+ On entry, INCX specifies the increment for the elements of
+ X. INCX must not be zero.
+ Unchanged on exit.
+
+ BETA - COMPLEX*16
+ On entry, BETA specifies the scalar beta. When BETA is
+ supplied as zero then Y need not be set on input.
+ Unchanged on exit.
+
+ Y - COMPLEX*16 array, dimension at least
+ ( 1 + ( N - 1 )*abs( INCY ) ).
+ Before entry, the incremented array Y must contain the n
+ element vector y. On exit, Y is overwritten by the updated
+ vector y.
+
+ INCY - INTEGER
+ On entry, INCY specifies the increment for the elements of
+ Y. INCY must not be zero.
+ Unchanged on exit.
+
+ =====================================================================
+
+
+
+ Test the input parameters.
+
+
+ Parameter adjustments
+ Function Body */
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
+ doublecomplex z__1, z__2, z__3, z__4;
+ /* Local variables */
+ static integer info;
+ static doublecomplex temp1, temp2;
+ static integer i, j;
+ static integer ix, iy, jx, jy, kx, ky;
+ extern int input_error(char *, int *);
+
+#define X(I) x[(I)-1]
+#define Y(I) y[(I)-1]
+
+#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
+
+ info = 0;
+ if (strncmp(uplo, "U", 1)!=0 && strncmp(uplo, "L", 1)!=0) {
+ info = 1;
+ } else if (*n < 0) {
+ info = 2;
+ } else if (*lda < max(1,*n)) {
+ info = 5;
+ } else if (*incx == 0) {
+ info = 7;
+ } else if (*incy == 0) {
+ info = 10;
+ }
+ if (info != 0) {
+ input_error("ZSYMV ", &info);
+ return 0;
+ }
+
+/* Quick return if possible. */
+
+ if (*n == 0 || alpha->r == 0. && alpha->i == 0. && (beta->r == 1. &&
+ beta->i == 0.)) {
+ return 0;
+ }
+
+/* Set up the start points in X and Y. */
+
+ if (*incx > 0) {
+ kx = 1;
+ } else {
+ kx = 1 - (*n - 1) * *incx;
+ }
+ if (*incy > 0) {
+ ky = 1;
+ } else {
+ ky = 1 - (*n - 1) * *incy;
+ }
+
+/* Start the operations. In this version the elements of A are
+ accessed sequentially with one pass through the triangular part
+ of A.
+
+ First form y := beta*y. */
+
+ if (beta->r != 1. || beta->i != 0.) {
+ if (*incy == 1) {
+ if (beta->r == 0. && beta->i == 0.) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ Y(i).r = 0., Y(i).i = 0.;
+/* L10: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = i;
+ i__3 = i;
+ z__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
+ z__1.i = beta->r * Y(i).i + beta->i * Y(i)
+ .r;
+ Y(i).r = z__1.r, Y(i).i = z__1.i;
+/* L20: */
+ }
+ }
+ } else {
+ iy = ky;
+ if (beta->r == 0. && beta->i == 0.) {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = iy;
+ Y(iy).r = 0., Y(iy).i = 0.;
+ iy += *incy;
+/* L30: */
+ }
+ } else {
+ i__1 = *n;
+ for (i = 1; i <= *n; ++i) {
+ i__2 = iy;
+ i__3 = iy;
+ z__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
+ z__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
+ .r;
+ Y(iy).r = z__1.r, Y(iy).i = z__1.i;
+ iy += *incy;
+/* L40: */
+ }
+ }
+ }
+ }
+ if (alpha->r == 0. && alpha->i == 0.) {
+ return 0;
+ }
+ if (strncmp(uplo, "U", 1)==0) {
+
+/* Form y when A is stored in upper triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ z__1.r = alpha->r * X(j).r - alpha->i * X(j).i, z__1.i =
+ alpha->r * X(j).i + alpha->i * X(j).r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ temp2.r = 0., temp2.i = 0.;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i + z__2.i;
+ Y(i).r = z__1.r, Y(i).i = z__1.i;
+ i__3 = i + j * a_dim1;
+ i__4 = i;
+ z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i).i,
+ z__2.i = A(i,j).r * X(i).i + A(i,j).i * X(
+ i).r;
+ z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
+ temp2.r = z__1.r, temp2.i = z__1.i;
+/* L50: */
+ }
+ i__2 = j;
+ i__3 = j;
+ i__4 = j + j * a_dim1;
+ z__3.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, z__3.i =
+ temp1.r * A(j,j).i + temp1.i * A(j,j).r;
+ z__2.r = Y(j).r + z__3.r, z__2.i = Y(j).i + z__3.i;
+ z__4.r = alpha->r * temp2.r - alpha->i * temp2.i, z__4.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
+ Y(j).r = z__1.r, Y(j).i = z__1.i;
+/* L60: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, z__1.i =
+ alpha->r * X(jx).i + alpha->i * X(jx).r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ temp2.r = 0., temp2.i = 0.;
+ ix = kx;
+ iy = ky;
+ i__2 = j - 1;
+ for (i = 1; i <= j-1; ++i) {
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i + z__2.i;
+ Y(iy).r = z__1.r, Y(iy).i = z__1.i;
+ i__3 = i + j * a_dim1;
+ i__4 = ix;
+ z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix).i,
+ z__2.i = A(i,j).r * X(ix).i + A(i,j).i * X(
+ ix).r;
+ z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
+ temp2.r = z__1.r, temp2.i = z__1.i;
+ ix += *incx;
+ iy += *incy;
+/* L70: */
+ }
+ i__2 = jy;
+ i__3 = jy;
+ i__4 = j + j * a_dim1;
+ z__3.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, z__3.i =
+ temp1.r * A(j,j).i + temp1.i * A(j,j).r;
+ z__2.r = Y(jy).r + z__3.r, z__2.i = Y(jy).i + z__3.i;
+ z__4.r = alpha->r * temp2.r - alpha->i * temp2.i, z__4.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
+ Y(jy).r = z__1.r, Y(jy).i = z__1.i;
+ jx += *incx;
+ jy += *incy;
+/* L80: */
+ }
+ }
+ } else {
+
+/* Form y when A is stored in lower triangle. */
+
+ if (*incx == 1 && *incy == 1) {
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = j;
+ z__1.r = alpha->r * X(j).r - alpha->i * X(j).i, z__1.i =
+ alpha->r * X(j).i + alpha->i * X(j).r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ temp2.r = 0., temp2.i = 0.;
+ i__2 = j;
+ i__3 = j;
+ i__4 = j + j * a_dim1;
+ z__2.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, z__2.i =
+ temp1.r * A(j,j).i + temp1.i * A(j,j).r;
+ z__1.r = Y(j).r + z__2.r, z__1.i = Y(j).i + z__2.i;
+ Y(j).r = z__1.r, Y(j).i = z__1.i;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ i__3 = i;
+ i__4 = i;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i + z__2.i;
+ Y(i).r = z__1.r, Y(i).i = z__1.i;
+ i__3 = i + j * a_dim1;
+ i__4 = i;
+ z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i).i,
+ z__2.i = A(i,j).r * X(i).i + A(i,j).i * X(
+ i).r;
+ z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
+ temp2.r = z__1.r, temp2.i = z__1.i;
+/* L90: */
+ }
+ i__2 = j;
+ i__3 = j;
+ z__2.r = alpha->r * temp2.r - alpha->i * temp2.i, z__2.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ z__1.r = Y(j).r + z__2.r, z__1.i = Y(j).i + z__2.i;
+ Y(j).r = z__1.r, Y(j).i = z__1.i;
+/* L100: */
+ }
+ } else {
+ jx = kx;
+ jy = ky;
+ i__1 = *n;
+ for (j = 1; j <= *n; ++j) {
+ i__2 = jx;
+ z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, z__1.i =
+ alpha->r * X(jx).i + alpha->i * X(jx).r;
+ temp1.r = z__1.r, temp1.i = z__1.i;
+ temp2.r = 0., temp2.i = 0.;
+ i__2 = jy;
+ i__3 = jy;
+ i__4 = j + j * a_dim1;
+ z__2.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, z__2.i =
+ temp1.r * A(j,j).i + temp1.i * A(j,j).r;
+ z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
+ Y(jy).r = z__1.r, Y(jy).i = z__1.i;
+ ix = jx;
+ iy = jy;
+ i__2 = *n;
+ for (i = j + 1; i <= *n; ++i) {
+ ix += *incx;
+ iy += *incy;
+ i__3 = iy;
+ i__4 = iy;
+ i__5 = i + j * a_dim1;
+ z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
+ z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
+ .r;
+ z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i + z__2.i;
+ Y(iy).r = z__1.r, Y(iy).i = z__1.i;
+ i__3 = i + j * a_dim1;
+ i__4 = ix;
+ z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix).i,
+ z__2.i = A(i,j).r * X(ix).i + A(i,j).i * X(
+ ix).r;
+ z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
+ temp2.r = z__1.r, temp2.i = z__1.i;
+/* L110: */
+ }
+ i__2 = jy;
+ i__3 = jy;
+ z__2.r = alpha->r * temp2.r - alpha->i * temp2.i, z__2.i =
+ alpha->r * temp2.i + alpha->i * temp2.r;
+ z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
+ Y(jy).r = z__1.r, Y(jy).i = z__1.i;
+ jx += *incx;
+ jy += *incy;
+/* L120: */
+ }
+ }
+ }
+
+ return 0;
+
+/* End of ZSYMV */
+
+} /* zsymv_ */
+
diff --git a/TESTING/Makefile b/SuperLU_5.2.0/TESTING/Makefile
similarity index 100%
rename from TESTING/Makefile
rename to SuperLU_5.2.0/TESTING/Makefile
diff --git a/SuperLU_5.2.0/TESTING/cdrive.c b/SuperLU_5.2.0/TESTING/cdrive.c
new file mode 100644
index 0000000..8bc8d10
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/cdrive.c
@@ -0,0 +1,571 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+/*
+ * File name: cdrive.c
+ * Purpose: MAIN test program
+ */
+#include <string.h>
+#include "slu_cdefs.h"
+
+#define NTESTS 5 /* Number of test types */
+#define NTYPES 11 /* Number of matrix types */
+#define NTRAN 2
+#define THRESH 20.0
+#define FMT1 "%10s:n=%d, test(%d)=%12.5g\n"
+#define FMT2 "%10s:fact=%4d, trans=%4d, equed=%c, n=%d, imat=%d, test(%d)=%12.5g\n"
+#define FMT3 "%10s:info=%d, izero=%d, n=%d, nrhs=%d, imat=%d, nfail=%d\n"
+
+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, double *u, FILE **fp);
+
+main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * CDRIVE is the main test program for the COMPLEX linear
+ * equation driver routines CGSSV and CGSSVX.
+ *
+ * The program is invoked by a shell script file -- ctest.csh.
+ * The output from the tests are written into a file -- ctest.out.
+ *
+ * =====================================================================
+ */
+ complex *a, *a_save;
+ int *asub, *asub_save;
+ int *xa, *xa_save;
+ SuperMatrix A, B, X, L, U;
+ SuperMatrix ASAV, AC;
+ GlobalLU_t Glu; /* Not needed on return. */
+ mem_usage_t mem_usage;
+ int *perm_r; /* row permutation from partial pivoting */
+ int *perm_c, *pc_save; /* column permutation */
+ int *etree;
+ complex zero = {0.0, 0.0};
+ float *R, *C;
+ float *ferr, *berr;
+ float *rwork;
+ complex *wwork;
+ void *work;
+ int info, lwork, nrhs, panel_size, relax;
+ int m, n, nnz;
+ complex *xact;
+ complex *rhsb, *solx, *bsav;
+ int ldb, ldx;
+ float rpg, rcond;
+ int i, j, k1;
+ float rowcnd, colcnd, amax;
+ int maxsuper, rowblk, colblk;
+ int prefact, nofact, equil, iequed;
+ int nt, nrun, nfail, nerrs, imat, fimat, nimat;
+ int nfact, ifact, itran;
+ int kl, ku, mode, lda;
+ int zerot, izero, ioff;
+ double u;
+ float anorm, cndnum;
+ complex *Afull;
+ float result[NTESTS];
+ superlu_options_t options;
+ fact_t fact;
+ trans_t trans;
+ SuperLUStat_t stat;
+ static char matrix_type[8];
+ static char equed[1], path[4], sym[1], dist[1];
+ FILE *fp;
+
+ /* Fixed set of parameters */
+ int iseed[] = {1988, 1989, 1990, 1991};
+ static char equeds[] = {'N', 'R', 'C', 'B'};
+ static fact_t facts[] = {FACTORED, DOFACT, SamePattern,
+ SamePattern_SameRowPerm};
+ static trans_t transs[] = {NOTRANS, TRANS, CONJ};
+
+ /* Some function prototypes */
+ 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_slu(char *, int *, int *, int *, char *, int *, int *,
+ float *, int *, float *, char *);
+ extern int clatms_slu(int *, int *, char *, int *, char *, float *d,
+ int *, float *, float *, int *, int *,
+ char *, complex *, int *, complex *, int *);
+ extern int sp_cconvert(int, int, complex *, int, int, int,
+ complex *a, int *, int *, int *);
+
+
+ /* Executable statements */
+
+ strcpy(path, "CGE");
+ nrun = 0;
+ nfail = 0;
+ nerrs = 0;
+
+ /* Defaults */
+ lwork = 0;
+ n = 1;
+ nrhs = 1;
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+ u = 1.0;
+ strcpy(matrix_type, "LA");
+ parse_command_line(argc, argv, matrix_type, &n,
+ &panel_size, &relax, &nrhs, &maxsuper,
+ &rowblk, &colblk, &lwork, &u, &fp);
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ fprintf(stderr, "expert: cannot allocate %d bytes\n", lwork);
+ exit (-1);
+ }
+ }
+
+ /* Set the default input options. */
+ set_default_options(&options);
+ options.DiagPivotThresh = u;
+ options.PrintStat = NO;
+ options.PivotGrowth = YES;
+ options.ConditionNumber = YES;
+ options.IterRefine = SLU_SINGLE;
+
+ if ( strcmp(matrix_type, "LA") == 0 ) {
+ /* Test LAPACK matrix suite. */
+ m = n;
+ lda = SUPERLU_MAX(n, 1);
+ nnz = n * n; /* upper bound */
+ fimat = 1;
+ nimat = NTYPES;
+ Afull = complexCalloc(lda * n);
+ callocateA(n, nnz, &a, &asub, &xa);
+ } else {
+ /* Read a sparse matrix */
+ fimat = nimat = 0;
+ creadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ }
+
+ callocateA(n, nnz, &a_save, &asub_save, &xa_save);
+ rhsb = complexMalloc(m * nrhs);
+ bsav = complexMalloc(m * nrhs);
+ solx = complexMalloc(n * nrhs);
+ ldb = m;
+ ldx = n;
+ cCreate_Dense_Matrix(&B, m, nrhs, rhsb, ldb, SLU_DN, SLU_C, SLU_GE);
+ cCreate_Dense_Matrix(&X, n, nrhs, solx, ldx, SLU_DN, SLU_C, SLU_GE);
+ xact = complexMalloc(n * nrhs);
+ etree = intMalloc(n);
+ perm_r = intMalloc(n);
+ perm_c = intMalloc(n);
+ pc_save = intMalloc(n);
+ R = (float *) SUPERLU_MALLOC(m*sizeof(float));
+ C = (float *) SUPERLU_MALLOC(n*sizeof(float));
+ ferr = (float *) SUPERLU_MALLOC(nrhs*sizeof(float));
+ berr = (float *) SUPERLU_MALLOC(nrhs*sizeof(float));
+ j = SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs);
+ rwork = (float *) SUPERLU_MALLOC(j*sizeof(float));
+ for (i = 0; i < j; ++i) rwork[i] = 0.;
+ if ( !R ) ABORT("SUPERLU_MALLOC fails for R");
+ if ( !C ) ABORT("SUPERLU_MALLOC fails for C");
+ if ( !ferr ) ABORT("SUPERLU_MALLOC fails for ferr");
+ if ( !berr ) ABORT("SUPERLU_MALLOC fails for berr");
+ if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
+ wwork = complexCalloc( SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs) );
+
+ for (i = 0; i < n; ++i) perm_c[i] = pc_save[i] = i;
+ options.ColPerm = MY_PERMC;
+
+ for (imat = fimat; imat <= nimat; ++imat) { /* All matrix types */
+
+ if ( imat ) {
+
+ /* Skip types 5, 6, or 7 if the matrix size is too small. */
+ zerot = (imat >= 5 && imat <= 7);
+ if ( zerot && n < imat-4 )
+ continue;
+
+ /* Set up parameters with CLATB4 and generate a test matrix
+ with CLATMS. */
+ clatb4_slu(path, &imat, &n, &n, sym, &kl, &ku, &anorm, &mode,
+ &cndnum, dist);
+
+ clatms_slu(&n, &n, dist, iseed, sym, &rwork[0], &mode, &cndnum,
+ &anorm, &kl, &ku, "No packing", Afull, &lda,
+ &wwork[0], &info);
+
+ if ( info ) {
+ printf(FMT3, "CLATMS", info, izero, n, nrhs, imat, nfail);
+ continue;
+ }
+
+ /* For types 5-7, zero one or more columns of the matrix
+ to test that INFO is returned correctly. */
+ if ( zerot ) {
+ if ( imat == 5 ) izero = 1;
+ else if ( imat == 6 ) izero = n;
+ else izero = n / 2 + 1;
+ ioff = (izero - 1) * lda;
+ if ( imat < 7 ) {
+ for (i = 0; i < n; ++i) Afull[ioff + i] = zero;
+ } else {
+ for (j = 0; j < n - izero + 1; ++j)
+ for (i = 0; i < n; ++i)
+ Afull[ioff + i + j*lda] = zero;
+ }
+ } else {
+ izero = 0;
+ }
+
+ /* Convert to sparse representation. */
+ sp_cconvert(n, n, Afull, lda, kl, ku, a, asub, xa, &nnz);
+
+ } else {
+ izero = 0;
+ zerot = 0;
+ }
+
+ cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
+
+ /* Save a copy of matrix A in ASAV */
+ cCreate_CompCol_Matrix(&ASAV, m, n, nnz, a_save, asub_save, xa_save,
+ SLU_NC, SLU_C, SLU_GE);
+ cCopy_CompCol_Matrix(&A, &ASAV);
+
+ /* Form exact solution. */
+ cGenXtrue(n, nrhs, xact, ldx);
+
+ StatInit(&stat);
+
+ for (iequed = 0; iequed < 4; ++iequed) {
+ *equed = equeds[iequed];
+ if (iequed == 0) nfact = 4;
+ else nfact = 1; /* Only test factored, pre-equilibrated matrix */
+
+ for (ifact = 0; ifact < nfact; ++ifact) {
+ fact = facts[ifact];
+ options.Fact = fact;
+
+ for (equil = 0; equil < 2; ++equil) {
+ options.Equil = equil;
+ prefact = ( options.Fact == FACTORED ||
+ options.Fact == SamePattern_SameRowPerm );
+ /* Need a first factor */
+ nofact = (options.Fact != FACTORED); /* Not factored */
+
+ /* Restore the matrix A. */
+ cCopy_CompCol_Matrix(&ASAV, &A);
+
+ if ( zerot ) {
+ if ( prefact ) continue;
+ } else if ( options.Fact == FACTORED ) {
+ if ( equil || iequed ) {
+ /* Compute row and column scale factors to
+ equilibrate matrix A. */
+ cgsequ(&A, R, C, &rowcnd, &colcnd, &amax, &info);
+
+ /* Force equilibration. */
+ if ( !info && n > 0 ) {
+ if ( strncmp(equed, "R", 1)==0 ) {
+ rowcnd = 0.;
+ colcnd = 1.;
+ } else if ( strncmp(equed, "C", 1)==0 ) {
+ rowcnd = 1.;
+ colcnd = 0.;
+ } else if ( strncmp(equed, "B", 1)==0 ) {
+ rowcnd = 0.;
+ colcnd = 0.;
+ }
+ }
+
+ /* Equilibrate the matrix. */
+ claqgs(&A, R, C, rowcnd, colcnd, amax, equed);
+ }
+ }
+
+ if ( prefact ) { /* Need a factor for the first time */
+
+ /* Save Fact option. */
+ fact = options.Fact;
+ options.Fact = DOFACT;
+
+ /* Preorder the matrix, obtain the column etree. */
+ sp_preorder(&options, &A, perm_c, etree, &AC);
+
+ /* Factor the matrix AC. */
+ cgstrf(&options, &AC, relax, panel_size,
+ etree, work, lwork, perm_c, perm_r, &L, &U,
+ &Glu, &stat, &info);
+
+ if ( info ) {
+ printf("** First factor: info %d, equed %c\n",
+ info, *equed);
+ if ( lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n",
+ info - n);
+ exit(0);
+ }
+ }
+
+ Destroy_CompCol_Permuted(&AC);
+
+ /* Restore Fact option. */
+ options.Fact = fact;
+ } /* if .. first time factor */
+
+ for (itran = 0; itran < NTRAN; ++itran) {
+ trans = transs[itran];
+ options.Trans = trans;
+
+ /* Restore the matrix A. */
+ cCopy_CompCol_Matrix(&ASAV, &A);
+
+ /* Set the right hand side. */
+ cFillRHS(trans, nrhs, xact, ldx, &A, &B);
+ cCopy_Dense_Matrix(m, nrhs, rhsb, ldb, bsav, ldb);
+
+ /*----------------
+ * Test cgssv
+ *----------------*/
+ if ( options.Fact == DOFACT && itran == 0) {
+ /* Not yet factored, and untransposed */
+
+ cCopy_Dense_Matrix(m, nrhs, rhsb, ldb, solx, ldx);
+ cgssv(&options, &A, perm_c, perm_r, &L, &U, &X,
+ &stat, &info);
+
+ if ( info && info != izero ) {
+ printf(FMT3, "cgssv",
+ info, izero, n, nrhs, imat, nfail);
+ } else {
+ /* Reconstruct matrix from factors and
+ compute residual. */
+ 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);
+ cgst02(trans, m, n, nrhs, &A, solx,
+ ldx, wwork,ldb, &result[1]);
+ nt = 2;
+ }
+
+ /* Print information about the tests that
+ did not pass the threshold. */
+ for (i = 0; i < nt; ++i) {
+ if ( result[i] >= THRESH ) {
+ printf(FMT1, "cgssv", n, i,
+ result[i]);
+ ++nfail;
+ }
+ }
+ nrun += nt;
+ } /* else .. info == 0 */
+
+ /* Restore perm_c. */
+ for (i = 0; i < n; ++i) perm_c[i] = pc_save[i];
+
+ if (lwork == 0) {
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+ } /* if .. end of testing cgssv */
+
+ /*----------------
+ * Test cgssvx
+ *----------------*/
+
+ /* Equilibrate the matrix if fact = FACTORED and
+ equed = 'R', 'C', or 'B'. */
+ if ( options.Fact == FACTORED &&
+ (equil || iequed) && n > 0 ) {
+ claqgs(&A, R, C, rowcnd, colcnd, amax, equed);
+ }
+
+ /* Solve the system and compute the condition number
+ and error bounds using cgssvx. */
+ cgssvx(&options, &A, perm_c, perm_r, etree,
+ equed, R, C, &L, &U, work, lwork, &B, &X, &rpg,
+ &rcond, ferr, berr, &Glu,
+ &mem_usage, &stat, &info);
+
+ if ( info && info != izero ) {
+ printf(FMT3, "cgssvx",
+ info, izero, n, nrhs, imat, nfail);
+ if ( lwork == -1 ) {
+ printf("** Estimated memory: %.0f bytes\n",
+ mem_usage.total_needed);
+ exit(0);
+ }
+ } else {
+ if ( !prefact ) {
+ /* Reconstruct matrix from factors and
+ compute residual. */
+ cgst01(m, n, &A, &L, &U, perm_c, perm_r,
+ &result[0]);
+ k1 = 0;
+ } else {
+ k1 = 1;
+ }
+
+ if ( !info ) {
+ /* Compute residual of the computed solution.*/
+ cCopy_Dense_Matrix(m, nrhs, bsav, ldb,
+ wwork, ldb);
+ cgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
+ wwork, ldb, &result[1]);
+
+ /* Check solution from generated exact
+ solution. */
+ cgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
+ &result[2]);
+
+ /* Check the error bounds from iterative
+ refinement. */
+ cgst07(trans, n, nrhs, &ASAV, bsav, ldb,
+ solx, ldx, xact, ldx, ferr, berr,
+ &result[3]);
+
+ /* Print information about the tests that did
+ not pass the threshold. */
+ for (i = k1; i < NTESTS; ++i) {
+ if ( result[i] >= THRESH ) {
+ printf(FMT2, "cgssvx",
+ options.Fact, trans, *equed,
+ n, imat, i, result[i]);
+ ++nfail;
+ }
+ }
+ nrun += NTESTS;
+ } /* if .. info == 0 */
+ } /* else .. end of testing cgssvx */
+
+ } /* for itran ... */
+
+ if ( lwork == 0 ) {
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+
+ } /* for equil ... */
+ } /* for ifact ... */
+ } /* for iequed ... */
+#if 0
+ if ( !info ) {
+ PrintPerf(&L, &U, &mem_usage, rpg, rcond, ferr, berr, equed);
+ }
+#endif
+ Destroy_SuperMatrix_Store(&A);
+ Destroy_SuperMatrix_Store(&ASAV);
+ StatFree(&stat);
+
+ } /* for imat ... */
+
+ /* Print a summary of the results. */
+ PrintSumm("CGE", nfail, nrun, nerrs);
+
+ if ( strcmp(matrix_type, "LA") == 0 ) SUPERLU_FREE (Afull);
+ SUPERLU_FREE (rhsb);
+ SUPERLU_FREE (bsav);
+ SUPERLU_FREE (solx);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (pc_save);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ SUPERLU_FREE (rwork);
+ SUPERLU_FREE (wwork);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+#if 0
+ Destroy_CompCol_Matrix(&A);
+ Destroy_CompCol_Matrix(&ASAV);
+#else
+ SUPERLU_FREE(a); SUPERLU_FREE(asub); SUPERLU_FREE(xa);
+ SUPERLU_FREE(a_save); SUPERLU_FREE(asub_save); SUPERLU_FREE(xa_save);
+#endif
+ if ( lwork > 0 ) {
+ SUPERLU_FREE (work);
+ Destroy_SuperMatrix_Store(&L);
+ Destroy_SuperMatrix_Store(&U);
+ }
+
+ return 0;
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+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, double *u, FILE **fp)
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "ht:n:w:r:s:m:b:c:l:u:f:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-w <int> - panel size\n");
+ printf("\t-r <int> - granularity of relaxed supernodes\n");
+ exit(1);
+ break;
+ case 't': strcpy(matrix_type, optarg);
+ break;
+ case 'n': *n = atoi(optarg);
+ break;
+ case 'w': *w = atoi(optarg);
+ break;
+ case 'r': *relax = atoi(optarg);
+ break;
+ case 's': *nrhs = atoi(optarg);
+ break;
+ case 'm': *maxsuper = atoi(optarg);
+ break;
+ case 'b': *rowblk = atoi(optarg);
+ break;
+ case 'c': *colblk = atoi(optarg);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'f':
+ if ( !(*fp = fopen(optarg, "r")) ) {
+ ABORT("File does not exist");
+ }
+ printf(".. test sparse matrix in file: %s\n", optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/TESTING/cgst01.c b/SuperLU_5.2.0/TESTING/cgst01.c
new file mode 100644
index 0000000..b8821a0
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/cgst01.c
@@ -0,0 +1,182 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+#include <math.h>
+#include "slu_cdefs.h"
+
+int cgst01(int m, int n, SuperMatrix *A, SuperMatrix *L,
+ SuperMatrix *U, int *perm_c, int *perm_r, float *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ Arguments
+ ==========
+
+ M (input) INT
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INT
+ The number of columns of the matrix A. N >= 0.
+
+ A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
+ The original M x N matrix A.
+
+ L (input) SuperMatrix *, dimension (L->nrow, L->ncol)
+ The factor matrix 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.
+
+ RESID (output) FLOAT*
+ norm(L*U - A) / ( N * norm(A) * EPS )
+
+ =====================================================================
+*/
+
+ /* Local variables */
+ complex zero = {0.0, 0.0};
+ int i, j, k, arow, lptr,isub, urow, superno, fsupc, u_part;
+ complex utemp, comp_temp;
+ float anorm, tnorm, cnorm;
+ float eps;
+ complex *work;
+ SCformat *Lstore;
+ NCformat *Astore, *Ustore;
+ complex *Aval, *Lval, *Uval;
+ int *colbeg, *colend;
+
+ /* Function prototypes */
+ extern float clangs(char *, SuperMatrix *);
+
+ /* Quick exit if M = 0 or N = 0. */
+
+ if (m <= 0 || n <= 0) {
+ *resid = 0.f;
+ return 0;
+ }
+
+ work = (complex *)complexCalloc(m);
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+
+ 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];
+ }
+
+ /* Determine EPS and the norm of A. */
+ eps = smach("Epsilon");
+ anorm = clangs("1", A);
+ cnorm = 0.;
+
+ /* Compute the product L*U, one column at a time */
+ for (k = 0; k < n; ++k) {
+
+ /* The U part outside the rectangular supernode */
+ for (i = U_NZ_START(k); i < U_NZ_START(k+1); ++i) {
+ urow = U_SUB(i);
+ utemp = Uval[i];
+ superno = Lstore->col_to_sup[urow];
+ fsupc = L_FST_SUPC(superno);
+ u_part = urow - fsupc + 1;
+ lptr = L_SUB_START(fsupc) + u_part;
+ work[L_SUB(lptr-1)].r -= utemp.r;
+ work[L_SUB(lptr-1)].i -= utemp.i;
+ for (j = L_NZ_START(urow) + u_part; j < L_NZ_START(urow+1); ++j) {
+ isub = L_SUB(lptr);
+ cc_mult(&comp_temp, &utemp, &Lval[j]);
+ c_sub(&work[isub], &work[isub], &comp_temp);
+ ++lptr;
+ }
+ }
+
+ /* The U part inside the rectangular supernode */
+ superno = Lstore->col_to_sup[k];
+ fsupc = L_FST_SUPC(superno);
+ urow = L_NZ_START(k);
+ for (i = fsupc; i <= k; ++i) {
+ utemp = Lval[urow++];
+ u_part = i - fsupc + 1;
+ lptr = L_SUB_START(fsupc) + u_part;
+ work[L_SUB(lptr-1)].r -= utemp.r;
+ work[L_SUB(lptr-1)].i -= utemp.i;
+ for (j = L_NZ_START(i)+u_part; j < L_NZ_START(i+1); ++j) {
+ isub = L_SUB(lptr);
+ cc_mult(&comp_temp, &utemp, &Lval[j]);
+ c_sub(&work[isub], &work[isub], &comp_temp);
+ ++lptr;
+ }
+ }
+
+ /* Now compute A[k] - (L*U)[k] (Both matrices may be permuted.) */
+
+ 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;
+ }
+
+ /* Now compute the 1-norm of the column vector work */
+ tnorm = 0.;
+ for (i = 0; i < m; ++i) {
+ tnorm += fabs(work[i].r) + fabs(work[i].i);
+ work[i] = zero;
+ }
+ cnorm = SUPERLU_MAX(tnorm, cnorm);
+ }
+
+ *resid = cnorm;
+
+ if (anorm <= 0.f) {
+ if (*resid != 0.f) {
+ *resid = 1.f / eps;
+ }
+ } else {
+ *resid = *resid / (float) n / anorm / eps;
+ }
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(colbeg);
+ SUPERLU_FREE(colend);
+ return 0;
+
+/* End of CGST01 */
+
+} /* cgst01_ */
+
diff --git a/SuperLU_5.2.0/TESTING/cgst02.c b/SuperLU_5.2.0/TESTING/cgst02.c
new file mode 100644
index 0000000..cf306fd
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/cgst02.c
@@ -0,0 +1,146 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include "slu_cdefs.h"
+
+int cgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
+ complex *x, int ldx, complex *b, int ldb, float *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ Arguments
+ =========
+
+ TRANS (input) trans_t
+ Specifies the form of the system of equations:
+ = NOTRANS: A *x = b
+ = TRANS : A'*x = b, where A' is the transpose of A
+ = CONJ : A'*x = b, where A' is the transpose of A
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ NRHS (input) INTEGER
+ The number of columns of B, the matrix of right hand sides.
+ NRHS >= 0.
+
+ A (input) SuperMatrix*, dimension (LDA,N)
+ The original M x N sparse matrix A.
+
+ X (input) COMPLEX PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors for the system of linear
+ equations.
+
+ LDX (input) INTEGER
+ The leading dimension of the array X. If TRANS = NOTRANS,
+ LDX >= max(1,N); if TRANS = TRANS or CONJ, LDX >= max(1,M).
+
+ B (input/output) COMPLEX PRECISION array, dimension (LDB,NRHS)
+ On entry, the right hand side vectors for the system of
+ linear equations.
+ On exit, B is overwritten with the difference B - A*X.
+
+ LDB (input) INTEGER
+ The leading dimension of the array B. IF TRANS = NOTRANS,
+ LDB >= max(1,M); if TRANS = TRANS or CONJ, LDB >= max(1,N).
+
+ RESID (output) FLOAT PRECISION
+ The maximum over the number of right hand sides of
+ norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
+
+ =====================================================================
+*/
+
+ /* Table of constant values */
+ complex alpha = {-1., 0.0};
+ complex beta = {1., 0.0};
+ int c__1 = 1;
+
+ /* System generated locals */
+ float d__1, d__2;
+
+ /* Local variables */
+ int j;
+ int n1, n2;
+ float anorm, bnorm;
+ float xnorm;
+ float eps;
+ char transc[1];
+
+ /* Function prototypes */
+ extern float clangs(char *, SuperMatrix *);
+ extern float scasum_(int *, complex *, int *);
+
+ /* Function Body */
+ if ( m <= 0 || n <= 0 || nrhs == 0) {
+ *resid = 0.;
+ return 0;
+ }
+
+ if ( (trans == TRANS) || (trans == CONJ) ) {
+ n1 = n;
+ n2 = m;
+ *transc = 'T';
+ } else {
+ n1 = m;
+ n2 = n;
+ *transc = 'N';
+ }
+
+ /* Exit with RESID = 1/EPS if ANORM = 0. */
+ eps = smach("Epsilon");
+ anorm = clangs("1", A);
+ if (anorm <= 0.) {
+ *resid = 1. / eps;
+ return 0;
+ }
+
+ /* Compute B - A*X (or B - A'*X ) and store in B. */
+
+ sp_cgemm(transc, "N", n1, nrhs, n2, alpha, A, x, ldx, beta, b, ldb);
+
+ /* Compute the maximum over the number of right hand sides of
+ norm(B - A*X) / ( norm(A) * norm(X) * EPS ) . */
+
+ *resid = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ bnorm = scasum_(&n1, &b[j*ldb], &c__1);
+ xnorm = scasum_(&n2, &x[j*ldx], &c__1);
+ if (xnorm <= 0.) {
+ *resid = 1. / eps;
+ } else {
+ /* Computing MAX */
+ d__1 = *resid, d__2 = bnorm / anorm / xnorm / eps;
+ *resid = SUPERLU_MAX(d__1, d__2);
+ }
+ }
+
+ return 0;
+
+} /* cgst02 */
+
diff --git a/SuperLU_5.2.0/TESTING/cgst04.c b/SuperLU_5.2.0/TESTING/cgst04.c
new file mode 100644
index 0000000..a6e8bf3
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/cgst04.c
@@ -0,0 +1,131 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+#include <math.h>
+#include "slu_cdefs.h"
+
+int cgst04(int n, int nrhs, complex *x, int ldx, complex *xact,
+ int ldxact, float rcond, float *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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
+ machine epsilon.
+
+ Arguments
+ =========
+
+ N (input) INT
+ The number of rows of the matrices X and XACT. N >= 0.
+
+ NRHS (input) INT
+ The number of columns of the matrices X and XACT. NRHS >= 0.
+
+ X (input) COMPLEX PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors. Each vector is stored as a
+ column of the matrix X.
+
+ LDX (input) INT
+ The leading dimension of the array X. LDX >= max(1,N).
+
+ XACT (input) COMPLEX PRECISION array, dimension( LDX, NRHS )
+ The exact solution vectors. Each vector is stored as a
+ column of the matrix XACT.
+
+ LDXACT (input) INT
+ The leading dimension of the array XACT. LDXACT >= max(1,N).
+
+ RCOND (input) COMPLEX PRECISION
+ The reciprocal of the condition number of the coefficient
+ matrix in the system of equations.
+
+ RESID (output) FLOAT PRECISION
+ The maximum over the NRHS solution vectors of
+ ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS )
+
+ =====================================================================
+*/
+ /* Table of constant values */
+ int c__1 = 1;
+
+ /* System generated locals */
+ float d__1, d__2, d__3, d__4;
+
+ /* Local variables */
+ int i, j, n__1;
+ int ix;
+ float xnorm;
+ float eps;
+ float diffnm;
+
+ /* Function prototypes */
+ extern int icamax_(int *, complex *, int *);
+
+ /* Quick exit if N = 0 or NRHS = 0. */
+ if ( n <= 0 || nrhs <= 0 ) {
+ *resid = 0.;
+ return 0;
+ }
+
+ /* Exit with RESID = 1/EPS if RCOND is invalid. */
+ eps = smach("Epsilon");
+ if ( rcond < 0. ) {
+ *resid = 1. / eps;
+ return 0;
+ }
+
+ /* Compute the maximum of norm(X - XACT) / ( norm(XACT) * EPS )
+ over all the vectors X and XACT . */
+
+ *resid = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ n__1 = n;
+ ix = icamax_(&n__1, &xact[j*ldxact], &c__1);
+ xnorm = (d__1 = xact[ix-1 + j*ldxact].r, fabs(d__1)) +
+ (d__2 = xact[ix-1 + j*ldxact].i, fabs(d__2));
+
+ diffnm = 0.;
+ for (i = 0; i < n; ++i) {
+ /* Computing MAX */
+ d__3 = diffnm;
+ d__4 = (d__1 = x[i+j*ldx].r-xact[i+j*ldxact].r, fabs(d__1)) +
+ (d__2 = x[i+j*ldx].i-xact[i+j*ldxact].i, fabs(d__2));
+ diffnm = SUPERLU_MAX(d__3,d__4);
+ }
+ if (xnorm <= 0.) {
+ if (diffnm > 0.) {
+ *resid = 1. / eps;
+ }
+ } else {
+ /* Computing MAX */
+ d__1 = *resid, d__2 = diffnm / xnorm * rcond;
+ *resid = SUPERLU_MAX(d__1,d__2);
+ }
+ }
+ if (*resid * eps < 1.) {
+ *resid /= eps;
+ }
+
+ return 0;
+
+} /* cgst04_ */
diff --git a/SuperLU_5.2.0/TESTING/cgst07.c b/SuperLU_5.2.0/TESTING/cgst07.c
new file mode 100644
index 0000000..b395d0d
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/cgst07.c
@@ -0,0 +1,237 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include <math.h>
+#include "slu_cdefs.h"
+
+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)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ RESLTS(1) = test of the error bound
+ = norm(X - XACT) / ( norm(X) * FERR )
+ A large value is returned if this ratio is not less than one.
+
+ RESLTS(2) = residual from the iterative refinement routine
+ = the maximum of BERR / ( (n+1)*EPS + (*) ), where
+ (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
+
+ Arguments
+ =========
+
+ TRANS (input) trans_t
+ Specifies the form of the system of equations.
+ = NOTRANS: A *x = b
+ = TRANS : A'*x = b, where A' is the transpose of A
+ = CONJ : A'*x = b, where A' is the transpose of A
+
+ N (input) INT
+ The number of rows of the matrices X and XACT. N >= 0.
+
+ NRHS (input) INT
+ The number of columns of the matrices X and XACT. NRHS >= 0.
+
+
+ A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
+ The original n by n matrix A.
+
+ B (input) COMPLEX PRECISION array, dimension (LDB,NRHS)
+ The right hand side vectors for the system of linear
+ equations.
+
+ LDB (input) INT
+ The leading dimension of the array B. LDB >= max(1,N).
+
+ X (input) COMPLEX PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors. Each vector is stored as a
+ column of the matrix X.
+
+ LDX (input) INT
+ The leading dimension of the array X. LDX >= max(1,N).
+
+ XACT (input) COMPLEX PRECISION array, dimension (LDX,NRHS)
+ The exact solution vectors. Each vector is stored as a
+ column of the matrix XACT.
+
+ LDXACT (input) INT
+ The leading dimension of the array XACT. LDXACT >= max(1,N).
+
+
+ FERR (input) COMPLEX PRECISION array, dimension (NRHS)
+ The estimated forward error bounds for each solution vector
+ X. If XTRUE is the true solution, FERR bounds the magnitude
+ of the largest entry in (X - XTRUE) divided by the magnitude
+ of the largest entry in X.
+
+ BERR (input) COMPLEX PRECISION array, dimension (NRHS)
+ The componentwise relative backward error of each solution
+ vector (i.e., the smallest relative change in any entry of A
+
+ or B that makes X an exact solution).
+
+ RESLTS (output) FLOAT PRECISION array, dimension (2)
+ The maximum over the NRHS solution vectors of the ratios:
+ RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
+ RESLTS(2) = BERR / ( (n+1)*EPS + (*) )
+
+ =====================================================================
+*/
+
+ /* Table of constant values */
+ int c__1 = 1;
+
+ /* System generated locals */
+ float d__1, d__2;
+ float d__3, d__4;
+
+ /* Local variables */
+ float diff, axbi;
+ int imax, irow, n__1;
+ int i, j, k;
+ float unfl, ovfl;
+ float xnorm;
+ float errbnd;
+ int notran;
+ float eps, tmp;
+ float *rwork;
+ complex *Aval;
+ NCformat *Astore;
+
+ /* Function prototypes */
+ extern int icamax_(int *, complex *, int *);
+
+
+ /* Quick exit if N = 0 or NRHS = 0. */
+ if ( n <= 0 || nrhs <= 0 ) {
+ reslts[0] = 0.;
+ reslts[1] = 0.;
+ return 0;
+ }
+
+ eps = smach("Epsilon");
+ unfl = smach("Safe minimum");
+ ovfl = 1. / unfl;
+ notran = (trans == NOTRANS);
+
+ rwork = (float *) SUPERLU_MALLOC(n*sizeof(float));
+ if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
+ Astore = A->Store;
+ Aval = (complex *) Astore->nzval;
+
+ /* Test 1: Compute the maximum of
+ norm(X - XACT) / ( norm(X) * FERR )
+ over all the vectors X and XACT using the infinity-norm. */
+
+ errbnd = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ n__1 = n;
+ imax = icamax_(&n__1, &x[j*ldx], &c__1);
+ d__1 = (d__2 = x[imax-1 + j*ldx].r, fabs(d__2)) +
+ (d__3 = x[imax-1 + j*ldx].i, fabs(d__3));
+ xnorm = SUPERLU_MAX(d__1,unfl);
+ diff = 0.;
+ for (i = 0; i < n; ++i) {
+ d__1 = (d__2 = x[i+j*ldx].r - xact[i+j*ldxact].r, fabs(d__2)) +
+ (d__3 = x[i+j*ldx].i - xact[i+j*ldxact].i, fabs(d__3));
+ diff = SUPERLU_MAX(diff, d__1);
+ }
+
+ if (xnorm > 1.) {
+ goto L20;
+ } else if (diff <= ovfl * xnorm) {
+ goto L20;
+ } else {
+ errbnd = 1. / eps;
+ goto L30;
+ }
+
+L20:
+#if 0
+ if (diff / xnorm <= ferr[j]) {
+ d__1 = diff / xnorm / ferr[j];
+ errbnd = SUPERLU_MAX(errbnd,d__1);
+ } else {
+ errbnd = 1. / eps;
+ }
+#endif
+ d__1 = diff / xnorm / ferr[j];
+ errbnd = SUPERLU_MAX(errbnd,d__1);
+ /*printf("Ferr: %f\n", errbnd);*/
+L30:
+ ;
+ }
+ reslts[0] = errbnd;
+
+ /* Test 2: Compute the maximum of BERR / ( (n+1)*EPS + (*) ), where
+ (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) + abs(b))_i ) */
+
+ for (k = 0; k < nrhs; ++k) {
+ for (i = 0; i < n; ++i)
+ rwork[i] = (d__1 = b[i + k*ldb].r, fabs(d__1)) +
+ (d__2 = b[i + k*ldb].i, fabs(d__2));
+ if ( notran ) {
+ for (j = 0; j < n; ++j) {
+ tmp = (d__1 = x[j + k*ldx].r, fabs(d__1)) +
+ (d__2 = x[j + k*ldx].i, fabs(d__2));
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ d__1 = (d__2 = Aval[i].r, fabs(d__2)) +
+ (d__3 = Aval[i].i, fabs(d__3));
+ rwork[Astore->rowind[i]] += d__1 * tmp;
+ }
+ }
+ } else {
+ for (j = 0; j < n; ++j) {
+ tmp = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ d__1 = (d__2 = x[irow + k*ldx].r, fabs(d__2)) +
+ (d__3 = x[irow + k*ldx].i, fabs(d__3));
+ d__2 = (d__3 = Aval[i].r, fabs(d__3)) +
+ (d__4 = Aval[i].i, fabs(d__4));
+ tmp += d__2 * d__1;
+ }
+ rwork[j] += tmp;
+ }
+ }
+
+ axbi = rwork[0];
+ for (i = 1; i < n; ++i) axbi = SUPERLU_MIN(axbi, rwork[i]);
+
+ /* Computing MAX */
+ d__1 = axbi, d__2 = (n + 1) * unfl;
+ tmp = berr[k] / ((n + 1) * eps + (n + 1) * unfl / SUPERLU_MAX(d__1,d__2));
+
+ if (k == 0) {
+ reslts[1] = tmp;
+ } else {
+ reslts[1] = SUPERLU_MAX(reslts[1],tmp);
+ }
+ }
+
+ SUPERLU_FREE(rwork);
+ return 0;
+
+} /* cgst07 */
diff --git a/SuperLU_5.2.0/TESTING/ctest.csh b/SuperLU_5.2.0/TESTING/ctest.csh
new file mode 100755
index 0000000..6bd81c2
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/ctest.csh
@@ -0,0 +1,50 @@
+#!/bin/csh
+
+set ofile = ctest.out # output file
+if ( -e $ofile ) then
+ rm -f $ofile
+endif
+echo "Single-precision complex testing output" > $ofile
+
+set MATRICES = (LAPACK cg20.cua)
+set NVAL = (9 19)
+set NRHS = (5)
+set LWORK = (0 10000000)
+
+#
+# Loop through all matrices ...
+#
+foreach m ($MATRICES)
+
+ #--------------------------------------------
+ # Test matrix types generated in LAPACK-style
+ #--------------------------------------------
+ if ($m == 'LAPACK') then
+ echo '== LAPACK test matrices' >> $ofile
+ foreach n ($NVAL)
+ foreach s ($NRHS)
+ foreach l ($LWORK)
+ echo '' >> $ofile
+ echo 'n='$n 'nrhs='$s 'lwork='$l >> $ofile
+ ./ctest -t "LA" -l $l -n $n -s $s >> $ofile
+ end
+ end
+ end
+ #--------------------------------------------
+ # Test a specified sparse matrix
+ #--------------------------------------------
+ else
+ echo '' >> $ofile
+ echo '== sparse matrix:' $m >> $ofile
+ foreach s ($NRHS)
+ foreach l ($LWORK)
+ echo '' >> $ofile
+ echo 'nrhs='$s 'lwork='$l >> $ofile
+ ./ctest -t "SP" -s $s -l $l -f ../EXAMPLE/$m >> $ofile
+ end
+ end
+ endif
+
+end
+
+
diff --git a/SuperLU_5.2.0/TESTING/ddrive.c b/SuperLU_5.2.0/TESTING/ddrive.c
new file mode 100644
index 0000000..2c3f6fe
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/ddrive.c
@@ -0,0 +1,571 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+/*
+ * File name: ddrive.c
+ * Purpose: MAIN test program
+ */
+#include <string.h>
+#include "slu_ddefs.h"
+
+#define NTESTS 5 /* Number of test types */
+#define NTYPES 11 /* Number of matrix types */
+#define NTRAN 2
+#define THRESH 20.0
+#define FMT1 "%10s:n=%d, test(%d)=%12.5g\n"
+#define FMT2 "%10s:fact=%4d, trans=%4d, equed=%c, n=%d, imat=%d, test(%d)=%12.5g\n"
+#define FMT3 "%10s:info=%d, izero=%d, n=%d, nrhs=%d, imat=%d, nfail=%d\n"
+
+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, double *u, FILE **fp);
+
+main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * DDRIVE is the main test program for the DOUBLE linear
+ * equation driver routines DGSSV and DGSSVX.
+ *
+ * The program is invoked by a shell script file -- dtest.csh.
+ * The output from the tests are written into a file -- dtest.out.
+ *
+ * =====================================================================
+ */
+ double *a, *a_save;
+ int *asub, *asub_save;
+ int *xa, *xa_save;
+ SuperMatrix A, B, X, L, U;
+ SuperMatrix ASAV, AC;
+ GlobalLU_t Glu; /* Not needed on return. */
+ mem_usage_t mem_usage;
+ int *perm_r; /* row permutation from partial pivoting */
+ int *perm_c, *pc_save; /* column permutation */
+ int *etree;
+ double zero = 0.0;
+ double *R, *C;
+ double *ferr, *berr;
+ double *rwork;
+ double *wwork;
+ void *work;
+ int info, lwork, nrhs, panel_size, relax;
+ int m, n, nnz;
+ double *xact;
+ double *rhsb, *solx, *bsav;
+ int ldb, ldx;
+ double rpg, rcond;
+ int i, j, k1;
+ double rowcnd, colcnd, amax;
+ int maxsuper, rowblk, colblk;
+ int prefact, nofact, equil, iequed;
+ int nt, nrun, nfail, nerrs, imat, fimat, nimat;
+ int nfact, ifact, itran;
+ int kl, ku, mode, lda;
+ int zerot, izero, ioff;
+ double u;
+ double anorm, cndnum;
+ double *Afull;
+ double result[NTESTS];
+ superlu_options_t options;
+ fact_t fact;
+ trans_t trans;
+ SuperLUStat_t stat;
+ static char matrix_type[8];
+ static char equed[1], path[4], sym[1], dist[1];
+ FILE *fp;
+
+ /* Fixed set of parameters */
+ int iseed[] = {1988, 1989, 1990, 1991};
+ static char equeds[] = {'N', 'R', 'C', 'B'};
+ static fact_t facts[] = {FACTORED, DOFACT, SamePattern,
+ SamePattern_SameRowPerm};
+ static trans_t transs[] = {NOTRANS, TRANS, CONJ};
+
+ /* Some function prototypes */
+ 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_slu(char *, int *, int *, int *, char *, int *, int *,
+ double *, int *, double *, char *);
+ extern int dlatms_slu(int *, int *, char *, int *, char *, double *d,
+ int *, double *, double *, int *, int *,
+ char *, double *, int *, double *, int *);
+ extern int sp_dconvert(int, int, double *, int, int, int,
+ double *a, int *, int *, int *);
+
+
+ /* Executable statements */
+
+ strcpy(path, "DGE");
+ nrun = 0;
+ nfail = 0;
+ nerrs = 0;
+
+ /* Defaults */
+ lwork = 0;
+ n = 1;
+ nrhs = 1;
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+ u = 1.0;
+ strcpy(matrix_type, "LA");
+ parse_command_line(argc, argv, matrix_type, &n,
+ &panel_size, &relax, &nrhs, &maxsuper,
+ &rowblk, &colblk, &lwork, &u, &fp);
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ fprintf(stderr, "expert: cannot allocate %d bytes\n", lwork);
+ exit (-1);
+ }
+ }
+
+ /* Set the default input options. */
+ set_default_options(&options);
+ options.DiagPivotThresh = u;
+ options.PrintStat = NO;
+ options.PivotGrowth = YES;
+ options.ConditionNumber = YES;
+ options.IterRefine = SLU_DOUBLE;
+
+ if ( strcmp(matrix_type, "LA") == 0 ) {
+ /* Test LAPACK matrix suite. */
+ m = n;
+ lda = SUPERLU_MAX(n, 1);
+ nnz = n * n; /* upper bound */
+ fimat = 1;
+ nimat = NTYPES;
+ Afull = doubleCalloc(lda * n);
+ dallocateA(n, nnz, &a, &asub, &xa);
+ } else {
+ /* Read a sparse matrix */
+ fimat = nimat = 0;
+ dreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ }
+
+ dallocateA(n, nnz, &a_save, &asub_save, &xa_save);
+ rhsb = doubleMalloc(m * nrhs);
+ bsav = doubleMalloc(m * nrhs);
+ solx = doubleMalloc(n * nrhs);
+ ldb = m;
+ ldx = n;
+ dCreate_Dense_Matrix(&B, m, nrhs, rhsb, ldb, SLU_DN, SLU_D, SLU_GE);
+ dCreate_Dense_Matrix(&X, n, nrhs, solx, ldx, SLU_DN, SLU_D, SLU_GE);
+ xact = doubleMalloc(n * nrhs);
+ etree = intMalloc(n);
+ perm_r = intMalloc(n);
+ perm_c = intMalloc(n);
+ pc_save = intMalloc(n);
+ R = (double *) SUPERLU_MALLOC(m*sizeof(double));
+ C = (double *) SUPERLU_MALLOC(n*sizeof(double));
+ ferr = (double *) SUPERLU_MALLOC(nrhs*sizeof(double));
+ berr = (double *) SUPERLU_MALLOC(nrhs*sizeof(double));
+ j = SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs);
+ rwork = (double *) SUPERLU_MALLOC(j*sizeof(double));
+ for (i = 0; i < j; ++i) rwork[i] = 0.;
+ if ( !R ) ABORT("SUPERLU_MALLOC fails for R");
+ if ( !C ) ABORT("SUPERLU_MALLOC fails for C");
+ if ( !ferr ) ABORT("SUPERLU_MALLOC fails for ferr");
+ if ( !berr ) ABORT("SUPERLU_MALLOC fails for berr");
+ if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
+ wwork = doubleCalloc( SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs) );
+
+ for (i = 0; i < n; ++i) perm_c[i] = pc_save[i] = i;
+ options.ColPerm = MY_PERMC;
+
+ for (imat = fimat; imat <= nimat; ++imat) { /* All matrix types */
+
+ if ( imat ) {
+
+ /* Skip types 5, 6, or 7 if the matrix size is too small. */
+ zerot = (imat >= 5 && imat <= 7);
+ if ( zerot && n < imat-4 )
+ continue;
+
+ /* Set up parameters with DLATB4 and generate a test matrix
+ with DLATMS. */
+ dlatb4_slu(path, &imat, &n, &n, sym, &kl, &ku, &anorm, &mode,
+ &cndnum, dist);
+
+ dlatms_slu(&n, &n, dist, iseed, sym, &rwork[0], &mode, &cndnum,
+ &anorm, &kl, &ku, "No packing", Afull, &lda,
+ &wwork[0], &info);
+
+ if ( info ) {
+ printf(FMT3, "DLATMS", info, izero, n, nrhs, imat, nfail);
+ continue;
+ }
+
+ /* For types 5-7, zero one or more columns of the matrix
+ to test that INFO is returned correctly. */
+ if ( zerot ) {
+ if ( imat == 5 ) izero = 1;
+ else if ( imat == 6 ) izero = n;
+ else izero = n / 2 + 1;
+ ioff = (izero - 1) * lda;
+ if ( imat < 7 ) {
+ for (i = 0; i < n; ++i) Afull[ioff + i] = zero;
+ } else {
+ for (j = 0; j < n - izero + 1; ++j)
+ for (i = 0; i < n; ++i)
+ Afull[ioff + i + j*lda] = zero;
+ }
+ } else {
+ izero = 0;
+ }
+
+ /* Convert to sparse representation. */
+ sp_dconvert(n, n, Afull, lda, kl, ku, a, asub, xa, &nnz);
+
+ } else {
+ izero = 0;
+ zerot = 0;
+ }
+
+ dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
+
+ /* Save a copy of matrix A in ASAV */
+ dCreate_CompCol_Matrix(&ASAV, m, n, nnz, a_save, asub_save, xa_save,
+ SLU_NC, SLU_D, SLU_GE);
+ dCopy_CompCol_Matrix(&A, &ASAV);
+
+ /* Form exact solution. */
+ dGenXtrue(n, nrhs, xact, ldx);
+
+ StatInit(&stat);
+
+ for (iequed = 0; iequed < 4; ++iequed) {
+ *equed = equeds[iequed];
+ if (iequed == 0) nfact = 4;
+ else nfact = 1; /* Only test factored, pre-equilibrated matrix */
+
+ for (ifact = 0; ifact < nfact; ++ifact) {
+ fact = facts[ifact];
+ options.Fact = fact;
+
+ for (equil = 0; equil < 2; ++equil) {
+ options.Equil = equil;
+ prefact = ( options.Fact == FACTORED ||
+ options.Fact == SamePattern_SameRowPerm );
+ /* Need a first factor */
+ nofact = (options.Fact != FACTORED); /* Not factored */
+
+ /* Restore the matrix A. */
+ dCopy_CompCol_Matrix(&ASAV, &A);
+
+ if ( zerot ) {
+ if ( prefact ) continue;
+ } else if ( options.Fact == FACTORED ) {
+ if ( equil || iequed ) {
+ /* Compute row and column scale factors to
+ equilibrate matrix A. */
+ dgsequ(&A, R, C, &rowcnd, &colcnd, &amax, &info);
+
+ /* Force equilibration. */
+ if ( !info && n > 0 ) {
+ if ( strncmp(equed, "R", 1)==0 ) {
+ rowcnd = 0.;
+ colcnd = 1.;
+ } else if ( strncmp(equed, "C", 1)==0 ) {
+ rowcnd = 1.;
+ colcnd = 0.;
+ } else if ( strncmp(equed, "B", 1)==0 ) {
+ rowcnd = 0.;
+ colcnd = 0.;
+ }
+ }
+
+ /* Equilibrate the matrix. */
+ dlaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
+ }
+ }
+
+ if ( prefact ) { /* Need a factor for the first time */
+
+ /* Save Fact option. */
+ fact = options.Fact;
+ options.Fact = DOFACT;
+
+ /* Preorder the matrix, obtain the column etree. */
+ sp_preorder(&options, &A, perm_c, etree, &AC);
+
+ /* Factor the matrix AC. */
+ dgstrf(&options, &AC, relax, panel_size,
+ etree, work, lwork, perm_c, perm_r, &L, &U,
+ &Glu, &stat, &info);
+
+ if ( info ) {
+ printf("** First factor: info %d, equed %c\n",
+ info, *equed);
+ if ( lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n",
+ info - n);
+ exit(0);
+ }
+ }
+
+ Destroy_CompCol_Permuted(&AC);
+
+ /* Restore Fact option. */
+ options.Fact = fact;
+ } /* if .. first time factor */
+
+ for (itran = 0; itran < NTRAN; ++itran) {
+ trans = transs[itran];
+ options.Trans = trans;
+
+ /* Restore the matrix A. */
+ dCopy_CompCol_Matrix(&ASAV, &A);
+
+ /* Set the right hand side. */
+ dFillRHS(trans, nrhs, xact, ldx, &A, &B);
+ dCopy_Dense_Matrix(m, nrhs, rhsb, ldb, bsav, ldb);
+
+ /*----------------
+ * Test dgssv
+ *----------------*/
+ if ( options.Fact == DOFACT && itran == 0) {
+ /* Not yet factored, and untransposed */
+
+ dCopy_Dense_Matrix(m, nrhs, rhsb, ldb, solx, ldx);
+ dgssv(&options, &A, perm_c, perm_r, &L, &U, &X,
+ &stat, &info);
+
+ if ( info && info != izero ) {
+ printf(FMT3, "dgssv",
+ info, izero, n, nrhs, imat, nfail);
+ } else {
+ /* Reconstruct matrix from factors and
+ compute residual. */
+ 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);
+ dgst02(trans, m, n, nrhs, &A, solx,
+ ldx, wwork,ldb, &result[1]);
+ nt = 2;
+ }
+
+ /* Print information about the tests that
+ did not pass the threshold. */
+ for (i = 0; i < nt; ++i) {
+ if ( result[i] >= THRESH ) {
+ printf(FMT1, "dgssv", n, i,
+ result[i]);
+ ++nfail;
+ }
+ }
+ nrun += nt;
+ } /* else .. info == 0 */
+
+ /* Restore perm_c. */
+ for (i = 0; i < n; ++i) perm_c[i] = pc_save[i];
+
+ if (lwork == 0) {
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+ } /* if .. end of testing dgssv */
+
+ /*----------------
+ * Test dgssvx
+ *----------------*/
+
+ /* Equilibrate the matrix if fact = FACTORED and
+ equed = 'R', 'C', or 'B'. */
+ if ( options.Fact == FACTORED &&
+ (equil || iequed) && n > 0 ) {
+ dlaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
+ }
+
+ /* Solve the system and compute the condition number
+ and error bounds using dgssvx. */
+ dgssvx(&options, &A, perm_c, perm_r, etree,
+ equed, R, C, &L, &U, work, lwork, &B, &X, &rpg,
+ &rcond, ferr, berr, &Glu,
+ &mem_usage, &stat, &info);
+
+ if ( info && info != izero ) {
+ printf(FMT3, "dgssvx",
+ info, izero, n, nrhs, imat, nfail);
+ if ( lwork == -1 ) {
+ printf("** Estimated memory: %.0f bytes\n",
+ mem_usage.total_needed);
+ exit(0);
+ }
+ } else {
+ if ( !prefact ) {
+ /* Reconstruct matrix from factors and
+ compute residual. */
+ dgst01(m, n, &A, &L, &U, perm_c, perm_r,
+ &result[0]);
+ k1 = 0;
+ } else {
+ k1 = 1;
+ }
+
+ if ( !info ) {
+ /* Compute residual of the computed solution.*/
+ dCopy_Dense_Matrix(m, nrhs, bsav, ldb,
+ wwork, ldb);
+ dgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
+ wwork, ldb, &result[1]);
+
+ /* Check solution from generated exact
+ solution. */
+ dgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
+ &result[2]);
+
+ /* Check the error bounds from iterative
+ refinement. */
+ dgst07(trans, n, nrhs, &ASAV, bsav, ldb,
+ solx, ldx, xact, ldx, ferr, berr,
+ &result[3]);
+
+ /* Print information about the tests that did
+ not pass the threshold. */
+ for (i = k1; i < NTESTS; ++i) {
+ if ( result[i] >= THRESH ) {
+ printf(FMT2, "dgssvx",
+ options.Fact, trans, *equed,
+ n, imat, i, result[i]);
+ ++nfail;
+ }
+ }
+ nrun += NTESTS;
+ } /* if .. info == 0 */
+ } /* else .. end of testing dgssvx */
+
+ } /* for itran ... */
+
+ if ( lwork == 0 ) {
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+
+ } /* for equil ... */
+ } /* for ifact ... */
+ } /* for iequed ... */
+#if 0
+ if ( !info ) {
+ PrintPerf(&L, &U, &mem_usage, rpg, rcond, ferr, berr, equed);
+ }
+#endif
+ Destroy_SuperMatrix_Store(&A);
+ Destroy_SuperMatrix_Store(&ASAV);
+ StatFree(&stat);
+
+ } /* for imat ... */
+
+ /* Print a summary of the results. */
+ PrintSumm("DGE", nfail, nrun, nerrs);
+
+ if ( strcmp(matrix_type, "LA") == 0 ) SUPERLU_FREE (Afull);
+ SUPERLU_FREE (rhsb);
+ SUPERLU_FREE (bsav);
+ SUPERLU_FREE (solx);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (pc_save);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ SUPERLU_FREE (rwork);
+ SUPERLU_FREE (wwork);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+#if 0
+ Destroy_CompCol_Matrix(&A);
+ Destroy_CompCol_Matrix(&ASAV);
+#else
+ SUPERLU_FREE(a); SUPERLU_FREE(asub); SUPERLU_FREE(xa);
+ SUPERLU_FREE(a_save); SUPERLU_FREE(asub_save); SUPERLU_FREE(xa_save);
+#endif
+ if ( lwork > 0 ) {
+ SUPERLU_FREE (work);
+ Destroy_SuperMatrix_Store(&L);
+ Destroy_SuperMatrix_Store(&U);
+ }
+
+ return 0;
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+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, double *u, FILE **fp)
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "ht:n:w:r:s:m:b:c:l:u:f:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-w <int> - panel size\n");
+ printf("\t-r <int> - granularity of relaxed supernodes\n");
+ exit(1);
+ break;
+ case 't': strcpy(matrix_type, optarg);
+ break;
+ case 'n': *n = atoi(optarg);
+ break;
+ case 'w': *w = atoi(optarg);
+ break;
+ case 'r': *relax = atoi(optarg);
+ break;
+ case 's': *nrhs = atoi(optarg);
+ break;
+ case 'm': *maxsuper = atoi(optarg);
+ break;
+ case 'b': *rowblk = atoi(optarg);
+ break;
+ case 'c': *colblk = atoi(optarg);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'f':
+ if ( !(*fp = fopen(optarg, "r")) ) {
+ ABORT("File does not exist");
+ }
+ printf(".. test sparse matrix in file: %s\n", optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/TESTING/dgst01.c b/SuperLU_5.2.0/TESTING/dgst01.c
new file mode 100644
index 0000000..9986d06
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/dgst01.c
@@ -0,0 +1,177 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+#include <math.h>
+#include "slu_ddefs.h"
+
+int dgst01(int m, int n, SuperMatrix *A, SuperMatrix *L,
+ SuperMatrix *U, int *perm_c, int *perm_r, double *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ Arguments
+ ==========
+
+ M (input) INT
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INT
+ The number of columns of the matrix A. N >= 0.
+
+ A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
+ The original M x N matrix A.
+
+ L (input) SuperMatrix *, dimension (L->nrow, L->ncol)
+ The factor matrix 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.
+
+ RESID (output) DOUBLE*
+ norm(L*U - A) / ( N * norm(A) * EPS )
+
+ =====================================================================
+*/
+
+ /* Local variables */
+ double zero = 0.0;
+ int i, j, k, arow, lptr,isub, urow, superno, fsupc, u_part;
+ double utemp, comp_temp;
+ double anorm, tnorm, cnorm;
+ double eps;
+ double *work;
+ SCformat *Lstore;
+ NCformat *Astore, *Ustore;
+ double *Aval, *Lval, *Uval;
+ int *colbeg, *colend;
+
+ /* Function prototypes */
+ extern double dlangs(char *, SuperMatrix *);
+
+ /* Quick exit if M = 0 or N = 0. */
+
+ if (m <= 0 || n <= 0) {
+ *resid = 0.f;
+ return 0;
+ }
+
+ work = (double *)doubleCalloc(m);
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+
+ 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];
+ }
+
+ /* Determine EPS and the norm of A. */
+ eps = dmach("Epsilon");
+ anorm = dlangs("1", A);
+ cnorm = 0.;
+
+ /* Compute the product L*U, one column at a time */
+ for (k = 0; k < n; ++k) {
+
+ /* The U part outside the rectangular supernode */
+ for (i = U_NZ_START(k); i < U_NZ_START(k+1); ++i) {
+ urow = U_SUB(i);
+ utemp = Uval[i];
+ superno = Lstore->col_to_sup[urow];
+ fsupc = L_FST_SUPC(superno);
+ u_part = urow - fsupc + 1;
+ lptr = L_SUB_START(fsupc) + u_part;
+ work[L_SUB(lptr-1)] -= utemp; /* L_ii = 1 */
+ for (j = L_NZ_START(urow) + u_part; j < L_NZ_START(urow+1); ++j) {
+ isub = L_SUB(lptr);
+ work[isub] -= Lval[j] * utemp;
+ ++lptr;
+ }
+ }
+
+ /* The U part inside the rectangular supernode */
+ superno = Lstore->col_to_sup[k];
+ fsupc = L_FST_SUPC(superno);
+ urow = L_NZ_START(k);
+ for (i = fsupc; i <= k; ++i) {
+ utemp = Lval[urow++];
+ u_part = i - fsupc + 1;
+ lptr = L_SUB_START(fsupc) + u_part;
+ work[L_SUB(lptr-1)] -= utemp; /* L_ii = 1 */
+ for (j = L_NZ_START(i)+u_part; j < L_NZ_START(i+1); ++j) {
+ isub = L_SUB(lptr);
+ work[isub] -= Lval[j] * utemp;
+ ++lptr;
+ }
+ }
+
+ /* Now compute A[k] - (L*U)[k] (Both matrices may be permuted.) */
+
+ for (i = colbeg[k]; i < colend[k]; ++i) {
+ arow = Astore->rowind[i];
+ work[perm_r[arow]] += Aval[i];
+ }
+
+ /* Now compute the 1-norm of the column vector work */
+ tnorm = 0.;
+ for (i = 0; i < m; ++i) {
+ tnorm += fabs(work[i]);
+ work[i] = zero;
+ }
+ cnorm = SUPERLU_MAX(tnorm, cnorm);
+ }
+
+ *resid = cnorm;
+
+ if (anorm <= 0.f) {
+ if (*resid != 0.f) {
+ *resid = 1.f / eps;
+ }
+ } else {
+ *resid = *resid / (float) n / anorm / eps;
+ }
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(colbeg);
+ SUPERLU_FREE(colend);
+ return 0;
+
+/* End of DGST01 */
+
+} /* dgst01_ */
+
diff --git a/SuperLU_5.2.0/TESTING/dgst02.c b/SuperLU_5.2.0/TESTING/dgst02.c
new file mode 100644
index 0000000..abedbbe
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/dgst02.c
@@ -0,0 +1,146 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include "slu_ddefs.h"
+
+int dgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
+ double *x, int ldx, double *b, int ldb, double *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ Arguments
+ =========
+
+ TRANS (input) trans_t
+ Specifies the form of the system of equations:
+ = NOTRANS: A *x = b
+ = TRANS : A'*x = b, where A' is the transpose of A
+ = CONJ : A'*x = b, where A' is the transpose of A
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ NRHS (input) INTEGER
+ The number of columns of B, the matrix of right hand sides.
+ NRHS >= 0.
+
+ A (input) SuperMatrix*, dimension (LDA,N)
+ The original M x N sparse matrix A.
+
+ X (input) DOUBLE PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors for the system of linear
+ equations.
+
+ LDX (input) INTEGER
+ The leading dimension of the array X. If TRANS = NOTRANS,
+ LDX >= max(1,N); if TRANS = TRANS or CONJ, LDX >= max(1,M).
+
+ B (input/output) DOUBLE PRECISION array, dimension (LDB,NRHS)
+ On entry, the right hand side vectors for the system of
+ linear equations.
+ On exit, B is overwritten with the difference B - A*X.
+
+ LDB (input) INTEGER
+ The leading dimension of the array B. IF TRANS = NOTRANS,
+ LDB >= max(1,M); if TRANS = TRANS or CONJ, LDB >= max(1,N).
+
+ RESID (output) DOUBLE PRECISION
+ The maximum over the number of right hand sides of
+ norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
+
+ =====================================================================
+*/
+
+ /* Table of constant values */
+ double alpha = -1.;
+ double beta = 1.;
+ int c__1 = 1;
+
+ /* System generated locals */
+ double d__1, d__2;
+
+ /* Local variables */
+ int j;
+ int n1, n2;
+ double anorm, bnorm;
+ double xnorm;
+ double eps;
+ char transc[1];
+
+ /* Function prototypes */
+ extern double dlangs(char *, SuperMatrix *);
+ extern double dasum_(int *, double *, int *);
+
+ /* Function Body */
+ if ( m <= 0 || n <= 0 || nrhs == 0) {
+ *resid = 0.;
+ return 0;
+ }
+
+ if ( (trans == TRANS) || (trans == CONJ) ) {
+ n1 = n;
+ n2 = m;
+ *transc = 'T';
+ } else {
+ n1 = m;
+ n2 = n;
+ *transc = 'N';
+ }
+
+ /* Exit with RESID = 1/EPS if ANORM = 0. */
+ eps = dmach("Epsilon");
+ anorm = dlangs("1", A);
+ if (anorm <= 0.) {
+ *resid = 1. / eps;
+ return 0;
+ }
+
+ /* Compute B - A*X (or B - A'*X ) and store in B. */
+
+ sp_dgemm(transc, "N", n1, nrhs, n2, alpha, A, x, ldx, beta, b, ldb);
+
+ /* Compute the maximum over the number of right hand sides of
+ norm(B - A*X) / ( norm(A) * norm(X) * EPS ) . */
+
+ *resid = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ bnorm = dasum_(&n1, &b[j*ldb], &c__1);
+ xnorm = dasum_(&n2, &x[j*ldx], &c__1);
+ if (xnorm <= 0.) {
+ *resid = 1. / eps;
+ } else {
+ /* Computing MAX */
+ d__1 = *resid, d__2 = bnorm / anorm / xnorm / eps;
+ *resid = SUPERLU_MAX(d__1, d__2);
+ }
+ }
+
+ return 0;
+
+} /* dgst02 */
+
diff --git a/SuperLU_5.2.0/TESTING/dgst04.c b/SuperLU_5.2.0/TESTING/dgst04.c
new file mode 100644
index 0000000..7287e57
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/dgst04.c
@@ -0,0 +1,129 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+#include <math.h>
+#include "slu_ddefs.h"
+
+int dgst04(int n, int nrhs, double *x, int ldx, double *xact,
+ int ldxact, double rcond, double *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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
+ machine epsilon.
+
+ Arguments
+ =========
+
+ N (input) INT
+ The number of rows of the matrices X and XACT. N >= 0.
+
+ NRHS (input) INT
+ The number of columns of the matrices X and XACT. NRHS >= 0.
+
+ X (input) DOUBLE PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors. Each vector is stored as a
+ column of the matrix X.
+
+ LDX (input) INT
+ The leading dimension of the array X. LDX >= max(1,N).
+
+ XACT (input) DOUBLE PRECISION array, dimension( LDX, NRHS )
+ The exact solution vectors. Each vector is stored as a
+ column of the matrix XACT.
+
+ LDXACT (input) INT
+ The leading dimension of the array XACT. LDXACT >= max(1,N).
+
+ RCOND (input) DOUBLE PRECISION
+ The reciprocal of the condition number of the coefficient
+ matrix in the system of equations.
+
+ RESID (output) DOUBLE PRECISION
+ The maximum over the NRHS solution vectors of
+ ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS )
+
+ =====================================================================
+*/
+ /* Table of constant values */
+ int c__1 = 1;
+
+ /* System generated locals */
+ double d__1, d__2, d__3, d__4;
+
+ /* Local variables */
+ int i, j, n__1;
+ int ix;
+ double xnorm;
+ double eps;
+ double diffnm;
+
+ /* Function prototypes */
+ extern int idamax_(int *, double *, int *);
+
+ /* Quick exit if N = 0 or NRHS = 0. */
+ if ( n <= 0 || nrhs <= 0 ) {
+ *resid = 0.;
+ return 0;
+ }
+
+ /* Exit with RESID = 1/EPS if RCOND is invalid. */
+ eps = dmach("Epsilon");
+ if ( rcond < 0. ) {
+ *resid = 1. / eps;
+ return 0;
+ }
+
+ /* Compute the maximum of norm(X - XACT) / ( norm(XACT) * EPS )
+ over all the vectors X and XACT . */
+
+ *resid = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ n__1 = n;
+ ix = idamax_(&n__1, &xact[j*ldxact], &c__1);
+ xnorm = (d__1 = xact[ix-1 + j*ldxact], fabs(d__1));
+
+ diffnm = 0.;
+ for (i = 0; i < n; ++i) {
+ /* Computing MAX */
+ d__3 = diffnm;
+ d__4 = (d__1 = x[i+j*ldx]-xact[i+j*ldxact], fabs(d__1));
+ diffnm = SUPERLU_MAX(d__3,d__4);
+ }
+ if (xnorm <= 0.) {
+ if (diffnm > 0.) {
+ *resid = 1. / eps;
+ }
+ } else {
+ /* Computing MAX */
+ d__1 = *resid, d__2 = diffnm / xnorm * rcond;
+ *resid = SUPERLU_MAX(d__1,d__2);
+ }
+ }
+ if (*resid * eps < 1.) {
+ *resid /= eps;
+ }
+
+ return 0;
+
+} /* dgst04_ */
diff --git a/SuperLU_5.2.0/TESTING/dgst07.c b/SuperLU_5.2.0/TESTING/dgst07.c
new file mode 100644
index 0000000..4bce6d8
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/dgst07.c
@@ -0,0 +1,227 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include <math.h>
+#include "slu_ddefs.h"
+
+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)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ RESLTS(1) = test of the error bound
+ = norm(X - XACT) / ( norm(X) * FERR )
+ A large value is returned if this ratio is not less than one.
+
+ RESLTS(2) = residual from the iterative refinement routine
+ = the maximum of BERR / ( (n+1)*EPS + (*) ), where
+ (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
+
+ Arguments
+ =========
+
+ TRANS (input) trans_t
+ Specifies the form of the system of equations.
+ = NOTRANS: A *x = b
+ = TRANS : A'*x = b, where A' is the transpose of A
+ = CONJ : A'*x = b, where A' is the transpose of A
+
+ N (input) INT
+ The number of rows of the matrices X and XACT. N >= 0.
+
+ NRHS (input) INT
+ The number of columns of the matrices X and XACT. NRHS >= 0.
+
+
+ A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
+ The original n by n matrix A.
+
+ B (input) DOUBLE PRECISION array, dimension (LDB,NRHS)
+ The right hand side vectors for the system of linear
+ equations.
+
+ LDB (input) INT
+ The leading dimension of the array B. LDB >= max(1,N).
+
+ X (input) DOUBLE PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors. Each vector is stored as a
+ column of the matrix X.
+
+ LDX (input) INT
+ The leading dimension of the array X. LDX >= max(1,N).
+
+ XACT (input) DOUBLE PRECISION array, dimension (LDX,NRHS)
+ The exact solution vectors. Each vector is stored as a
+ column of the matrix XACT.
+
+ LDXACT (input) INT
+ The leading dimension of the array XACT. LDXACT >= max(1,N).
+
+
+ FERR (input) DOUBLE PRECISION array, dimension (NRHS)
+ The estimated forward error bounds for each solution vector
+ X. If XTRUE is the true solution, FERR bounds the magnitude
+ of the largest entry in (X - XTRUE) divided by the magnitude
+ of the largest entry in X.
+
+ BERR (input) DOUBLE PRECISION array, dimension (NRHS)
+ The componentwise relative backward error of each solution
+ vector (i.e., the smallest relative change in any entry of A
+
+ or B that makes X an exact solution).
+
+ RESLTS (output) DOUBLE PRECISION array, dimension (2)
+ The maximum over the NRHS solution vectors of the ratios:
+ RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
+ RESLTS(2) = BERR / ( (n+1)*EPS + (*) )
+
+ =====================================================================
+*/
+
+ /* Table of constant values */
+ int c__1 = 1;
+
+ /* System generated locals */
+ double d__1, d__2;
+
+ /* Local variables */
+ double diff, axbi;
+ int imax, irow, n__1;
+ int i, j, k;
+ double unfl, ovfl;
+ double xnorm;
+ double errbnd;
+ int notran;
+ double eps, tmp;
+ double *rwork;
+ double *Aval;
+ NCformat *Astore;
+
+ /* Function prototypes */
+ extern int idamax_(int *, double *, int *);
+
+
+ /* Quick exit if N = 0 or NRHS = 0. */
+ if ( n <= 0 || nrhs <= 0 ) {
+ reslts[0] = 0.;
+ reslts[1] = 0.;
+ return 0;
+ }
+
+ eps = dmach("Epsilon");
+ unfl = dmach("Safe minimum");
+ ovfl = 1. / unfl;
+ notran = (trans == NOTRANS);
+
+ rwork = (double *) SUPERLU_MALLOC(n*sizeof(double));
+ if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
+ Astore = A->Store;
+ Aval = (double *) Astore->nzval;
+
+ /* Test 1: Compute the maximum of
+ norm(X - XACT) / ( norm(X) * FERR )
+ over all the vectors X and XACT using the infinity-norm. */
+
+ errbnd = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ n__1 = n;
+ imax = idamax_(&n__1, &x[j*ldx], &c__1);
+ d__1 = fabs(x[imax-1 + j*ldx]);
+ xnorm = SUPERLU_MAX(d__1,unfl);
+ diff = 0.;
+ for (i = 0; i < n; ++i) {
+ d__1 = fabs(x[i+j*ldx] - xact[i+j*ldxact]);
+ diff = SUPERLU_MAX(diff, d__1);
+ }
+
+ if (xnorm > 1.) {
+ goto L20;
+ } else if (diff <= ovfl * xnorm) {
+ goto L20;
+ } else {
+ errbnd = 1. / eps;
+ goto L30;
+ }
+
+L20:
+#if 0
+ if (diff / xnorm <= ferr[j]) {
+ d__1 = diff / xnorm / ferr[j];
+ errbnd = SUPERLU_MAX(errbnd,d__1);
+ } else {
+ errbnd = 1. / eps;
+ }
+#endif
+ d__1 = diff / xnorm / ferr[j];
+ errbnd = SUPERLU_MAX(errbnd,d__1);
+ /*printf("Ferr: %f\n", errbnd);*/
+L30:
+ ;
+ }
+ reslts[0] = errbnd;
+
+ /* Test 2: Compute the maximum of BERR / ( (n+1)*EPS + (*) ), where
+ (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) + abs(b))_i ) */
+
+ for (k = 0; k < nrhs; ++k) {
+ for (i = 0; i < n; ++i)
+ rwork[i] = fabs( b[i + k*ldb] );
+ if ( notran ) {
+ for (j = 0; j < n; ++j) {
+ tmp = fabs( x[j + k*ldx] );
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ rwork[Astore->rowind[i]] += fabs(Aval[i]) * tmp;
+ }
+ }
+ } else {
+ for (j = 0; j < n; ++j) {
+ tmp = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ d__1 = fabs( x[irow + k*ldx] );
+ tmp += fabs(Aval[i]) * d__1;
+ }
+ rwork[j] += tmp;
+ }
+ }
+
+ axbi = rwork[0];
+ for (i = 1; i < n; ++i) axbi = SUPERLU_MIN(axbi, rwork[i]);
+
+ /* Computing MAX */
+ d__1 = axbi, d__2 = (n + 1) * unfl;
+ tmp = berr[k] / ((n + 1) * eps + (n + 1) * unfl / SUPERLU_MAX(d__1,d__2));
+
+ if (k == 0) {
+ reslts[1] = tmp;
+ } else {
+ reslts[1] = SUPERLU_MAX(reslts[1],tmp);
+ }
+ }
+
+ SUPERLU_FREE(rwork);
+ return 0;
+
+} /* dgst07 */
diff --git a/SuperLU_5.2.0/TESTING/dtest.csh b/SuperLU_5.2.0/TESTING/dtest.csh
new file mode 100755
index 0000000..501a436
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/dtest.csh
@@ -0,0 +1,49 @@
+#!/bin/csh
+
+set ofile = dtest.out # output file
+if ( -e $ofile ) then
+ rm -f $ofile
+endif
+echo "Double-precision testing output" > $ofile
+
+set MATRICES = (LAPACK g20.rua)
+set NVAL = (9 19)
+set NRHS = (5)
+set LWORK = (0 10000000)
+
+#
+# Loop through all matrices ...
+#
+foreach m ($MATRICES)
+
+ #--------------------------------------------
+ # Test matrix types generated in LAPACK-style
+ #--------------------------------------------
+ if ($m == 'LAPACK') then
+ echo '== LAPACK test matrices' >> $ofile
+ foreach n ($NVAL)
+ foreach s ($NRHS)
+ foreach l ($LWORK)
+ echo '' >> $ofile
+ echo 'n='$n 'nrhs='$s 'lwork='$l >> $ofile
+ ./dtest -t "LA" -l $l -n $n -s $s >> $ofile
+ end
+ end
+ end
+ #--------------------------------------------
+ # Test a specified sparse matrix
+ #--------------------------------------------
+ else
+ echo '' >> $ofile
+ echo '== sparse matrix:' $m >> $ofile
+ foreach s ($NRHS)
+ foreach l ($LWORK)
+ echo '' >> $ofile
+ echo 'nrhs='$s 'lwork='$l >> $ofile
+ ./dtest -t "SP" -s $s -l $l -f ../EXAMPLE/$m >> $ofile
+ end
+ end
+ endif
+
+end
+
diff --git a/SuperLU_5.2.0/TESTING/runtest.cmake b/SuperLU_5.2.0/TESTING/runtest.cmake
new file mode 100644
index 0000000..1ab16a2
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/runtest.cmake
@@ -0,0 +1,9 @@
+# execute the test command that was added earlier.
+execute_process( COMMAND "${TEST}"
+ OUTPUT_FILE "${OUTPUT}"
+ RESULT_VARIABLE RET )
+file(APPEND ${ALL_OUTPUT} ${HEADING})
+file(APPEND ${ALL_OUTPUT} "\n")
+file(READ "${OUTPUT}" SINGLE_OUTPUT)
+file(APPEND ${ALL_OUTPUT} "${SINGLE_OUTPUT}\n")
+file(REMOVE ${OUTPUT}) # remove the individual output file.
diff --git a/SuperLU_5.2.0/TESTING/sdrive.c b/SuperLU_5.2.0/TESTING/sdrive.c
new file mode 100644
index 0000000..5b98038
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sdrive.c
@@ -0,0 +1,571 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+/*
+ * File name: sdrive.c
+ * Purpose: MAIN test program
+ */
+#include <string.h>
+#include "slu_sdefs.h"
+
+#define NTESTS 5 /* Number of test types */
+#define NTYPES 11 /* Number of matrix types */
+#define NTRAN 2
+#define THRESH 20.0
+#define FMT1 "%10s:n=%d, test(%d)=%12.5g\n"
+#define FMT2 "%10s:fact=%4d, trans=%4d, equed=%c, n=%d, imat=%d, test(%d)=%12.5g\n"
+#define FMT3 "%10s:info=%d, izero=%d, n=%d, nrhs=%d, imat=%d, nfail=%d\n"
+
+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, double *u, FILE **fp);
+
+main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * SDRIVE is the main test program for the FLOAT linear
+ * equation driver routines SGSSV and SGSSVX.
+ *
+ * The program is invoked by a shell script file -- stest.csh.
+ * The output from the tests are written into a file -- stest.out.
+ *
+ * =====================================================================
+ */
+ float *a, *a_save;
+ int *asub, *asub_save;
+ int *xa, *xa_save;
+ SuperMatrix A, B, X, L, U;
+ SuperMatrix ASAV, AC;
+ GlobalLU_t Glu; /* Not needed on return. */
+ mem_usage_t mem_usage;
+ int *perm_r; /* row permutation from partial pivoting */
+ int *perm_c, *pc_save; /* column permutation */
+ int *etree;
+ float zero = 0.0;
+ float *R, *C;
+ float *ferr, *berr;
+ float *rwork;
+ float *wwork;
+ void *work;
+ int info, lwork, nrhs, panel_size, relax;
+ int m, n, nnz;
+ float *xact;
+ float *rhsb, *solx, *bsav;
+ int ldb, ldx;
+ float rpg, rcond;
+ int i, j, k1;
+ float rowcnd, colcnd, amax;
+ int maxsuper, rowblk, colblk;
+ int prefact, nofact, equil, iequed;
+ int nt, nrun, nfail, nerrs, imat, fimat, nimat;
+ int nfact, ifact, itran;
+ int kl, ku, mode, lda;
+ int zerot, izero, ioff;
+ double u;
+ float anorm, cndnum;
+ float *Afull;
+ float result[NTESTS];
+ superlu_options_t options;
+ fact_t fact;
+ trans_t trans;
+ SuperLUStat_t stat;
+ static char matrix_type[8];
+ static char equed[1], path[4], sym[1], dist[1];
+ FILE *fp;
+
+ /* Fixed set of parameters */
+ int iseed[] = {1988, 1989, 1990, 1991};
+ static char equeds[] = {'N', 'R', 'C', 'B'};
+ static fact_t facts[] = {FACTORED, DOFACT, SamePattern,
+ SamePattern_SameRowPerm};
+ static trans_t transs[] = {NOTRANS, TRANS, CONJ};
+
+ /* Some function prototypes */
+ 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_slu(char *, int *, int *, int *, char *, int *, int *,
+ float *, int *, float *, char *);
+ extern int slatms_slu(int *, int *, char *, int *, char *, float *d,
+ int *, float *, float *, int *, int *,
+ char *, float *, int *, float *, int *);
+ extern int sp_sconvert(int, int, float *, int, int, int,
+ float *a, int *, int *, int *);
+
+
+ /* Executable statements */
+
+ strcpy(path, "SGE");
+ nrun = 0;
+ nfail = 0;
+ nerrs = 0;
+
+ /* Defaults */
+ lwork = 0;
+ n = 1;
+ nrhs = 1;
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+ u = 1.0;
+ strcpy(matrix_type, "LA");
+ parse_command_line(argc, argv, matrix_type, &n,
+ &panel_size, &relax, &nrhs, &maxsuper,
+ &rowblk, &colblk, &lwork, &u, &fp);
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ fprintf(stderr, "expert: cannot allocate %d bytes\n", lwork);
+ exit (-1);
+ }
+ }
+
+ /* Set the default input options. */
+ set_default_options(&options);
+ options.DiagPivotThresh = u;
+ options.PrintStat = NO;
+ options.PivotGrowth = YES;
+ options.ConditionNumber = YES;
+ options.IterRefine = SLU_SINGLE;
+
+ if ( strcmp(matrix_type, "LA") == 0 ) {
+ /* Test LAPACK matrix suite. */
+ m = n;
+ lda = SUPERLU_MAX(n, 1);
+ nnz = n * n; /* upper bound */
+ fimat = 1;
+ nimat = NTYPES;
+ Afull = floatCalloc(lda * n);
+ sallocateA(n, nnz, &a, &asub, &xa);
+ } else {
+ /* Read a sparse matrix */
+ fimat = nimat = 0;
+ sreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ }
+
+ sallocateA(n, nnz, &a_save, &asub_save, &xa_save);
+ rhsb = floatMalloc(m * nrhs);
+ bsav = floatMalloc(m * nrhs);
+ solx = floatMalloc(n * nrhs);
+ ldb = m;
+ ldx = n;
+ sCreate_Dense_Matrix(&B, m, nrhs, rhsb, ldb, SLU_DN, SLU_S, SLU_GE);
+ sCreate_Dense_Matrix(&X, n, nrhs, solx, ldx, SLU_DN, SLU_S, SLU_GE);
+ xact = floatMalloc(n * nrhs);
+ etree = intMalloc(n);
+ perm_r = intMalloc(n);
+ perm_c = intMalloc(n);
+ pc_save = intMalloc(n);
+ R = (float *) SUPERLU_MALLOC(m*sizeof(float));
+ C = (float *) SUPERLU_MALLOC(n*sizeof(float));
+ ferr = (float *) SUPERLU_MALLOC(nrhs*sizeof(float));
+ berr = (float *) SUPERLU_MALLOC(nrhs*sizeof(float));
+ j = SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs);
+ rwork = (float *) SUPERLU_MALLOC(j*sizeof(float));
+ for (i = 0; i < j; ++i) rwork[i] = 0.;
+ if ( !R ) ABORT("SUPERLU_MALLOC fails for R");
+ if ( !C ) ABORT("SUPERLU_MALLOC fails for C");
+ if ( !ferr ) ABORT("SUPERLU_MALLOC fails for ferr");
+ if ( !berr ) ABORT("SUPERLU_MALLOC fails for berr");
+ if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
+ wwork = floatCalloc( SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs) );
+
+ for (i = 0; i < n; ++i) perm_c[i] = pc_save[i] = i;
+ options.ColPerm = MY_PERMC;
+
+ for (imat = fimat; imat <= nimat; ++imat) { /* All matrix types */
+
+ if ( imat ) {
+
+ /* Skip types 5, 6, or 7 if the matrix size is too small. */
+ zerot = (imat >= 5 && imat <= 7);
+ if ( zerot && n < imat-4 )
+ continue;
+
+ /* Set up parameters with SLATB4 and generate a test matrix
+ with SLATMS. */
+ slatb4_slu(path, &imat, &n, &n, sym, &kl, &ku, &anorm, &mode,
+ &cndnum, dist);
+
+ slatms_slu(&n, &n, dist, iseed, sym, &rwork[0], &mode, &cndnum,
+ &anorm, &kl, &ku, "No packing", Afull, &lda,
+ &wwork[0], &info);
+
+ if ( info ) {
+ printf(FMT3, "SLATMS", info, izero, n, nrhs, imat, nfail);
+ continue;
+ }
+
+ /* For types 5-7, zero one or more columns of the matrix
+ to test that INFO is returned correctly. */
+ if ( zerot ) {
+ if ( imat == 5 ) izero = 1;
+ else if ( imat == 6 ) izero = n;
+ else izero = n / 2 + 1;
+ ioff = (izero - 1) * lda;
+ if ( imat < 7 ) {
+ for (i = 0; i < n; ++i) Afull[ioff + i] = zero;
+ } else {
+ for (j = 0; j < n - izero + 1; ++j)
+ for (i = 0; i < n; ++i)
+ Afull[ioff + i + j*lda] = zero;
+ }
+ } else {
+ izero = 0;
+ }
+
+ /* Convert to sparse representation. */
+ sp_sconvert(n, n, Afull, lda, kl, ku, a, asub, xa, &nnz);
+
+ } else {
+ izero = 0;
+ zerot = 0;
+ }
+
+ sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
+
+ /* Save a copy of matrix A in ASAV */
+ sCreate_CompCol_Matrix(&ASAV, m, n, nnz, a_save, asub_save, xa_save,
+ SLU_NC, SLU_S, SLU_GE);
+ sCopy_CompCol_Matrix(&A, &ASAV);
+
+ /* Form exact solution. */
+ sGenXtrue(n, nrhs, xact, ldx);
+
+ StatInit(&stat);
+
+ for (iequed = 0; iequed < 4; ++iequed) {
+ *equed = equeds[iequed];
+ if (iequed == 0) nfact = 4;
+ else nfact = 1; /* Only test factored, pre-equilibrated matrix */
+
+ for (ifact = 0; ifact < nfact; ++ifact) {
+ fact = facts[ifact];
+ options.Fact = fact;
+
+ for (equil = 0; equil < 2; ++equil) {
+ options.Equil = equil;
+ prefact = ( options.Fact == FACTORED ||
+ options.Fact == SamePattern_SameRowPerm );
+ /* Need a first factor */
+ nofact = (options.Fact != FACTORED); /* Not factored */
+
+ /* Restore the matrix A. */
+ sCopy_CompCol_Matrix(&ASAV, &A);
+
+ if ( zerot ) {
+ if ( prefact ) continue;
+ } else if ( options.Fact == FACTORED ) {
+ if ( equil || iequed ) {
+ /* Compute row and column scale factors to
+ equilibrate matrix A. */
+ sgsequ(&A, R, C, &rowcnd, &colcnd, &amax, &info);
+
+ /* Force equilibration. */
+ if ( !info && n > 0 ) {
+ if ( strncmp(equed, "R", 1)==0 ) {
+ rowcnd = 0.;
+ colcnd = 1.;
+ } else if ( strncmp(equed, "C", 1)==0 ) {
+ rowcnd = 1.;
+ colcnd = 0.;
+ } else if ( strncmp(equed, "B", 1)==0 ) {
+ rowcnd = 0.;
+ colcnd = 0.;
+ }
+ }
+
+ /* Equilibrate the matrix. */
+ slaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
+ }
+ }
+
+ if ( prefact ) { /* Need a factor for the first time */
+
+ /* Save Fact option. */
+ fact = options.Fact;
+ options.Fact = DOFACT;
+
+ /* Preorder the matrix, obtain the column etree. */
+ sp_preorder(&options, &A, perm_c, etree, &AC);
+
+ /* Factor the matrix AC. */
+ sgstrf(&options, &AC, relax, panel_size,
+ etree, work, lwork, perm_c, perm_r, &L, &U,
+ &Glu, &stat, &info);
+
+ if ( info ) {
+ printf("** First factor: info %d, equed %c\n",
+ info, *equed);
+ if ( lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n",
+ info - n);
+ exit(0);
+ }
+ }
+
+ Destroy_CompCol_Permuted(&AC);
+
+ /* Restore Fact option. */
+ options.Fact = fact;
+ } /* if .. first time factor */
+
+ for (itran = 0; itran < NTRAN; ++itran) {
+ trans = transs[itran];
+ options.Trans = trans;
+
+ /* Restore the matrix A. */
+ sCopy_CompCol_Matrix(&ASAV, &A);
+
+ /* Set the right hand side. */
+ sFillRHS(trans, nrhs, xact, ldx, &A, &B);
+ sCopy_Dense_Matrix(m, nrhs, rhsb, ldb, bsav, ldb);
+
+ /*----------------
+ * Test sgssv
+ *----------------*/
+ if ( options.Fact == DOFACT && itran == 0) {
+ /* Not yet factored, and untransposed */
+
+ sCopy_Dense_Matrix(m, nrhs, rhsb, ldb, solx, ldx);
+ sgssv(&options, &A, perm_c, perm_r, &L, &U, &X,
+ &stat, &info);
+
+ if ( info && info != izero ) {
+ printf(FMT3, "sgssv",
+ info, izero, n, nrhs, imat, nfail);
+ } else {
+ /* Reconstruct matrix from factors and
+ compute residual. */
+ 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);
+ sgst02(trans, m, n, nrhs, &A, solx,
+ ldx, wwork,ldb, &result[1]);
+ nt = 2;
+ }
+
+ /* Print information about the tests that
+ did not pass the threshold. */
+ for (i = 0; i < nt; ++i) {
+ if ( result[i] >= THRESH ) {
+ printf(FMT1, "sgssv", n, i,
+ result[i]);
+ ++nfail;
+ }
+ }
+ nrun += nt;
+ } /* else .. info == 0 */
+
+ /* Restore perm_c. */
+ for (i = 0; i < n; ++i) perm_c[i] = pc_save[i];
+
+ if (lwork == 0) {
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+ } /* if .. end of testing sgssv */
+
+ /*----------------
+ * Test sgssvx
+ *----------------*/
+
+ /* Equilibrate the matrix if fact = FACTORED and
+ equed = 'R', 'C', or 'B'. */
+ if ( options.Fact == FACTORED &&
+ (equil || iequed) && n > 0 ) {
+ slaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
+ }
+
+ /* Solve the system and compute the condition number
+ and error bounds using sgssvx. */
+ sgssvx(&options, &A, perm_c, perm_r, etree,
+ equed, R, C, &L, &U, work, lwork, &B, &X, &rpg,
+ &rcond, ferr, berr, &Glu,
+ &mem_usage, &stat, &info);
+
+ if ( info && info != izero ) {
+ printf(FMT3, "sgssvx",
+ info, izero, n, nrhs, imat, nfail);
+ if ( lwork == -1 ) {
+ printf("** Estimated memory: %.0f bytes\n",
+ mem_usage.total_needed);
+ exit(0);
+ }
+ } else {
+ if ( !prefact ) {
+ /* Reconstruct matrix from factors and
+ compute residual. */
+ sgst01(m, n, &A, &L, &U, perm_c, perm_r,
+ &result[0]);
+ k1 = 0;
+ } else {
+ k1 = 1;
+ }
+
+ if ( !info ) {
+ /* Compute residual of the computed solution.*/
+ sCopy_Dense_Matrix(m, nrhs, bsav, ldb,
+ wwork, ldb);
+ sgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
+ wwork, ldb, &result[1]);
+
+ /* Check solution from generated exact
+ solution. */
+ sgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
+ &result[2]);
+
+ /* Check the error bounds from iterative
+ refinement. */
+ sgst07(trans, n, nrhs, &ASAV, bsav, ldb,
+ solx, ldx, xact, ldx, ferr, berr,
+ &result[3]);
+
+ /* Print information about the tests that did
+ not pass the threshold. */
+ for (i = k1; i < NTESTS; ++i) {
+ if ( result[i] >= THRESH ) {
+ printf(FMT2, "sgssvx",
+ options.Fact, trans, *equed,
+ n, imat, i, result[i]);
+ ++nfail;
+ }
+ }
+ nrun += NTESTS;
+ } /* if .. info == 0 */
+ } /* else .. end of testing sgssvx */
+
+ } /* for itran ... */
+
+ if ( lwork == 0 ) {
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+
+ } /* for equil ... */
+ } /* for ifact ... */
+ } /* for iequed ... */
+#if 0
+ if ( !info ) {
+ PrintPerf(&L, &U, &mem_usage, rpg, rcond, ferr, berr, equed);
+ }
+#endif
+ Destroy_SuperMatrix_Store(&A);
+ Destroy_SuperMatrix_Store(&ASAV);
+ StatFree(&stat);
+
+ } /* for imat ... */
+
+ /* Print a summary of the results. */
+ PrintSumm("SGE", nfail, nrun, nerrs);
+
+ if ( strcmp(matrix_type, "LA") == 0 ) SUPERLU_FREE (Afull);
+ SUPERLU_FREE (rhsb);
+ SUPERLU_FREE (bsav);
+ SUPERLU_FREE (solx);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (pc_save);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ SUPERLU_FREE (rwork);
+ SUPERLU_FREE (wwork);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+#if 0
+ Destroy_CompCol_Matrix(&A);
+ Destroy_CompCol_Matrix(&ASAV);
+#else
+ SUPERLU_FREE(a); SUPERLU_FREE(asub); SUPERLU_FREE(xa);
+ SUPERLU_FREE(a_save); SUPERLU_FREE(asub_save); SUPERLU_FREE(xa_save);
+#endif
+ if ( lwork > 0 ) {
+ SUPERLU_FREE (work);
+ Destroy_SuperMatrix_Store(&L);
+ Destroy_SuperMatrix_Store(&U);
+ }
+
+ return 0;
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+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, double *u, FILE **fp)
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "ht:n:w:r:s:m:b:c:l:u:f:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-w <int> - panel size\n");
+ printf("\t-r <int> - granularity of relaxed supernodes\n");
+ exit(1);
+ break;
+ case 't': strcpy(matrix_type, optarg);
+ break;
+ case 'n': *n = atoi(optarg);
+ break;
+ case 'w': *w = atoi(optarg);
+ break;
+ case 'r': *relax = atoi(optarg);
+ break;
+ case 's': *nrhs = atoi(optarg);
+ break;
+ case 'm': *maxsuper = atoi(optarg);
+ break;
+ case 'b': *rowblk = atoi(optarg);
+ break;
+ case 'c': *colblk = atoi(optarg);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'f':
+ if ( !(*fp = fopen(optarg, "r")) ) {
+ ABORT("File does not exist");
+ }
+ printf(".. test sparse matrix in file: %s\n", optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/TESTING/sgst01.c b/SuperLU_5.2.0/TESTING/sgst01.c
new file mode 100644
index 0000000..e8e4384
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sgst01.c
@@ -0,0 +1,177 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+#include <math.h>
+#include "slu_sdefs.h"
+
+int sgst01(int m, int n, SuperMatrix *A, SuperMatrix *L,
+ SuperMatrix *U, int *perm_c, int *perm_r, float *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ Arguments
+ ==========
+
+ M (input) INT
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INT
+ The number of columns of the matrix A. N >= 0.
+
+ A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
+ The original M x N matrix A.
+
+ L (input) SuperMatrix *, dimension (L->nrow, L->ncol)
+ The factor matrix 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.
+
+ RESID (output) FLOAT*
+ norm(L*U - A) / ( N * norm(A) * EPS )
+
+ =====================================================================
+*/
+
+ /* Local variables */
+ float zero = 0.0;
+ int i, j, k, arow, lptr,isub, urow, superno, fsupc, u_part;
+ float utemp, comp_temp;
+ float anorm, tnorm, cnorm;
+ float eps;
+ float *work;
+ SCformat *Lstore;
+ NCformat *Astore, *Ustore;
+ float *Aval, *Lval, *Uval;
+ int *colbeg, *colend;
+
+ /* Function prototypes */
+ extern float slangs(char *, SuperMatrix *);
+
+ /* Quick exit if M = 0 or N = 0. */
+
+ if (m <= 0 || n <= 0) {
+ *resid = 0.f;
+ return 0;
+ }
+
+ work = (float *)floatCalloc(m);
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+
+ 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];
+ }
+
+ /* Determine EPS and the norm of A. */
+ eps = smach("Epsilon");
+ anorm = slangs("1", A);
+ cnorm = 0.;
+
+ /* Compute the product L*U, one column at a time */
+ for (k = 0; k < n; ++k) {
+
+ /* The U part outside the rectangular supernode */
+ for (i = U_NZ_START(k); i < U_NZ_START(k+1); ++i) {
+ urow = U_SUB(i);
+ utemp = Uval[i];
+ superno = Lstore->col_to_sup[urow];
+ fsupc = L_FST_SUPC(superno);
+ u_part = urow - fsupc + 1;
+ lptr = L_SUB_START(fsupc) + u_part;
+ work[L_SUB(lptr-1)] -= utemp; /* L_ii = 1 */
+ for (j = L_NZ_START(urow) + u_part; j < L_NZ_START(urow+1); ++j) {
+ isub = L_SUB(lptr);
+ work[isub] -= Lval[j] * utemp;
+ ++lptr;
+ }
+ }
+
+ /* The U part inside the rectangular supernode */
+ superno = Lstore->col_to_sup[k];
+ fsupc = L_FST_SUPC(superno);
+ urow = L_NZ_START(k);
+ for (i = fsupc; i <= k; ++i) {
+ utemp = Lval[urow++];
+ u_part = i - fsupc + 1;
+ lptr = L_SUB_START(fsupc) + u_part;
+ work[L_SUB(lptr-1)] -= utemp; /* L_ii = 1 */
+ for (j = L_NZ_START(i)+u_part; j < L_NZ_START(i+1); ++j) {
+ isub = L_SUB(lptr);
+ work[isub] -= Lval[j] * utemp;
+ ++lptr;
+ }
+ }
+
+ /* Now compute A[k] - (L*U)[k] (Both matrices may be permuted.) */
+
+ for (i = colbeg[k]; i < colend[k]; ++i) {
+ arow = Astore->rowind[i];
+ work[perm_r[arow]] += Aval[i];
+ }
+
+ /* Now compute the 1-norm of the column vector work */
+ tnorm = 0.;
+ for (i = 0; i < m; ++i) {
+ tnorm += fabs(work[i]);
+ work[i] = zero;
+ }
+ cnorm = SUPERLU_MAX(tnorm, cnorm);
+ }
+
+ *resid = cnorm;
+
+ if (anorm <= 0.f) {
+ if (*resid != 0.f) {
+ *resid = 1.f / eps;
+ }
+ } else {
+ *resid = *resid / (float) n / anorm / eps;
+ }
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(colbeg);
+ SUPERLU_FREE(colend);
+ return 0;
+
+/* End of SGST01 */
+
+} /* sgst01_ */
+
diff --git a/SuperLU_5.2.0/TESTING/sgst02.c b/SuperLU_5.2.0/TESTING/sgst02.c
new file mode 100644
index 0000000..9bd3cd4
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sgst02.c
@@ -0,0 +1,146 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include "slu_sdefs.h"
+
+int sgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
+ float *x, int ldx, float *b, int ldb, float *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ Arguments
+ =========
+
+ TRANS (input) trans_t
+ Specifies the form of the system of equations:
+ = NOTRANS: A *x = b
+ = TRANS : A'*x = b, where A' is the transpose of A
+ = CONJ : A'*x = b, where A' is the transpose of A
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ NRHS (input) INTEGER
+ The number of columns of B, the matrix of right hand sides.
+ NRHS >= 0.
+
+ A (input) SuperMatrix*, dimension (LDA,N)
+ The original M x N sparse matrix A.
+
+ X (input) FLOAT PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors for the system of linear
+ equations.
+
+ LDX (input) INTEGER
+ The leading dimension of the array X. If TRANS = NOTRANS,
+ LDX >= max(1,N); if TRANS = TRANS or CONJ, LDX >= max(1,M).
+
+ B (input/output) FLOAT PRECISION array, dimension (LDB,NRHS)
+ On entry, the right hand side vectors for the system of
+ linear equations.
+ On exit, B is overwritten with the difference B - A*X.
+
+ LDB (input) INTEGER
+ The leading dimension of the array B. IF TRANS = NOTRANS,
+ LDB >= max(1,M); if TRANS = TRANS or CONJ, LDB >= max(1,N).
+
+ RESID (output) FLOAT PRECISION
+ The maximum over the number of right hand sides of
+ norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
+
+ =====================================================================
+*/
+
+ /* Table of constant values */
+ float alpha = -1.;
+ float beta = 1.;
+ int c__1 = 1;
+
+ /* System generated locals */
+ float d__1, d__2;
+
+ /* Local variables */
+ int j;
+ int n1, n2;
+ float anorm, bnorm;
+ float xnorm;
+ float eps;
+ char transc[1];
+
+ /* Function prototypes */
+ extern float slangs(char *, SuperMatrix *);
+ extern float sasum_(int *, float *, int *);
+
+ /* Function Body */
+ if ( m <= 0 || n <= 0 || nrhs == 0) {
+ *resid = 0.;
+ return 0;
+ }
+
+ if ( (trans == TRANS) || (trans == CONJ) ) {
+ n1 = n;
+ n2 = m;
+ *transc = 'T';
+ } else {
+ n1 = m;
+ n2 = n;
+ *transc = 'N';
+ }
+
+ /* Exit with RESID = 1/EPS if ANORM = 0. */
+ eps = smach("Epsilon");
+ anorm = slangs("1", A);
+ if (anorm <= 0.) {
+ *resid = 1. / eps;
+ return 0;
+ }
+
+ /* Compute B - A*X (or B - A'*X ) and store in B. */
+
+ sp_sgemm(transc, "N", n1, nrhs, n2, alpha, A, x, ldx, beta, b, ldb);
+
+ /* Compute the maximum over the number of right hand sides of
+ norm(B - A*X) / ( norm(A) * norm(X) * EPS ) . */
+
+ *resid = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ bnorm = sasum_(&n1, &b[j*ldb], &c__1);
+ xnorm = sasum_(&n2, &x[j*ldx], &c__1);
+ if (xnorm <= 0.) {
+ *resid = 1. / eps;
+ } else {
+ /* Computing MAX */
+ d__1 = *resid, d__2 = bnorm / anorm / xnorm / eps;
+ *resid = SUPERLU_MAX(d__1, d__2);
+ }
+ }
+
+ return 0;
+
+} /* sgst02 */
+
diff --git a/SuperLU_5.2.0/TESTING/sgst04.c b/SuperLU_5.2.0/TESTING/sgst04.c
new file mode 100644
index 0000000..df8d9f3
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sgst04.c
@@ -0,0 +1,129 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+#include <math.h>
+#include "slu_sdefs.h"
+
+int sgst04(int n, int nrhs, float *x, int ldx, float *xact,
+ int ldxact, float rcond, float *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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
+ machine epsilon.
+
+ Arguments
+ =========
+
+ N (input) INT
+ The number of rows of the matrices X and XACT. N >= 0.
+
+ NRHS (input) INT
+ The number of columns of the matrices X and XACT. NRHS >= 0.
+
+ X (input) FLOAT PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors. Each vector is stored as a
+ column of the matrix X.
+
+ LDX (input) INT
+ The leading dimension of the array X. LDX >= max(1,N).
+
+ XACT (input) FLOAT PRECISION array, dimension( LDX, NRHS )
+ The exact solution vectors. Each vector is stored as a
+ column of the matrix XACT.
+
+ LDXACT (input) INT
+ The leading dimension of the array XACT. LDXACT >= max(1,N).
+
+ RCOND (input) FLOAT PRECISION
+ The reciprocal of the condition number of the coefficient
+ matrix in the system of equations.
+
+ RESID (output) FLOAT PRECISION
+ The maximum over the NRHS solution vectors of
+ ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS )
+
+ =====================================================================
+*/
+ /* Table of constant values */
+ int c__1 = 1;
+
+ /* System generated locals */
+ float d__1, d__2, d__3, d__4;
+
+ /* Local variables */
+ int i, j, n__1;
+ int ix;
+ float xnorm;
+ float eps;
+ float diffnm;
+
+ /* Function prototypes */
+ extern int isamax_(int *, float *, int *);
+
+ /* Quick exit if N = 0 or NRHS = 0. */
+ if ( n <= 0 || nrhs <= 0 ) {
+ *resid = 0.;
+ return 0;
+ }
+
+ /* Exit with RESID = 1/EPS if RCOND is invalid. */
+ eps = smach("Epsilon");
+ if ( rcond < 0. ) {
+ *resid = 1. / eps;
+ return 0;
+ }
+
+ /* Compute the maximum of norm(X - XACT) / ( norm(XACT) * EPS )
+ over all the vectors X and XACT . */
+
+ *resid = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ n__1 = n;
+ ix = isamax_(&n__1, &xact[j*ldxact], &c__1);
+ xnorm = (d__1 = xact[ix-1 + j*ldxact], fabs(d__1));
+
+ diffnm = 0.;
+ for (i = 0; i < n; ++i) {
+ /* Computing MAX */
+ d__3 = diffnm;
+ d__4 = (d__1 = x[i+j*ldx]-xact[i+j*ldxact], fabs(d__1));
+ diffnm = SUPERLU_MAX(d__3,d__4);
+ }
+ if (xnorm <= 0.) {
+ if (diffnm > 0.) {
+ *resid = 1. / eps;
+ }
+ } else {
+ /* Computing MAX */
+ d__1 = *resid, d__2 = diffnm / xnorm * rcond;
+ *resid = SUPERLU_MAX(d__1,d__2);
+ }
+ }
+ if (*resid * eps < 1.) {
+ *resid /= eps;
+ }
+
+ return 0;
+
+} /* sgst04_ */
diff --git a/SuperLU_5.2.0/TESTING/sgst07.c b/SuperLU_5.2.0/TESTING/sgst07.c
new file mode 100644
index 0000000..b941015
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sgst07.c
@@ -0,0 +1,227 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include <math.h>
+#include "slu_sdefs.h"
+
+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)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ RESLTS(1) = test of the error bound
+ = norm(X - XACT) / ( norm(X) * FERR )
+ A large value is returned if this ratio is not less than one.
+
+ RESLTS(2) = residual from the iterative refinement routine
+ = the maximum of BERR / ( (n+1)*EPS + (*) ), where
+ (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
+
+ Arguments
+ =========
+
+ TRANS (input) trans_t
+ Specifies the form of the system of equations.
+ = NOTRANS: A *x = b
+ = TRANS : A'*x = b, where A' is the transpose of A
+ = CONJ : A'*x = b, where A' is the transpose of A
+
+ N (input) INT
+ The number of rows of the matrices X and XACT. N >= 0.
+
+ NRHS (input) INT
+ The number of columns of the matrices X and XACT. NRHS >= 0.
+
+
+ A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
+ The original n by n matrix A.
+
+ B (input) FLOAT PRECISION array, dimension (LDB,NRHS)
+ The right hand side vectors for the system of linear
+ equations.
+
+ LDB (input) INT
+ The leading dimension of the array B. LDB >= max(1,N).
+
+ X (input) FLOAT PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors. Each vector is stored as a
+ column of the matrix X.
+
+ LDX (input) INT
+ The leading dimension of the array X. LDX >= max(1,N).
+
+ XACT (input) FLOAT PRECISION array, dimension (LDX,NRHS)
+ The exact solution vectors. Each vector is stored as a
+ column of the matrix XACT.
+
+ LDXACT (input) INT
+ The leading dimension of the array XACT. LDXACT >= max(1,N).
+
+
+ FERR (input) FLOAT PRECISION array, dimension (NRHS)
+ The estimated forward error bounds for each solution vector
+ X. If XTRUE is the true solution, FERR bounds the magnitude
+ of the largest entry in (X - XTRUE) divided by the magnitude
+ of the largest entry in X.
+
+ BERR (input) FLOAT PRECISION array, dimension (NRHS)
+ The componentwise relative backward error of each solution
+ vector (i.e., the smallest relative change in any entry of A
+
+ or B that makes X an exact solution).
+
+ RESLTS (output) FLOAT PRECISION array, dimension (2)
+ The maximum over the NRHS solution vectors of the ratios:
+ RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
+ RESLTS(2) = BERR / ( (n+1)*EPS + (*) )
+
+ =====================================================================
+*/
+
+ /* Table of constant values */
+ int c__1 = 1;
+
+ /* System generated locals */
+ float d__1, d__2;
+
+ /* Local variables */
+ float diff, axbi;
+ int imax, irow, n__1;
+ int i, j, k;
+ float unfl, ovfl;
+ float xnorm;
+ float errbnd;
+ int notran;
+ float eps, tmp;
+ float *rwork;
+ float *Aval;
+ NCformat *Astore;
+
+ /* Function prototypes */
+ extern int isamax_(int *, float *, int *);
+
+
+ /* Quick exit if N = 0 or NRHS = 0. */
+ if ( n <= 0 || nrhs <= 0 ) {
+ reslts[0] = 0.;
+ reslts[1] = 0.;
+ return 0;
+ }
+
+ eps = smach("Epsilon");
+ unfl = smach("Safe minimum");
+ ovfl = 1. / unfl;
+ notran = (trans == NOTRANS);
+
+ rwork = (float *) SUPERLU_MALLOC(n*sizeof(float));
+ if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
+ Astore = A->Store;
+ Aval = (float *) Astore->nzval;
+
+ /* Test 1: Compute the maximum of
+ norm(X - XACT) / ( norm(X) * FERR )
+ over all the vectors X and XACT using the infinity-norm. */
+
+ errbnd = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ n__1 = n;
+ imax = isamax_(&n__1, &x[j*ldx], &c__1);
+ d__1 = fabs(x[imax-1 + j*ldx]);
+ xnorm = SUPERLU_MAX(d__1,unfl);
+ diff = 0.;
+ for (i = 0; i < n; ++i) {
+ d__1 = fabs(x[i+j*ldx] - xact[i+j*ldxact]);
+ diff = SUPERLU_MAX(diff, d__1);
+ }
+
+ if (xnorm > 1.) {
+ goto L20;
+ } else if (diff <= ovfl * xnorm) {
+ goto L20;
+ } else {
+ errbnd = 1. / eps;
+ goto L30;
+ }
+
+L20:
+#if 0
+ if (diff / xnorm <= ferr[j]) {
+ d__1 = diff / xnorm / ferr[j];
+ errbnd = SUPERLU_MAX(errbnd,d__1);
+ } else {
+ errbnd = 1. / eps;
+ }
+#endif
+ d__1 = diff / xnorm / ferr[j];
+ errbnd = SUPERLU_MAX(errbnd,d__1);
+ /*printf("Ferr: %f\n", errbnd);*/
+L30:
+ ;
+ }
+ reslts[0] = errbnd;
+
+ /* Test 2: Compute the maximum of BERR / ( (n+1)*EPS + (*) ), where
+ (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) + abs(b))_i ) */
+
+ for (k = 0; k < nrhs; ++k) {
+ for (i = 0; i < n; ++i)
+ rwork[i] = fabs( b[i + k*ldb] );
+ if ( notran ) {
+ for (j = 0; j < n; ++j) {
+ tmp = fabs( x[j + k*ldx] );
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ rwork[Astore->rowind[i]] += fabs(Aval[i]) * tmp;
+ }
+ }
+ } else {
+ for (j = 0; j < n; ++j) {
+ tmp = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ d__1 = fabs( x[irow + k*ldx] );
+ tmp += fabs(Aval[i]) * d__1;
+ }
+ rwork[j] += tmp;
+ }
+ }
+
+ axbi = rwork[0];
+ for (i = 1; i < n; ++i) axbi = SUPERLU_MIN(axbi, rwork[i]);
+
+ /* Computing MAX */
+ d__1 = axbi, d__2 = (n + 1) * unfl;
+ tmp = berr[k] / ((n + 1) * eps + (n + 1) * unfl / SUPERLU_MAX(d__1,d__2));
+
+ if (k == 0) {
+ reslts[1] = tmp;
+ } else {
+ reslts[1] = SUPERLU_MAX(reslts[1],tmp);
+ }
+ }
+
+ SUPERLU_FREE(rwork);
+ return 0;
+
+} /* sgst07 */
diff --git a/SuperLU_5.2.0/TESTING/sp_cconvert.c b/SuperLU_5.2.0/TESTING/sp_cconvert.c
new file mode 100644
index 0000000..293684f
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sp_cconvert.c
@@ -0,0 +1,52 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+
+#include "slu_cdefs.h"
+
+/*
+ * Convert a full matrix into a sparse matrix format.
+ */
+int
+sp_cconvert(int m, int n, complex *A, int lda, int kl, int ku,
+ complex *a, int *asub, int *xa, int *nnz)
+{
+ int lasta = 0;
+ int i, j, ilow, ihigh;
+ int *row;
+ complex *val;
+
+ for (j = 0; j < n; ++j) {
+ xa[j] = lasta;
+ val = &a[xa[j]];
+ row = &asub[xa[j]];
+
+ ilow = SUPERLU_MAX(0, j - ku);
+ ihigh = SUPERLU_MIN(n-1, j + kl);
+ for (i = ilow; i <= ihigh; ++i) {
+ val[i-ilow] = A[i + j*lda];
+ row[i-ilow] = i;
+ }
+ lasta += ihigh - ilow + 1;
+ }
+
+ xa[n] = *nnz = lasta;
+ return 0;
+}
+
+
diff --git a/SuperLU_5.2.0/TESTING/sp_dconvert.c b/SuperLU_5.2.0/TESTING/sp_dconvert.c
new file mode 100644
index 0000000..fac20ae
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sp_dconvert.c
@@ -0,0 +1,52 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+
+#include "slu_ddefs.h"
+
+/*
+ * Convert a full matrix into a sparse matrix format.
+ */
+int
+sp_dconvert(int m, int n, double *A, int lda, int kl, int ku,
+ double *a, int *asub, int *xa, int *nnz)
+{
+ int lasta = 0;
+ int i, j, ilow, ihigh;
+ int *row;
+ double *val;
+
+ for (j = 0; j < n; ++j) {
+ xa[j] = lasta;
+ val = &a[xa[j]];
+ row = &asub[xa[j]];
+
+ ilow = SUPERLU_MAX(0, j - ku);
+ ihigh = SUPERLU_MIN(n-1, j + kl);
+ for (i = ilow; i <= ihigh; ++i) {
+ val[i-ilow] = A[i + j*lda];
+ row[i-ilow] = i;
+ }
+ lasta += ihigh - ilow + 1;
+ }
+
+ xa[n] = *nnz = lasta;
+ return 0;
+}
+
+
diff --git a/SuperLU_5.2.0/TESTING/sp_ienv.c b/SuperLU_5.2.0/TESTING/sp_ienv.c
new file mode 100644
index 0000000..66ca33e
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sp_ienv.c
@@ -0,0 +1,69 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+/*
+ * File name: sp_ienv.c
+ * History: Modified from lapack routine ILAENV
+ */
+#include "slu_Cnames.h"
+
+int
+sp_ienv(int ispec)
+{
+/*
+ Purpose
+ =======
+
+ sp_ienv() is inquired to choose machine-dependent parameters for the
+ local environment. See ISPEC for a description of the parameters.
+
+ 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.
+
+ Arguments
+ =========
+
+ 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 the their row structures.
+ = 3: the maximum size for a supernode;
+ = 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;
+
+ (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.
+
+ =====================================================================
+*/
+
+ switch (ispec) {
+ case 1: return (3);
+ case 2: return (2);
+ case 3: return (10);
+ case 4: return (20);
+ case 5: return (10);
+ case 6: return (2);
+ }
+
+ /* Invalid value for ISPEC */
+ return (-1);
+
+} /* sp_ienv_ */
diff --git a/SuperLU_5.2.0/TESTING/sp_sconvert.c b/SuperLU_5.2.0/TESTING/sp_sconvert.c
new file mode 100644
index 0000000..a504ed7
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sp_sconvert.c
@@ -0,0 +1,52 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+
+#include "slu_sdefs.h"
+
+/*
+ * Convert a full matrix into a sparse matrix format.
+ */
+int
+sp_sconvert(int m, int n, float *A, int lda, int kl, int ku,
+ float *a, int *asub, int *xa, int *nnz)
+{
+ int lasta = 0;
+ int i, j, ilow, ihigh;
+ int *row;
+ float *val;
+
+ for (j = 0; j < n; ++j) {
+ xa[j] = lasta;
+ val = &a[xa[j]];
+ row = &asub[xa[j]];
+
+ ilow = SUPERLU_MAX(0, j - ku);
+ ihigh = SUPERLU_MIN(n-1, j + kl);
+ for (i = ilow; i <= ihigh; ++i) {
+ val[i-ilow] = A[i + j*lda];
+ row[i-ilow] = i;
+ }
+ lasta += ihigh - ilow + 1;
+ }
+
+ xa[n] = *nnz = lasta;
+ return 0;
+}
+
+
diff --git a/SuperLU_5.2.0/TESTING/sp_zconvert.c b/SuperLU_5.2.0/TESTING/sp_zconvert.c
new file mode 100644
index 0000000..5048bdd
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/sp_zconvert.c
@@ -0,0 +1,52 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+
+#include "slu_zdefs.h"
+
+/*
+ * Convert a full matrix into a sparse matrix format.
+ */
+int
+sp_zconvert(int m, int n, doublecomplex *A, int lda, int kl, int ku,
+ doublecomplex *a, int *asub, int *xa, int *nnz)
+{
+ int lasta = 0;
+ int i, j, ilow, ihigh;
+ int *row;
+ doublecomplex *val;
+
+ for (j = 0; j < n; ++j) {
+ xa[j] = lasta;
+ val = &a[xa[j]];
+ row = &asub[xa[j]];
+
+ ilow = SUPERLU_MAX(0, j - ku);
+ ihigh = SUPERLU_MIN(n-1, j + kl);
+ for (i = ilow; i <= ihigh; ++i) {
+ val[i-ilow] = A[i + j*lda];
+ row[i-ilow] = i;
+ }
+ lasta += ihigh - ilow + 1;
+ }
+
+ xa[n] = *nnz = lasta;
+ return 0;
+}
+
+
diff --git a/SuperLU_5.2.0/TESTING/stest.csh b/SuperLU_5.2.0/TESTING/stest.csh
new file mode 100755
index 0000000..0c5e3d0
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/stest.csh
@@ -0,0 +1,50 @@
+#!/bin/csh
+
+set ofile = stest.out # output file
+if ( -e $ofile ) then
+ rm -f $ofile
+endif
+echo "Single-precision testing output" > $ofile
+
+set MATRICES = (LAPACK g20.rua)
+set NVAL = (9 19)
+set NRHS = (5)
+set LWORK = (0 10000000)
+
+#
+# Loop through all matrices ...
+#
+foreach m ($MATRICES)
+
+ #--------------------------------------------
+ # Test matrix types generated in LAPACK-style
+ #--------------------------------------------
+ if ($m == 'LAPACK') then
+ echo '== LAPACK test matrices' >> $ofile
+ foreach n ($NVAL)
+ foreach s ($NRHS)
+ foreach l ($LWORK)
+ echo '' >> $ofile
+ echo 'n='$n 'nrhs='$s 'lwork='$l >> $ofile
+ ./stest -t "LA" -l $l -n $n -s $s >> $ofile
+ end
+ end
+ end
+ #--------------------------------------------
+ # Test a specified sparse matrix
+ #--------------------------------------------
+ else
+ echo '' >> $ofile
+ echo '== sparse matrix:' $m >> $ofile
+ foreach s ($NRHS)
+ foreach l ($LWORK)
+ echo '' >> $ofile
+ echo 'nrhs='$s 'lwork='$l >> $ofile
+ ./stest -t "SP" -s $s -l $l -f ../EXAMPLE/$m >> $ofile
+ end
+ end
+ endif
+
+end
+
+
diff --git a/SuperLU_5.2.0/TESTING/zdrive.c b/SuperLU_5.2.0/TESTING/zdrive.c
new file mode 100644
index 0000000..23e96fc
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/zdrive.c
@@ -0,0 +1,571 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+/*
+ * File name: zdrive.c
+ * Purpose: MAIN test program
+ */
+#include <string.h>
+#include "slu_zdefs.h"
+
+#define NTESTS 5 /* Number of test types */
+#define NTYPES 11 /* Number of matrix types */
+#define NTRAN 2
+#define THRESH 20.0
+#define FMT1 "%10s:n=%d, test(%d)=%12.5g\n"
+#define FMT2 "%10s:fact=%4d, trans=%4d, equed=%c, n=%d, imat=%d, test(%d)=%12.5g\n"
+#define FMT3 "%10s:info=%d, izero=%d, n=%d, nrhs=%d, imat=%d, nfail=%d\n"
+
+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, double *u, FILE **fp);
+
+main(int argc, char *argv[])
+{
+/*
+ * Purpose
+ * =======
+ *
+ * ZDRIVE is the main test program for the DOUBLE COMPLEX linear
+ * equation driver routines ZGSSV and ZGSSVX.
+ *
+ * The program is invoked by a shell script file -- ztest.csh.
+ * The output from the tests are written into a file -- ztest.out.
+ *
+ * =====================================================================
+ */
+ doublecomplex *a, *a_save;
+ int *asub, *asub_save;
+ int *xa, *xa_save;
+ SuperMatrix A, B, X, L, U;
+ SuperMatrix ASAV, AC;
+ GlobalLU_t Glu; /* Not needed on return. */
+ mem_usage_t mem_usage;
+ int *perm_r; /* row permutation from partial pivoting */
+ int *perm_c, *pc_save; /* column permutation */
+ int *etree;
+ doublecomplex zero = {0.0, 0.0};
+ double *R, *C;
+ double *ferr, *berr;
+ double *rwork;
+ doublecomplex *wwork;
+ void *work;
+ int info, lwork, nrhs, panel_size, relax;
+ int m, n, nnz;
+ doublecomplex *xact;
+ doublecomplex *rhsb, *solx, *bsav;
+ int ldb, ldx;
+ double rpg, rcond;
+ int i, j, k1;
+ double rowcnd, colcnd, amax;
+ int maxsuper, rowblk, colblk;
+ int prefact, nofact, equil, iequed;
+ int nt, nrun, nfail, nerrs, imat, fimat, nimat;
+ int nfact, ifact, itran;
+ int kl, ku, mode, lda;
+ int zerot, izero, ioff;
+ double u;
+ double anorm, cndnum;
+ doublecomplex *Afull;
+ double result[NTESTS];
+ superlu_options_t options;
+ fact_t fact;
+ trans_t trans;
+ SuperLUStat_t stat;
+ static char matrix_type[8];
+ static char equed[1], path[4], sym[1], dist[1];
+ FILE *fp;
+
+ /* Fixed set of parameters */
+ int iseed[] = {1988, 1989, 1990, 1991};
+ static char equeds[] = {'N', 'R', 'C', 'B'};
+ static fact_t facts[] = {FACTORED, DOFACT, SamePattern,
+ SamePattern_SameRowPerm};
+ static trans_t transs[] = {NOTRANS, TRANS, CONJ};
+
+ /* Some function prototypes */
+ 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_slu(char *, int *, int *, int *, char *, int *, int *,
+ double *, int *, double *, char *);
+ extern int zlatms_slu(int *, int *, char *, int *, char *, double *d,
+ int *, double *, double *, int *, int *,
+ char *, doublecomplex *, int *, doublecomplex *, int *);
+ extern int sp_zconvert(int, int, doublecomplex *, int, int, int,
+ doublecomplex *a, int *, int *, int *);
+
+
+ /* Executable statements */
+
+ strcpy(path, "ZGE");
+ nrun = 0;
+ nfail = 0;
+ nerrs = 0;
+
+ /* Defaults */
+ lwork = 0;
+ n = 1;
+ nrhs = 1;
+ panel_size = sp_ienv(1);
+ relax = sp_ienv(2);
+ u = 1.0;
+ strcpy(matrix_type, "LA");
+ parse_command_line(argc, argv, matrix_type, &n,
+ &panel_size, &relax, &nrhs, &maxsuper,
+ &rowblk, &colblk, &lwork, &u, &fp);
+ if ( lwork > 0 ) {
+ work = SUPERLU_MALLOC(lwork);
+ if ( !work ) {
+ fprintf(stderr, "expert: cannot allocate %d bytes\n", lwork);
+ exit (-1);
+ }
+ }
+
+ /* Set the default input options. */
+ set_default_options(&options);
+ options.DiagPivotThresh = u;
+ options.PrintStat = NO;
+ options.PivotGrowth = YES;
+ options.ConditionNumber = YES;
+ options.IterRefine = SLU_DOUBLE;
+
+ if ( strcmp(matrix_type, "LA") == 0 ) {
+ /* Test LAPACK matrix suite. */
+ m = n;
+ lda = SUPERLU_MAX(n, 1);
+ nnz = n * n; /* upper bound */
+ fimat = 1;
+ nimat = NTYPES;
+ Afull = doublecomplexCalloc(lda * n);
+ zallocateA(n, nnz, &a, &asub, &xa);
+ } else {
+ /* Read a sparse matrix */
+ fimat = nimat = 0;
+ zreadhb(fp, &m, &n, &nnz, &a, &asub, &xa);
+ }
+
+ zallocateA(n, nnz, &a_save, &asub_save, &xa_save);
+ rhsb = doublecomplexMalloc(m * nrhs);
+ bsav = doublecomplexMalloc(m * nrhs);
+ solx = doublecomplexMalloc(n * nrhs);
+ ldb = m;
+ ldx = n;
+ zCreate_Dense_Matrix(&B, m, nrhs, rhsb, ldb, SLU_DN, SLU_Z, SLU_GE);
+ zCreate_Dense_Matrix(&X, n, nrhs, solx, ldx, SLU_DN, SLU_Z, SLU_GE);
+ xact = doublecomplexMalloc(n * nrhs);
+ etree = intMalloc(n);
+ perm_r = intMalloc(n);
+ perm_c = intMalloc(n);
+ pc_save = intMalloc(n);
+ R = (double *) SUPERLU_MALLOC(m*sizeof(double));
+ C = (double *) SUPERLU_MALLOC(n*sizeof(double));
+ ferr = (double *) SUPERLU_MALLOC(nrhs*sizeof(double));
+ berr = (double *) SUPERLU_MALLOC(nrhs*sizeof(double));
+ j = SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs);
+ rwork = (double *) SUPERLU_MALLOC(j*sizeof(double));
+ for (i = 0; i < j; ++i) rwork[i] = 0.;
+ if ( !R ) ABORT("SUPERLU_MALLOC fails for R");
+ if ( !C ) ABORT("SUPERLU_MALLOC fails for C");
+ if ( !ferr ) ABORT("SUPERLU_MALLOC fails for ferr");
+ if ( !berr ) ABORT("SUPERLU_MALLOC fails for berr");
+ if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
+ wwork = doublecomplexCalloc( SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs) );
+
+ for (i = 0; i < n; ++i) perm_c[i] = pc_save[i] = i;
+ options.ColPerm = MY_PERMC;
+
+ for (imat = fimat; imat <= nimat; ++imat) { /* All matrix types */
+
+ if ( imat ) {
+
+ /* Skip types 5, 6, or 7 if the matrix size is too small. */
+ zerot = (imat >= 5 && imat <= 7);
+ if ( zerot && n < imat-4 )
+ continue;
+
+ /* Set up parameters with ZLATB4 and generate a test matrix
+ with ZLATMS. */
+ zlatb4_slu(path, &imat, &n, &n, sym, &kl, &ku, &anorm, &mode,
+ &cndnum, dist);
+
+ zlatms_slu(&n, &n, dist, iseed, sym, &rwork[0], &mode, &cndnum,
+ &anorm, &kl, &ku, "No packing", Afull, &lda,
+ &wwork[0], &info);
+
+ if ( info ) {
+ printf(FMT3, "ZLATMS", info, izero, n, nrhs, imat, nfail);
+ continue;
+ }
+
+ /* For types 5-7, zero one or more columns of the matrix
+ to test that INFO is returned correctly. */
+ if ( zerot ) {
+ if ( imat == 5 ) izero = 1;
+ else if ( imat == 6 ) izero = n;
+ else izero = n / 2 + 1;
+ ioff = (izero - 1) * lda;
+ if ( imat < 7 ) {
+ for (i = 0; i < n; ++i) Afull[ioff + i] = zero;
+ } else {
+ for (j = 0; j < n - izero + 1; ++j)
+ for (i = 0; i < n; ++i)
+ Afull[ioff + i + j*lda] = zero;
+ }
+ } else {
+ izero = 0;
+ }
+
+ /* Convert to sparse representation. */
+ sp_zconvert(n, n, Afull, lda, kl, ku, a, asub, xa, &nnz);
+
+ } else {
+ izero = 0;
+ zerot = 0;
+ }
+
+ zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
+
+ /* Save a copy of matrix A in ASAV */
+ zCreate_CompCol_Matrix(&ASAV, m, n, nnz, a_save, asub_save, xa_save,
+ SLU_NC, SLU_Z, SLU_GE);
+ zCopy_CompCol_Matrix(&A, &ASAV);
+
+ /* Form exact solution. */
+ zGenXtrue(n, nrhs, xact, ldx);
+
+ StatInit(&stat);
+
+ for (iequed = 0; iequed < 4; ++iequed) {
+ *equed = equeds[iequed];
+ if (iequed == 0) nfact = 4;
+ else nfact = 1; /* Only test factored, pre-equilibrated matrix */
+
+ for (ifact = 0; ifact < nfact; ++ifact) {
+ fact = facts[ifact];
+ options.Fact = fact;
+
+ for (equil = 0; equil < 2; ++equil) {
+ options.Equil = equil;
+ prefact = ( options.Fact == FACTORED ||
+ options.Fact == SamePattern_SameRowPerm );
+ /* Need a first factor */
+ nofact = (options.Fact != FACTORED); /* Not factored */
+
+ /* Restore the matrix A. */
+ zCopy_CompCol_Matrix(&ASAV, &A);
+
+ if ( zerot ) {
+ if ( prefact ) continue;
+ } else if ( options.Fact == FACTORED ) {
+ if ( equil || iequed ) {
+ /* Compute row and column scale factors to
+ equilibrate matrix A. */
+ zgsequ(&A, R, C, &rowcnd, &colcnd, &amax, &info);
+
+ /* Force equilibration. */
+ if ( !info && n > 0 ) {
+ if ( strncmp(equed, "R", 1)==0 ) {
+ rowcnd = 0.;
+ colcnd = 1.;
+ } else if ( strncmp(equed, "C", 1)==0 ) {
+ rowcnd = 1.;
+ colcnd = 0.;
+ } else if ( strncmp(equed, "B", 1)==0 ) {
+ rowcnd = 0.;
+ colcnd = 0.;
+ }
+ }
+
+ /* Equilibrate the matrix. */
+ zlaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
+ }
+ }
+
+ if ( prefact ) { /* Need a factor for the first time */
+
+ /* Save Fact option. */
+ fact = options.Fact;
+ options.Fact = DOFACT;
+
+ /* Preorder the matrix, obtain the column etree. */
+ sp_preorder(&options, &A, perm_c, etree, &AC);
+
+ /* Factor the matrix AC. */
+ zgstrf(&options, &AC, relax, panel_size,
+ etree, work, lwork, perm_c, perm_r, &L, &U,
+ &Glu, &stat, &info);
+
+ if ( info ) {
+ printf("** First factor: info %d, equed %c\n",
+ info, *equed);
+ if ( lwork == -1 ) {
+ printf("** Estimated memory: %d bytes\n",
+ info - n);
+ exit(0);
+ }
+ }
+
+ Destroy_CompCol_Permuted(&AC);
+
+ /* Restore Fact option. */
+ options.Fact = fact;
+ } /* if .. first time factor */
+
+ for (itran = 0; itran < NTRAN; ++itran) {
+ trans = transs[itran];
+ options.Trans = trans;
+
+ /* Restore the matrix A. */
+ zCopy_CompCol_Matrix(&ASAV, &A);
+
+ /* Set the right hand side. */
+ zFillRHS(trans, nrhs, xact, ldx, &A, &B);
+ zCopy_Dense_Matrix(m, nrhs, rhsb, ldb, bsav, ldb);
+
+ /*----------------
+ * Test zgssv
+ *----------------*/
+ if ( options.Fact == DOFACT && itran == 0) {
+ /* Not yet factored, and untransposed */
+
+ zCopy_Dense_Matrix(m, nrhs, rhsb, ldb, solx, ldx);
+ zgssv(&options, &A, perm_c, perm_r, &L, &U, &X,
+ &stat, &info);
+
+ if ( info && info != izero ) {
+ printf(FMT3, "zgssv",
+ info, izero, n, nrhs, imat, nfail);
+ } else {
+ /* Reconstruct matrix from factors and
+ compute residual. */
+ 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);
+ zgst02(trans, m, n, nrhs, &A, solx,
+ ldx, wwork,ldb, &result[1]);
+ nt = 2;
+ }
+
+ /* Print information about the tests that
+ did not pass the threshold. */
+ for (i = 0; i < nt; ++i) {
+ if ( result[i] >= THRESH ) {
+ printf(FMT1, "zgssv", n, i,
+ result[i]);
+ ++nfail;
+ }
+ }
+ nrun += nt;
+ } /* else .. info == 0 */
+
+ /* Restore perm_c. */
+ for (i = 0; i < n; ++i) perm_c[i] = pc_save[i];
+
+ if (lwork == 0) {
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+ } /* if .. end of testing zgssv */
+
+ /*----------------
+ * Test zgssvx
+ *----------------*/
+
+ /* Equilibrate the matrix if fact = FACTORED and
+ equed = 'R', 'C', or 'B'. */
+ if ( options.Fact == FACTORED &&
+ (equil || iequed) && n > 0 ) {
+ zlaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
+ }
+
+ /* Solve the system and compute the condition number
+ and error bounds using zgssvx. */
+ zgssvx(&options, &A, perm_c, perm_r, etree,
+ equed, R, C, &L, &U, work, lwork, &B, &X, &rpg,
+ &rcond, ferr, berr, &Glu,
+ &mem_usage, &stat, &info);
+
+ if ( info && info != izero ) {
+ printf(FMT3, "zgssvx",
+ info, izero, n, nrhs, imat, nfail);
+ if ( lwork == -1 ) {
+ printf("** Estimated memory: %.0f bytes\n",
+ mem_usage.total_needed);
+ exit(0);
+ }
+ } else {
+ if ( !prefact ) {
+ /* Reconstruct matrix from factors and
+ compute residual. */
+ zgst01(m, n, &A, &L, &U, perm_c, perm_r,
+ &result[0]);
+ k1 = 0;
+ } else {
+ k1 = 1;
+ }
+
+ if ( !info ) {
+ /* Compute residual of the computed solution.*/
+ zCopy_Dense_Matrix(m, nrhs, bsav, ldb,
+ wwork, ldb);
+ zgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
+ wwork, ldb, &result[1]);
+
+ /* Check solution from generated exact
+ solution. */
+ zgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
+ &result[2]);
+
+ /* Check the error bounds from iterative
+ refinement. */
+ zgst07(trans, n, nrhs, &ASAV, bsav, ldb,
+ solx, ldx, xact, ldx, ferr, berr,
+ &result[3]);
+
+ /* Print information about the tests that did
+ not pass the threshold. */
+ for (i = k1; i < NTESTS; ++i) {
+ if ( result[i] >= THRESH ) {
+ printf(FMT2, "zgssvx",
+ options.Fact, trans, *equed,
+ n, imat, i, result[i]);
+ ++nfail;
+ }
+ }
+ nrun += NTESTS;
+ } /* if .. info == 0 */
+ } /* else .. end of testing zgssvx */
+
+ } /* for itran ... */
+
+ if ( lwork == 0 ) {
+ Destroy_SuperNode_Matrix(&L);
+ Destroy_CompCol_Matrix(&U);
+ }
+
+ } /* for equil ... */
+ } /* for ifact ... */
+ } /* for iequed ... */
+#if 0
+ if ( !info ) {
+ PrintPerf(&L, &U, &mem_usage, rpg, rcond, ferr, berr, equed);
+ }
+#endif
+ Destroy_SuperMatrix_Store(&A);
+ Destroy_SuperMatrix_Store(&ASAV);
+ StatFree(&stat);
+
+ } /* for imat ... */
+
+ /* Print a summary of the results. */
+ PrintSumm("ZGE", nfail, nrun, nerrs);
+
+ if ( strcmp(matrix_type, "LA") == 0 ) SUPERLU_FREE (Afull);
+ SUPERLU_FREE (rhsb);
+ SUPERLU_FREE (bsav);
+ SUPERLU_FREE (solx);
+ SUPERLU_FREE (xact);
+ SUPERLU_FREE (etree);
+ SUPERLU_FREE (perm_r);
+ SUPERLU_FREE (perm_c);
+ SUPERLU_FREE (pc_save);
+ SUPERLU_FREE (R);
+ SUPERLU_FREE (C);
+ SUPERLU_FREE (ferr);
+ SUPERLU_FREE (berr);
+ SUPERLU_FREE (rwork);
+ SUPERLU_FREE (wwork);
+ Destroy_SuperMatrix_Store(&B);
+ Destroy_SuperMatrix_Store(&X);
+#if 0
+ Destroy_CompCol_Matrix(&A);
+ Destroy_CompCol_Matrix(&ASAV);
+#else
+ SUPERLU_FREE(a); SUPERLU_FREE(asub); SUPERLU_FREE(xa);
+ SUPERLU_FREE(a_save); SUPERLU_FREE(asub_save); SUPERLU_FREE(xa_save);
+#endif
+ if ( lwork > 0 ) {
+ SUPERLU_FREE (work);
+ Destroy_SuperMatrix_Store(&L);
+ Destroy_SuperMatrix_Store(&U);
+ }
+
+ return 0;
+}
+
+/*
+ * Parse command line options to get relaxed snode size, panel size, etc.
+ */
+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, double *u, FILE **fp)
+{
+ int c;
+ extern char *optarg;
+
+ while ( (c = getopt(argc, argv, "ht:n:w:r:s:m:b:c:l:u:f:")) != EOF ) {
+ switch (c) {
+ case 'h':
+ printf("Options:\n");
+ printf("\t-w <int> - panel size\n");
+ printf("\t-r <int> - granularity of relaxed supernodes\n");
+ exit(1);
+ break;
+ case 't': strcpy(matrix_type, optarg);
+ break;
+ case 'n': *n = atoi(optarg);
+ break;
+ case 'w': *w = atoi(optarg);
+ break;
+ case 'r': *relax = atoi(optarg);
+ break;
+ case 's': *nrhs = atoi(optarg);
+ break;
+ case 'm': *maxsuper = atoi(optarg);
+ break;
+ case 'b': *rowblk = atoi(optarg);
+ break;
+ case 'c': *colblk = atoi(optarg);
+ break;
+ case 'l': *lwork = atoi(optarg);
+ break;
+ case 'u': *u = atof(optarg);
+ break;
+ case 'f':
+ if ( !(*fp = fopen(optarg, "r")) ) {
+ ABORT("File does not exist");
+ }
+ printf(".. test sparse matrix in file: %s\n", optarg);
+ break;
+ }
+ }
+}
diff --git a/SuperLU_5.2.0/TESTING/zgst01.c b/SuperLU_5.2.0/TESTING/zgst01.c
new file mode 100644
index 0000000..cc9b19e
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/zgst01.c
@@ -0,0 +1,182 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+#include <math.h>
+#include "slu_zdefs.h"
+
+int zgst01(int m, int n, SuperMatrix *A, SuperMatrix *L,
+ SuperMatrix *U, int *perm_c, int *perm_r, double *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ Arguments
+ ==========
+
+ M (input) INT
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INT
+ The number of columns of the matrix A. N >= 0.
+
+ A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
+ The original M x N matrix A.
+
+ L (input) SuperMatrix *, dimension (L->nrow, L->ncol)
+ The factor matrix 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.
+
+ RESID (output) DOUBLE*
+ norm(L*U - A) / ( N * norm(A) * EPS )
+
+ =====================================================================
+*/
+
+ /* Local variables */
+ doublecomplex zero = {0.0, 0.0};
+ int i, j, k, arow, lptr,isub, urow, superno, fsupc, u_part;
+ doublecomplex utemp, comp_temp;
+ double anorm, tnorm, cnorm;
+ double eps;
+ doublecomplex *work;
+ SCformat *Lstore;
+ NCformat *Astore, *Ustore;
+ doublecomplex *Aval, *Lval, *Uval;
+ int *colbeg, *colend;
+
+ /* Function prototypes */
+ extern double zlangs(char *, SuperMatrix *);
+
+ /* Quick exit if M = 0 or N = 0. */
+
+ if (m <= 0 || n <= 0) {
+ *resid = 0.f;
+ return 0;
+ }
+
+ work = (doublecomplex *)doublecomplexCalloc(m);
+
+ Astore = A->Store;
+ Aval = Astore->nzval;
+ Lstore = L->Store;
+ Lval = Lstore->nzval;
+ Ustore = U->Store;
+ Uval = Ustore->nzval;
+
+ 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];
+ }
+
+ /* Determine EPS and the norm of A. */
+ eps = dmach("Epsilon");
+ anorm = zlangs("1", A);
+ cnorm = 0.;
+
+ /* Compute the product L*U, one column at a time */
+ for (k = 0; k < n; ++k) {
+
+ /* The U part outside the rectangular supernode */
+ for (i = U_NZ_START(k); i < U_NZ_START(k+1); ++i) {
+ urow = U_SUB(i);
+ utemp = Uval[i];
+ superno = Lstore->col_to_sup[urow];
+ fsupc = L_FST_SUPC(superno);
+ u_part = urow - fsupc + 1;
+ lptr = L_SUB_START(fsupc) + u_part;
+ work[L_SUB(lptr-1)].r -= utemp.r;
+ work[L_SUB(lptr-1)].i -= utemp.i;
+ for (j = L_NZ_START(urow) + u_part; j < L_NZ_START(urow+1); ++j) {
+ isub = L_SUB(lptr);
+ zz_mult(&comp_temp, &utemp, &Lval[j]);
+ z_sub(&work[isub], &work[isub], &comp_temp);
+ ++lptr;
+ }
+ }
+
+ /* The U part inside the rectangular supernode */
+ superno = Lstore->col_to_sup[k];
+ fsupc = L_FST_SUPC(superno);
+ urow = L_NZ_START(k);
+ for (i = fsupc; i <= k; ++i) {
+ utemp = Lval[urow++];
+ u_part = i - fsupc + 1;
+ lptr = L_SUB_START(fsupc) + u_part;
+ work[L_SUB(lptr-1)].r -= utemp.r;
+ work[L_SUB(lptr-1)].i -= utemp.i;
+ for (j = L_NZ_START(i)+u_part; j < L_NZ_START(i+1); ++j) {
+ isub = L_SUB(lptr);
+ zz_mult(&comp_temp, &utemp, &Lval[j]);
+ z_sub(&work[isub], &work[isub], &comp_temp);
+ ++lptr;
+ }
+ }
+
+ /* Now compute A[k] - (L*U)[k] (Both matrices may be permuted.) */
+
+ 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;
+ }
+
+ /* Now compute the 1-norm of the column vector work */
+ tnorm = 0.;
+ for (i = 0; i < m; ++i) {
+ tnorm += fabs(work[i].r) + fabs(work[i].i);
+ work[i] = zero;
+ }
+ cnorm = SUPERLU_MAX(tnorm, cnorm);
+ }
+
+ *resid = cnorm;
+
+ if (anorm <= 0.f) {
+ if (*resid != 0.f) {
+ *resid = 1.f / eps;
+ }
+ } else {
+ *resid = *resid / (float) n / anorm / eps;
+ }
+
+ SUPERLU_FREE(work);
+ SUPERLU_FREE(colbeg);
+ SUPERLU_FREE(colend);
+ return 0;
+
+/* End of ZGST01 */
+
+} /* zgst01_ */
+
diff --git a/SuperLU_5.2.0/TESTING/zgst02.c b/SuperLU_5.2.0/TESTING/zgst02.c
new file mode 100644
index 0000000..fc474c7
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/zgst02.c
@@ -0,0 +1,146 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- 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"
+
+int zgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
+ doublecomplex *x, int ldx, doublecomplex *b, int ldb, double *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ Arguments
+ =========
+
+ TRANS (input) trans_t
+ Specifies the form of the system of equations:
+ = NOTRANS: A *x = b
+ = TRANS : A'*x = b, where A' is the transpose of A
+ = CONJ : A'*x = b, where A' is the transpose of A
+
+ M (input) INTEGER
+ The number of rows of the matrix A. M >= 0.
+
+ N (input) INTEGER
+ The number of columns of the matrix A. N >= 0.
+
+ NRHS (input) INTEGER
+ The number of columns of B, the matrix of right hand sides.
+ NRHS >= 0.
+
+ A (input) SuperMatrix*, dimension (LDA,N)
+ The original M x N sparse matrix A.
+
+ X (input) DOUBLE COMPLEX PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors for the system of linear
+ equations.
+
+ LDX (input) INTEGER
+ The leading dimension of the array X. If TRANS = NOTRANS,
+ LDX >= max(1,N); if TRANS = TRANS or CONJ, LDX >= max(1,M).
+
+ B (input/output) DOUBLE COMPLEX PRECISION array, dimension (LDB,NRHS)
+ On entry, the right hand side vectors for the system of
+ linear equations.
+ On exit, B is overwritten with the difference B - A*X.
+
+ LDB (input) INTEGER
+ The leading dimension of the array B. IF TRANS = NOTRANS,
+ LDB >= max(1,M); if TRANS = TRANS or CONJ, LDB >= max(1,N).
+
+ RESID (output) DOUBLE PRECISION
+ The maximum over the number of right hand sides of
+ norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
+
+ =====================================================================
+*/
+
+ /* Table of constant values */
+ doublecomplex alpha = {-1., 0.0};
+ doublecomplex beta = {1., 0.0};
+ int c__1 = 1;
+
+ /* System generated locals */
+ double d__1, d__2;
+
+ /* Local variables */
+ int j;
+ int n1, n2;
+ double anorm, bnorm;
+ double xnorm;
+ double eps;
+ char transc[1];
+
+ /* Function prototypes */
+ extern double zlangs(char *, SuperMatrix *);
+ extern double dzasum_(int *, doublecomplex *, int *);
+
+ /* Function Body */
+ if ( m <= 0 || n <= 0 || nrhs == 0) {
+ *resid = 0.;
+ return 0;
+ }
+
+ if ( (trans == TRANS) || (trans == CONJ) ) {
+ n1 = n;
+ n2 = m;
+ *transc = 'T';
+ } else {
+ n1 = m;
+ n2 = n;
+ *transc = 'N';
+ }
+
+ /* Exit with RESID = 1/EPS if ANORM = 0. */
+ eps = dmach("Epsilon");
+ anorm = zlangs("1", A);
+ if (anorm <= 0.) {
+ *resid = 1. / eps;
+ return 0;
+ }
+
+ /* Compute B - A*X (or B - A'*X ) and store in B. */
+
+ sp_zgemm(transc, "N", n1, nrhs, n2, alpha, A, x, ldx, beta, b, ldb);
+
+ /* Compute the maximum over the number of right hand sides of
+ norm(B - A*X) / ( norm(A) * norm(X) * EPS ) . */
+
+ *resid = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ bnorm = dzasum_(&n1, &b[j*ldb], &c__1);
+ xnorm = dzasum_(&n2, &x[j*ldx], &c__1);
+ if (xnorm <= 0.) {
+ *resid = 1. / eps;
+ } else {
+ /* Computing MAX */
+ d__1 = *resid, d__2 = bnorm / anorm / xnorm / eps;
+ *resid = SUPERLU_MAX(d__1, d__2);
+ }
+ }
+
+ return 0;
+
+} /* zgst02 */
+
diff --git a/SuperLU_5.2.0/TESTING/zgst04.c b/SuperLU_5.2.0/TESTING/zgst04.c
new file mode 100644
index 0000000..c133b58
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/zgst04.c
@@ -0,0 +1,131 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 2.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * November 15, 1997
+ *
+ */
+#include <math.h>
+#include "slu_zdefs.h"
+
+int zgst04(int n, int nrhs, doublecomplex *x, int ldx, doublecomplex *xact,
+ int ldxact, double rcond, double *resid)
+{
+/*
+ Purpose
+ =======
+
+ 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
+ machine epsilon.
+
+ Arguments
+ =========
+
+ N (input) INT
+ The number of rows of the matrices X and XACT. N >= 0.
+
+ NRHS (input) INT
+ The number of columns of the matrices X and XACT. NRHS >= 0.
+
+ X (input) DOUBLE COMPLEX PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors. Each vector is stored as a
+ column of the matrix X.
+
+ LDX (input) INT
+ The leading dimension of the array X. LDX >= max(1,N).
+
+ XACT (input) DOUBLE COMPLEX PRECISION array, dimension( LDX, NRHS )
+ The exact solution vectors. Each vector is stored as a
+ column of the matrix XACT.
+
+ LDXACT (input) INT
+ The leading dimension of the array XACT. LDXACT >= max(1,N).
+
+ RCOND (input) DOUBLE COMPLEX PRECISION
+ The reciprocal of the condition number of the coefficient
+ matrix in the system of equations.
+
+ RESID (output) DOUBLE PRECISION
+ The maximum over the NRHS solution vectors of
+ ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS )
+
+ =====================================================================
+*/
+ /* Table of constant values */
+ int c__1 = 1;
+
+ /* System generated locals */
+ double d__1, d__2, d__3, d__4;
+
+ /* Local variables */
+ int i, j, n__1;
+ int ix;
+ double xnorm;
+ double eps;
+ double diffnm;
+
+ /* Function prototypes */
+ extern int izamax_(int *, doublecomplex *, int *);
+
+ /* Quick exit if N = 0 or NRHS = 0. */
+ if ( n <= 0 || nrhs <= 0 ) {
+ *resid = 0.;
+ return 0;
+ }
+
+ /* Exit with RESID = 1/EPS if RCOND is invalid. */
+ eps = dmach("Epsilon");
+ if ( rcond < 0. ) {
+ *resid = 1. / eps;
+ return 0;
+ }
+
+ /* Compute the maximum of norm(X - XACT) / ( norm(XACT) * EPS )
+ over all the vectors X and XACT . */
+
+ *resid = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ n__1 = n;
+ ix = izamax_(&n__1, &xact[j*ldxact], &c__1);
+ xnorm = (d__1 = xact[ix-1 + j*ldxact].r, fabs(d__1)) +
+ (d__2 = xact[ix-1 + j*ldxact].i, fabs(d__2));
+
+ diffnm = 0.;
+ for (i = 0; i < n; ++i) {
+ /* Computing MAX */
+ d__3 = diffnm;
+ d__4 = (d__1 = x[i+j*ldx].r-xact[i+j*ldxact].r, fabs(d__1)) +
+ (d__2 = x[i+j*ldx].i-xact[i+j*ldxact].i, fabs(d__2));
+ diffnm = SUPERLU_MAX(d__3,d__4);
+ }
+ if (xnorm <= 0.) {
+ if (diffnm > 0.) {
+ *resid = 1. / eps;
+ }
+ } else {
+ /* Computing MAX */
+ d__1 = *resid, d__2 = diffnm / xnorm * rcond;
+ *resid = SUPERLU_MAX(d__1,d__2);
+ }
+ }
+ if (*resid * eps < 1.) {
+ *resid /= eps;
+ }
+
+ return 0;
+
+} /* zgst04_ */
diff --git a/SuperLU_5.2.0/TESTING/zgst07.c b/SuperLU_5.2.0/TESTING/zgst07.c
new file mode 100644
index 0000000..a6ceb6d
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/zgst07.c
@@ -0,0 +1,237 @@
+/*! \file
+Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+
+All rights reserved.
+
+The source code is distributed under BSD license, see the file License.txt
+at the top-level directory.
+*/
+
+/*
+ * -- SuperLU routine (version 3.0) --
+ * Univ. of California Berkeley, Xerox Palo Alto Research Center,
+ * and Lawrence Berkeley National Lab.
+ * October 15, 2003
+ *
+ */
+#include <math.h>
+#include "slu_zdefs.h"
+
+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)
+{
+/*
+ Purpose
+ =======
+
+ 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.
+
+ RESLTS(1) = test of the error bound
+ = norm(X - XACT) / ( norm(X) * FERR )
+ A large value is returned if this ratio is not less than one.
+
+ RESLTS(2) = residual from the iterative refinement routine
+ = the maximum of BERR / ( (n+1)*EPS + (*) ), where
+ (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
+
+ Arguments
+ =========
+
+ TRANS (input) trans_t
+ Specifies the form of the system of equations.
+ = NOTRANS: A *x = b
+ = TRANS : A'*x = b, where A' is the transpose of A
+ = CONJ : A'*x = b, where A' is the transpose of A
+
+ N (input) INT
+ The number of rows of the matrices X and XACT. N >= 0.
+
+ NRHS (input) INT
+ The number of columns of the matrices X and XACT. NRHS >= 0.
+
+
+ A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
+ The original n by n matrix A.
+
+ B (input) DOUBLE COMPLEX PRECISION array, dimension (LDB,NRHS)
+ The right hand side vectors for the system of linear
+ equations.
+
+ LDB (input) INT
+ The leading dimension of the array B. LDB >= max(1,N).
+
+ X (input) DOUBLE COMPLEX PRECISION array, dimension (LDX,NRHS)
+ The computed solution vectors. Each vector is stored as a
+ column of the matrix X.
+
+ LDX (input) INT
+ The leading dimension of the array X. LDX >= max(1,N).
+
+ XACT (input) DOUBLE COMPLEX PRECISION array, dimension (LDX,NRHS)
+ The exact solution vectors. Each vector is stored as a
+ column of the matrix XACT.
+
+ LDXACT (input) INT
+ The leading dimension of the array XACT. LDXACT >= max(1,N).
+
+
+ FERR (input) DOUBLE COMPLEX PRECISION array, dimension (NRHS)
+ The estimated forward error bounds for each solution vector
+ X. If XTRUE is the true solution, FERR bounds the magnitude
+ of the largest entry in (X - XTRUE) divided by the magnitude
+ of the largest entry in X.
+
+ BERR (input) DOUBLE COMPLEX PRECISION array, dimension (NRHS)
+ The componentwise relative backward error of each solution
+ vector (i.e., the smallest relative change in any entry of A
+
+ or B that makes X an exact solution).
+
+ RESLTS (output) DOUBLE PRECISION array, dimension (2)
+ The maximum over the NRHS solution vectors of the ratios:
+ RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
+ RESLTS(2) = BERR / ( (n+1)*EPS + (*) )
+
+ =====================================================================
+*/
+
+ /* Table of constant values */
+ int c__1 = 1;
+
+ /* System generated locals */
+ double d__1, d__2;
+ double d__3, d__4;
+
+ /* Local variables */
+ double diff, axbi;
+ int imax, irow, n__1;
+ int i, j, k;
+ double unfl, ovfl;
+ double xnorm;
+ double errbnd;
+ int notran;
+ double eps, tmp;
+ double *rwork;
+ doublecomplex *Aval;
+ NCformat *Astore;
+
+ /* Function prototypes */
+ extern int izamax_(int *, doublecomplex *, int *);
+
+
+ /* Quick exit if N = 0 or NRHS = 0. */
+ if ( n <= 0 || nrhs <= 0 ) {
+ reslts[0] = 0.;
+ reslts[1] = 0.;
+ return 0;
+ }
+
+ eps = dmach("Epsilon");
+ unfl = dmach("Safe minimum");
+ ovfl = 1. / unfl;
+ notran = (trans == NOTRANS);
+
+ rwork = (double *) SUPERLU_MALLOC(n*sizeof(double));
+ if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
+ Astore = A->Store;
+ Aval = (doublecomplex *) Astore->nzval;
+
+ /* Test 1: Compute the maximum of
+ norm(X - XACT) / ( norm(X) * FERR )
+ over all the vectors X and XACT using the infinity-norm. */
+
+ errbnd = 0.;
+ for (j = 0; j < nrhs; ++j) {
+ n__1 = n;
+ imax = izamax_(&n__1, &x[j*ldx], &c__1);
+ d__1 = (d__2 = x[imax-1 + j*ldx].r, fabs(d__2)) +
+ (d__3 = x[imax-1 + j*ldx].i, fabs(d__3));
+ xnorm = SUPERLU_MAX(d__1,unfl);
+ diff = 0.;
+ for (i = 0; i < n; ++i) {
+ d__1 = (d__2 = x[i+j*ldx].r - xact[i+j*ldxact].r, fabs(d__2)) +
+ (d__3 = x[i+j*ldx].i - xact[i+j*ldxact].i, fabs(d__3));
+ diff = SUPERLU_MAX(diff, d__1);
+ }
+
+ if (xnorm > 1.) {
+ goto L20;
+ } else if (diff <= ovfl * xnorm) {
+ goto L20;
+ } else {
+ errbnd = 1. / eps;
+ goto L30;
+ }
+
+L20:
+#if 0
+ if (diff / xnorm <= ferr[j]) {
+ d__1 = diff / xnorm / ferr[j];
+ errbnd = SUPERLU_MAX(errbnd,d__1);
+ } else {
+ errbnd = 1. / eps;
+ }
+#endif
+ d__1 = diff / xnorm / ferr[j];
+ errbnd = SUPERLU_MAX(errbnd,d__1);
+ /*printf("Ferr: %f\n", errbnd);*/
+L30:
+ ;
+ }
+ reslts[0] = errbnd;
+
+ /* Test 2: Compute the maximum of BERR / ( (n+1)*EPS + (*) ), where
+ (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) + abs(b))_i ) */
+
+ for (k = 0; k < nrhs; ++k) {
+ for (i = 0; i < n; ++i)
+ rwork[i] = (d__1 = b[i + k*ldb].r, fabs(d__1)) +
+ (d__2 = b[i + k*ldb].i, fabs(d__2));
+ if ( notran ) {
+ for (j = 0; j < n; ++j) {
+ tmp = (d__1 = x[j + k*ldx].r, fabs(d__1)) +
+ (d__2 = x[j + k*ldx].i, fabs(d__2));
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ d__1 = (d__2 = Aval[i].r, fabs(d__2)) +
+ (d__3 = Aval[i].i, fabs(d__3));
+ rwork[Astore->rowind[i]] += d__1 * tmp;
+ }
+ }
+ } else {
+ for (j = 0; j < n; ++j) {
+ tmp = 0.;
+ for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
+ irow = Astore->rowind[i];
+ d__1 = (d__2 = x[irow + k*ldx].r, fabs(d__2)) +
+ (d__3 = x[irow + k*ldx].i, fabs(d__3));
+ d__2 = (d__3 = Aval[i].r, fabs(d__3)) +
+ (d__4 = Aval[i].i, fabs(d__4));
+ tmp += d__2 * d__1;
+ }
+ rwork[j] += tmp;
+ }
+ }
+
+ axbi = rwork[0];
+ for (i = 1; i < n; ++i) axbi = SUPERLU_MIN(axbi, rwork[i]);
+
+ /* Computing MAX */
+ d__1 = axbi, d__2 = (n + 1) * unfl;
+ tmp = berr[k] / ((n + 1) * eps + (n + 1) * unfl / SUPERLU_MAX(d__1,d__2));
+
+ if (k == 0) {
+ reslts[1] = tmp;
+ } else {
+ reslts[1] = SUPERLU_MAX(reslts[1],tmp);
+ }
+ }
+
+ SUPERLU_FREE(rwork);
+ return 0;
+
+} /* zgst07 */
diff --git a/SuperLU_5.2.0/TESTING/ztest.csh b/SuperLU_5.2.0/TESTING/ztest.csh
new file mode 100755
index 0000000..db51a81
--- /dev/null
+++ b/SuperLU_5.2.0/TESTING/ztest.csh
@@ -0,0 +1,49 @@
+#!/bin/csh
+
+set ofile = ztest.out # output file
+if ( -e $ofile ) then
+ rm -f $ofile
+endif
+echo "Double-precision complex testing output" > $ofile
+
+set MATRICES = (LAPACK cg20.cua)
+set NVAL = (9 19)
+set NRHS = (5)
+set LWORK = (0 10000000)
+
+#
+# Loop through all matrices ...
+#
+foreach m ($MATRICES)
+
+ #--------------------------------------------
+ # Test matrix types generated in LAPACK-style
+ #--------------------------------------------
+ if ($m == 'LAPACK') then
+ echo '== LAPACK test matrices' >> $ofile
+ foreach n ($NVAL)
+ foreach s ($NRHS)
+ foreach l ($LWORK)
+ echo '' >> $ofile
+ echo 'n='$n 'nrhs='$s 'lwork='$l >> $ofile
+ ./ztest -t "LA" -l $l -n $n -s $s >> $ofile
+ end
+ end
+ end
+ #--------------------------------------------
+ # Test a specified sparse matrix
+ #--------------------------------------------
+ else
+ echo '' >> $ofile
+ echo '== sparse matrix:' $m >> $ofile
+ foreach s ($NRHS)
+ foreach l ($LWORK)
+ echo '' >> $ofile
+ echo 'nrhs='$s 'lwork='$l >> $ofile
+ ./ztest -t "SP" -s $s -l $l -f ../EXAMPLE/$m >> $ofile
+ end
+ end
+ endif
+
+end
+
diff --git a/SuperLU_5.2.0/cmake/._XSDKDefaults.cmake b/SuperLU_5.2.0/cmake/._XSDKDefaults.cmake
new file mode 100644
index 0000000..d46f99f
Binary files /dev/null and b/SuperLU_5.2.0/cmake/._XSDKDefaults.cmake differ
diff --git a/SuperLU_5.2.0/cmake/XSDKDefaults.cmake b/SuperLU_5.2.0/cmake/XSDKDefaults.cmake
new file mode 100644
index 0000000..df2ddef
--- /dev/null
+++ b/SuperLU_5.2.0/cmake/XSDKDefaults.cmake
@@ -0,0 +1,182 @@
+##################################################################################
+#
+# Set defaults for XSDK CMake projects
+#
+##################################################################################
+
+#
+# This module implements standard behavior for XSDK CMake projects. The main
+# thing it does in XSDK mode (i.e. USE_XSDK_DEFAULTS=TRUE) is to print out
+# when the env vars CC, CXX, FC and compiler flags CFLAGS, CXXFLAGS, and
+# FFLAGS/FCFLAGS are used to select the compilers and compiler flags (raw
+# CMake does this silently) and to set BUILD_SHARED_LIBS=TRUE and
+# CMAKE_BUILD_TYPE=DEBUG by default. It does not implement *all* of the
+# standard XSDK configuration parameters. The parent CMake project must do
+# that.
+#
+# Note that when USE_XSDK_DEFAULTS=TRUE, then the Fortran flags will be read
+# from either of the env vars FFLAGS or FCFLAGS. If both are set, but are the
+# same, then FFLAGS it used (which is the same as FCFLAGS). However, if both
+# are set but are not equal, then a FATAL_ERROR is raised and CMake configure
+# processing is stopped.
+#
+# To be used in a parent project, this module must be included after
+#
+# PROJECT(${PROJECT_NAME} NONE)
+#
+# is called but before the compilers are defined and processed using:
+#
+# ENABLE_LANGUAGE(<LANG>)
+#
+# For example, one would do:
+#
+# PROJECT(${PROJECT_NAME} NONE)
+# ...
+# SET(USE_XSDK_DEFAULTS_DEFAULT TRUE) # Set to false if desired
+# INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/stdk/XSDKDefaults.cmake")
+# ...
+# ENABLE_LANGUAGE(C)
+# ENABLE_LANGUAGE(C++)
+# ENABLE_LANGUAGE(Fortran)
+#
+# The variable `USE_XSDK_DEFAULTS_DEFAULT` is used as the default for the
+# cache var `USE_XSDK_DEFAULTS`. That way, a project can decide if it wants
+# XSDK defaults turned on or off by default and users can independently decide
+# if they want the CMake project to use standard XSDK behavior or raw CMake
+# behavior.
+#
+# By default, the XSDKDefaults.cmake module assumes that the project will need
+# C, C++, and Fortran. If any language is not needed then, set
+# XSDK_ENABLE_C=OFF, XSDK_ENABLE_CXX=OFF, or XSDK_ENABLE_Fortran=OFF *before*
+# including this module. Note, these variables are *not* cache vars because a
+# project either does or does not have C, C++ or Fortran source files, the
+# user has nothing to do with this so there is no need for cache vars. The
+# parent CMake project just needs to tell XSDKDefault.cmake what languages is
+# needs or does not need.
+#
+# For example, if the parent CMake project only needs C, then it would do:
+#
+# PROJECT(${PROJECT_NAME} NONE)'
+# ...
+# SET(USE_XSDK_DEFAULTS_DEFAULT TRUE)
+# SET(XSDK_ENABLE_CXX OFF)
+# SET(XSDK_ENABLE_Fortran OFF)
+# INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/stdk/XSDKDefaults.cmake")
+# ...
+# ENABLE_LANGAUGE(C)
+#
+# This module code will announce when it sets any variables.
+#
+
+#
+# Helper functions
+#
+
+IF (NOT COMMAND PRINT_VAR)
+ FUNCTION(PRINT_VAR VAR_NAME)
+ MESSAGE("${VAR_NAME} = '${${VAR_NAME}}'")
+ ENDFUNCTION()
+ENDIF()
+
+IF (NOT COMMAND SET_DEFAULT)
+ MACRO(SET_DEFAULT VAR)
+ IF ("${${VAR}}" STREQUAL "")
+ SET(${VAR} ${ARGN})
+ ENDIF()
+ ENDMACRO()
+ENDIF()
+
+#
+# XSDKDefaults.cmake control variables
+#
+
+# USE_XSDK_DEFAULTS
+IF ("${USE_XSDK_DEFAULTS_DEFAULT}" STREQUAL "")
+ SET(USE_XSDK_DEFAULTS_DEFAULT FALSE)
+ENDIF()
+SET(USE_XSDK_DEFAULTS ${USE_XSDK_DEFAULTS_DEFAULT} CACHE BOOL
+ "Use XSDK defaults and behavior.")
+PRINT_VAR(USE_XSDK_DEFAULTS)
+
+SET_DEFAULT(XSDK_ENABLE_C TRUE)
+SET_DEFAULT(XSDK_ENABLE_CXX TRUE)
+SET_DEFAULT(XSDK_ENABLE_Fortran TRUE)
+
+# Handle the compiler and flags for a language
+MACRO(XSDK_HANDLE_LANG_DEFAULTS CMAKE_LANG_NAME ENV_LANG_NAME
+ ENV_LANG_FLAGS_NAMES
+ )
+
+ # Announce using env var ${ENV_LANG_NAME}
+ IF (NOT "$ENV{${ENV_LANG_NAME}}" STREQUAL "" AND
+ "${CMAKE_${CMAKE_LANG_NAME}_COMPILER}" STREQUAL ""
+ )
+ MESSAGE("-- " "XSDK: Setting CMAKE_${CMAKE_LANG_NAME}_COMPILER from env var"
+ " ${ENV_LANG_NAME}='$ENV{${ENV_LANG_NAME}}'!")
+ SET(CMAKE_${CMAKE_LANG_NAME}_COMPILER "$ENV{${ENV_LANG_NAME}}" CACHE FILEPATH
+ "XSDK: Set by default from env var ${ENV_LANG_NAME}")
+ ENDIF()
+
+ # Announce using env var ${ENV_LANG_FLAGS_NAME}
+ FOREACH(ENV_LANG_FLAGS_NAME ${ENV_LANG_FLAGS_NAMES})
+ IF (NOT "$ENV{${ENV_LANG_FLAGS_NAME}}" STREQUAL "" AND
+ "${CMAKE_${CMAKE_LANG_NAME}_FLAGS}" STREQUAL ""
+ )
+ MESSAGE("-- " "XSDK: Setting CMAKE_${CMAKE_LANG_NAME}_FLAGS from env var"
+ " ${ENV_LANG_FLAGS_NAME}='$ENV{${ENV_LANG_FLAGS_NAME}}'!")
+ SET(CMAKE_${CMAKE_LANG_NAME}_FLAGS "$ENV{${ENV_LANG_FLAGS_NAME}} " CACHE STRING
+ "XSDK: Set by default from env var ${ENV_LANG_FLAGS_NAME}")
+ # NOTE: CMake adds the space after $ENV{${ENV_LANG_FLAGS_NAME}} so we
+ # duplicate that here!
+ ENDIF()
+ ENDFOREACH()
+
+ENDMACRO()
+
+
+#
+# Set XSDK Defaults
+#
+
+# Set default compilers and flags
+IF (USE_XSDK_DEFAULTS)
+
+ # Handle env vars for languages C, C++, and Fortran
+
+ IF (XSDK_ENABLE_C)
+ XSDK_HANDLE_LANG_DEFAULTS(C CC CFLAGS)
+ ENDIF()
+
+ IF (XSDK_ENABLE_CXX)
+ XSDK_HANDLE_LANG_DEFAULTS(CXX CXX CXXFLAGS)
+ ENDIF()
+
+ IF (XSDK_ENABLE_Fortran)
+ SET(ENV_FFLAGS "$ENV{FFLAGS}")
+ SET(ENV_FCFLAGS "$ENV{FCFLAGS}")
+ IF (
+ (NOT "${ENV_FFLAGS}" STREQUAL "") AND (NOT "${ENV_FCFLAGS}" STREQUAL "")
+ AND
+ ("${CMAKE_Fortran_FLAGS}" STREQUAL "")
+ )
+ IF (NOT "${ENV_FFLAGS}" STREQUAL "${ENV_FCFLAGS}")
+ MESSAGE(FATAL_ERROR "Error, env vars FFLAGS='${ENV_FFLAGS}' and"
+ " FCFLAGS='${ENV_FCFLAGS}' are both set in the env but are not equal!")
+ ENDIF()
+ ENDIF()
+ XSDK_HANDLE_LANG_DEFAULTS(Fortran FC "FFLAGS;FCFLAGS")
+ ENDIF()
+
+ # Set XSDK defaults for other CMake variables
+
+ IF ("${BUILD_SHARED_LIBS}" STREQUAL "")
+ MESSAGE("-- " "XSDK: Setting default BUILD_SHARED_LIBS=TRUE")
+ SET(BUILD_SHARED_LIBS TRUE CACHE BOOL "Set by default in XSDK mode")
+ ENDIF()
+
+ IF ("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ MESSAGE("-- " "XSDK: Setting default CMAKE_BUILD_TYPE=DEBUG")
+ SET(CMAKE_BUILD_TYPE DEBUG CACHE STRING "Set by default in XSDK mode")
+ ENDIF()
+
+ENDIF()
diff --git a/SuperLU_5.2.0/make.inc.in b/SuperLU_5.2.0/make.inc.in
new file mode 100644
index 0000000..65897ce
--- /dev/null
+++ b/SuperLU_5.2.0/make.inc.in
@@ -0,0 +1,49 @@
+############################################################################
+#
+# Program: SuperLU
+#
+# Module: make.inc
+#
+# Purpose: Top-level Definitions
+#
+# Creation date: May 10, 2015
+#
+# Modified:
+#
+#
+############################################################################
+#
+# ToDo: Make this work for shared libraries and out-of-source builds. Right
+# now it only works for builds under ${CMAKE_SOURCE_DIR}/build/
+#
+# The name of the libraries to be created/linked to
+#
+SuperLUroot = ${CMAKE_SOURCE_DIR}/build
+SUPERLULIB = $(SuperLUroot)/SRC/${PROJECT_NAME_LIB_EXPORT}
+
+TMGLIB = libtmglib.a
+
+# BLASDEF = -DUSE_VENDOR_BLAS
+
+LIBS = $(SUPERLULIB) ${BLAS_LIB_EXPORT}
+
+#
+# The archiver and the flag(s) to use when building archive (library)
+# If your system has no ranlib, set RANLIB = echo.
+#
+ARCH = @CMAKE_AR@
+ARCHFLAGS = cr
+RANLIB = @CMAKE_RANLIB@
+
+CC = @CMAKE_C_COMPILER@
+CFLAGS = @CMAKE_C_FLAGS_RELEASE@ @CMAKE_C_FLAGS@
+NOOPTS = -O0
+FORTRAN = @CMAKE_Fortran_COMPILER@
+
+LOADER = $(CC)
+LOADOPTS =
+
+#
+# The directory in which Matlab is installed
+#
+MATLAB = /Applications/MATLAB_R2015b.app
diff --git a/TESTING/MATGEN/Makefile b/TESTING/MATGEN/Makefile
deleted file mode 100644
index 14e5f2f..0000000
--- a/TESTING/MATGEN/Makefile
+++ /dev/null
@@ -1,81 +0,0 @@
-include ../../make.inc
-
-#######################################################################
-# This is the makefile to create a library of the test matrix
-# generators used in LAPACK. The files are organized as follows:
-#
-# SCATGEN -- Auxiliary routines called from both REAL and COMPLEX
-# DZATGEN -- Auxiliary routines called from both DOUBLE PRECISION
-# and COMPLEX*16
-# SMATGEN -- Single precision real matrix generation routines
-# CMATGEN -- Single precision complex matrix generation routines
-# DMATGEN -- Double precision real matrix generation routines
-# ZMATGEN -- Double precision complex matrix generation routines
-#
-# The library can be set up to include routines for any combination
-# of the four precisions. To create or add to the library, enter make
-# followed by one or more of the precisions desired. Some examples:
-# make single
-# make single complex
-# make single double complex complex16
-# Alternatively, the command
-# make
-# without any arguments creates a library of all four precisions.
-# The library is called
-# libtmglib.a
-# and is created at the LAPACK directory level.
-#
-# To remove the object files after the library is created, enter
-# make clean
-#
-#######################################################################
-ALLAUX = lsamen.o
-
-SCATGEN = slatm1.o slaran.o slarnd.o slaruv.o slabad.o slarnv.o
-SLASRC = slatb4.o slaset.o slartg.o
-SMATGEN = slatms.o slatme.o slatmr.o \
- slagge.o slagsy.o slarge.o slaror.o slarot.o slatm2.o slatm3.o
-SINTRINSIC = r_lg10.o r_sign.o pow_dd.o
-
-DZATGEN = dlatm1.o dlaran.o dlarnd.o dlaruv.o dlabad.o dlarnv.o
-DLASRC = dlatb4.o dlaset.o dlartg.o
-DMATGEN = dlatms.o dlatme.o dlatmr.o \
- dlagge.o dlagsy.o dlarge.o dlaror.o dlarot.o dlatm2.o dlatm3.o
-DINTRINSIC = d_lg10.o d_sign.o pow_dd.o
-
-CLASRC = clatb4.o claset.o clartg.o clarnv.o clacgv.o csymv.o
-CMATGEN = clatms.o clatme.o clatmr.o \
- clagge.o clagsy.o clarge.o claror.o clarot.o clatm2.o clatm3.o \
- claghe.o clarnd.o cdotc.o
-
-ZLASRC = zlatb4.o zlaset.o zlartg.o zlarnv.o zlacgv.o zsymv.o
-ZMATGEN = zlatms.o zlatme.o zlatmr.o \
- zlagge.o zlagsy.o zlarge.o zlaror.o zlarot.o zlatm2.o zlatm3.o \
- zlaghe.o zlarnd.o zdotc.o
-
-all: single double complex complex16
-
-single: $(SMATGEN) $(SCATGEN) $(SLASRC) $(SINTRINSIC) $(ALLAUX)
- $(ARCH) $(ARCHFLAGS) ../$(TMGLIB) $(SMATGEN) $(SCATGEN) \
- $(SLASRC) $(SINTRINSIC) $(ALLAUX)
- $(RANLIB) ../$(TMGLIB)
-
-double: $(DMATGEN) $(DZATGEN) $(DLASRC) $(DINTRINSIC) $(ALLAUX)
- $(ARCH) $(ARCHFLAGS) ../$(TMGLIB) $(DMATGEN) $(DZATGEN) \
- $(DLASRC) $(DINTRINSIC) $(ALLAUX)
- $(RANLIB) ../$(TMGLIB)
-
-complex: $(CMATGEN) $(SCATGEN) $(CLASRC) $(SINTRINSIC) $(ALLAUX)
- $(ARCH) $(ARCHFLAGS) ../$(TMGLIB) $(CMATGEN) $(SCATGEN) \
- $(CLASRC) $(SINTRINSIC) $(ALLAUX)
- $(RANLIB) ../$(TMGLIB)
-
-complex16: $(ZMATGEN) $(DZATGEN) $(ZLASRC) $(DINSTRINSIC) $(ALLAUX)
- $(ARCH) $(ARCHFLAGS) ../$(TMGLIB) $(ZMATGEN) $(DZATGEN) \
- $(ZLASRC) $(DINTRINSIC) $(ALLAUX)
- $(RANLIB) ../$(TMGLIB)
-
-clean:
- rm -f *.o ../$(TMGLIB)
-
-.c.o: ; $(CC) $(CFLAGS) $(CDEFS) -c $<
diff --git a/TESTING/MATGEN/clacgv.c b/TESTING/MATGEN/clacgv.c
deleted file mode 100644
index 4525fd4..0000000
--- a/TESTING/MATGEN/clacgv.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int clacgv_(integer *n, complex *x, integer *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
-
-
- Purpose
- =======
-
- CLACGV conjugates a complex vector of length N.
-
- Arguments
- =========
-
- N (input) INTEGER
- The length of the vector X. N >= 0.
-
- X (input/output) COMPLEX array, dimension
- (1+(N-1)*abs(INCX))
- On entry, the vector of length N to be conjugated.
- On exit, X is overwritten with conjg(X).
-
- INCX (input) INTEGER
- The spacing between successive elements of X.
-
- =====================================================================
-
-
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer i__1, i__2;
- complex q__1;
- /* Builtin functions */
- void r_cnjg(complex *, complex *);
- /* Local variables */
- static integer ioff, i;
-
-
-#define X(I) x[(I)-1]
-
-
- if (*incx == 1) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- r_cnjg(&q__1, &X(i));
- X(i).r = q__1.r, X(i).i = q__1.i;
-/* L10: */
- }
- } else {
- ioff = 1;
- if (*incx < 0) {
- ioff = 1 - (*n - 1) * *incx;
- }
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = ioff;
- r_cnjg(&q__1, &X(ioff));
- X(ioff).r = q__1.r, X(ioff).i = q__1.i;
- ioff += *incx;
-/* L20: */
- }
- }
- return 0;
-
-/* End of CLACGV */
-
-} /* clacgv_ */
-
diff --git a/TESTING/MATGEN/clagge.c b/TESTING/MATGEN/clagge.c
deleted file mode 100644
index 898a234..0000000
--- a/TESTING/MATGEN/clagge.c
+++ /dev/null
@@ -1,464 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static complex c_b1 = {0.f,0.f};
-static complex c_b2 = {1.f,0.f};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int clagge_(integer *m, integer *n, integer *kl, integer *ku,
- real *d, complex *a, integer *lda, integer *iseed, complex *work,
- integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- doublereal d__1;
- complex q__1;
-
- /* Builtin functions */
- double c_abs(complex *);
- void c_div(complex *, complex *, complex *);
-
- /* Local variables */
- static integer i, j;
- extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
- complex *, integer *, complex *, integer *, complex *, integer *),
- cscal_(integer *, complex *, complex *, integer *), cgemv_(char *
- , integer *, integer *, complex *, complex *, integer *, complex *
- , integer *, complex *, complex *, integer *);
- extern real scnrm2_(integer *, complex *, integer *);
- static complex wa, wb;
- extern /* Subroutine */ int clacgv_(integer *, complex *, integer *);
- static real wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), clarnv_(
- integer *, integer *, integer *, complex *);
- static complex tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- CLAGGE generates a complex general m by n matrix A, by pre- and post-
-
- multiplying a real diagonal matrix D with random unitary matrices:
- A = U*D*V. The lower and upper bandwidths may then be reduced to
- kl and ku by additional unitary transformations.
-
- Arguments
- =========
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- KL (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= KL <= M-1.
-
- KU (input) INTEGER
- The number of nonzero superdiagonals within the band of A.
- 0 <= KU <= N-1.
-
- D (input) REAL array, dimension (min(M,N))
- The diagonal elements of the diagonal matrix D.
-
- A (output) COMPLEX array, dimension (LDA,N)
- The generated m by n matrix A.
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= M.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) COMPLEX array, dimension (M+N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*m < 0) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (*kl < 0 || *kl > *m - 1) {
- *info = -3;
- } else if (*ku < 0 || *ku > *n - 1) {
- *info = -4;
- } else if (*lda < max(1,*m)) {
- *info = -7;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("CLAGGE", &i__1);
- return 0;
- }
-
-/* initialize A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = min(*m,*n);
- for (i = 1; i <= i__1; ++i) {
- i__2 = i + i * a_dim1;
- i__3 = i;
- a[i__2].r = d[i__3], a[i__2].i = 0.f;
-/* L30: */
- }
-
-/* pre- and post-multiply A by random unitary matrices */
-
- for (i = min(*m,*n); i >= 1; --i) {
- if (i < *m) {
-
-/* generate random reflection */
-
- i__1 = *m - i + 1;
- clarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *m - i + 1;
- wn = scnrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / c_abs(&work[1]);
- q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__1 = *m - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__1, &q__1, &work[2], &c__1);
- work[1].r = 1.f, work[1].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* multiply A(i:m,i:n) by random reflection from the lef
-t */
-
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- cgemv_("Conjugate transpose", &i__1, &i__2, &c_b2, &a[i + i *
- a_dim1], lda, &work[1], &c__1, &c_b1, &work[*m + 1], &
- c__1);
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&i__1, &i__2, &q__1, &work[1], &c__1, &work[*m + 1], &c__1,
- &a[i + i * a_dim1], lda);
- }
- if (i < *n) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- clarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = scnrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / c_abs(&work[1]);
- q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__1 = *n - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__1, &q__1, &work[2], &c__1);
- work[1].r = 1.f, work[1].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* multiply A(i:m,i:n) by random reflection from the rig
-ht */
-
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- cgemv_("No transpose", &i__1, &i__2, &c_b2, &a[i + i * a_dim1],
- lda, &work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&i__1, &i__2, &q__1, &work[*n + 1], &c__1, &work[1], &c__1,
- &a[i + i * a_dim1], lda);
- }
-/* L40: */
- }
-
-/* Reduce number of subdiagonals to KL and number of superdiagonals
- to KU
-
- Computing MAX */
- i__2 = *m - 1 - *kl, i__3 = *n - 1 - *ku;
- i__1 = max(i__2,i__3);
- for (i = 1; i <= i__1; ++i) {
- if (*kl <= *ku) {
-
-/* annihilate subdiagonal elements first (necessary if K
-L = 0)
-
- Computing MIN */
- i__2 = *m - 1 - *kl;
- if (i <= min(i__2,*n)) {
-
-/* generate reflection to annihilate A(kl+i+1:m,i
-) */
-
- i__2 = *m - *kl - i + 1;
- wn = scnrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
- d__1 = wn / c_abs(&a[*kl + i + i * a_dim1]);
- i__2 = *kl + i + i * a_dim1;
- q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- i__2 = *kl + i + i * a_dim1;
- q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__2 = *m - *kl - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__2, &q__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
- i__2 = *kl + i + i * a_dim1;
- a[i__2].r = 1.f, a[i__2].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* apply reflection to A(kl+i:m,i+1:n) from the l
-eft */
-
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- cgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*kl + i
- + (i + 1) * a_dim1], lda, &a[*kl + i + i * a_dim1], &
- c__1, &c_b1, &work[1], &c__1);
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&i__2, &i__3, &q__1, &a[*kl + i + i * a_dim1], &c__1, &
- work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
- i__2 = *kl + i + i * a_dim1;
- q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
- }
-
-/* Computing MIN */
- i__2 = *n - 1 - *ku;
- if (i <= min(i__2,*m)) {
-
-/* generate reflection to annihilate A(i,ku+i+1:n
-) */
-
- i__2 = *n - *ku - i + 1;
- wn = scnrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- d__1 = wn / c_abs(&a[i + (*ku + i) * a_dim1]);
- i__2 = i + (*ku + i) * a_dim1;
- q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- i__2 = i + (*ku + i) * a_dim1;
- q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__2 = *n - *ku - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__2, &q__1, &a[i + (*ku + i + 1) * a_dim1], lda);
- i__2 = i + (*ku + i) * a_dim1;
- a[i__2].r = 1.f, a[i__2].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* apply reflection to A(i+1:m,ku+i:n) from the r
-ight */
-
- i__2 = *n - *ku - i + 1;
- clacgv_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- cgemv_("No transpose", &i__2, &i__3, &c_b2, &a[i + 1 + (*ku +
- i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda, &
- c_b1, &work[1], &c__1);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&i__2, &i__3, &q__1, &work[1], &c__1, &a[i + (*ku + i)
- * a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
- i__2 = i + (*ku + i) * a_dim1;
- q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
- }
- } else {
-
-/* annihilate superdiagonal elements first (necessary if
-
- KU = 0)
-
- Computing MIN */
- i__2 = *n - 1 - *ku;
- if (i <= min(i__2,*m)) {
-
-/* generate reflection to annihilate A(i,ku+i+1:n
-) */
-
- i__2 = *n - *ku - i + 1;
- wn = scnrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- d__1 = wn / c_abs(&a[i + (*ku + i) * a_dim1]);
- i__2 = i + (*ku + i) * a_dim1;
- q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- i__2 = i + (*ku + i) * a_dim1;
- q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__2 = *n - *ku - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__2, &q__1, &a[i + (*ku + i + 1) * a_dim1], lda);
- i__2 = i + (*ku + i) * a_dim1;
- a[i__2].r = 1.f, a[i__2].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* apply reflection to A(i+1:m,ku+i:n) from the r
-ight */
-
- i__2 = *n - *ku - i + 1;
- clacgv_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- cgemv_("No transpose", &i__2, &i__3, &c_b2, &a[i + 1 + (*ku +
- i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda, &
- c_b1, &work[1], &c__1);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&i__2, &i__3, &q__1, &work[1], &c__1, &a[i + (*ku + i)
- * a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
- i__2 = i + (*ku + i) * a_dim1;
- q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
- }
-
-/* Computing MIN */
- i__2 = *m - 1 - *kl;
- if (i <= min(i__2,*n)) {
-
-/* generate reflection to annihilate A(kl+i+1:m,i
-) */
-
- i__2 = *m - *kl - i + 1;
- wn = scnrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
- d__1 = wn / c_abs(&a[*kl + i + i * a_dim1]);
- i__2 = *kl + i + i * a_dim1;
- q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- i__2 = *kl + i + i * a_dim1;
- q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__2 = *m - *kl - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__2, &q__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
- i__2 = *kl + i + i * a_dim1;
- a[i__2].r = 1.f, a[i__2].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* apply reflection to A(kl+i:m,i+1:n) from the l
-eft */
-
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- cgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*kl + i
- + (i + 1) * a_dim1], lda, &a[*kl + i + i * a_dim1], &
- c__1, &c_b1, &work[1], &c__1);
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&i__2, &i__3, &q__1, &a[*kl + i + i * a_dim1], &c__1, &
- work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
- i__2 = *kl + i + i * a_dim1;
- q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
- }
- }
-
- i__2 = *m;
- for (j = *kl + i + 1; j <= i__2; ++j) {
- i__3 = j + i * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
-/* L50: */
- }
-
- i__2 = *n;
- for (j = *ku + i + 1; j <= i__2; ++j) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
-/* L60: */
- }
-/* L70: */
- }
- return 0;
-
-/* End of CLAGGE */
-
-} /* clagge_ */
-
diff --git a/TESTING/MATGEN/claghe.c b/TESTING/MATGEN/claghe.c
deleted file mode 100644
index 7a8835e..0000000
--- a/TESTING/MATGEN/claghe.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static complex c_b1 = {0.f,0.f};
-static complex c_b2 = {1.f,0.f};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int claghe_(integer *n, integer *k, real *d, complex *a,
- integer *lda, integer *iseed, complex *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- doublereal d__1;
- complex q__1, q__2, q__3, q__4;
-
- /* Builtin functions */
- double c_abs(complex *);
- void c_div(complex *, complex *, complex *), r_cnjg(complex *, complex *);
-
- /* Local variables */
- extern /* Subroutine */ int cher2_(char *, integer *, complex *, complex *
- , integer *, complex *, integer *, complex *, integer *);
- static integer i, j;
- extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
- complex *, integer *, complex *, integer *, complex *, integer *);
- static complex alpha;
- extern /* Subroutine */ int cscal_(integer *, complex *, complex *,
- integer *);
- extern /* Complex */ VOID cdotc_(complex *, integer *, complex *, integer
- *, complex *, integer *);
- extern /* Subroutine */ int cgemv_(char *, integer *, integer *, complex *
- , complex *, integer *, complex *, integer *, complex *, complex *
- , integer *), chemv_(char *, integer *, complex *,
- complex *, integer *, complex *, integer *, complex *, complex *,
- integer *), caxpy_(integer *, complex *, complex *,
- integer *, complex *, integer *);
- extern real scnrm2_(integer *, complex *, integer *);
- static complex wa, wb;
- static real wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), clarnv_(
- integer *, integer *, integer *, complex *);
- static complex tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- CLAGHE generates a complex hermitian matrix A, by pre- and post-
- multiplying a real diagonal matrix D with a random unitary matrix:
- A = U*D*U'. The semi-bandwidth may then be reduced to k by additional
-
- unitary transformations.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- K (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= K <= N-1.
-
- D (input) REAL array, dimension (N)
- The diagonal elements of the diagonal matrix D.
-
- A (output) COMPLEX array, dimension (LDA,N)
- The generated n by n hermitian matrix A (the full matrix is
- stored).
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) COMPLEX array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*k < 0 || *k > *n - 1) {
- *info = -2;
- } else if (*lda < max(1,*n)) {
- *info = -5;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("CLAGHE", &i__1);
- return 0;
- }
-
-/* initialize lower triangle of A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i + i * a_dim1;
- i__3 = i;
- a[i__2].r = d[i__3], a[i__2].i = 0.f;
-/* L30: */
- }
-
-/* Generate lower triangle of hermitian matrix */
-
- for (i = *n - 1; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- clarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = scnrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / c_abs(&work[1]);
- q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__1 = *n - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__1, &q__1, &work[2], &c__1);
- work[1].r = 1.f, work[1].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* apply random reflection to A(i:n,i:n) from the left
- and the right
-
- compute y := tau * A * u */
-
- i__1 = *n - i + 1;
- chemv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
- &c_b1, &work[*n + 1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( y, u ) * u */
-
- q__3.r = -.5f, q__3.i = 0.f;
- q__2.r = q__3.r * tau.r - q__3.i * tau.i, q__2.i = q__3.r * tau.i +
- q__3.i * tau.r;
- i__1 = *n - i + 1;
- cdotc_(&q__4, &i__1, &work[*n + 1], &c__1, &work[1], &c__1);
- q__1.r = q__2.r * q__4.r - q__2.i * q__4.i, q__1.i = q__2.r * q__4.i
- + q__2.i * q__4.r;
- alpha.r = q__1.r, alpha.i = q__1.i;
- i__1 = *n - i + 1;
- caxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
-
-/* apply the transformation as a rank-2 update to A(i:n,i:n) */
-
- i__1 = *n - i + 1;
- q__1.r = -1.f, q__1.i = 0.f;
- cher2_("Lower", &i__1, &q__1, &work[1], &c__1, &work[*n + 1], &c__1, &
- a[i + i * a_dim1], lda);
-/* L40: */
- }
-
-/* Reduce number of subdiagonals to K */
-
- i__1 = *n - 1 - *k;
- for (i = 1; i <= i__1; ++i) {
-
-/* generate reflection to annihilate A(k+i+1:n,i) */
-
- i__2 = *n - *k - i + 1;
- wn = scnrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
- d__1 = wn / c_abs(&a[*k + i + i * a_dim1]);
- i__2 = *k + i + i * a_dim1;
- q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- i__2 = *k + i + i * a_dim1;
- q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__2 = *n - *k - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__2, &q__1, &a[*k + i + 1 + i * a_dim1], &c__1);
- i__2 = *k + i + i * a_dim1;
- a[i__2].r = 1.f, a[i__2].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
-
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- cgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*k + i + (i + 1)
- * a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b1, &work[
- 1], &c__1);
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&i__2, &i__3, &q__1, &a[*k + i + i * a_dim1], &c__1, &work[1],
- &c__1, &a[*k + i + (i + 1) * a_dim1], lda);
-
-/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
-ht
-
- compute y := tau * A * u */
-
- i__2 = *n - *k - i + 1;
- chemv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
- k + i + i * a_dim1], &c__1, &c_b1, &work[1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( y, u ) * u */
-
- q__3.r = -.5f, q__3.i = 0.f;
- q__2.r = q__3.r * tau.r - q__3.i * tau.i, q__2.i = q__3.r * tau.i +
- q__3.i * tau.r;
- i__2 = *n - *k - i + 1;
- cdotc_(&q__4, &i__2, &work[1], &c__1, &a[*k + i + i * a_dim1], &c__1);
- q__1.r = q__2.r * q__4.r - q__2.i * q__4.i, q__1.i = q__2.r * q__4.i
- + q__2.i * q__4.r;
- alpha.r = q__1.r, alpha.i = q__1.i;
- i__2 = *n - *k - i + 1;
- caxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
- ;
-
-/* apply hermitian rank-2 update to A(k+i:n,k+i:n) */
-
- i__2 = *n - *k - i + 1;
- q__1.r = -1.f, q__1.i = 0.f;
- cher2_("Lower", &i__2, &q__1, &a[*k + i + i * a_dim1], &c__1, &work[1]
- , &c__1, &a[*k + i + (*k + i) * a_dim1], lda);
-
- i__2 = *k + i + i * a_dim1;
- q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
- i__2 = *n;
- for (j = *k + i + 1; j <= i__2; ++j) {
- i__3 = j + i * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
-/* L50: */
- }
-/* L60: */
- }
-
-/* Store full hermitian matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- i__3 = j + i * a_dim1;
- r_cnjg(&q__1, &a[i + j * a_dim1]);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
-/* L70: */
- }
-/* L80: */
- }
- return 0;
-
-/* End of CLAGHE */
-
-} /* claghe_ */
-
diff --git a/TESTING/MATGEN/clagsy.c b/TESTING/MATGEN/clagsy.c
deleted file mode 100644
index 92ac859..0000000
--- a/TESTING/MATGEN/clagsy.c
+++ /dev/null
@@ -1,363 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static complex c_b1 = {0.f,0.f};
-static complex c_b2 = {1.f,0.f};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int clagsy_(integer *n, integer *k, real *d, complex *a,
- integer *lda, integer *iseed, complex *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6, i__7, i__8,
- i__9;
- doublereal d__1;
- complex q__1, q__2, q__3, q__4;
-
- /* Builtin functions */
- double c_abs(complex *);
- void c_div(complex *, complex *, complex *);
-
- /* Local variables */
- static integer i, j;
- extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
- complex *, integer *, complex *, integer *, complex *, integer *);
- static complex alpha;
- extern /* Subroutine */ int cscal_(integer *, complex *, complex *,
- integer *);
- extern /* Complex */ VOID cdotc_(complex *, integer *, complex *, integer
- *, complex *, integer *);
- extern /* Subroutine */ int cgemv_(char *, integer *, integer *, complex *
- , complex *, integer *, complex *, integer *, complex *, complex *
- , integer *), caxpy_(integer *, complex *, complex *,
- integer *, complex *, integer *), csymv_(char *, integer *,
- complex *, complex *, integer *, complex *, integer *, complex *,
- complex *, integer *);
- extern real scnrm2_(integer *, complex *, integer *);
- static integer ii, jj;
- static complex wa, wb;
- extern /* Subroutine */ int clacgv_(integer *, complex *, integer *);
- static real wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), clarnv_(
- integer *, integer *, integer *, complex *);
- static complex tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- CLAGSY generates a complex symmetric matrix A, by pre- and post-
- multiplying a real diagonal matrix D with a random unitary matrix:
- A = U*D*U**T. The semi-bandwidth may then be reduced to k by
- additional unitary transformations.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- K (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= K <= N-1.
-
- D (input) REAL array, dimension (N)
- The diagonal elements of the diagonal matrix D.
-
- A (output) COMPLEX array, dimension (LDA,N)
- The generated n by n symmetric matrix A (the full matrix is
- stored).
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) COMPLEX array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*k < 0 || *k > *n - 1) {
- *info = -2;
- } else if (*lda < max(1,*n)) {
- *info = -5;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("CLAGSY", &i__1);
- return 0;
- }
-
-/* initialize lower triangle of A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i + i * a_dim1;
- i__3 = i;
- a[i__2].r = d[i__3], a[i__2].i = 0.f;
-/* L30: */
- }
-
-/* Generate lower triangle of symmetric matrix */
-
- for (i = *n - 1; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- clarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = scnrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / c_abs(&work[1]);
- q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__1 = *n - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__1, &q__1, &work[2], &c__1);
- work[1].r = 1.f, work[1].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* apply random reflection to A(i:n,i:n) from the left
- and the right
-
- compute y := tau * A * conjg(u) */
-
- i__1 = *n - i + 1;
- clacgv_(&i__1, &work[1], &c__1);
- i__1 = *n - i + 1;
- csymv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
- &c_b1, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- clacgv_(&i__1, &work[1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( u, y ) * u */
-
- q__3.r = -.5f, q__3.i = 0.f;
- q__2.r = q__3.r * tau.r - q__3.i * tau.i, q__2.i = q__3.r * tau.i +
- q__3.i * tau.r;
- i__1 = *n - i + 1;
- cdotc_(&q__4, &i__1, &work[1], &c__1, &work[*n + 1], &c__1);
- q__1.r = q__2.r * q__4.r - q__2.i * q__4.i, q__1.i = q__2.r * q__4.i
- + q__2.i * q__4.r;
- alpha.r = q__1.r, alpha.i = q__1.i;
- i__1 = *n - i + 1;
- caxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
-
-/* apply the transformation as a rank-2 update to A(i:n,i:n)
-
- CALL CSYR2( 'Lower', N-I+1, -ONE, WORK, 1, WORK( N+1 ), 1,
-
- $ A( I, I ), LDA ) */
-
- i__1 = *n;
- for (jj = i; jj <= i__1; ++jj) {
- i__2 = *n;
- for (ii = jj; ii <= i__2; ++ii) {
- i__3 = ii + jj * a_dim1;
- i__4 = ii + jj * a_dim1;
- i__5 = ii - i + 1;
- i__6 = *n + jj - i + 1;
- q__3.r = work[i__5].r * work[i__6].r - work[i__5].i * work[
- i__6].i, q__3.i = work[i__5].r * work[i__6].i + work[
- i__5].i * work[i__6].r;
- q__2.r = a[i__4].r - q__3.r, q__2.i = a[i__4].i - q__3.i;
- i__7 = *n + ii - i + 1;
- i__8 = jj - i + 1;
- q__4.r = work[i__7].r * work[i__8].r - work[i__7].i * work[
- i__8].i, q__4.i = work[i__7].r * work[i__8].i + work[
- i__7].i * work[i__8].r;
- q__1.r = q__2.r - q__4.r, q__1.i = q__2.i - q__4.i;
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
-/* L40: */
- }
-/* L50: */
- }
-/* L60: */
- }
-
-/* Reduce number of subdiagonals to K */
-
- i__1 = *n - 1 - *k;
- for (i = 1; i <= i__1; ++i) {
-
-/* generate reflection to annihilate A(k+i+1:n,i) */
-
- i__2 = *n - *k - i + 1;
- wn = scnrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
- d__1 = wn / c_abs(&a[*k + i + i * a_dim1]);
- i__2 = *k + i + i * a_dim1;
- q__1.r = d__1 * a[i__2].r, q__1.i = d__1 * a[i__2].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- i__2 = *k + i + i * a_dim1;
- q__1.r = a[i__2].r + wa.r, q__1.i = a[i__2].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__2 = *n - *k - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__2, &q__1, &a[*k + i + 1 + i * a_dim1], &c__1);
- i__2 = *k + i + i * a_dim1;
- a[i__2].r = 1.f, a[i__2].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
-
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- cgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*k + i + (i + 1)
- * a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b1, &work[
- 1], &c__1);
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&i__2, &i__3, &q__1, &a[*k + i + i * a_dim1], &c__1, &work[1],
- &c__1, &a[*k + i + (i + 1) * a_dim1], lda);
-
-/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
-ht
-
- compute y := tau * A * conjg(u) */
-
- i__2 = *n - *k - i + 1;
- clacgv_(&i__2, &a[*k + i + i * a_dim1], &c__1);
- i__2 = *n - *k - i + 1;
- csymv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
- k + i + i * a_dim1], &c__1, &c_b1, &work[1], &c__1);
- i__2 = *n - *k - i + 1;
- clacgv_(&i__2, &a[*k + i + i * a_dim1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( u, y ) * u */
-
- q__3.r = -.5f, q__3.i = 0.f;
- q__2.r = q__3.r * tau.r - q__3.i * tau.i, q__2.i = q__3.r * tau.i +
- q__3.i * tau.r;
- i__2 = *n - *k - i + 1;
- cdotc_(&q__4, &i__2, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1);
- q__1.r = q__2.r * q__4.r - q__2.i * q__4.i, q__1.i = q__2.r * q__4.i
- + q__2.i * q__4.r;
- alpha.r = q__1.r, alpha.i = q__1.i;
- i__2 = *n - *k - i + 1;
- caxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
- ;
-
-/* apply symmetric rank-2 update to A(k+i:n,k+i:n)
-
- CALL CSYR2( 'Lower', N-K-I+1, -ONE, A( K+I, I ), 1, WORK, 1,
-
- $ A( K+I, K+I ), LDA ) */
-
- i__2 = *n;
- for (jj = *k + i; jj <= i__2; ++jj) {
- i__3 = *n;
- for (ii = jj; ii <= i__3; ++ii) {
- i__4 = ii + jj * a_dim1;
- i__5 = ii + jj * a_dim1;
- i__6 = ii + i * a_dim1;
- i__7 = jj - *k - i + 1;
- q__3.r = a[i__6].r * work[i__7].r - a[i__6].i * work[i__7].i,
- q__3.i = a[i__6].r * work[i__7].i + a[i__6].i * work[
- i__7].r;
- q__2.r = a[i__5].r - q__3.r, q__2.i = a[i__5].i - q__3.i;
- i__8 = ii - *k - i + 1;
- i__9 = jj + i * a_dim1;
- q__4.r = work[i__8].r * a[i__9].r - work[i__8].i * a[i__9].i,
- q__4.i = work[i__8].r * a[i__9].i + work[i__8].i * a[
- i__9].r;
- q__1.r = q__2.r - q__4.r, q__1.i = q__2.i - q__4.i;
- a[i__4].r = q__1.r, a[i__4].i = q__1.i;
-/* L70: */
- }
-/* L80: */
- }
-
- i__2 = *k + i + i * a_dim1;
- q__1.r = -(doublereal)wa.r, q__1.i = -(doublereal)wa.i;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
- i__2 = *n;
- for (j = *k + i + 1; j <= i__2; ++j) {
- i__3 = j + i * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
-/* L90: */
- }
-/* L100: */
- }
-
-/* Store full symmetric matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- i__3 = j + i * a_dim1;
- i__4 = i + j * a_dim1;
- a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;
-/* L110: */
- }
-/* L120: */
- }
- return 0;
-
-/* End of CLAGSY */
-
-} /* clagsy_ */
-
diff --git a/TESTING/MATGEN/clarge.c b/TESTING/MATGEN/clarge.c
deleted file mode 100644
index 7924697..0000000
--- a/TESTING/MATGEN/clarge.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static complex c_b1 = {0.f,0.f};
-static complex c_b2 = {1.f,0.f};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int clarge_(integer *n, complex *a, integer *lda, integer *
- iseed, complex *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1;
- doublereal d__1;
- complex q__1;
-
- /* Builtin functions */
- double c_abs(complex *);
- void c_div(complex *, complex *, complex *);
-
- /* Local variables */
- static integer i;
- extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
- complex *, integer *, complex *, integer *, complex *, integer *),
- cscal_(integer *, complex *, complex *, integer *), cgemv_(char *
- , integer *, integer *, complex *, complex *, integer *, complex *
- , integer *, complex *, complex *, integer *);
- extern real scnrm2_(integer *, complex *, integer *);
- static complex wa, wb;
- static real wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), clarnv_(
- integer *, integer *, integer *, complex *);
- static complex tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- CLARGE pre- and post-multiplies a complex general n by n matrix A
- with a random unitary matrix: A = U*D*U'.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- A (input/output) COMPLEX array, dimension (LDA,N)
- On entry, the original n by n matrix A.
- On exit, A is overwritten by U*A*U' for some random
- unitary matrix U.
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) COMPLEX array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*lda < max(1,*n)) {
- *info = -3;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("CLARGE", &i__1);
- return 0;
- }
-
-/* pre- and post-multiply A by random unitary matrix */
-
- for (i = *n; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- clarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = scnrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / c_abs(&work[1]);
- q__1.r = d__1 * work[1].r, q__1.i = d__1 * work[1].i;
- wa.r = q__1.r, wa.i = q__1.i;
- if (wn == 0.f) {
- tau.r = 0.f, tau.i = 0.f;
- } else {
- q__1.r = work[1].r + wa.r, q__1.i = work[1].i + wa.i;
- wb.r = q__1.r, wb.i = q__1.i;
- i__1 = *n - i;
- c_div(&q__1, &c_b2, &wb);
- cscal_(&i__1, &q__1, &work[2], &c__1);
- work[1].r = 1.f, work[1].i = 0.f;
- c_div(&q__1, &wb, &wa);
- d__1 = q__1.r;
- tau.r = d__1, tau.i = 0.f;
- }
-
-/* multiply A(i:n,1:n) by random reflection from the left */
-
- i__1 = *n - i + 1;
- cgemv_("Conjugate transpose", &i__1, n, &c_b2, &a[i + a_dim1], lda, &
- work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&i__1, n, &q__1, &work[1], &c__1, &work[*n + 1], &c__1, &a[i +
- a_dim1], lda);
-
-/* multiply A(1:n,i:n) by random reflection from the right */
-
- i__1 = *n - i + 1;
- cgemv_("No transpose", n, &i__1, &c_b2, &a[i * a_dim1 + 1], lda, &
- work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(n, &i__1, &q__1, &work[*n + 1], &c__1, &work[1], &c__1, &a[i *
- a_dim1 + 1], lda);
-/* L10: */
- }
- return 0;
-
-/* End of CLARGE */
-
-} /* clarge_ */
-
diff --git a/TESTING/MATGEN/clarnd.c b/TESTING/MATGEN/clarnd.c
deleted file mode 100644
index a450c11..0000000
--- a/TESTING/MATGEN/clarnd.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Complex */ VOID clarnd_(complex * ret_val, integer *idist, integer *iseed)
-{
- /* System generated locals */
- doublereal d__1, d__2;
- complex q__1, q__2, q__3;
-
- /* Builtin functions */
- double log(doublereal), sqrt(doublereal);
- void c_exp(complex *, complex *);
-
- /* Local variables */
- static real t1, t2;
- extern doublereal slaran_(integer *);
-
-
-/* -- 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
-
-
- Purpose
- =======
-
- CLARND returns a random complex number from a uniform or normal
- distribution.
-
- Arguments
- =========
-
- IDIST (input) INTEGER
- Specifies the distribution of the random numbers:
- = 1: real and imaginary parts each uniform (0,1)
- = 2: real and imaginary parts each uniform (-1,1)
- = 3: real and imaginary parts each normal (0,1)
- = 4: uniformly distributed on the disc abs(z) <= 1
- = 5: uniformly distributed on the circle abs(z) = 1
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- Further Details
- ===============
-
- This routine calls the auxiliary routine SLARAN to generate a random
-
- real number from a uniform (0,1) distribution. The Box-Muller method
-
- is used to transform numbers from a uniform to a normal distribution.
-
-
- =====================================================================
-
-
-
- Generate a pair of real random numbers from a uniform (0,1)
- distribution
-
- Parameter adjustments */
- --iseed;
-
- /* Function Body */
- t1 = slaran_(&iseed[1]);
- t2 = slaran_(&iseed[1]);
-
- if (*idist == 1) {
-
-/* real and imaginary parts each uniform (0,1) */
-
- q__1.r = t1, q__1.i = t2;
- ret_val->r = q__1.r, ret_val->i = q__1.i;
- } else if (*idist == 2) {
-
-/* real and imaginary parts each uniform (-1,1) */
-
- d__1 = t1 * 2.f - 1.f;
- d__2 = t2 * 2.f - 1.f;
- q__1.r = d__1, q__1.i = d__2;
- ret_val->r = q__1.r, ret_val->i = q__1.i;
- } else if (*idist == 3) {
-
-/* real and imaginary parts each normal (0,1) */
-
- d__1 = sqrt(log(t1) * -2.f);
- d__2 = t2 * 6.2831853071795864769252867663f;
- q__3.r = 0.f, q__3.i = d__2;
- c_exp(&q__2, &q__3);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- ret_val->r = q__1.r, ret_val->i = q__1.i;
- } else if (*idist == 4) {
-
-/* uniform distribution on the unit disc abs(z) <= 1 */
-
- d__1 = sqrt(t1);
- d__2 = t2 * 6.2831853071795864769252867663f;
- q__3.r = 0.f, q__3.i = d__2;
- c_exp(&q__2, &q__3);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- ret_val->r = q__1.r, ret_val->i = q__1.i;
- } else if (*idist == 5) {
-
-/* uniform distribution on the unit circle abs(z) = 1 */
-
- d__1 = t2 * 6.2831853071795864769252867663f;
- q__2.r = 0.f, q__2.i = d__1;
- c_exp(&q__1, &q__2);
- ret_val->r = q__1.r, ret_val->i = q__1.i;
- }
- return ;
-
-/* End of CLARND */
-
-} /* clarnd_ */
-
diff --git a/TESTING/MATGEN/clarnv.c b/TESTING/MATGEN/clarnv.c
deleted file mode 100644
index 45b1570..0000000
--- a/TESTING/MATGEN/clarnv.c
+++ /dev/null
@@ -1,172 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int clarnv_(integer *idist, integer *iseed, integer *n,
- complex *x)
-{
-/* -- 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
-
-
- Purpose
- =======
-
- CLARNV returns a vector of n random complex numbers from a uniform or
-
- normal distribution.
-
- Arguments
- =========
-
- IDIST (input) INTEGER
- Specifies the distribution of the random numbers:
- = 1: real and imaginary parts each uniform (0,1)
- = 2: real and imaginary parts each uniform (-1,1)
- = 3: real and imaginary parts each normal (0,1)
- = 4: uniformly distributed on the disc abs(z) < 1
- = 5: uniformly distributed on the circle abs(z) = 1
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- N (input) INTEGER
- The number of random numbers to be generated.
-
- X (output) COMPLEX array, dimension (N)
- The generated random numbers.
-
- Further Details
- ===============
-
- This routine calls the auxiliary routine SLARUV to generate random
- real numbers from a uniform (0,1) distribution, in batches of up to
- 128 using vectorisable code. The Box-Muller method is used to
- transform numbers from a uniform to a normal distribution.
-
- =====================================================================
-
-
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer i__1, i__2, i__3, i__4, i__5;
- doublereal d__1, d__2;
- complex q__1, q__2, q__3;
- /* Builtin functions */
- double log(doublereal), sqrt(doublereal);
- void c_exp(complex *, complex *);
- /* Local variables */
- static integer i;
- static real u[128];
- static integer il, iv;
- extern /* Subroutine */ int slaruv_(integer *, integer *, real *);
-
-
-#define X(I) x[(I)-1]
-#define ISEED(I) iseed[(I)-1]
-
-
- i__1 = *n;
- for (iv = 1; iv <= *n; iv += 64) {
-/* Computing MIN */
- i__2 = 64, i__3 = *n - iv + 1;
- il = min(i__2,i__3);
-
-/* Call SLARUV to generate 2*IL real numbers from a uniform (0,
-1)
- distribution (2*IL <= LV) */
-
- i__2 = il << 1;
- slaruv_(&ISEED(1), &i__2, u);
-
- if (*idist == 1) {
-
-/* Copy generated numbers */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- i__4 = (i << 1) - 2;
- i__5 = (i << 1) - 1;
- q__1.r = u[(i<<1)-2], q__1.i = u[(i<<1)-1];
- X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
-/* L10: */
- }
- } else if (*idist == 2) {
-
-/* Convert generated numbers to uniform (-1,1) distribut
-ion */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- d__1 = u[(i << 1) - 2] * 2.f - 1.f;
- d__2 = u[(i << 1) - 1] * 2.f - 1.f;
- q__1.r = d__1, q__1.i = d__2;
- X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
-/* L20: */
- }
- } else if (*idist == 3) {
-
-/* Convert generated numbers to normal (0,1) distributio
-n */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- d__1 = sqrt(log(u[(i << 1) - 2]) * -2.f);
- d__2 = u[(i << 1) - 1] * 6.2831853071795864769252867663f;
- q__3.r = 0.f, q__3.i = d__2;
- c_exp(&q__2, &q__3);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
-/* L30: */
- }
- } else if (*idist == 4) {
-
-/* Convert generated numbers to complex numbers uniforml
-y
- distributed on the unit disk */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- d__1 = sqrt(u[(i << 1) - 2]);
- d__2 = u[(i << 1) - 1] * 6.2831853071795864769252867663f;
- q__3.r = 0.f, q__3.i = d__2;
- c_exp(&q__2, &q__3);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
-/* L40: */
- }
- } else if (*idist == 5) {
-
-/* Convert generated numbers to complex numbers uniforml
-y
- distributed on the unit circle */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- d__1 = u[(i << 1) - 1] * 6.2831853071795864769252867663f;
- q__2.r = 0.f, q__2.i = d__1;
- c_exp(&q__1, &q__2);
- X(iv+i-1).r = q__1.r, X(iv+i-1).i = q__1.i;
-/* L50: */
- }
- }
-/* L60: */
- }
- return 0;
-
-/* End of CLARNV */
-
-} /* clarnv_ */
-
diff --git a/TESTING/MATGEN/claror.c b/TESTING/MATGEN/claror.c
deleted file mode 100644
index 8b18c21..0000000
--- a/TESTING/MATGEN/claror.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static complex c_b1 = {0.f,0.f};
-static complex c_b2 = {1.f,0.f};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int claror_(char *side, char *init, integer *m, integer *n,
- complex *a, integer *lda, integer *iseed, complex *x, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- complex q__1, q__2;
-
- /* Builtin functions */
- double c_abs(complex *);
- void r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer kbeg, jcol;
- static real xabs;
- static integer irow, j;
- extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
- complex *, integer *, complex *, integer *, complex *, integer *),
- cscal_(integer *, complex *, complex *, integer *);
- extern logical lsame_(char *, char *);
- extern /* Subroutine */ int cgemv_(char *, integer *, integer *, complex *
- , complex *, integer *, complex *, integer *, complex *, complex *
- , integer *);
- static complex csign;
- static integer ixfrm, itype, nxfrm;
- static real xnorm;
- extern real scnrm2_(integer *, complex *, integer *);
- extern /* Subroutine */ int clacgv_(integer *, complex *, integer *);
- extern /* Complex */ VOID clarnd_(complex *, integer *, integer *);
- extern /* Subroutine */ int claset_(char *, integer *, integer *, complex
- *, complex *, complex *, integer *), xerbla_(char *,
- integer *);
- static real factor;
- static complex xnorms;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- CLAROR pre- or post-multiplies an M by N matrix A by a random
- unitary matrix U, overwriting A. A may optionally be
- initialized to the identity matrix before multiplying by U.
- U is generated using the method of G.W. Stewart
- ( SIAM J. Numer. Anal. 17, 1980, pp. 403-409 ).
- (BLAS-2 version)
-
- Arguments
- =========
-
- SIDE - CHARACTER*1
- SIDE specifies whether A is multiplied on the left or right
-
- by U.
- SIDE = 'L' Multiply A on the left (premultiply) by U
- SIDE = 'R' Multiply A on the right (postmultiply) by U*
- SIDE = 'C' Multiply A on the left by U and the right by U*
- SIDE = 'T' Multiply A on the left by U and the right by U'
- Not modified.
-
- INIT - CHARACTER*1
- INIT specifies whether or not A should be initialized to
- the identity matrix.
- INIT = 'I' Initialize A to (a section of) the
- identity matrix before applying U.
- INIT = 'N' No initialization. Apply U to the
- input matrix A.
-
- INIT = 'I' may be used to generate square (i.e., unitary)
- or rectangular orthogonal matrices (orthogonality being
- in the sense of CDOTC):
-
- For square matrices, M=N, and SIDE many be either 'L' or
- 'R'; the rows will be orthogonal to each other, as will the
-
- columns.
- For rectangular matrices where M < N, SIDE = 'R' will
- produce a dense matrix whose rows will be orthogonal and
- whose columns will not, while SIDE = 'L' will produce a
- matrix whose rows will be orthogonal, and whose first M
- columns will be orthogonal, the remaining columns being
- zero.
- For matrices where M > N, just use the previous
- explaination, interchanging 'L' and 'R' and "rows" and
- "columns".
-
- Not modified.
-
- M - INTEGER
- Number of rows of A. Not modified.
-
- N - INTEGER
- Number of columns of A. Not modified.
-
- A - COMPLEX array, dimension ( LDA, N )
- Input and output array. Overwritten by U A ( if SIDE = 'L' )
-
- or by A U ( if SIDE = 'R' )
- or by U A U* ( if SIDE = 'C')
- or by U A U' ( if SIDE = 'T') on exit.
-
- LDA - INTEGER
- Leading dimension of A. Must be at least MAX ( 1, M ).
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. The array elements should be between 0 and 4095;
-
- if not they will be reduced mod 4096. Also, ISEED(4) must
- be odd. The random number generator uses a linear
- congruential sequence limited to small integers, and so
- should produce machine independent random numbers. The
- values of ISEED are changed on exit, and can be used in the
-
- next call to CLAROR to continue the same random number
- sequence.
- Modified.
-
- X - COMPLEX array, dimension ( 3*MAX( M, N ) )
- Workspace. Of length:
- 2*M + N if SIDE = 'L',
- 2*N + M if SIDE = 'R',
- 3*N if SIDE = 'C' or 'T'.
- Modified.
-
- INFO - INTEGER
- An error flag. It is set to:
- 0 if no error.
- 1 if CLARND returned a bad random number (installation
- problem)
- -1 if SIDE is not L, R, C, or T.
- -3 if M is negative.
- -4 if N is negative or if SIDE is C or T and N is not equal
-
- to M.
- -6 if LDA is less than M.
-
- =====================================================================
-
-
-
- Parameter adjustments */
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --x;
-
- /* Function Body */
- if (*n == 0 || *m == 0) {
- return 0;
- }
-
- itype = 0;
- if (lsame_(side, "L")) {
- itype = 1;
- } else if (lsame_(side, "R")) {
- itype = 2;
- } else if (lsame_(side, "C")) {
- itype = 3;
- } else if (lsame_(side, "T")) {
- itype = 4;
- }
-
-/* Check for argument errors. */
-
- *info = 0;
- if (itype == 0) {
- *info = -1;
- } else if (*m < 0) {
- *info = -3;
- } else if (*n < 0 || itype == 3 && *n != *m) {
- *info = -4;
- } else if (*lda < *m) {
- *info = -6;
- }
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("CLAROR", &i__1);
- return 0;
- }
-
- if (itype == 1) {
- nxfrm = *m;
- } else {
- nxfrm = *n;
- }
-
-/* Initialize A to the identity matrix if desired */
-
- if (lsame_(init, "I")) {
- claset_("Full", m, n, &c_b1, &c_b2, &a[a_offset], lda);
- }
-
-/* If no rotation possible, still multiply by
- a random complex number from the circle |x| = 1
-
- 2) Compute Rotation by computing Householder
- Transformations H(2), H(3), ..., H(n). Note that the
- order in which they are computed is irrelevant. */
-
- i__1 = nxfrm;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- x[i__2].r = 0.f, x[i__2].i = 0.f;
-/* L40: */
- }
-
- i__1 = nxfrm;
- for (ixfrm = 2; ixfrm <= i__1; ++ixfrm) {
- kbeg = nxfrm - ixfrm + 1;
-
-/* Generate independent normal( 0, 1 ) random numbers */
-
- i__2 = nxfrm;
- for (j = kbeg; j <= i__2; ++j) {
- i__3 = j;
- clarnd_(&q__1, &c__3, &iseed[1]);
- x[i__3].r = q__1.r, x[i__3].i = q__1.i;
-/* L50: */
- }
-
-/* Generate a Householder transformation from the random vector
- X */
-
- xnorm = scnrm2_(&ixfrm, &x[kbeg], &c__1);
- xabs = c_abs(&x[kbeg]);
- if (xabs != 0.f) {
- i__2 = kbeg;
- q__1.r = x[i__2].r / xabs, q__1.i = x[i__2].i / xabs;
- csign.r = q__1.r, csign.i = q__1.i;
- } else {
- csign.r = 1.f, csign.i = 0.f;
- }
- q__1.r = xnorm * csign.r, q__1.i = xnorm * csign.i;
- xnorms.r = q__1.r, xnorms.i = q__1.i;
- i__2 = nxfrm + kbeg;
- q__1.r = -(doublereal)csign.r, q__1.i = -(doublereal)csign.i;
- x[i__2].r = q__1.r, x[i__2].i = q__1.i;
- factor = xnorm * (xnorm + xabs);
- if (dabs(factor) < 1e-20f) {
- *info = 1;
- i__2 = -(*info);
- xerbla_("CLAROR", &i__2);
- return 0;
- } else {
- factor = 1.f / factor;
- }
- i__2 = kbeg;
- i__3 = kbeg;
- q__1.r = x[i__3].r + xnorms.r, q__1.i = x[i__3].i + xnorms.i;
- x[i__2].r = q__1.r, x[i__2].i = q__1.i;
-
-/* Apply Householder transformation to A */
-
- if (itype == 1 || itype == 3 || itype == 4) {
-
-/* Apply H(k) on the left of A */
-
- cgemv_("C", &ixfrm, n, &c_b2, &a[kbeg + a_dim1], lda, &x[kbeg], &
- c__1, &c_b1, &x[(nxfrm << 1) + 1], &c__1);
- q__2.r = factor, q__2.i = 0.f;
- q__1.r = -(doublereal)q__2.r, q__1.i = -(doublereal)q__2.i;
- cgerc_(&ixfrm, n, &q__1, &x[kbeg], &c__1, &x[(nxfrm << 1) + 1], &
- c__1, &a[kbeg + a_dim1], lda);
-
- }
-
- if (itype >= 2 && itype <= 4) {
-
-/* Apply H(k)* (or H(k)') on the right of A */
-
- if (itype == 4) {
- clacgv_(&ixfrm, &x[kbeg], &c__1);
- }
-
- cgemv_("N", m, &ixfrm, &c_b2, &a[kbeg * a_dim1 + 1], lda, &x[kbeg]
- , &c__1, &c_b1, &x[(nxfrm << 1) + 1], &c__1);
- q__2.r = factor, q__2.i = 0.f;
- q__1.r = -(doublereal)q__2.r, q__1.i = -(doublereal)q__2.i;
- cgerc_(m, &ixfrm, &q__1, &x[(nxfrm << 1) + 1], &c__1, &x[kbeg], &
- c__1, &a[kbeg * a_dim1 + 1], lda);
-
- }
-/* L60: */
- }
-
- clarnd_(&q__1, &c__3, &iseed[1]);
- x[1].r = q__1.r, x[1].i = q__1.i;
- xabs = c_abs(&x[1]);
- if (xabs != 0.f) {
- q__1.r = x[1].r / xabs, q__1.i = x[1].i / xabs;
- csign.r = q__1.r, csign.i = q__1.i;
- } else {
- csign.r = 1.f, csign.i = 0.f;
- }
- i__1 = nxfrm << 1;
- x[i__1].r = csign.r, x[i__1].i = csign.i;
-
-/* Scale the matrix A by D. */
-
- if (itype == 1 || itype == 3 || itype == 4) {
- i__1 = *m;
- for (irow = 1; irow <= i__1; ++irow) {
- r_cnjg(&q__1, &x[nxfrm + irow]);
- cscal_(n, &q__1, &a[irow + a_dim1], lda);
-/* L70: */
- }
- }
-
- if (itype == 2 || itype == 3) {
- i__1 = *n;
- for (jcol = 1; jcol <= i__1; ++jcol) {
- cscal_(m, &x[nxfrm + jcol], &a[jcol * a_dim1 + 1], &c__1);
-/* L80: */
- }
- }
-
- if (itype == 4) {
- i__1 = *n;
- for (jcol = 1; jcol <= i__1; ++jcol) {
- r_cnjg(&q__1, &x[nxfrm + jcol]);
- cscal_(m, &q__1, &a[jcol * a_dim1 + 1], &c__1);
-/* L90: */
- }
- }
- return 0;
-
-/* End of CLAROR */
-
-} /* claror_ */
-
diff --git a/TESTING/MATGEN/clarot.c b/TESTING/MATGEN/clarot.c
deleted file mode 100644
index 8d33b2a..0000000
--- a/TESTING/MATGEN/clarot.c
+++ /dev/null
@@ -1,365 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__4 = 4;
-static integer c__8 = 8;
-
-/* Subroutine */ int clarot_(logical *lrows, logical *lleft, logical *lright,
- integer *nl, complex *c, complex *s, complex *a, integer *lda,
- complex *xleft, complex *xright)
-{
- /* System generated locals */
- integer i__1, i__2, i__3, i__4;
- complex q__1, q__2, q__3, q__4, q__5, q__6;
-
- /* Builtin functions */
- void r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer iinc, j, inext;
- static complex tempx;
- static integer ix, iy, nt;
- static complex xt[2], yt[2];
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static integer iyt;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- CLAROT applies a (Givens) rotation to two adjacent rows or
- columns, where one element of the first and/or last column/row
- may be a separate variable. This is specifically indended
- for use on matrices stored in some format other than GE, so
- that elements of the matrix may be used or modified for which
- no array element is provided.
-
- One example is a symmetric matrix in SB format (bandwidth=4), for
-
- which UPLO='L': Two adjacent rows will have the format:
-
- row j: * * * * * . . . .
- row j+1: * * * * * . . . .
-
- '*' indicates elements for which storage is provided,
- '.' indicates elements for which no storage is provided, but
- are not necessarily zero; their values are determined by
- symmetry. ' ' indicates elements which are necessarily zero,
- and have no storage provided.
-
- Those columns which have two '*'s can be handled by SROT.
- Those columns which have no '*'s can be ignored, since as long
- as the Givens rotations are carefully applied to preserve
- symmetry, their values are determined.
- Those columns which have one '*' have to be handled separately,
- by using separate variables "p" and "q":
-
- row j: * * * * * p . . .
- row j+1: q * * * * * . . . .
-
- The element p would have to be set correctly, then that column
- is rotated, setting p to its new value. The next call to
- CLAROT would rotate columns j and j+1, using p, and restore
- symmetry. The element q would start out being zero, and be
- made non-zero by the rotation. Later, rotations would presumably
-
- be chosen to zero q out.
-
- Typical Calling Sequences: rotating the i-th and (i+1)-st rows.
- ------- ------- ---------
-
- General dense matrix:
-
- CALL CLAROT(.TRUE.,.FALSE.,.FALSE., N, C,S,
- A(i,1),LDA, DUMMY, DUMMY)
-
- General banded matrix in GB format:
-
- j = MAX(1, i-KL )
- NL = MIN( N, i+KU+1 ) + 1-j
- CALL CLAROT( .TRUE., i-KL.GE.1, i+KU.LT.N, NL, C,S,
- A(KU+i+1-j,j),LDA-1, XLEFT, XRIGHT )
-
- [ note that i+1-j is just MIN(i,KL+1) ]
-
- Symmetric banded matrix in SY format, bandwidth K,
- lower triangle only:
-
- j = MAX(1, i-K )
- NL = MIN( K+1, i ) + 1
- CALL CLAROT( .TRUE., i-K.GE.1, .TRUE., NL, C,S,
- A(i,j), LDA, XLEFT, XRIGHT )
-
- Same, but upper triangle only:
-
- NL = MIN( K+1, N-i ) + 1
- CALL CLAROT( .TRUE., .TRUE., i+K.LT.N, NL, C,S,
- A(i,i), LDA, XLEFT, XRIGHT )
-
- Symmetric banded matrix in SB format, bandwidth K,
- lower triangle only:
-
- [ same as for SY, except:]
- . . . .
- A(i+1-j,j), LDA-1, XLEFT, XRIGHT )
-
- [ note that i+1-j is just MIN(i,K+1) ]
-
- Same, but upper triangle only:
- . . .
- A(K+1,i), LDA-1, XLEFT, XRIGHT )
-
- Rotating columns is just the transpose of rotating rows, except
-
- for GB and SB: (rotating columns i and i+1)
-
- GB:
- j = MAX(1, i-KU )
- NL = MIN( N, i+KL+1 ) + 1-j
- CALL CLAROT( .TRUE., i-KU.GE.1, i+KL.LT.N, NL, C,S,
- A(KU+j+1-i,i),LDA-1, XTOP, XBOTTM )
-
- [note that KU+j+1-i is just MAX(1,KU+2-i)]
-
- SB: (upper triangle)
-
- . . . . . .
- A(K+j+1-i,i),LDA-1, XTOP, XBOTTM )
-
- SB: (lower triangle)
-
- . . . . . .
- A(1,i),LDA-1, XTOP, XBOTTM )
-
- Arguments
- =========
-
- LROWS - LOGICAL
- If .TRUE., then CLAROT will rotate two rows. If .FALSE.,
- then it will rotate two columns.
- Not modified.
-
- LLEFT - LOGICAL
- If .TRUE., then XLEFT will be used instead of the
- corresponding element of A for the first element in the
- second row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.)
- If .FALSE., then the corresponding element of A will be
- used.
- Not modified.
-
- LRIGHT - LOGICAL
- If .TRUE., then XRIGHT will be used instead of the
- corresponding element of A for the last element in the
- first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
-
- .FALSE., then the corresponding element of A will be used.
- Not modified.
-
- NL - INTEGER
- The length of the rows (if LROWS=.TRUE.) or columns (if
- LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
- used, the columns/rows they are in should be included in
- NL, e.g., if LLEFT = LRIGHT = .TRUE., then NL must be at
- least 2. The number of rows/columns to be rotated
- exclusive of those involving XLEFT and/or XRIGHT may
- not be negative, i.e., NL minus how many of LLEFT and
- LRIGHT are .TRUE. must be at least zero; if not, XERBLA
- will be called.
- Not modified.
-
- C, S - COMPLEX
- Specify the Givens rotation to be applied. If LROWS is
- true, then the matrix ( c s )
- ( _ _ )
- (-s c ) is applied from the left;
- if false, then the transpose (not conjugated) thereof is
- applied from the right. Note that in contrast to the
- output of CROTG or to most versions of CROT, both C and S
- are complex. For a Givens rotation, |C|**2 + |S|**2 should
-
- be 1, but this is not checked.
- Not modified.
-
- A - COMPLEX array.
- The array containing the rows/columns to be rotated. The
- first element of A should be the upper left element to
- be rotated.
- Read and modified.
-
- LDA - INTEGER
- The "effective" leading dimension of A. If A contains
- a matrix stored in GE, HE, or SY format, then this is just
- the leading dimension of A as dimensioned in the calling
- routine. If A contains a matrix stored in band (GB, HB, or
-
- SB) format, then this should be *one less* than the leading
-
- dimension used in the calling routine. Thus, if A were
- dimensioned A(LDA,*) in CLAROT, then A(1,j) would be the
- j-th element in the first of the two rows to be rotated,
- and A(2,j) would be the j-th in the second, regardless of
- how the array may be stored in the calling routine. [A
- cannot, however, actually be dimensioned thus, since for
- band format, the row number may exceed LDA, which is not
- legal FORTRAN.]
- If LROWS=.TRUE., then LDA must be at least 1, otherwise
- it must be at least NL minus the number of .TRUE. values
- in XLEFT and XRIGHT.
- Not modified.
-
- XLEFT - COMPLEX
- If LLEFT is .TRUE., then XLEFT will be used and modified
- instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
- (if LROWS=.FALSE.).
- Read and modified.
-
- XRIGHT - COMPLEX
- If LRIGHT is .TRUE., then XRIGHT will be used and modified
- instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
- (if LROWS=.FALSE.).
- Read and modified.
-
- =====================================================================
-
-
-
- Set up indices, arrays for ends
-
- Parameter adjustments */
- --a;
-
- /* Function Body */
- if (*lrows) {
- iinc = *lda;
- inext = 1;
- } else {
- iinc = 1;
- inext = *lda;
- }
-
- if (*lleft) {
- nt = 1;
- ix = iinc + 1;
- iy = *lda + 2;
- xt[0].r = a[1].r, xt[0].i = a[1].i;
- yt[0].r = xleft->r, yt[0].i = xleft->i;
- } else {
- nt = 0;
- ix = 1;
- iy = inext + 1;
- }
-
- if (*lright) {
- iyt = inext + 1 + (*nl - 1) * iinc;
- ++nt;
- i__1 = nt - 1;
- xt[i__1].r = xright->r, xt[i__1].i = xright->i;
- i__1 = nt - 1;
- i__2 = iyt;
- yt[i__1].r = a[i__2].r, yt[i__1].i = a[i__2].i;
- }
-
-/* Check for errors */
-
- if (*nl < nt) {
- xerbla_("CLAROT", &c__4);
- return 0;
- }
- if (*lda <= 0 || ! (*lrows) && *lda < *nl - nt) {
- xerbla_("CLAROT", &c__8);
- return 0;
- }
-
-/* Rotate
-
- CROT( NL-NT, A(IX),IINC, A(IY),IINC, C, S ) with complex C, S */
-
- i__1 = *nl - nt - 1;
- for (j = 0; j <= i__1; ++j) {
- i__2 = ix + j * iinc;
- q__2.r = c->r * a[i__2].r - c->i * a[i__2].i, q__2.i = c->r * a[i__2]
- .i + c->i * a[i__2].r;
- i__3 = iy + j * iinc;
- q__3.r = s->r * a[i__3].r - s->i * a[i__3].i, q__3.i = s->r * a[i__3]
- .i + s->i * a[i__3].r;
- q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
- tempx.r = q__1.r, tempx.i = q__1.i;
- i__2 = iy + j * iinc;
- r_cnjg(&q__4, s);
- q__3.r = -(doublereal)q__4.r, q__3.i = -(doublereal)q__4.i;
- i__3 = ix + j * iinc;
- q__2.r = q__3.r * a[i__3].r - q__3.i * a[i__3].i, q__2.i = q__3.r * a[
- i__3].i + q__3.i * a[i__3].r;
- r_cnjg(&q__6, c);
- i__4 = iy + j * iinc;
- q__5.r = q__6.r * a[i__4].r - q__6.i * a[i__4].i, q__5.i = q__6.r * a[
- i__4].i + q__6.i * a[i__4].r;
- q__1.r = q__2.r + q__5.r, q__1.i = q__2.i + q__5.i;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
- i__2 = ix + j * iinc;
- a[i__2].r = tempx.r, a[i__2].i = tempx.i;
-/* L10: */
- }
-
-/* CROT( NT, XT,1, YT,1, C, S ) with complex C, S */
-
- i__1 = nt;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j - 1;
- q__2.r = c->r * xt[i__2].r - c->i * xt[i__2].i, q__2.i = c->r * xt[
- i__2].i + c->i * xt[i__2].r;
- i__3 = j - 1;
- q__3.r = s->r * yt[i__3].r - s->i * yt[i__3].i, q__3.i = s->r * yt[
- i__3].i + s->i * yt[i__3].r;
- q__1.r = q__2.r + q__3.r, q__1.i = q__2.i + q__3.i;
- tempx.r = q__1.r, tempx.i = q__1.i;
- i__2 = j - 1;
- r_cnjg(&q__4, s);
- q__3.r = -(doublereal)q__4.r, q__3.i = -(doublereal)q__4.i;
- i__3 = j - 1;
- q__2.r = q__3.r * xt[i__3].r - q__3.i * xt[i__3].i, q__2.i = q__3.r *
- xt[i__3].i + q__3.i * xt[i__3].r;
- r_cnjg(&q__6, c);
- i__4 = j - 1;
- q__5.r = q__6.r * yt[i__4].r - q__6.i * yt[i__4].i, q__5.i = q__6.r *
- yt[i__4].i + q__6.i * yt[i__4].r;
- q__1.r = q__2.r + q__5.r, q__1.i = q__2.i + q__5.i;
- yt[i__2].r = q__1.r, yt[i__2].i = q__1.i;
- i__2 = j - 1;
- xt[i__2].r = tempx.r, xt[i__2].i = tempx.i;
-/* L20: */
- }
-
-/* Stuff values back into XLEFT, XRIGHT, etc. */
-
- if (*lleft) {
- a[1].r = xt[0].r, a[1].i = xt[0].i;
- xleft->r = yt[0].r, xleft->i = yt[0].i;
- }
-
- if (*lright) {
- i__1 = nt - 1;
- xright->r = xt[i__1].r, xright->i = xt[i__1].i;
- i__1 = iyt;
- i__2 = nt - 1;
- a[i__1].r = yt[i__2].r, a[i__1].i = yt[i__2].i;
- }
-
- return 0;
-
-/* End of CLAROT */
-
-} /* clarot_ */
-
diff --git a/TESTING/MATGEN/clartg.c b/TESTING/MATGEN/clartg.c
deleted file mode 100644
index c290985..0000000
--- a/TESTING/MATGEN/clartg.c
+++ /dev/null
@@ -1,147 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int clartg_(complex *f, complex *g, real *cs, complex *sn,
- complex *r)
-{
-/* -- 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
-
-
- Purpose
- =======
-
- CLARTG generates a plane rotation so that
-
- [ CS SN ] [ F ] [ R ]
- [ __ ] . [ ] = [ ] where CS**2 + |SN|**2 = 1.
- [ -SN CS ] [ G ] [ 0 ]
-
- This is a faster version of the BLAS1 routine CROTG, except for
- the following differences:
- F and G are unchanged on return.
- If G=0, then CS=1 and SN=0.
- If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any
- floating point operations.
-
- Arguments
- =========
-
- F (input) COMPLEX
- The first component of vector to be rotated.
-
- G (input) COMPLEX
- The second component of vector to be rotated.
-
- CS (output) REAL
- The cosine of the rotation.
-
- SN (output) COMPLEX
- The sine of the rotation.
-
- R (output) COMPLEX
- The nonzero component of the rotated vector.
-
- =====================================================================
-
-
-
- [ 25 or 38 ops for main paths ] */
- /* System generated locals */
- real r__1, r__2;
- doublereal d__1;
- complex q__1, q__2, q__3;
- /* Builtin functions */
- void r_cnjg(complex *, complex *);
- double c_abs(complex *), r_imag(complex *), sqrt(doublereal);
- /* Local variables */
- static real d, f1, f2, g1, g2, fa, ga, di;
- static complex fs, gs, ss;
-
-
- if (g->r == 0.f && g->i == 0.f) {
- *cs = 1.f;
- sn->r = 0.f, sn->i = 0.f;
- r->r = f->r, r->i = f->i;
- } else if (f->r == 0.f && f->i == 0.f) {
- *cs = 0.f;
-
- r_cnjg(&q__2, g);
- d__1 = c_abs(g);
- q__1.r = q__2.r / d__1, q__1.i = q__2.i / d__1;
- sn->r = q__1.r, sn->i = q__1.i;
- d__1 = c_abs(g);
- r->r = d__1, r->i = 0.f;
-
-/* SN = ONE
- R = G */
-
- } else {
- f1 = (r__1 = f->r, dabs(r__1)) + (r__2 = r_imag(f), dabs(r__2));
- g1 = (r__1 = g->r, dabs(r__1)) + (r__2 = r_imag(g), dabs(r__2));
- if (f1 >= g1) {
- q__1.r = g->r / f1, q__1.i = g->i / f1;
- gs.r = q__1.r, gs.i = q__1.i;
-/* Computing 2nd power */
- r__1 = gs.r;
-/* Computing 2nd power */
- r__2 = r_imag(&gs);
- g2 = r__1 * r__1 + r__2 * r__2;
- q__1.r = f->r / f1, q__1.i = f->i / f1;
- fs.r = q__1.r, fs.i = q__1.i;
-/* Computing 2nd power */
- r__1 = fs.r;
-/* Computing 2nd power */
- r__2 = r_imag(&fs);
- f2 = r__1 * r__1 + r__2 * r__2;
- d = sqrt(g2 / f2 + 1.f);
- *cs = 1.f / d;
- r_cnjg(&q__3, &gs);
- q__2.r = q__3.r * fs.r - q__3.i * fs.i, q__2.i = q__3.r * fs.i +
- q__3.i * fs.r;
- d__1 = *cs / f2;
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- sn->r = q__1.r, sn->i = q__1.i;
- q__1.r = d * f->r, q__1.i = d * f->i;
- r->r = q__1.r, r->i = q__1.i;
- } else {
- q__1.r = f->r / g1, q__1.i = f->i / g1;
- fs.r = q__1.r, fs.i = q__1.i;
-/* Computing 2nd power */
- r__1 = fs.r;
-/* Computing 2nd power */
- r__2 = r_imag(&fs);
- f2 = r__1 * r__1 + r__2 * r__2;
- fa = sqrt(f2);
- q__1.r = g->r / g1, q__1.i = g->i / g1;
- gs.r = q__1.r, gs.i = q__1.i;
-/* Computing 2nd power */
- r__1 = gs.r;
-/* Computing 2nd power */
- r__2 = r_imag(&gs);
- g2 = r__1 * r__1 + r__2 * r__2;
- ga = sqrt(g2);
- d = sqrt(f2 / g2 + 1.f);
- di = 1.f / d;
- *cs = fa / ga * di;
- r_cnjg(&q__3, &gs);
- q__2.r = q__3.r * fs.r - q__3.i * fs.i, q__2.i = q__3.r * fs.i +
- q__3.i * fs.r;
- d__1 = fa * ga;
- q__1.r = q__2.r / d__1, q__1.i = q__2.i / d__1;
- ss.r = q__1.r, ss.i = q__1.i;
- q__1.r = di * ss.r, q__1.i = di * ss.i;
- sn->r = q__1.r, sn->i = q__1.i;
- q__2.r = g->r * ss.r - g->i * ss.i, q__2.i = g->r * ss.i + g->i *
- ss.r;
- q__1.r = d * q__2.r, q__1.i = d * q__2.i;
- r->r = q__1.r, r->i = q__1.i;
- }
- }
- return 0;
-
-/* End of CLARTG */
-
-} /* clartg_ */
-
diff --git a/TESTING/MATGEN/claset.c b/TESTING/MATGEN/claset.c
deleted file mode 100644
index 6d98ba2..0000000
--- a/TESTING/MATGEN/claset.c
+++ /dev/null
@@ -1,144 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int claset_(char *uplo, integer *m, integer *n, complex *
- alpha, complex *beta, complex *a, integer *lda)
-{
-/* -- 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
- =======
-
- CLASET initializes a 2-D array A to BETA on the diagonal and
- ALPHA on the offdiagonals.
-
- Arguments
- =========
-
- UPLO (input) CHARACTER*1
- Specifies the part of the matrix A to be set.
- = 'U': Upper triangular part is set. The lower triangle
-
- is unchanged.
- = 'L': Lower triangular part is set. The upper triangle
-
- is unchanged.
- Otherwise: All of the matrix A is set.
-
- M (input) INTEGER
- On entry, M specifies the number of rows of A.
-
- N (input) INTEGER
- On entry, N specifies the number of columns of A.
-
- ALPHA (input) COMPLEX
- All the offdiagonal array elements are set to ALPHA.
-
- BETA (input) COMPLEX
- All the diagonal array elements are set to BETA.
-
- A (input/output) COMPLEX array, dimension (LDA,N)
- On entry, the m by n matrix A.
- On exit, A(i,j) = ALPHA, 1 <= i <= m, 1 <= j <= n, i.ne.j;
- A(i,i) = BETA , 1 <= i <= min(m,n)
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= max(1,M).
-
- =====================================================================
-
-
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- /* Local variables */
- static integer i, j;
- extern logical lsame_(char *, char *);
-
-
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- if (lsame_(uplo, "U")) {
-
-/* Set the diagonal to BETA and the strictly upper triangular
-
- part of the array to ALPHA. */
-
- i__1 = *n;
- for (j = 2; j <= *n; ++j) {
-/* Computing MIN */
- i__3 = j - 1;
- i__2 = min(i__3,*m);
- for (i = 1; i <= min(j-1,*m); ++i) {
- i__3 = i + j * a_dim1;
- A(i,j).r = alpha->r, A(i,j).i = alpha->i;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = min(*n,*m);
- for (i = 1; i <= min(*n,*m); ++i) {
- i__2 = i + i * a_dim1;
- A(i,i).r = beta->r, A(i,i).i = beta->i;
-/* L30: */
- }
-
- } else if (lsame_(uplo, "L")) {
-
-/* Set the diagonal to BETA and the strictly lower triangular
-
- part of the array to ALPHA. */
-
- i__1 = min(*m,*n);
- for (j = 1; j <= min(*m,*n); ++j) {
- i__2 = *m;
- for (i = j + 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- A(i,j).r = alpha->r, A(i,j).i = alpha->i;
-/* L40: */
- }
-/* L50: */
- }
- i__1 = min(*n,*m);
- for (i = 1; i <= min(*n,*m); ++i) {
- i__2 = i + i * a_dim1;
- A(i,i).r = beta->r, A(i,i).i = beta->i;
-/* L60: */
- }
-
- } else {
-
-/* Set the array to BETA on the diagonal and ALPHA on the
- offdiagonal. */
-
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- A(i,j).r = alpha->r, A(i,j).i = alpha->i;
-/* L70: */
- }
-/* L80: */
- }
- i__1 = min(*m,*n);
- for (i = 1; i <= min(*m,*n); ++i) {
- i__2 = i + i * a_dim1;
- A(i,i).r = beta->r, A(i,i).i = beta->i;
-/* L90: */
- }
- }
-
- return 0;
-
-/* End of CLASET */
-
-} /* claset_ */
-
diff --git a/TESTING/MATGEN/clatb4.c b/TESTING/MATGEN/clatb4.c
deleted file mode 100644
index cdd3a9d..0000000
--- a/TESTING/MATGEN/clatb4.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include <string.h>
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__2 = 2;
-
-/* Subroutine */ int clatb4_(char *path, integer *imat, integer *m, integer *
- n, char *type, integer *kl, integer *ku, real *anorm, integer *mode,
- real *cndnum, char *dist)
-{
- /* Initialized data */
-
- static logical first = TRUE_;
-
- /* System generated locals */
- integer i__1;
-
- /* Builtin functions */
- double sqrt(doublereal);
-
- /* Local variables */
- static real badc1, badc2, large, small;
- static char c2[2];
- extern /* Subroutine */ int slabad_(real *, real *);
- extern float slamch_(char *);
- extern logical lsamen_(integer *, char *, char *);
- static integer mat;
- static real eps;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- CLATB4 sets parameters for the matrix generator based on the type of
-
- matrix to be generated.
-
- Arguments
- =========
-
- PATH (input) CHARACTER*3
- The LAPACK path name.
-
- IMAT (input) INTEGER
- An integer key describing which matrix to generate for this
- path.
-
- M (input) INTEGER
- The number of rows in the matrix to be generated.
-
- N (input) INTEGER
- The number of columns in the matrix to be generated.
-
- TYPE (output) CHARACTER*1
- The type of the matrix to be generated:
- = 'S': symmetric matrix
- = 'P': symmetric positive (semi)definite matrix
- = 'N': nonsymmetric matrix
-
- KL (output) INTEGER
- The lower band width of the matrix to be generated.
-
- KU (output) INTEGER
- The upper band width of the matrix to be generated.
-
- ANORM (output) REAL
- The desired norm of the matrix to be generated. The diagonal
-
- matrix of singular values or eigenvalues is scaled by this
- value.
-
- MODE (output) INTEGER
- A key indicating how to choose the vector of eigenvalues.
-
- CNDNUM (output) REAL
- The desired condition number.
-
- DIST (output) CHARACTER*1
- The type of distribution to be used by the random number
- generator.
-
- =====================================================================
-
-
-
- Set some constants for use in the subroutine. */
-
- if (first) {
- first = FALSE_;
- eps = slamch_("Precision");
- badc2 = .1f / eps;
- badc1 = sqrt(badc2);
- small = slamch_("Safe minimum");
- large = 1.f / small;
-
-/* If it looks like we're on a Cray, take the square root of
- SMALL and LARGE to avoid overflow and underflow problems. */
-
- slabad_(&small, &large);
- small = small / eps * .25f;
- large = 1.f / small;
- }
-
- /* s_copy(c2, path + 1, 2L, 2L);*/
- strncpy(c2, path + 1, 2);
-
-/* Set some parameters we don't plan to change. */
-
- *(unsigned char *)dist = 'S';
- *mode = 3;
-
-/* xQR, xLQ, xQL, xRQ: Set parameters to generate a general
- M x N matrix. */
-
- if (lsamen_(&c__2, c2, "QR") || lsamen_(&c__2, c2, "LQ")
- || lsamen_(&c__2, c2, "QL") || lsamen_(&c__2, c2, "RQ")) {
-
-/* Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- *ku = 0;
- } else if (*imat == 2) {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- } else if (*imat == 3) {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "GE")) {
-
-/* xGE: Set parameters to generate a general M x N matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- *ku = 0;
- } else if (*imat == 2) {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- } else if (*imat == 3) {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (*imat == 8) {
- *cndnum = badc1;
- } else if (*imat == 9) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 10) {
- *anorm = small;
- } else if (*imat == 11) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "GB")) {
-
-/* xGB: Set parameters to generate a general banded matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the condition number and norm. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2 * .1f;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "GT")) {
-
-/* xGT: Set parameters to generate a general tridiagonal matri
-x.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- } else {
- *kl = 1;
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 3) {
- *cndnum = badc1;
- } else if (*imat == 4) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 5 || *imat == 11) {
- *anorm = small;
- } else if (*imat == 6 || *imat == 12) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "PO") || lsamen_(&c__2, c2, "PP") || lsamen_(&c__2, c2, "HE") || lsamen_(&c__2, c2,
- "HP") || lsamen_(&c__2, c2, "SY") || lsamen_(&
- c__2, c2, "SP")) {
-
-/* xPO, xPP, xHE, xHP, xSY, xSP: Set parameters to generate a
-
- symmetric or Hermitian matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = *(unsigned char *)c2;
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- } else {
-/* Computing MAX */
- i__1 = *n - 1;
- *kl = max(i__1,0);
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 6) {
- *cndnum = badc1;
- } else if (*imat == 7) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 8) {
- *anorm = small;
- } else if (*imat == 9) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "PB")) {
-
-/* xPB: Set parameters to generate a symmetric band matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'P';
-
-/* Set the norm and condition number. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "PT")) {
-
-/* xPT: Set parameters to generate a symmetric positive defini
-te
- tridiagonal matrix. */
-
- *(unsigned char *)type = 'P';
- if (*imat == 1) {
- *kl = 0;
- } else {
- *kl = 1;
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 3) {
- *cndnum = badc1;
- } else if (*imat == 4) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 5 || *imat == 11) {
- *anorm = small;
- } else if (*imat == 6 || *imat == 12) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "TR") || lsamen_(&c__2, c2, "TP")) {
-
-/* xTR, xTP: Set parameters to generate a triangular matrix
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- mat = abs(*imat);
- if (mat == 1 || mat == 7) {
- *kl = 0;
- *ku = 0;
- } else if (*imat < 0) {
-/* Computing MAX */
- i__1 = *n - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (mat == 3 || mat == 9) {
- *cndnum = badc1;
- } else if (mat == 4 || mat == 10) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (mat == 5) {
- *anorm = small;
- } else if (mat == 6) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "TB")) {
-
-/* xTB: Set parameters to generate a triangular band matrix.
-
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the norm and condition number. */
-
- if (*imat == 2 || *imat == 8) {
- *cndnum = badc1;
- } else if (*imat == 3 || *imat == 9) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 4) {
- *anorm = small;
- } else if (*imat == 5) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
- }
- if (*n <= 1) {
- *cndnum = 1.f;
- }
-
- return 0;
-
-/* End of CLATB4 */
-
-} /* clatb4_ */
-
diff --git a/TESTING/MATGEN/clatm2.c b/TESTING/MATGEN/clatm2.c
deleted file mode 100644
index 5faccf1..0000000
--- a/TESTING/MATGEN/clatm2.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Complex */ VOID clatm2_(complex * ret_val, integer *m, integer *n, integer
- *i, integer *j, integer *kl, integer *ku, integer *idist, integer *
- iseed, complex *d, integer *igrade, complex *dl, complex *dr, integer
- *ipvtng, integer *iwork, real *sparse)
-{
- /* System generated locals */
- integer i__1, i__2;
- complex q__1, q__2, q__3;
-
- /* Builtin functions */
- void c_div(complex *, complex *, complex *), r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer isub, jsub;
- static complex ctemp;
- extern /* Complex */ VOID clarnd_(complex *, integer *, integer *);
- extern doublereal slaran_(integer *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
-
-
-
- Purpose
- =======
-
- CLATM2 returns the (I,J) entry of a random matrix of dimension
- (M, N) described by the other paramters. It is called by the
- CLATMR routine in order to build random test matrices. No error
- checking on parameters is done, because this routine is called in
-
- a tight loop by CLATMR which has already checked the parameters.
-
- Use of CLATM2 differs from CLATM3 in the order in which the random
-
- number generator is called to fill in random matrix entries.
- With CLATM2, the generator is called to fill in the pivoted matrix
-
- columnwise. With CLATM3, the generator is called to fill in the
- matrix columnwise, after which it is pivoted. Thus, CLATM3 can
- be used to construct random matrices which differ only in their
- order of rows and/or columns. CLATM2 is used to construct band
- matrices while avoiding calling the random number generator for
- entries outside the band (and therefore generating random numbers
-
-
- The matrix whose (I,J) entry is returned is constructed as
- follows (this routine only computes one entry):
-
- If I is outside (1..M) or J is outside (1..N), return zero
- (this is convenient for generating matrices in band format).
-
-
- Generate a matrix A with random entries of distribution IDIST.
-
- Set the diagonal to D.
-
- Grade the matrix, if desired, from the left (by DL) and/or
- from the right (by DR or DL) as specified by IGRADE.
-
- Permute, if desired, the rows and/or columns as specified by
- IPVTNG and IWORK.
-
- Band the matrix to have lower bandwidth KL and upper
- bandwidth KU.
-
- Set random entries to zero as specified by SPARSE.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of matrix. Not modified.
-
- N - INTEGER
- Number of columns of matrix. Not modified.
-
- I - INTEGER
- Row of entry to be returned. Not modified.
-
- J - INTEGER
- Column of entry to be returned. Not modified.
-
- KL - INTEGER
- Lower bandwidth. Not modified.
-
- KU - INTEGER
- Upper bandwidth. Not modified.
-
- IDIST - INTEGER
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => real and imaginary parts each UNIFORM( 0, 1 )
- 2 => real and imaginary parts each UNIFORM( -1, 1 )
- 3 => real and imaginary parts each NORMAL( 0, 1 )
- 4 => complex number uniform in DISK( 0 , 1 )
- Not modified.
-
- ISEED - INTEGER array of dimension ( 4 )
- Seed for random number generator.
- Changed on exit.
-
- D - COMPLEX array of dimension ( MIN( I , J ) )
- Diagonal entries of matrix. Not modified.
-
- IGRADE - INTEGER
- Specifies grading of matrix as follows:
- 0 => no grading
- 1 => matrix premultiplied by diag( DL )
- 2 => matrix postmultiplied by diag( DR )
- 3 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- 4 => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- 5 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( CONJG(DL) )
- 6 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- Not modified.
-
- DL - COMPLEX array ( I or J, as appropriate )
- Left scale factors for grading matrix. Not modified.
-
- DR - COMPLEX array ( I or J, as appropriate )
- Right scale factors for grading matrix. Not modified.
-
- IPVTNG - INTEGER
- On entry specifies pivoting permutations as follows:
- 0 => none.
- 1 => row pivoting.
- 2 => column pivoting.
- 3 => full pivoting, i.e., on both sides.
- Not modified.
-
- IWORK - INTEGER array ( I or J, as appropriate )
- This array specifies the permutation used. The
- row (or column) in position K was originally in
- position IWORK( K ).
- This differs from IWORK for CLATM3. Not modified.
-
- SPARSE - REAL between 0. and 1.
- On entry specifies the sparsity of the matrix
- if sparse matix is to be generated.
- SPARSE should lie between 0 and 1.
- A uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- =====================================================================
-
-
-
-
-
-
-
-
-
-
- -----------------------------------------------------------------------
-
-
-
-
- Check for I and J in range
-
- Parameter adjustments */
- --iwork;
- --dr;
- --dl;
- --d;
- --iseed;
-
- /* Function Body */
- if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
- ret_val->r = 0.f, ret_val->i = 0.f;
- return ;
- }
-
-/* Check for banding */
-
- if (*j > *i + *ku || *j < *i - *kl) {
- ret_val->r = 0.f, ret_val->i = 0.f;
- return ;
- }
-
-/* Check for sparsity */
-
- if (*sparse > 0.f) {
- if (slaran_(&iseed[1]) < *sparse) {
- ret_val->r = 0.f, ret_val->i = 0.f;
- return ;
- }
- }
-
-/* Compute subscripts depending on IPVTNG */
-
- if (*ipvtng == 0) {
- isub = *i;
- jsub = *j;
- } else if (*ipvtng == 1) {
- isub = iwork[*i];
- jsub = *j;
- } else if (*ipvtng == 2) {
- isub = *i;
- jsub = iwork[*j];
- } else if (*ipvtng == 3) {
- isub = iwork[*i];
- jsub = iwork[*j];
- }
-
-/* Compute entry and grade it according to IGRADE */
-
- if (isub == jsub) {
- i__1 = isub;
- ctemp.r = d[i__1].r, ctemp.i = d[i__1].i;
- } else {
- clarnd_(&q__1, idist, &iseed[1]);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- }
- if (*igrade == 1) {
- i__1 = isub;
- q__1.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__1.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 2) {
- i__1 = jsub;
- q__1.r = ctemp.r * dr[i__1].r - ctemp.i * dr[i__1].i, q__1.i =
- ctemp.r * dr[i__1].i + ctemp.i * dr[i__1].r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 3) {
- i__1 = isub;
- q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- i__2 = jsub;
- q__1.r = q__2.r * dr[i__2].r - q__2.i * dr[i__2].i, q__1.i = q__2.r *
- dr[i__2].i + q__2.i * dr[i__2].r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 4 && isub != jsub) {
- i__1 = isub;
- q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- c_div(&q__1, &q__2, &dl[jsub]);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 5) {
- i__1 = isub;
- q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- r_cnjg(&q__3, &dl[jsub]);
- q__1.r = q__2.r * q__3.r - q__2.i * q__3.i, q__1.i = q__2.r * q__3.i
- + q__2.i * q__3.r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 6) {
- i__1 = isub;
- q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- i__2 = jsub;
- q__1.r = q__2.r * dl[i__2].r - q__2.i * dl[i__2].i, q__1.i = q__2.r *
- dl[i__2].i + q__2.i * dl[i__2].r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- }
- ret_val->r = ctemp.r, ret_val->i = ctemp.i;
- return ;
-
-/* End of CLATM2 */
-
-} /* clatm2_ */
-
diff --git a/TESTING/MATGEN/clatm3.c b/TESTING/MATGEN/clatm3.c
deleted file mode 100644
index a582ad6..0000000
--- a/TESTING/MATGEN/clatm3.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Complex */ VOID clatm3_(complex * ret_val, integer *m, integer *n, integer
- *i, integer *j, integer *isub, integer *jsub, integer *kl, integer *
- ku, integer *idist, integer *iseed, complex *d, integer *igrade,
- complex *dl, complex *dr, integer *ipvtng, integer *iwork, real *
- sparse)
-{
- /* System generated locals */
- integer i__1, i__2;
- complex q__1, q__2, q__3;
-
- /* Builtin functions */
- void c_div(complex *, complex *, complex *), r_cnjg(complex *, complex *);
-
- /* Local variables */
- static complex ctemp;
- extern /* Complex */ VOID clarnd_(complex *, integer *, integer *);
- extern doublereal slaran_(integer *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
-
-
-
- Purpose
- =======
-
- CLATM3 returns the (ISUB,JSUB) entry of a random matrix of
- dimension (M, N) described by the other paramters. (ISUB,JSUB)
- is the final position of the (I,J) entry after pivoting
- according to IPVTNG and IWORK. CLATM3 is called by the
- CLATMR routine in order to build random test matrices. No error
- checking on parameters is done, because this routine is called in
-
- a tight loop by CLATMR which has already checked the parameters.
-
- Use of CLATM3 differs from CLATM2 in the order in which the random
-
- number generator is called to fill in random matrix entries.
- With CLATM2, the generator is called to fill in the pivoted matrix
-
- columnwise. With CLATM3, the generator is called to fill in the
- matrix columnwise, after which it is pivoted. Thus, CLATM3 can
- be used to construct random matrices which differ only in their
- order of rows and/or columns. CLATM2 is used to construct band
- matrices while avoiding calling the random number generator for
- entries outside the band (and therefore generating random numbers
-
- in different orders for different pivot orders).
-
- The matrix whose (ISUB,JSUB) entry is returned is constructed as
- follows (this routine only computes one entry):
-
- If ISUB is outside (1..M) or JSUB is outside (1..N), return zero
-
- (this is convenient for generating matrices in band format).
-
-
- Generate a matrix A with random entries of distribution IDIST.
-
- Set the diagonal to D.
-
- Grade the matrix, if desired, from the left (by DL) and/or
- from the right (by DR or DL) as specified by IGRADE.
-
- Permute, if desired, the rows and/or columns as specified by
- IPVTNG and IWORK.
-
- Band the matrix to have lower bandwidth KL and upper
- bandwidth KU.
-
- Set random entries to zero as specified by SPARSE.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of matrix. Not modified.
-
- N - INTEGER
- Number of columns of matrix. Not modified.
-
- I - INTEGER
- Row of unpivoted entry to be returned. Not modified.
-
- J - INTEGER
- Column of unpivoted entry to be returned. Not modified.
-
- ISUB - INTEGER
- Row of pivoted entry to be returned. Changed on exit.
-
- JSUB - INTEGER
- Column of pivoted entry to be returned. Changed on exit.
-
- KL - INTEGER
- Lower bandwidth. Not modified.
-
- KU - INTEGER
- Upper bandwidth. Not modified.
-
- IDIST - INTEGER
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => real and imaginary parts each UNIFORM( 0, 1 )
- 2 => real and imaginary parts each UNIFORM( -1, 1 )
- 3 => real and imaginary parts each NORMAL( 0, 1 )
- 4 => complex number uniform in DISK( 0 , 1 )
- Not modified.
-
- ISEED - INTEGER array of dimension ( 4 )
- Seed for random number generator.
- Changed on exit.
-
- D - COMPLEX array of dimension ( MIN( I , J ) )
- Diagonal entries of matrix. Not modified.
-
- IGRADE - INTEGER
- Specifies grading of matrix as follows:
- 0 => no grading
- 1 => matrix premultiplied by diag( DL )
- 2 => matrix postmultiplied by diag( DR )
- 3 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- 4 => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- 5 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( CONJG(DL) )
- 6 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- Not modified.
-
- DL - COMPLEX array ( I or J, as appropriate )
- Left scale factors for grading matrix. Not modified.
-
- DR - COMPLEX array ( I or J, as appropriate )
- Right scale factors for grading matrix. Not modified.
-
- IPVTNG - INTEGER
- On entry specifies pivoting permutations as follows:
- 0 => none.
- 1 => row pivoting.
- 2 => column pivoting.
- 3 => full pivoting, i.e., on both sides.
- Not modified.
-
- IWORK - INTEGER array ( I or J, as appropriate )
- This array specifies the permutation used. The
- row (or column) originally in position K is in
- position IWORK( K ) after pivoting.
- This differs from IWORK for CLATM2. Not modified.
-
- SPARSE - REAL between 0. and 1.
- On entry specifies the sparsity of the matrix
- if sparse matix is to be generated.
- SPARSE should lie between 0 and 1.
- A uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- =====================================================================
-
-
-
-
-
-
-
-
-
-
- -----------------------------------------------------------------------
-
-
-
-
- Check for I and J in range
-
- Parameter adjustments */
- --iwork;
- --dr;
- --dl;
- --d;
- --iseed;
-
- /* Function Body */
- if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
- *isub = *i;
- *jsub = *j;
- ret_val->r = 0.f, ret_val->i = 0.f;
- return ;
- }
-
-/* Compute subscripts depending on IPVTNG */
-
- if (*ipvtng == 0) {
- *isub = *i;
- *jsub = *j;
- } else if (*ipvtng == 1) {
- *isub = iwork[*i];
- *jsub = *j;
- } else if (*ipvtng == 2) {
- *isub = *i;
- *jsub = iwork[*j];
- } else if (*ipvtng == 3) {
- *isub = iwork[*i];
- *jsub = iwork[*j];
- }
-
-/* Check for banding */
-
- if (*jsub > *isub + *ku || *jsub < *isub - *kl) {
- ret_val->r = 0.f, ret_val->i = 0.f;
- return ;
- }
-
-/* Check for sparsity */
-
- if (*sparse > 0.f) {
- if (slaran_(&iseed[1]) < *sparse) {
- ret_val->r = 0.f, ret_val->i = 0.f;
- return ;
- }
- }
-
-/* Compute entry and grade it according to IGRADE */
-
- if (*i == *j) {
- i__1 = *i;
- ctemp.r = d[i__1].r, ctemp.i = d[i__1].i;
- } else {
- clarnd_(&q__1, idist, &iseed[1]);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- }
- if (*igrade == 1) {
- i__1 = *i;
- q__1.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__1.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 2) {
- i__1 = *j;
- q__1.r = ctemp.r * dr[i__1].r - ctemp.i * dr[i__1].i, q__1.i =
- ctemp.r * dr[i__1].i + ctemp.i * dr[i__1].r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 3) {
- i__1 = *i;
- q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- i__2 = *j;
- q__1.r = q__2.r * dr[i__2].r - q__2.i * dr[i__2].i, q__1.i = q__2.r *
- dr[i__2].i + q__2.i * dr[i__2].r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 4 && *i != *j) {
- i__1 = *i;
- q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- c_div(&q__1, &q__2, &dl[*j]);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 5) {
- i__1 = *i;
- q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- r_cnjg(&q__3, &dl[*j]);
- q__1.r = q__2.r * q__3.r - q__2.i * q__3.i, q__1.i = q__2.r * q__3.i
- + q__2.i * q__3.r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- } else if (*igrade == 6) {
- i__1 = *i;
- q__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, q__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- i__2 = *j;
- q__1.r = q__2.r * dl[i__2].r - q__2.i * dl[i__2].i, q__1.i = q__2.r *
- dl[i__2].i + q__2.i * dl[i__2].r;
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- }
- ret_val->r = ctemp.r, ret_val->i = ctemp.i;
- return ;
-
-/* End of CLATM3 */
-
-} /* clatm3_ */
-
diff --git a/TESTING/MATGEN/clatme.c b/TESTING/MATGEN/clatme.c
deleted file mode 100644
index 7f4363b..0000000
--- a/TESTING/MATGEN/clatme.c
+++ /dev/null
@@ -1,623 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static complex c_b1 = {0.f,0.f};
-static complex c_b2 = {1.f,0.f};
-static integer c__1 = 1;
-static integer c__0 = 0;
-static integer c__5 = 5;
-
-/* Subroutine */ int clatme_(integer *n, char *dist, integer *iseed, complex *
- d, integer *mode, real *cond, complex *dmax__, char *ei, char *rsign,
- char *upper, char *sim, real *ds, integer *modes, real *conds,
- integer *kl, integer *ku, real *anorm, complex *a, integer *lda,
- complex *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
- real r__1, r__2;
- complex q__1, q__2;
-
- /* Builtin functions */
- double c_abs(complex *);
- void r_cnjg(complex *, complex *);
-
- /* Local variables */
- static logical bads;
- static integer isim;
- static real temp;
- static integer i, j;
- extern /* Subroutine */ int cgerc_(integer *, integer *, complex *,
- complex *, integer *, complex *, integer *, complex *, integer *);
- static complex alpha;
- extern /* Subroutine */ int cscal_(integer *, complex *, complex *,
- integer *);
- extern logical lsame_(char *, char *);
- extern /* Subroutine */ int cgemv_(char *, integer *, integer *, complex *
- , complex *, integer *, complex *, integer *, complex *, complex *
- , integer *);
- static integer iinfo;
- static real tempa[1];
- static integer icols, idist;
- extern /* Subroutine */ int ccopy_(integer *, complex *, integer *,
- complex *, integer *);
- static integer irows;
- extern /* Subroutine */ int clatm1_(integer *, real *, integer *, integer
- *, integer *, complex *, integer *, integer *), slatm1_(integer *,
- real *, integer *, integer *, integer *, real *, integer *,
- integer *);
- static integer ic, jc;
- extern doublereal clange_(char *, integer *, integer *, complex *,
- integer *, real *);
- static integer ir;
- extern /* Subroutine */ int clarge_(integer *, complex *, integer *,
- integer *, complex *, integer *), clarfg_(integer *, complex *,
- complex *, integer *, complex *), clacgv_(integer *, complex *,
- integer *);
- extern /* Complex */ VOID clarnd_(complex *, integer *, integer *);
- static real ralpha;
- extern /* Subroutine */ int csscal_(integer *, real *, complex *, integer
- *), claset_(char *, integer *, integer *, complex *, complex *,
- complex *, integer *), xerbla_(char *, integer *),
- clarnv_(integer *, integer *, integer *, complex *);
- static integer irsign, iupper;
- static complex xnorms;
- static integer jcr;
- static complex tau;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- CLATME generates random non-symmetric square matrices with
- specified eigenvalues for testing LAPACK programs.
-
- CLATME operates by applying the following sequence of
- operations:
-
- 1. Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX, and RSIGN
- as described below.
-
- 2. If UPPER='T', the upper triangle of A is set to random values
- out of distribution DIST.
-
- 3. If SIM='T', A is multiplied on the left by a random matrix
- X, whose singular values are specified by DS, MODES, and
- CONDS, and on the right by X inverse.
-
- 4. If KL < N-1, the lower bandwidth is reduced to KL using
- Householder transformations. If KU < N-1, the upper
- bandwidth is reduced to KU.
-
- 5. If ANORM is not negative, the matrix is scaled to have
- maximum-element-norm ANORM.
-
- (Note: since the matrix cannot be reduced beyond Hessenberg form,
-
- no packing options are available.)
-
- Arguments
- =========
-
- N - INTEGER
- The number of columns (or rows) of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate the random eigen-/singular values, and on the
- upper triangle (see UPPER).
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- 'D' => uniform on the complex disc |z| < 1.
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to CLATME
- to continue the same random number sequence.
- Changed on exit.
-
- D - COMPLEX array, dimension ( N )
- This array is used to specify the eigenvalues of A. If
- MODE=0, then D is assumed to contain the eigenvalues
- otherwise they will be computed according to MODE, COND,
- DMAX, and RSIGN and placed in D.
- Modified if MODE is nonzero.
-
- MODE - INTEGER
- On entry this describes how the eigenvalues are to
- be specified:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is between 1 and 4, D has entries ranging
- from 1 to 1/COND, if between -1 and -4, D has entries
- ranging from 1/COND to 1,
- Not modified.
-
- COND - REAL
- On entry, this is used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - COMPLEX
- If MODE is neither -6, 0 nor 6, the contents of D, as
- computed according to MODE and COND, will be scaled by
- DMAX / max(abs(D(i))). Note that DMAX need not be
- positive or real: if DMAX is negative or complex (or zero),
-
- D will be scaled by a negative or complex number (or zero).
-
- If RSIGN='F' then the largest (absolute) eigenvalue will be
-
- equal to DMAX.
- Not modified.
-
- EI - CHARACTER*1 (ignored)
- Not modified.
-
- RSIGN - CHARACTER*1
- If MODE is not 0, 6, or -6, and RSIGN='T', then the
- elements of D, as computed according to MODE and COND, will
-
- be multiplied by a random complex number from the unit
- circle |z| = 1. If RSIGN='F', they will not be. RSIGN may
-
- only have the values 'T' or 'F'.
- Not modified.
-
- UPPER - CHARACTER*1
- If UPPER='T', then the elements of A above the diagonal
- will be set to random numbers out of DIST. If UPPER='F',
- they will not. UPPER may only have the values 'T' or 'F'.
- Not modified.
-
- SIM - CHARACTER*1
- If SIM='T', then A will be operated on by a "similarity
- transform", i.e., multiplied on the left by a matrix X and
- on the right by X inverse. X = U S V, where U and V are
- random unitary matrices and S is a (diagonal) matrix of
- singular values specified by DS, MODES, and CONDS. If
- SIM='F', then A will not be transformed.
- Not modified.
-
- DS - REAL array, dimension ( N )
- This array is used to specify the singular values of X,
- in the same way that D specifies the eigenvalues of A.
- If MODE=0, the DS contains the singular values, which
- may not be zero.
- Modified if MODE is nonzero.
-
- MODES - INTEGER
- CONDS - REAL
- Similar to MODE and COND, but for specifying the diagonal
- of S. MODES=-6 and +6 are not allowed (since they would
- result in randomly ill-conditioned eigenvalues.)
-
- KL - INTEGER
- This specifies the lower bandwidth of the matrix. KL=1
- specifies upper Hessenberg form. If KL is at least N-1,
- then A will have full lower bandwidth.
- Not modified.
-
- KU - INTEGER
- This specifies the upper bandwidth of the matrix. KU=1
- specifies lower Hessenberg form. If KU is at least N-1,
- then A will have full upper bandwidth; if KU and KL
- are both at least N-1, then A will be dense. Only one of
- KU and KL may be less than N-1.
- Not modified.
-
- ANORM - REAL
- If ANORM is not negative, then A will be scaled by a non-
- negative real number to make the maximum-element-norm of A
- to be ANORM.
- Not modified.
-
- A - COMPLEX array, dimension ( LDA, N )
- On exit A is the desired test matrix.
- Modified.
-
- LDA - INTEGER
- LDA specifies the first dimension of A as declared in the
- calling program. LDA must be at least M.
- Not modified.
-
- WORK - COMPLEX array, dimension ( 3*N )
- Workspace.
- Modified.
-
- INFO - INTEGER
- Error code. On exit, INFO will be set to one of the
- following values:
- 0 => normal return
- -1 => N negative
- -2 => DIST illegal string
- -5 => MODE not in range -6 to 6
- -6 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -9 => RSIGN is not 'T' or 'F'
- -10 => UPPER is not 'T' or 'F'
- -11 => SIM is not 'T' or 'F'
- -12 => MODES=0 and DS has a zero singular value.
- -13 => MODES is not in the range -5 to 5.
- -14 => MODES is nonzero and CONDS is less than 1.
- -15 => KL is less than 1.
- -16 => KU is less than 1, or KL and KU are both less than
- N-1.
- -19 => LDA is less than M.
- 1 => Error return from CLATM1 (computing D)
- 2 => Cannot scale to DMAX (max. eigenvalue is 0)
- 3 => Error return from SLATM1 (computing DS)
- 4 => Error return from CLARGE
- 5 => Zero singular value from SLATM1.
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- --ds;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --work;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else if (lsame_(dist, "D")) {
- idist = 4;
- } else {
- idist = -1;
- }
-
-/* Decode RSIGN */
-
- if (lsame_(rsign, "T")) {
- irsign = 1;
- } else if (lsame_(rsign, "F")) {
- irsign = 0;
- } else {
- irsign = -1;
- }
-
-/* Decode UPPER */
-
- if (lsame_(upper, "T")) {
- iupper = 1;
- } else if (lsame_(upper, "F")) {
- iupper = 0;
- } else {
- iupper = -1;
- }
-
-/* Decode SIM */
-
- if (lsame_(sim, "T")) {
- isim = 1;
- } else if (lsame_(sim, "F")) {
- isim = 0;
- } else {
- isim = -1;
- }
-
-/* Check DS, if MODES=0 and ISIM=1 */
-
- bads = FALSE_;
- if (*modes == 0 && isim == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- if (ds[j] == 0.f) {
- bads = TRUE_;
- }
-/* L10: */
- }
- }
-
-/* Set INFO if an error */
-
- if (*n < 0) {
- *info = -1;
- } else if (idist == -1) {
- *info = -2;
- } else if (abs(*mode) > 6) {
- *info = -5;
- } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.f) {
- *info = -6;
- } else if (irsign == -1) {
- *info = -9;
- } else if (iupper == -1) {
- *info = -10;
- } else if (isim == -1) {
- *info = -11;
- } else if (bads) {
- *info = -12;
- } else if (isim == 1 && abs(*modes) > 5) {
- *info = -13;
- } else if (isim == 1 && *modes != 0 && *conds < 1.f) {
- *info = -14;
- } else if (*kl < 1) {
- *info = -15;
- } else if (*ku < 1 || *ku < *n - 1 && *kl < *n - 1) {
- *info = -16;
- } else if (*lda < max(1,*n)) {
- *info = -19;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("CLATME", &i__1);
- return 0;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L20: */
- }
-
- if (iseed[4] % 2 != 1) {
- ++iseed[4];
- }
-
-/* 2) Set up diagonal of A
-
- Compute D according to COND and MODE */
-
- clatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], n, &iinfo);
- if (iinfo != 0) {
- *info = 1;
- return 0;
- }
- if (*mode != 0 && abs(*mode) != 6) {
-
-/* Scale by DMAX */
-
- temp = c_abs(&d[1]);
- i__1 = *n;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- r__1 = temp, r__2 = c_abs(&d[i]);
- temp = dmax(r__1,r__2);
-/* L30: */
- }
-
- if (temp > 0.f) {
- q__1.r = dmax__->r / temp, q__1.i = dmax__->i / temp;
- alpha.r = q__1.r, alpha.i = q__1.i;
- } else {
- *info = 2;
- return 0;
- }
-
- cscal_(n, &alpha, &d[1], &c__1);
-
- }
-
- claset_("Full", n, n, &c_b1, &c_b1, &a[a_offset], lda);
- i__1 = *lda + 1;
- ccopy_(n, &d[1], &c__1, &a[a_offset], &i__1);
-
-/* 3) If UPPER='T', set upper triangle of A to random numbers. */
-
- if (iupper != 0) {
- i__1 = *n;
- for (jc = 2; jc <= i__1; ++jc) {
- i__2 = jc - 1;
- clarnv_(&idist, &iseed[1], &i__2, &a[jc * a_dim1 + 1]);
-/* L40: */
- }
- }
-
-/* 4) If SIM='T', apply similarity transformation.
-
- -1
- Transform is X A X , where X = U S V, thus
-
- it is U S V A V' (1/S) U' */
-
- if (isim != 0) {
-
-/* Compute S (singular values of the eigenvector matrix)
- according to CONDS and MODES */
-
- slatm1_(modes, conds, &c__0, &c__0, &iseed[1], &ds[1], n, &iinfo);
- if (iinfo != 0) {
- *info = 3;
- return 0;
- }
-
-/* Multiply by V and V' */
-
- clarge_(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
- if (iinfo != 0) {
- *info = 4;
- return 0;
- }
-
-/* Multiply by S and (1/S) */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- csscal_(n, &ds[j], &a[j + a_dim1], lda);
- if (ds[j] != 0.f) {
- r__1 = 1.f / ds[j];
- csscal_(n, &r__1, &a[j * a_dim1 + 1], &c__1);
- } else {
- *info = 5;
- return 0;
- }
-/* L50: */
- }
-
-/* Multiply by U and U' */
-
- clarge_(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
- if (iinfo != 0) {
- *info = 4;
- return 0;
- }
- }
-
-/* 5) Reduce the bandwidth. */
-
- if (*kl < *n - 1) {
-
-/* Reduce bandwidth -- kill column */
-
- i__1 = *n - 1;
- for (jcr = *kl + 1; jcr <= i__1; ++jcr) {
- ic = jcr - *kl;
- irows = *n + 1 - jcr;
- icols = *n + *kl - jcr;
-
- ccopy_(&irows, &a[jcr + ic * a_dim1], &c__1, &work[1], &c__1);
- xnorms.r = work[1].r, xnorms.i = work[1].i;
- clarfg_(&irows, &xnorms, &work[2], &c__1, &tau);
- r_cnjg(&q__1, &tau);
- tau.r = q__1.r, tau.i = q__1.i;
- work[1].r = 1.f, work[1].i = 0.f;
- clarnd_(&q__1, &c__5, &iseed[1]);
- alpha.r = q__1.r, alpha.i = q__1.i;
-
- cgemv_("C", &irows, &icols, &c_b2, &a[jcr + (ic + 1) * a_dim1],
- lda, &work[1], &c__1, &c_b1, &work[irows + 1], &c__1);
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&irows, &icols, &q__1, &work[1], &c__1, &work[irows + 1], &
- c__1, &a[jcr + (ic + 1) * a_dim1], lda);
-
- cgemv_("N", n, &irows, &c_b2, &a[jcr * a_dim1 + 1], lda, &work[1],
- &c__1, &c_b1, &work[irows + 1], &c__1);
- r_cnjg(&q__2, &tau);
- q__1.r = -(doublereal)q__2.r, q__1.i = -(doublereal)q__2.i;
- cgerc_(n, &irows, &q__1, &work[irows + 1], &c__1, &work[1], &c__1,
- &a[jcr * a_dim1 + 1], lda);
-
- i__2 = jcr + ic * a_dim1;
- a[i__2].r = xnorms.r, a[i__2].i = xnorms.i;
- i__2 = irows - 1;
- claset_("Full", &i__2, &c__1, &c_b1, &c_b1, &a[jcr + 1 + ic *
- a_dim1], lda);
-
- i__2 = icols + 1;
- cscal_(&i__2, &alpha, &a[jcr + ic * a_dim1], lda);
- r_cnjg(&q__1, &alpha);
- cscal_(n, &q__1, &a[jcr * a_dim1 + 1], &c__1);
-/* L60: */
- }
- } else if (*ku < *n - 1) {
-
-/* Reduce upper bandwidth -- kill a row at a time. */
-
- i__1 = *n - 1;
- for (jcr = *ku + 1; jcr <= i__1; ++jcr) {
- ir = jcr - *ku;
- irows = *n + *ku - jcr;
- icols = *n + 1 - jcr;
-
- ccopy_(&icols, &a[ir + jcr * a_dim1], lda, &work[1], &c__1);
- xnorms.r = work[1].r, xnorms.i = work[1].i;
- clarfg_(&icols, &xnorms, &work[2], &c__1, &tau);
- r_cnjg(&q__1, &tau);
- tau.r = q__1.r, tau.i = q__1.i;
- work[1].r = 1.f, work[1].i = 0.f;
- i__2 = icols - 1;
- clacgv_(&i__2, &work[2], &c__1);
- clarnd_(&q__1, &c__5, &iseed[1]);
- alpha.r = q__1.r, alpha.i = q__1.i;
-
- cgemv_("N", &irows, &icols, &c_b2, &a[ir + 1 + jcr * a_dim1], lda,
- &work[1], &c__1, &c_b1, &work[icols + 1], &c__1);
- q__1.r = -(doublereal)tau.r, q__1.i = -(doublereal)tau.i;
- cgerc_(&irows, &icols, &q__1, &work[icols + 1], &c__1, &work[1], &
- c__1, &a[ir + 1 + jcr * a_dim1], lda);
-
- cgemv_("C", &icols, n, &c_b2, &a[jcr + a_dim1], lda, &work[1], &
- c__1, &c_b1, &work[icols + 1], &c__1);
- r_cnjg(&q__2, &tau);
- q__1.r = -(doublereal)q__2.r, q__1.i = -(doublereal)q__2.i;
- cgerc_(&icols, n, &q__1, &work[1], &c__1, &work[icols + 1], &c__1,
- &a[jcr + a_dim1], lda);
-
- i__2 = ir + jcr * a_dim1;
- a[i__2].r = xnorms.r, a[i__2].i = xnorms.i;
- i__2 = icols - 1;
- claset_("Full", &c__1, &i__2, &c_b1, &c_b1, &a[ir + (jcr + 1) *
- a_dim1], lda);
-
- i__2 = irows + 1;
- cscal_(&i__2, &alpha, &a[ir + jcr * a_dim1], &c__1);
- r_cnjg(&q__1, &alpha);
- cscal_(n, &q__1, &a[jcr + a_dim1], lda);
-/* L70: */
- }
- }
-
-/* Scale the matrix to have norm ANORM */
-
- if (*anorm >= 0.f) {
- temp = clange_("M", n, n, &a[a_offset], lda, tempa);
- if (temp > 0.f) {
- ralpha = *anorm / temp;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- csscal_(n, &ralpha, &a[j * a_dim1 + 1], &c__1);
-/* L80: */
- }
- }
- }
-
- return 0;
-
-/* End of CLATME */
-
-} /* clatme_ */
-
diff --git a/TESTING/MATGEN/clatmr.c b/TESTING/MATGEN/clatmr.c
deleted file mode 100644
index c16c48e..0000000
--- a/TESTING/MATGEN/clatmr.c
+++ /dev/null
@@ -1,1507 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__0 = 0;
-static integer c__1 = 1;
-
-/* Subroutine */ int clatmr_(integer *m, integer *n, char *dist, integer *
- iseed, char *sym, complex *d, integer *mode, real *cond, complex *
- dmax__, char *rsign, char *grade, complex *dl, integer *model, real *
- condl, complex *dr, integer *moder, real *condr, char *pivtng,
- integer *ipivot, integer *kl, integer *ku, real *sparse, real *anorm,
- char *pack, complex *a, integer *lda, integer *iwork, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4;
- real r__1, r__2;
- doublereal d__1;
- complex q__1, q__2;
-
- /* Builtin functions */
- double c_abs(complex *);
- void r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer isub, jsub;
- static real temp;
- static integer isym, i, j, k, ipack;
- extern logical lsame_(char *, char *);
- static real tempa[1];
- static complex ctemp;
- static integer iisub, idist, jjsub, mnmin;
- static logical dzero;
- static integer mnsub;
- static real onorm;
- static integer mxsub, npvts;
- extern /* Subroutine */ int clatm1_(integer *, real *, integer *, integer
- *, integer *, complex *, integer *, integer *);
- extern /* Complex */ VOID clatm2_(complex *, integer *, integer *,
- integer *, integer *, integer *, integer *, integer *, integer *,
- complex *, integer *, complex *, complex *, integer *, integer *,
- real *), clatm3_(complex *, integer *, integer *, integer *,
- integer *, integer *, integer *, integer *, integer *, integer *,
- integer *, complex *, integer *, complex *, complex *, integer *,
- integer *, real *);
- static complex calpha;
- extern doublereal clangb_(char *, integer *, integer *, integer *,
- complex *, integer *, real *), clange_(char *, integer *,
- integer *, complex *, integer *, real *);
- static integer igrade;
- extern doublereal clansb_(char *, char *, integer *, integer *, complex *,
- integer *, real *);
- extern /* Subroutine */ int csscal_(integer *, real *, complex *, integer
- *);
- static logical fulbnd;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical badpvt;
- extern doublereal clansp_(char *, char *, integer *, complex *, real *), clansy_(char *, char *, integer *, complex *,
- integer *, real *);
- static integer irsign, ipvtng, kll, kuu;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- CLATMR generates random matrices of various types for testing
- LAPACK programs.
-
- CLATMR operates by applying the following sequence of
- operations:
-
- Generate a matrix A with random entries of distribution DIST
- which is symmetric if SYM='S', Hermitian if SYM='H', and
- nonsymmetric if SYM='N'.
-
- Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX and RSIGN
- as described below.
-
- Grade the matrix, if desired, from the left and/or right
- as specified by GRADE. The inputs DL, MODEL, CONDL, DR,
- MODER and CONDR also determine the grading as described
- below.
-
- Permute, if desired, the rows and/or columns as specified by
- PIVTNG and IPIVOT.
-
- Set random entries to zero, if desired, to get a random sparse
- matrix as specified by SPARSE.
-
- Make A a band matrix, if desired, by zeroing out the matrix
- outside a band of lower bandwidth KL and upper bandwidth KU.
-
-
- Scale A, if desired, to have maximum entry ANORM.
-
- Pack the matrix if desired. Options specified by PACK are:
- no packing
- zero out upper half (if symmetric or Hermitian)
- zero out lower half (if symmetric or Hermitian)
- store the upper half columnwise (if symmetric or Hermitian
- or square upper triangular)
- store the lower half columnwise (if symmetric or Hermitian
- or square lower triangular)
- same as upper half rowwise if symmetric
- same as conjugate upper half rowwise if Hermitian
- store the lower triangle in banded format
- (if symmetric or Hermitian)
- store the upper triangle in banded format
- (if symmetric or Hermitian)
- store the entire matrix in banded format
-
- Note: If two calls to CLATMR differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
-
- If two calls to CLATMR both have full bandwidth (KL = M-1
- and KU = N-1), and differ only in the PIVTNG and PACK
- parameters, then the matrices generated will differ only
- in the order of the rows and/or columns, and otherwise
- contain the same data. This consistency cannot be and
- is not maintained with less than full bandwidth.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of A. Not modified.
-
- N - INTEGER
- Number of columns of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate a random matrix .
- 'U' => real and imaginary parts are independent
- UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => real and imaginary parts are independent
- UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => real and imaginary parts are independent
- NORMAL( 0, 1 ) ( 'N' for normal )
- 'D' => uniform on interior of unit disk ( 'D' for disk )
- Not modified.
-
- ISEED - INTEGER array, dimension (4)
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to CLATMR
- to continue the same random number sequence.
- Changed on exit.
-
- SYM - CHARACTER*1
- If SYM='S', generated matrix is symmetric.
- If SYM='H', generated matrix is Hermitian.
- If SYM='N', generated matrix is nonsymmetric.
- Not modified.
-
- D - COMPLEX array, dimension (min(M,N))
- On entry this array specifies the diagonal entries
- of the diagonal of A. D may either be specified
- on entry, or set according to MODE and COND as described
- below. If the matrix is Hermitian, the real part of D
- will be taken. May be changed on exit if MODE is nonzero.
-
- MODE - INTEGER
- On entry describes how D is to be used:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- Not modified.
-
- COND - REAL
- On entry, used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - COMPLEX
- If MODE neither -6, 0 nor 6, the diagonal is scaled by
- DMAX / max(abs(D(i))), so that maximum absolute entry
- of diagonal is abs(DMAX). If DMAX is complex (or zero),
- diagonal will be scaled by a complex number (or zero).
-
- RSIGN - CHARACTER*1
- If MODE neither -6, 0 nor 6, specifies sign of diagonal
- as follows:
- 'T' => diagonal entries are multiplied by a random complex
- number uniformly distributed with absolute value 1
- 'F' => diagonal unchanged
- Not modified.
-
- GRADE - CHARACTER*1
- Specifies grading of matrix as follows:
- 'N' => no grading
- 'L' => matrix premultiplied by diag( DL )
- (only if matrix nonsymmetric)
- 'R' => matrix postmultiplied by diag( DR )
- (only if matrix nonsymmetric)
- 'B' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- (only if matrix nonsymmetric)
- 'H' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( CONJG(DL) )
- (only if matrix Hermitian or nonsymmetric)
- 'S' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- (only if matrix symmetric or nonsymmetric)
- 'E' => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- ( 'S' for similarity )
- (only if matrix nonsymmetric)
- Note: if GRADE='S', then M must equal N.
- Not modified.
-
- DL - COMPLEX array, dimension (M)
- If MODEL=0, then on entry this array specifies the diagonal
-
- entries of a diagonal matrix used as described under GRADE
- above. If MODEL is not zero, then DL will be set according
- to MODEL and CONDL, analogous to the way D is set according
-
- to MODE and COND (except there is no DMAX parameter for DL).
-
- If GRADE='E', then DL cannot have zero entries.
- Not referenced if GRADE = 'N' or 'R'. Changed on exit.
-
- MODEL - INTEGER
- This specifies how the diagonal array DL is to be computed,
-
- just as MODE specifies how D is to be computed.
- Not modified.
-
- CONDL - REAL
- When MODEL is not zero, this specifies the condition number
-
- of the computed DL. Not modified.
-
- DR - COMPLEX array, dimension (N)
- If MODER=0, then on entry this array specifies the diagonal
-
- entries of a diagonal matrix used as described under GRADE
- above. If MODER is not zero, then DR will be set according
- to MODER and CONDR, analogous to the way D is set according
-
- to MODE and COND (except there is no DMAX parameter for DR).
-
- Not referenced if GRADE = 'N', 'L', 'H' or 'S'.
- Changed on exit.
-
- MODER - INTEGER
- This specifies how the diagonal array DR is to be computed,
-
- just as MODE specifies how D is to be computed.
- Not modified.
-
- CONDR - REAL
- When MODER is not zero, this specifies the condition number
-
- of the computed DR. Not modified.
-
- PIVTNG - CHARACTER*1
- On entry specifies pivoting permutations as follows:
- 'N' or ' ' => none.
- 'L' => left or row pivoting (matrix must be nonsymmetric).
- 'R' => right or column pivoting (matrix must be
- nonsymmetric).
- 'B' or 'F' => both or full pivoting, i.e., on both sides.
- In this case, M must equal N
-
- If two calls to CLATMR both have full bandwidth (KL = M-1
- and KU = N-1), and differ only in the PIVTNG and PACK
- parameters, then the matrices generated will differ only
- in the order of the rows and/or columns, and otherwise
- contain the same data. This consistency cannot be
- maintained with less than full bandwidth.
-
- IPIVOT - INTEGER array, dimension (N or M)
- This array specifies the permutation used. After the
- basic matrix is generated, the rows, columns, or both
- are permuted. If, say, row pivoting is selected, CLATMR
- starts with the *last* row and interchanges the M-th and
- IPIVOT(M)-th rows, then moves to the next-to-last row,
- interchanging the (M-1)-th and the IPIVOT(M-1)-th rows,
- and so on. In terms of "2-cycles", the permutation is
- (1 IPIVOT(1)) (2 IPIVOT(2)) ... (M IPIVOT(M))
- where the rightmost cycle is applied first. This is the
- *inverse* of the effect of pivoting in LINPACK. The idea
- is that factoring (with pivoting) an identity matrix
- which has been inverse-pivoted in this way should
- result in a pivot vector identical to IPIVOT.
- Not referenced if PIVTNG = 'N'. Not modified.
-
- SPARSE - REAL
- On entry specifies the sparsity of the matrix if a sparse
- matrix is to be generated. SPARSE should lie between
- 0 and 1. To generate a sparse matrix, for each matrix entry
-
- a uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- KL - INTEGER
- On entry specifies the lower bandwidth of the matrix. For
- example, KL=0 implies upper triangular, KL=1 implies upper
- Hessenberg, and KL at least M-1 implies the matrix is not
- banded. Must equal KU if matrix is symmetric or Hermitian.
- Not modified.
-
- KU - INTEGER
- On entry specifies the upper bandwidth of the matrix. For
- example, KU=0 implies lower triangular, KU=1 implies lower
- Hessenberg, and KU at least N-1 implies the matrix is not
- banded. Must equal KL if matrix is symmetric or Hermitian.
- Not modified.
-
- ANORM - REAL
- On entry specifies maximum entry of output matrix
- (output matrix will by multiplied by a constant so that
- its largest absolute entry equal ANORM)
- if ANORM is nonnegative. If ANORM is negative no scaling
- is done. Not modified.
-
- PACK - CHARACTER*1
- On entry specifies packing of matrix as follows:
- 'N' => no packing
- 'U' => zero out all subdiagonal entries
- (if symmetric or Hermitian)
- 'L' => zero out all superdiagonal entries
- (if symmetric or Hermitian)
- 'C' => store the upper triangle columnwise
- (only if matrix symmetric or Hermitian or
- square upper triangular)
- 'R' => store the lower triangle columnwise
- (only if matrix symmetric or Hermitian or
- square lower triangular)
- (same as upper half rowwise if symmetric)
- (same as conjugate upper half rowwise if Hermitian)
- 'B' => store the lower triangle in band storage scheme
- (only if matrix symmetric or Hermitian)
- 'Q' => store the upper triangle in band storage scheme
- (only if matrix symmetric or Hermitian)
- 'Z' => store the entire matrix in band storage scheme
- (pivoting can be provided for by using this
- option to store A in the trailing rows of
- the allocated storage)
-
- Using these options, the various LAPACK packed and banded
- storage schemes can be obtained:
- GB - use 'Z'
- PB, HB or TB - use 'B' or 'Q'
- PP, HP or TP - use 'C' or 'R'
-
- If two calls to CLATMR differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
- Not modified.
-
- A - COMPLEX array, dimension (LDA,N)
- On exit A is the desired test matrix. Only those
- entries of A which are significant on output
- will be referenced (even if A is in packed or band
- storage format). The 'unoccupied corners' of A in
- band format will be zeroed out.
-
- LDA - INTEGER
- on entry LDA specifies the first dimension of A as
- declared in the calling program.
- If PACK='N', 'U' or 'L', LDA must be at least max ( 1, M ).
-
- If PACK='C' or 'R', LDA must be at least 1.
- If PACK='B', or 'Q', LDA must be MIN ( KU+1, N )
- If PACK='Z', LDA must be at least KUU+KLL+1, where
- KUU = MIN ( KU, N-1 ) and KLL = MIN ( KL, N-1 )
- Not modified.
-
- IWORK - INTEGER array, dimension (N or M)
- Workspace. Not referenced if PIVTNG = 'N'. Changed on exit.
-
-
- INFO - INTEGER
- Error parameter on exit:
- 0 => normal return
- -1 => M negative or unequal to N and SYM='S' or 'H'
- -2 => N negative
- -3 => DIST illegal string
- -5 => SYM illegal string
- -7 => MODE not in range -6 to 6
- -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -10 => MODE neither -6, 0 nor 6 and RSIGN illegal string
- -11 => GRADE illegal string, or GRADE='E' and
- M not equal to N, or GRADE='L', 'R', 'B', 'S' or 'E'
-
- and SYM = 'H', or GRADE='L', 'R', 'B', 'H' or 'E'
- and SYM = 'S'
- -12 => GRADE = 'E' and DL contains zero
- -13 => MODEL not in range -6 to 6 and GRADE= 'L', 'B', 'H',
-
- 'S' or 'E'
- -14 => CONDL less than 1.0, GRADE='L', 'B', 'H', 'S' or 'E',
-
- and MODEL neither -6, 0 nor 6
- -16 => MODER not in range -6 to 6 and GRADE= 'R' or 'B'
- -17 => CONDR less than 1.0, GRADE='R' or 'B', and
- MODER neither -6, 0 nor 6
- -18 => PIVTNG illegal string, or PIVTNG='B' or 'F' and
- M not equal to N, or PIVTNG='L' or 'R' and SYM='S'
- or 'H'
- -19 => IPIVOT contains out of range number and
- PIVTNG not equal to 'N'
- -20 => KL negative
- -21 => KU negative, or SYM='S' or 'H' and KU not equal to KL
-
- -22 => SPARSE not in range 0. to 1.
- -24 => PACK illegal string, or PACK='U', 'L', 'B' or 'Q'
- and SYM='N', or PACK='C' and SYM='N' and either KL
- not equal to 0 or N not equal to M, or PACK='R' and
- SYM='N', and either KU not equal to 0 or N not equal
-
- to M
- -26 => LDA too small
- 1 => Error return from CLATM1 (computing D)
- 2 => Cannot scale diagonal to DMAX (max. entry is 0)
- 3 => Error return from CLATM1 (computing DL)
- 4 => Error return from CLATM1 (computing DR)
- 5 => ANORM is positive, but matrix constructed prior to
- attempting to scale it to have norm ANORM, is zero
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- --dl;
- --dr;
- --ipivot;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iwork;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*m == 0 || *n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else if (lsame_(dist, "D")) {
- idist = 4;
- } else {
- idist = -1;
- }
-
-/* Decode SYM */
-
- if (lsame_(sym, "H")) {
- isym = 0;
- } else if (lsame_(sym, "N")) {
- isym = 1;
- } else if (lsame_(sym, "S")) {
- isym = 2;
- } else {
- isym = -1;
- }
-
-/* Decode RSIGN */
-
- if (lsame_(rsign, "F")) {
- irsign = 0;
- } else if (lsame_(rsign, "T")) {
- irsign = 1;
- } else {
- irsign = -1;
- }
-
-/* Decode PIVTNG */
-
- if (lsame_(pivtng, "N")) {
- ipvtng = 0;
- } else if (lsame_(pivtng, " ")) {
- ipvtng = 0;
- } else if (lsame_(pivtng, "L")) {
- ipvtng = 1;
- npvts = *m;
- } else if (lsame_(pivtng, "R")) {
- ipvtng = 2;
- npvts = *n;
- } else if (lsame_(pivtng, "B")) {
- ipvtng = 3;
- npvts = min(*n,*m);
- } else if (lsame_(pivtng, "F")) {
- ipvtng = 3;
- npvts = min(*n,*m);
- } else {
- ipvtng = -1;
- }
-
-/* Decode GRADE */
-
- if (lsame_(grade, "N")) {
- igrade = 0;
- } else if (lsame_(grade, "L")) {
- igrade = 1;
- } else if (lsame_(grade, "R")) {
- igrade = 2;
- } else if (lsame_(grade, "B")) {
- igrade = 3;
- } else if (lsame_(grade, "E")) {
- igrade = 4;
- } else if (lsame_(grade, "H")) {
- igrade = 5;
- } else if (lsame_(grade, "S")) {
- igrade = 6;
- } else {
- igrade = -1;
- }
-
-/* Decode PACK */
-
- if (lsame_(pack, "N")) {
- ipack = 0;
- } else if (lsame_(pack, "U")) {
- ipack = 1;
- } else if (lsame_(pack, "L")) {
- ipack = 2;
- } else if (lsame_(pack, "C")) {
- ipack = 3;
- } else if (lsame_(pack, "R")) {
- ipack = 4;
- } else if (lsame_(pack, "B")) {
- ipack = 5;
- } else if (lsame_(pack, "Q")) {
- ipack = 6;
- } else if (lsame_(pack, "Z")) {
- ipack = 7;
- } else {
- ipack = -1;
- }
-
-/* Set certain internal parameters */
-
- mnmin = min(*m,*n);
-/* Computing MIN */
- i__1 = *kl, i__2 = *m - 1;
- kll = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *ku, i__2 = *n - 1;
- kuu = min(i__1,i__2);
-
-/* If inv(DL) is used, check to see if DL has a zero entry. */
-
- dzero = FALSE_;
- if (igrade == 4 && *model == 0) {
- i__1 = *m;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i;
- if (dl[i__2].r == 0.f && dl[i__2].i == 0.f) {
- dzero = TRUE_;
- }
-/* L10: */
- }
- }
-
-/* Check values in IPIVOT */
-
- badpvt = FALSE_;
- if (ipvtng > 0) {
- i__1 = npvts;
- for (j = 1; j <= i__1; ++j) {
- if (ipivot[j] <= 0 || ipivot[j] > npvts) {
- badpvt = TRUE_;
- }
-/* L20: */
- }
- }
-
-/* Set INFO if an error */
-
- if (*m < 0) {
- *info = -1;
- } else if (*m != *n && (isym == 0 || isym == 2)) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (idist == -1) {
- *info = -3;
- } else if (isym == -1) {
- *info = -5;
- } else if (*mode < -6 || *mode > 6) {
- *info = -7;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && *cond < 1.f) {
- *info = -8;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && irsign == -1) {
- *info = -10;
- } else if (igrade == -1 || igrade == 4 && *m != *n || (igrade == 1 ||
- igrade == 2 || igrade == 3 || igrade == 4 || igrade == 6) && isym
- == 0 || (igrade == 1 || igrade == 2 || igrade == 3 || igrade == 4
- || igrade == 5) && isym == 2) {
- *info = -11;
- } else if (igrade == 4 && dzero) {
- *info = -12;
- } else if ((igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5 ||
- igrade == 6) && (*model < -6 || *model > 6)) {
- *info = -13;
- } else if ((igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5 ||
- igrade == 6) && (*model != -6 && *model != 0 && *model != 6) && *
- condl < 1.f) {
- *info = -14;
- } else if ((igrade == 2 || igrade == 3) && (*moder < -6 || *moder > 6)) {
- *info = -16;
- } else if ((igrade == 2 || igrade == 3) && (*moder != -6 && *moder != 0 &&
- *moder != 6) && *condr < 1.f) {
- *info = -17;
- } else if (ipvtng == -1 || ipvtng == 3 && *m != *n || (ipvtng == 1 ||
- ipvtng == 2) && (isym == 0 || isym == 2)) {
- *info = -18;
- } else if (ipvtng != 0 && badpvt) {
- *info = -19;
- } else if (*kl < 0) {
- *info = -20;
- } else if (*ku < 0 || (isym == 0 || isym == 2) && *kl != *ku) {
- *info = -21;
- } else if (*sparse < 0.f || *sparse > 1.f) {
- *info = -22;
- } else if (ipack == -1 || (ipack == 1 || ipack == 2 || ipack == 5 ||
- ipack == 6) && isym == 1 || ipack == 3 && isym == 1 && (*kl != 0
- || *m != *n) || ipack == 4 && isym == 1 && (*ku != 0 || *m != *n))
- {
- *info = -24;
- } else if ((ipack == 0 || ipack == 1 || ipack == 2) && *lda < max(1,*m) ||
- (ipack == 3 || ipack == 4) && *lda < 1 || (ipack == 5 || ipack ==
- 6) && *lda < kuu + 1 || ipack == 7 && *lda < kll + kuu + 1) {
- *info = -26;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("CLATMR", &i__1);
- return 0;
- }
-
-/* Decide if we can pivot consistently */
-
- fulbnd = FALSE_;
- if (kuu == *n - 1 && kll == *m - 1) {
- fulbnd = TRUE_;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L30: */
- }
-
- iseed[4] = (iseed[4] / 2 << 1) + 1;
-
-/* 2) Set up D, DL, and DR, if indicated.
-
- Compute D according to COND and MODE */
-
- clatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, info);
- if (*info != 0) {
- *info = 1;
- return 0;
- }
- if (*mode != 0 && *mode != -6 && *mode != 6) {
-
-/* Scale by DMAX */
-
- temp = c_abs(&d[1]);
- i__1 = mnmin;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- r__1 = temp, r__2 = c_abs(&d[i]);
- temp = dmax(r__1,r__2);
-/* L40: */
- }
- if (temp == 0.f && (dmax__->r != 0.f || dmax__->i != 0.f)) {
- *info = 2;
- return 0;
- }
- if (temp != 0.f) {
- q__1.r = dmax__->r / temp, q__1.i = dmax__->i / temp;
- calpha.r = q__1.r, calpha.i = q__1.i;
- } else {
- calpha.r = 1.f, calpha.i = 0.f;
- }
- i__1 = mnmin;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i;
- i__3 = i;
- q__1.r = calpha.r * d[i__3].r - calpha.i * d[i__3].i, q__1.i =
- calpha.r * d[i__3].i + calpha.i * d[i__3].r;
- d[i__2].r = q__1.r, d[i__2].i = q__1.i;
-/* L50: */
- }
-
- }
-
-/* If matrix Hermitian, make D real */
-
- if (isym == 0) {
- i__1 = mnmin;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i;
- i__3 = i;
- d__1 = d[i__3].r;
- d[i__2].r = d__1, d[i__2].i = 0.f;
-/* L60: */
- }
- }
-
-/* Compute DL if grading set */
-
- if (igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5 || igrade ==
- 6) {
- clatm1_(model, condl, &c__0, &idist, &iseed[1], &dl[1], m, info);
- if (*info != 0) {
- *info = 3;
- return 0;
- }
- }
-
-/* Compute DR if grading set */
-
- if (igrade == 2 || igrade == 3) {
- clatm1_(moder, condr, &c__0, &idist, &iseed[1], &dr[1], n, info);
- if (*info != 0) {
- *info = 4;
- return 0;
- }
- }
-
-/* 3) Generate IWORK if pivoting */
-
- if (ipvtng > 0) {
- i__1 = npvts;
- for (i = 1; i <= i__1; ++i) {
- iwork[i] = i;
-/* L70: */
- }
- if (fulbnd) {
- i__1 = npvts;
- for (i = 1; i <= i__1; ++i) {
- k = ipivot[i];
- j = iwork[i];
- iwork[i] = iwork[k];
- iwork[k] = j;
-/* L80: */
- }
- } else {
- for (i = npvts; i >= 1; --i) {
- k = ipivot[i];
- j = iwork[i];
- iwork[i] = iwork[k];
- iwork[k] = j;
-/* L90: */
- }
- }
- }
-
-/* 4) Generate matrices for each kind of PACKing
- Always sweep matrix columnwise (if symmetric, upper
- half only) so that matrix generated does not depend
- on PACK */
-
- if (fulbnd) {
-
-/* Use CLATM3 so matrices generated with differing PIVOTing onl
-y
- differ only in the order of their rows and/or columns. */
-
- if (ipack == 0) {
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- i__3 = isub + jsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- i__3 = jsub + isub * a_dim1;
- r_cnjg(&q__1, &ctemp);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
-/* L100: */
- }
-/* L110: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- i__3 = isub + jsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
-/* L120: */
- }
-/* L130: */
- }
- } else if (isym == 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- i__3 = isub + jsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- i__3 = jsub + isub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
-/* L140: */
- }
-/* L150: */
- }
- }
-
- } else if (ipack == 1) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mxsub == isub && isym == 0) {
- i__3 = mnsub + mxsub * a_dim1;
- r_cnjg(&q__1, &ctemp);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = mnsub + mxsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- if (mnsub != mxsub) {
- i__3 = mxsub + mnsub * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
- }
-/* L160: */
- }
-/* L170: */
- }
-
- } else if (ipack == 2) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mxsub == jsub && isym == 0) {
- i__3 = mxsub + mnsub * a_dim1;
- r_cnjg(&q__1, &ctemp);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = mxsub + mnsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- if (mnsub != mxsub) {
- i__3 = mnsub + mxsub * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
- }
-/* L180: */
- }
-/* L190: */
- }
-
- } else if (ipack == 3) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
-
-/* Compute K = location of (ISUB,JSUB) ent
-ry in packed
- array */
-
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- k = mxsub * (mxsub - 1) / 2 + mnsub;
-
-/* Convert K to (IISUB,JJSUB) location */
-
- jjsub = (k - 1) / *lda + 1;
- iisub = k - *lda * (jjsub - 1);
-
- if (mxsub == isub && isym == 0) {
- i__3 = iisub + jjsub * a_dim1;
- r_cnjg(&q__1, &ctemp);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = iisub + jjsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
-/* L200: */
- }
-/* L210: */
- }
-
- } else if (ipack == 4) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
-
-/* Compute K = location of (I,J) entry in
-packed array */
-
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mnsub == 1) {
- k = mxsub;
- } else {
- k = *n * (*n + 1) / 2 - (*n - mnsub + 1) * (*n -
- mnsub + 2) / 2 + mxsub - mnsub + 1;
- }
-
-/* Convert K to (IISUB,JJSUB) location */
-
- jjsub = (k - 1) / *lda + 1;
- iisub = k - *lda * (jjsub - 1);
-
- if (mxsub == jsub && isym == 0) {
- i__3 = iisub + jjsub * a_dim1;
- r_cnjg(&q__1, &ctemp);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = iisub + jjsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
-/* L220: */
- }
-/* L230: */
- }
-
- } else if (ipack == 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- if (i < 1) {
- i__3 = j - i + 1 + (i + *n) * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
- } else {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mxsub == jsub && isym == 0) {
- i__3 = mxsub - mnsub + 1 + mnsub * a_dim1;
- r_cnjg(&q__1, &ctemp);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = mxsub - mnsub + 1 + mnsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- }
-/* L240: */
- }
-/* L250: */
- }
-
- } else if (ipack == 6) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mxsub == isub && isym == 0) {
- i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;
- r_cnjg(&q__1, &ctemp);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
-/* L260: */
- }
-/* L270: */
- }
-
- } else if (ipack == 7) {
-
- if (isym != 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (i < 1) {
- i__3 = j - i + 1 + kuu + (i + *n) * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
- }
- if (mxsub == isub && isym == 0) {
- i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;
- r_cnjg(&q__1, &ctemp);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- if (i >= 1 && mnsub != mxsub) {
- if (mnsub == isub && isym == 0) {
- i__3 = mxsub - mnsub + 1 + kuu + mnsub *
- a_dim1;
- r_cnjg(&q__1, &ctemp);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = mxsub - mnsub + 1 + kuu + mnsub *
- a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- }
-/* L280: */
- }
-/* L290: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j + kll;
- for (i = j - kuu; i <= i__2; ++i) {
- clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- i__3 = isub - jsub + kuu + 1 + jsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
-/* L300: */
- }
-/* L310: */
- }
- }
-
- }
-
- } else {
-
-/* Use CLATM2 */
-
- if (ipack == 0) {
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- i__3 = j + i * a_dim1;
- r_cnjg(&q__1, &a[i + j * a_dim1]);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
-/* L320: */
- }
-/* L330: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
-/* L340: */
- }
-/* L350: */
- }
- } else if (isym == 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- i__3 = j + i * a_dim1;
- i__4 = i + j * a_dim1;
- a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;
-/* L360: */
- }
-/* L370: */
- }
- }
-
- } else if (ipack == 1) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1], &
- d[1], &igrade, &dl[1], &dr[1], &ipvtng, &iwork[1],
- sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- if (i != j) {
- i__3 = j + i * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
- }
-/* L380: */
- }
-/* L390: */
- }
-
- } else if (ipack == 2) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- if (isym == 0) {
- i__3 = j + i * a_dim1;
- clatm2_(&q__2, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- r_cnjg(&q__1, &q__2);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = j + i * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- }
- if (i != j) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
- }
-/* L400: */
- }
-/* L410: */
- }
-
- } else if (ipack == 3) {
-
- isub = 0;
- jsub = 1;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- ++isub;
- if (isub > *lda) {
- isub = 1;
- ++jsub;
- }
- i__3 = isub + jsub * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1], &
- d[1], &igrade, &dl[1], &dr[1], &ipvtng, &iwork[1],
- sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
-/* L420: */
- }
-/* L430: */
- }
-
- } else if (ipack == 4) {
-
- if (isym == 0 || isym == 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
-
-/* Compute K = location of (I,J) en
-try in packed array */
-
- if (i == 1) {
- k = j;
- } else {
- k = *n * (*n + 1) / 2 - (*n - i + 1) * (*n - i +
- 2) / 2 + j - i + 1;
- }
-
-/* Convert K to (ISUB,JSUB) locatio
-n */
-
- jsub = (k - 1) / *lda + 1;
- isub = k - *lda * (jsub - 1);
-
- i__3 = isub + jsub * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- if (isym == 0) {
- i__3 = isub + jsub * a_dim1;
- r_cnjg(&q__1, &a[isub + jsub * a_dim1]);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- }
-/* L440: */
- }
-/* L450: */
- }
- } else {
- isub = 0;
- jsub = 1;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j; i <= i__2; ++i) {
- ++isub;
- if (isub > *lda) {
- isub = 1;
- ++jsub;
- }
- i__3 = isub + jsub * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
-/* L460: */
- }
-/* L470: */
- }
- }
-
- } else if (ipack == 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- if (i < 1) {
- i__3 = j - i + 1 + (i + *n) * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
- } else {
- if (isym == 0) {
- i__3 = j - i + 1 + i * a_dim1;
- clatm2_(&q__2, m, n, &i, &j, kl, ku, &idist, &
- iseed[1], &d[1], &igrade, &dl[1], &dr[1],
- &ipvtng, &iwork[1], sparse);
- r_cnjg(&q__1, &q__2);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = j - i + 1 + i * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &
- iseed[1], &d[1], &igrade, &dl[1], &dr[1],
- &ipvtng, &iwork[1], sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- }
- }
-/* L480: */
- }
-/* L490: */
- }
-
- } else if (ipack == 6) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- i__3 = i - j + kuu + 1 + j * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1], &
- d[1], &igrade, &dl[1], &dr[1], &ipvtng, &iwork[1],
- sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
-/* L500: */
- }
-/* L510: */
- }
-
- } else if (ipack == 7) {
-
- if (isym != 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- i__3 = i - j + kuu + 1 + j * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- if (i < 1) {
- i__3 = j - i + 1 + kuu + (i + *n) * a_dim1;
- a[i__3].r = 0.f, a[i__3].i = 0.f;
- }
- if (i >= 1 && i != j) {
- if (isym == 0) {
- i__3 = j - i + 1 + kuu + i * a_dim1;
- r_cnjg(&q__1, &a[i - j + kuu + 1 + j * a_dim1]
- );
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
- } else {
- i__3 = j - i + 1 + kuu + i * a_dim1;
- i__4 = i - j + kuu + 1 + j * a_dim1;
- a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;
- }
- }
-/* L520: */
- }
-/* L530: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j + kll;
- for (i = j - kuu; i <= i__2; ++i) {
- i__3 = i - j + kuu + 1 + j * a_dim1;
- clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = q__1.r, a[i__3].i = q__1.i;
-/* L540: */
- }
-/* L550: */
- }
- }
-
- }
-
- }
-
-/* 5) Scaling the norm */
-
- if (ipack == 0) {
- onorm = clange_("M", m, n, &a[a_offset], lda, tempa);
- } else if (ipack == 1) {
- onorm = clansy_("M", "U", n, &a[a_offset], lda, tempa);
- } else if (ipack == 2) {
- onorm = clansy_("M", "L", n, &a[a_offset], lda, tempa);
- } else if (ipack == 3) {
- onorm = clansp_("M", "U", n, &a[a_offset], tempa);
- } else if (ipack == 4) {
- onorm = clansp_("M", "L", n, &a[a_offset], tempa);
- } else if (ipack == 5) {
- onorm = clansb_("M", "L", n, &kll, &a[a_offset], lda, tempa);
- } else if (ipack == 6) {
- onorm = clansb_("M", "U", n, &kuu, &a[a_offset], lda, tempa);
- } else if (ipack == 7) {
- onorm = clangb_("M", n, &kll, &kuu, &a[a_offset], lda, tempa);
- }
-
- if (*anorm >= 0.f) {
-
- if (*anorm > 0.f && onorm == 0.f) {
-
-/* Desired scaling impossible */
-
- *info = 5;
- return 0;
-
- } else if (*anorm > 1.f && onorm < 1.f || *anorm < 1.f && onorm > 1.f)
- {
-
-/* Scale carefully to avoid over / underflow */
-
- if (ipack <= 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- r__1 = 1.f / onorm;
- csscal_(m, &r__1, &a[j * a_dim1 + 1], &c__1);
- csscal_(m, anorm, &a[j * a_dim1 + 1], &c__1);
-/* L560: */
- }
-
- } else if (ipack == 3 || ipack == 4) {
-
- i__1 = *n * (*n + 1) / 2;
- r__1 = 1.f / onorm;
- csscal_(&i__1, &r__1, &a[a_offset], &c__1);
- i__1 = *n * (*n + 1) / 2;
- csscal_(&i__1, anorm, &a[a_offset], &c__1);
-
- } else if (ipack >= 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = kll + kuu + 1;
- r__1 = 1.f / onorm;
- csscal_(&i__2, &r__1, &a[j * a_dim1 + 1], &c__1);
- i__2 = kll + kuu + 1;
- csscal_(&i__2, anorm, &a[j * a_dim1 + 1], &c__1);
-/* L570: */
- }
-
- }
-
- } else {
-
-/* Scale straightforwardly */
-
- if (ipack <= 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- r__1 = *anorm / onorm;
- csscal_(m, &r__1, &a[j * a_dim1 + 1], &c__1);
-/* L580: */
- }
-
- } else if (ipack == 3 || ipack == 4) {
-
- i__1 = *n * (*n + 1) / 2;
- r__1 = *anorm / onorm;
- csscal_(&i__1, &r__1, &a[a_offset], &c__1);
-
- } else if (ipack >= 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = kll + kuu + 1;
- r__1 = *anorm / onorm;
- csscal_(&i__2, &r__1, &a[j * a_dim1 + 1], &c__1);
-/* L590: */
- }
- }
-
- }
-
- }
-
-/* End of CLATMR */
-
- return 0;
-} /* clatmr_ */
-
diff --git a/TESTING/MATGEN/clatms.c b/TESTING/MATGEN/clatms.c
deleted file mode 100644
index bb5462a..0000000
--- a/TESTING/MATGEN/clatms.c
+++ /dev/null
@@ -1,1650 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static complex c_b1 = {0.f,0.f};
-static integer c__1 = 1;
-static integer c__5 = 5;
-static logical c_true = TRUE_;
-static logical c_false = FALSE_;
-
-/* Subroutine */ int clatms_(integer *m, integer *n, char *dist, integer *
- iseed, char *sym, real *d, integer *mode, real *cond, real *dmax__,
- integer *kl, integer *ku, char *pack, complex *a, integer *lda,
- complex *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
- real r__1, r__2, r__3;
- doublereal d__1;
- complex q__1, q__2, q__3;
- logical L__1;
-
- /* Builtin functions */
- double cos(doublereal), sin(doublereal);
- void r_cnjg(complex *, complex *);
-
- /* Local variables */
- static integer ilda, icol;
- static real temp;
- static logical csym;
- static integer irow, isym;
- static complex c;
- static integer i, j, k;
- static complex s;
- static real alpha, angle;
- static integer ipack;
- static real realc;
- static integer ioffg;
- extern logical lsame_(char *, char *);
- static integer iinfo;
- extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *);
- static complex ctemp;
- static integer idist, mnmin, iskew;
- static complex extra, dummy;
- extern /* Subroutine */ int slatm1_(integer *, real *, integer *, integer
- *, integer *, real *, integer *, integer *);
- static integer ic, jc, nc;
- extern /* Subroutine */ int clagge_(integer *, integer *, integer *,
- integer *, real *, complex *, integer *, integer *, complex *,
- integer *), claghe_(integer *, integer *, real *, complex *,
- integer *, integer *, complex *, integer *);
- static integer il;
- static complex ct;
- static integer iendch, ir, jr, ipackg, mr;
- extern /* Complex */ VOID clarnd_(complex *, integer *, integer *);
- static integer minlda;
- static complex st;
- extern /* Subroutine */ int claset_(char *, integer *, integer *, complex
- *, complex *, complex *, integer *), clartg_(complex *,
- complex *, real *, complex *, complex *), xerbla_(char *, integer
- *), clagsy_(integer *, integer *, real *, complex *,
- integer *, integer *, complex *, integer *);
- extern doublereal slarnd_(integer *, integer *);
- extern /* Subroutine */ int clarot_(logical *, logical *, logical *,
- integer *, complex *, complex *, complex *, integer *, complex *,
- complex *);
- static logical iltemp, givens;
- static integer ioffst, irsign;
- static logical ilextr, topdwn;
- static integer ir1, ir2, isympk, jch, llb, jkl, jku, uub;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- CLATMS generates random matrices with specified singular values
- (or hermitian with specified eigenvalues)
- for testing LAPACK programs.
-
- CLATMS operates by applying the following sequence of
- operations:
-
- Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX, and SYM
- as described below.
-
- Generate a matrix with the appropriate band structure, by one
- of two methods:
-
- Method A:
- Generate a dense M x N matrix by multiplying D on the left
- and the right by random unitary matrices, then:
-
- Reduce the bandwidth according to KL and KU, using
- Householder transformations.
-
- Method B:
- Convert the bandwidth-0 (i.e., diagonal) matrix to a
- bandwidth-1 matrix using Givens rotations, "chasing"
- out-of-band elements back, much as in QR; then convert
- the bandwidth-1 to a bandwidth-2 matrix, etc. Note
- that for reasonably small bandwidths (relative to M and
-
- N) this requires less storage, as a dense matrix is not
-
- generated. Also, for hermitian or symmetric matrices,
- only one triangle is generated.
-
- Method A is chosen if the bandwidth is a large fraction of the
- order of the matrix, and LDA is at least M (so a dense
- matrix can be stored.) Method B is chosen if the bandwidth
-
- is small (< 1/2 N for hermitian or symmetric, < .3 N+M for
- non-symmetric), or LDA is less than M and not less than the
-
- bandwidth.
-
- Pack the matrix if desired. Options specified by PACK are:
- no packing
- zero out upper half (if hermitian)
- zero out lower half (if hermitian)
- store the upper half columnwise (if hermitian or upper
- triangular)
- store the lower half columnwise (if hermitian or lower
- triangular)
- store the lower triangle in banded format (if hermitian or
- lower triangular)
- store the upper triangle in banded format (if hermitian or
- upper triangular)
- store the entire matrix in banded format
- If Method B is chosen, and band format is specified, then the
- matrix will be generated in the band format, so no repacking
-
- will be necessary.
-
- Arguments
- =========
-
- M - INTEGER
- The number of rows of A. Not modified.
-
- N - INTEGER
- The number of columns of A. N must equal M if the matrix
- is symmetric or hermitian (i.e., if SYM is not 'N')
- Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate the random eigen-/singular values.
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to CLATMS
- to continue the same random number sequence.
- Changed on exit.
-
- SYM - CHARACTER*1
- If SYM='H', the generated matrix is hermitian, with
- eigenvalues specified by D, COND, MODE, and DMAX; they
- may be positive, negative, or zero.
- If SYM='P', the generated matrix is hermitian, with
- eigenvalues (= singular values) specified by D, COND,
- MODE, and DMAX; they will not be negative.
- If SYM='N', the generated matrix is nonsymmetric, with
- singular values specified by D, COND, MODE, and DMAX;
- they will not be negative.
- If SYM='S', the generated matrix is (complex) symmetric,
- with singular values specified by D, COND, MODE, and
- DMAX; they will not be negative.
- Not modified.
-
- D - REAL array, dimension ( MIN( M, N ) )
- This array is used to specify the singular values or
- eigenvalues of A (see SYM, above.) If MODE=0, then D is
- assumed to contain the singular/eigenvalues, otherwise
- they will be computed according to MODE, COND, and DMAX,
- and placed in D.
- Modified if MODE is nonzero.
-
- MODE - INTEGER
- On entry this describes how the singular/eigenvalues are to
-
- be specified:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- If SYM='H', and MODE is neither 0, 6, nor -6, then
- the elements of D will also be multiplied by a random
- sign (i.e., +1 or -1.)
- Not modified.
-
- COND - REAL
- On entry, this is used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - REAL
- If MODE is neither -6, 0 nor 6, the contents of D, as
- computed according to MODE and COND, will be scaled by
- DMAX / max(abs(D(i))); thus, the maximum absolute eigen- or
-
- singular value (which is to say the norm) will be abs(DMAX).
-
- Note that DMAX need not be positive: if DMAX is negative
- (or zero), D will be scaled by a negative number (or zero).
-
- Not modified.
-
- KL - INTEGER
- This specifies the lower bandwidth of the matrix. For
- example, KL=0 implies upper triangular, KL=1 implies upper
- Hessenberg, and KL being at least M-1 means that the matrix
-
- has full lower bandwidth. KL must equal KU if the matrix
- is symmetric or hermitian.
- Not modified.
-
- KU - INTEGER
- This specifies the upper bandwidth of the matrix. For
- example, KU=0 implies lower triangular, KU=1 implies lower
- Hessenberg, and KU being at least N-1 means that the matrix
-
- has full upper bandwidth. KL must equal KU if the matrix
- is symmetric or hermitian.
- Not modified.
-
- PACK - CHARACTER*1
- This specifies packing of matrix as follows:
- 'N' => no packing
- 'U' => zero out all subdiagonal entries (if symmetric
- or hermitian)
- 'L' => zero out all superdiagonal entries (if symmetric
- or hermitian)
- 'C' => store the upper triangle columnwise (only if the
- matrix is symmetric, hermitian, or upper triangular)
-
- 'R' => store the lower triangle columnwise (only if the
- matrix is symmetric, hermitian, or lower triangular)
-
- 'B' => store the lower triangle in band storage scheme
- (only if the matrix is symmetric, hermitian, or
- lower triangular)
- 'Q' => store the upper triangle in band storage scheme
- (only if the matrix is symmetric, hermitian, or
- upper triangular)
- 'Z' => store the entire matrix in band storage scheme
- (pivoting can be provided for by using this
- option to store A in the trailing rows of
- the allocated storage)
-
- Using these options, the various LAPACK packed and banded
- storage schemes can be obtained:
- GB - use 'Z'
- PB, SB, HB, or TB - use 'B' or 'Q'
- PP, SP, HB, or TP - use 'C' or 'R'
-
- If two calls to CLATMS differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
- Not modified.
-
- A - COMPLEX array, dimension ( LDA, N )
- On exit A is the desired test matrix. A is first generated
-
- in full (unpacked) form, and then packed, if so specified
- by PACK. Thus, the first M elements of the first N
- columns will always be modified. If PACK specifies a
- packed or banded storage scheme, all LDA elements of the
- first N columns will be modified; the elements of the
- array which do not correspond to elements of the generated
- matrix are set to zero.
- Modified.
-
- LDA - INTEGER
- LDA specifies the first dimension of A as declared in the
- calling program. If PACK='N', 'U', 'L', 'C', or 'R', then
- LDA must be at least M. If PACK='B' or 'Q', then LDA must
- be at least MIN( KL, M-1) (which is equal to MIN(KU,N-1)).
- If PACK='Z', LDA must be large enough to hold the packed
- array: MIN( KU, N-1) + MIN( KL, M-1) + 1.
- Not modified.
-
- WORK - COMPLEX array, dimension ( 3*MAX( N, M ) )
- Workspace.
- Modified.
-
- INFO - INTEGER
- Error code. On exit, INFO will be set to one of the
- following values:
- 0 => normal return
- -1 => M negative or unequal to N and SYM='S', 'H', or 'P'
- -2 => N negative
- -3 => DIST illegal string
- -5 => SYM illegal string
- -7 => MODE not in range -6 to 6
- -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -10 => KL negative
- -11 => KU negative, or SYM is not 'N' and KU is not equal to
-
- KL
- -12 => PACK illegal string, or PACK='U' or 'L', and SYM='N';
-
- or PACK='C' or 'Q' and SYM='N' and KL is not zero;
- or PACK='R' or 'B' and SYM='N' and KU is not zero;
- or PACK='U', 'L', 'C', 'R', 'B', or 'Q', and M is not
-
- N.
- -14 => LDA is less than M, or PACK='Z' and LDA is less than
-
- MIN(KU,N-1) + MIN(KL,M-1) + 1.
- 1 => Error return from SLATM1
- 2 => Cannot scale to DMAX (max. sing. value is 0)
- 3 => Error return from CLAGGE, CLAGHE or CLAGSY
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --work;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*m == 0 || *n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else {
- idist = -1;
- }
-
-/* Decode SYM */
-
- if (lsame_(sym, "N")) {
- isym = 1;
- irsign = 0;
- csym = FALSE_;
- } else if (lsame_(sym, "P")) {
- isym = 2;
- irsign = 0;
- csym = FALSE_;
- } else if (lsame_(sym, "S")) {
- isym = 2;
- irsign = 0;
- csym = TRUE_;
- } else if (lsame_(sym, "H")) {
- isym = 2;
- irsign = 1;
- csym = FALSE_;
- } else {
- isym = -1;
- }
-
-/* Decode PACK */
-
- isympk = 0;
- if (lsame_(pack, "N")) {
- ipack = 0;
- } else if (lsame_(pack, "U")) {
- ipack = 1;
- isympk = 1;
- } else if (lsame_(pack, "L")) {
- ipack = 2;
- isympk = 1;
- } else if (lsame_(pack, "C")) {
- ipack = 3;
- isympk = 2;
- } else if (lsame_(pack, "R")) {
- ipack = 4;
- isympk = 3;
- } else if (lsame_(pack, "B")) {
- ipack = 5;
- isympk = 3;
- } else if (lsame_(pack, "Q")) {
- ipack = 6;
- isympk = 2;
- } else if (lsame_(pack, "Z")) {
- ipack = 7;
- } else {
- ipack = -1;
- }
-
-/* Set certain internal parameters */
-
- mnmin = min(*m,*n);
-/* Computing MIN */
- i__1 = *kl, i__2 = *m - 1;
- llb = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *ku, i__2 = *n - 1;
- uub = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *m, i__2 = *n + llb;
- mr = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *n, i__2 = *m + uub;
- nc = min(i__1,i__2);
-
- if (ipack == 5 || ipack == 6) {
- minlda = uub + 1;
- } else if (ipack == 7) {
- minlda = llb + uub + 1;
- } else {
- minlda = *m;
- }
-
-/* Use Givens rotation method if bandwidth small enough,
- or if LDA is too small to store the matrix unpacked. */
-
- givens = FALSE_;
- if (isym == 1) {
-/* Computing MAX */
- i__1 = 1, i__2 = mr + nc;
- if ((real) (llb + uub) < (real) max(i__1,i__2) * .3f) {
- givens = TRUE_;
- }
- } else {
- if (llb << 1 < *m) {
- givens = TRUE_;
- }
- }
- if (*lda < *m && *lda >= minlda) {
- givens = TRUE_;
- }
-
-/* Set INFO if an error */
-
- if (*m < 0) {
- *info = -1;
- } else if (*m != *n && isym != 1) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (idist == -1) {
- *info = -3;
- } else if (isym == -1) {
- *info = -5;
- } else if (abs(*mode) > 6) {
- *info = -7;
- } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.f) {
- *info = -8;
- } else if (*kl < 0) {
- *info = -10;
- } else if (*ku < 0 || isym != 1 && *kl != *ku) {
- *info = -11;
- } else if (ipack == -1 || isympk == 1 && isym == 1 || isympk == 2 && isym
- == 1 && *kl > 0 || isympk == 3 && isym == 1 && *ku > 0 || isympk
- != 0 && *m != *n) {
- *info = -12;
- } else if (*lda < max(1,minlda)) {
- *info = -14;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("CLATMS", &i__1);
- return 0;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L10: */
- }
-
- if (iseed[4] % 2 != 1) {
- ++iseed[4];
- }
-
-/* 2) Set up D if indicated.
-
- Compute D according to COND and MODE */
-
- slatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, &iinfo);
- if (iinfo != 0) {
- *info = 1;
- return 0;
- }
-
-/* Choose Top-Down if D is (apparently) increasing,
- Bottom-Up if D is (apparently) decreasing. */
-
- if (dabs(d[1]) <= (r__1 = d[mnmin], dabs(r__1))) {
- topdwn = TRUE_;
- } else {
- topdwn = FALSE_;
- }
-
- if (*mode != 0 && abs(*mode) != 6) {
-
-/* Scale by DMAX */
-
- temp = dabs(d[1]);
- i__1 = mnmin;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- r__2 = temp, r__3 = (r__1 = d[i], dabs(r__1));
- temp = dmax(r__2,r__3);
-/* L20: */
- }
-
- if (temp > 0.f) {
- alpha = *dmax__ / temp;
- } else {
- *info = 2;
- return 0;
- }
-
- sscal_(&mnmin, &alpha, &d[1], &c__1);
-
- }
-
- claset_("Full", lda, n, &c_b1, &c_b1, &a[a_offset], lda);
-
-/* 3) Generate Banded Matrix using Givens rotations.
- Also the special case of UUB=LLB=0
-
- Compute Addressing constants to cover all
- storage formats. Whether GE, HE, SY, GB, HB, or SB,
- upper or lower triangle or both,
- the (i,j)-th element is in
- A( i - ISKEW*j + IOFFST, j ) */
-
- if (ipack > 4) {
- ilda = *lda - 1;
- iskew = 1;
- if (ipack > 5) {
- ioffst = uub + 1;
- } else {
- ioffst = 1;
- }
- } else {
- ilda = *lda;
- iskew = 0;
- ioffst = 0;
- }
-
-/* IPACKG is the format that the matrix is generated in. If this is
- different from IPACK, then the matrix must be repacked at the
- end. It also signals how to compute the norm, for scaling. */
-
- ipackg = 0;
-
-/* Diagonal Matrix -- We are done, unless it
- is to be stored HP/SP/PP/TP (PACK='R' or 'C') */
-
- if (llb == 0 && uub == 0) {
- i__1 = mnmin;
- for (j = 1; j <= i__1; ++j) {
- i__2 = (1 - iskew) * j + ioffst + j * a_dim1;
- i__3 = j;
- q__1.r = d[i__3], q__1.i = 0.f;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
-/* L30: */
- }
-
- if (ipack <= 2 || ipack >= 5) {
- ipackg = ipack;
- }
-
- } else if (givens) {
-
-/* Check whether to use Givens rotations,
- Householder transformations, or nothing. */
-
- if (isym == 1) {
-
-/* Non-symmetric -- A = U D V */
-
- if (ipack > 4) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
-
- i__1 = mnmin;
- for (j = 1; j <= i__1; ++j) {
- i__2 = (1 - iskew) * j + ioffst + j * a_dim1;
- i__3 = j;
- q__1.r = d[i__3], q__1.i = 0.f;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
-/* L40: */
- }
-
- if (topdwn) {
- jkl = 0;
- i__1 = uub;
- for (jku = 1; jku <= i__1; ++jku) {
-
-/* Transform from bandwidth JKL, JKU-1 to
-JKL, JKU
-
- Last row actually rotated is M
- Last column actually rotated is MIN( M+
-JKU, N )
-
- Computing MIN */
- i__3 = *m + jku;
- i__2 = min(i__3,*n) + jkl - 1;
- for (jr = 1; jr <= i__2; ++jr) {
- extra.r = 0.f, extra.i = 0.f;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- d__1 = cos(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- c.r = q__1.r, c.i = q__1.i;
- d__1 = sin(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- s.r = q__1.r, s.i = q__1.i;
-/* Computing MAX */
- i__3 = 1, i__4 = jr - jkl;
- icol = max(i__3,i__4);
- if (jr < *m) {
-/* Computing MIN */
- i__3 = *n, i__4 = jr + jku;
- il = min(i__3,i__4) + 1 - icol;
- L__1 = jr > jkl;
- clarot_(&c_true, &L__1, &c_false, &il, &c, &s, &a[
- jr - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &extra, &dummy);
- }
-
-/* Chase "EXTRA" back up */
-
- ir = jr;
- ic = icol;
- i__3 = -jkl - jku;
- for (jch = jr - jkl; i__3 < 0 ? jch >= 1 : jch <= 1;
- jch += i__3) {
- if (ir < *m) {
- clartg_(&a[ir + 1 - iskew * (ic + 1) + ioffst
- + (ic + 1) * a_dim1], &extra, &realc,
- &s, &dummy);
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__2.r = realc * dummy.r, q__2.i = realc *
- dummy.i;
- r_cnjg(&q__1, &q__2);
- c.r = q__1.r, c.i = q__1.i;
- q__3.r = -(doublereal)s.r, q__3.i = -(
- doublereal)s.i;
- q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
- q__2.i = q__3.r * dummy.i + q__3.i *
- dummy.r;
- r_cnjg(&q__1, &q__2);
- s.r = q__1.r, s.i = q__1.i;
- }
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jku;
- irow = max(i__4,i__5);
- il = ir + 2 - irow;
- ctemp.r = 0.f, ctemp.i = 0.f;
- iltemp = jch > jku;
- clarot_(&c_false, &iltemp, &c_true, &il, &c, &s, &
- a[irow - iskew * ic + ioffst + ic *
- a_dim1], &ilda, &ctemp, &extra);
- if (iltemp) {
- clartg_(&a[irow + 1 - iskew * (ic + 1) +
- ioffst + (ic + 1) * a_dim1], &ctemp, &
- realc, &s, &dummy);
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__2.r = realc * dummy.r, q__2.i = realc *
- dummy.i;
- r_cnjg(&q__1, &q__2);
- c.r = q__1.r, c.i = q__1.i;
- q__3.r = -(doublereal)s.r, q__3.i = -(
- doublereal)s.i;
- q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
- q__2.i = q__3.r * dummy.i + q__3.i *
- dummy.r;
- r_cnjg(&q__1, &q__2);
- s.r = q__1.r, s.i = q__1.i;
-
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jku - jkl;
- icol = max(i__4,i__5);
- il = ic + 2 - icol;
- extra.r = 0.f, extra.i = 0.f;
- L__1 = jch > jku + jkl;
- clarot_(&c_true, &L__1, &c_true, &il, &c, &s,
- &a[irow - iskew * icol + ioffst +
- icol * a_dim1], &ilda, &extra, &ctemp)
- ;
- ic = icol;
- ir = irow;
- }
-/* L50: */
- }
-/* L60: */
- }
-/* L70: */
- }
-
- jku = uub;
- i__1 = llb;
- for (jkl = 1; jkl <= i__1; ++jkl) {
-
-/* Transform from bandwidth JKL-1, JKU to
-JKL, JKU
-
- Computing MIN */
- i__3 = *n + jkl;
- i__2 = min(i__3,*m) + jku - 1;
- for (jc = 1; jc <= i__2; ++jc) {
- extra.r = 0.f, extra.i = 0.f;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- d__1 = cos(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- c.r = q__1.r, c.i = q__1.i;
- d__1 = sin(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- s.r = q__1.r, s.i = q__1.i;
-/* Computing MAX */
- i__3 = 1, i__4 = jc - jku;
- irow = max(i__3,i__4);
- if (jc < *n) {
-/* Computing MIN */
- i__3 = *m, i__4 = jc + jkl;
- il = min(i__3,i__4) + 1 - irow;
- L__1 = jc > jku;
- clarot_(&c_false, &L__1, &c_false, &il, &c, &s, &
- a[irow - iskew * jc + ioffst + jc *
- a_dim1], &ilda, &extra, &dummy);
- }
-
-/* Chase "EXTRA" back up */
-
- ic = jc;
- ir = irow;
- i__3 = -jkl - jku;
- for (jch = jc - jku; i__3 < 0 ? jch >= 1 : jch <= 1;
- jch += i__3) {
- if (ic < *n) {
- clartg_(&a[ir + 1 - iskew * (ic + 1) + ioffst
- + (ic + 1) * a_dim1], &extra, &realc,
- &s, &dummy);
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__2.r = realc * dummy.r, q__2.i = realc *
- dummy.i;
- r_cnjg(&q__1, &q__2);
- c.r = q__1.r, c.i = q__1.i;
- q__3.r = -(doublereal)s.r, q__3.i = -(
- doublereal)s.i;
- q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
- q__2.i = q__3.r * dummy.i + q__3.i *
- dummy.r;
- r_cnjg(&q__1, &q__2);
- s.r = q__1.r, s.i = q__1.i;
- }
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jkl;
- icol = max(i__4,i__5);
- il = ic + 2 - icol;
- ctemp.r = 0.f, ctemp.i = 0.f;
- iltemp = jch > jkl;
- clarot_(&c_true, &iltemp, &c_true, &il, &c, &s, &
- a[ir - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &ctemp, &extra);
- if (iltemp) {
- clartg_(&a[ir + 1 - iskew * (icol + 1) +
- ioffst + (icol + 1) * a_dim1], &ctemp,
- &realc, &s, &dummy);
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__2.r = realc * dummy.r, q__2.i = realc *
- dummy.i;
- r_cnjg(&q__1, &q__2);
- c.r = q__1.r, c.i = q__1.i;
- q__3.r = -(doublereal)s.r, q__3.i = -(
- doublereal)s.i;
- q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
- q__2.i = q__3.r * dummy.i + q__3.i *
- dummy.r;
- r_cnjg(&q__1, &q__2);
- s.r = q__1.r, s.i = q__1.i;
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jkl - jku;
- irow = max(i__4,i__5);
- il = ir + 2 - irow;
- extra.r = 0.f, extra.i = 0.f;
- L__1 = jch > jkl + jku;
- clarot_(&c_false, &L__1, &c_true, &il, &c, &s,
- &a[irow - iskew * icol + ioffst +
- icol * a_dim1], &ilda, &extra, &ctemp)
- ;
- ic = icol;
- ir = irow;
- }
-/* L80: */
- }
-/* L90: */
- }
-/* L100: */
- }
-
- } else {
-
-/* Bottom-Up -- Start at the bottom right. */
-
- jkl = 0;
- i__1 = uub;
- for (jku = 1; jku <= i__1; ++jku) {
-
-/* Transform from bandwidth JKL, JKU-1 to
-JKL, JKU
-
- First row actually rotated is M
- First column actually rotated is MIN( M
-+JKU, N )
-
- Computing MIN */
- i__2 = *m, i__3 = *n + jkl;
- iendch = min(i__2,i__3) - 1;
-/* Computing MIN */
- i__2 = *m + jku;
- i__3 = 1 - jkl;
- for (jc = min(i__2,*n) - 1; jc >= i__3; --jc) {
- extra.r = 0.f, extra.i = 0.f;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- d__1 = cos(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- c.r = q__1.r, c.i = q__1.i;
- d__1 = sin(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- s.r = q__1.r, s.i = q__1.i;
-/* Computing MAX */
- i__2 = 1, i__4 = jc - jku + 1;
- irow = max(i__2,i__4);
- if (jc > 0) {
-/* Computing MIN */
- i__2 = *m, i__4 = jc + jkl + 1;
- il = min(i__2,i__4) + 1 - irow;
- L__1 = jc + jkl < *m;
- clarot_(&c_false, &c_false, &L__1, &il, &c, &s, &
- a[irow - iskew * jc + ioffst + jc *
- a_dim1], &ilda, &dummy, &extra);
- }
-
-/* Chase "EXTRA" back down */
-
- ic = jc;
- i__2 = iendch;
- i__4 = jkl + jku;
- for (jch = jc + jkl; i__4 < 0 ? jch >= i__2 : jch <=
- i__2; jch += i__4) {
- ilextr = ic > 0;
- if (ilextr) {
- clartg_(&a[jch - iskew * ic + ioffst + ic *
- a_dim1], &extra, &realc, &s, &dummy);
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__1.r = realc * dummy.r, q__1.i = realc *
- dummy.i;
- c.r = q__1.r, c.i = q__1.i;
- q__1.r = s.r * dummy.r - s.i * dummy.i,
- q__1.i = s.r * dummy.i + s.i *
- dummy.r;
- s.r = q__1.r, s.i = q__1.i;
- }
- ic = max(1,ic);
-/* Computing MIN */
- i__5 = *n - 1, i__6 = jch + jku;
- icol = min(i__5,i__6);
- iltemp = jch + jku < *n;
- ctemp.r = 0.f, ctemp.i = 0.f;
- i__5 = icol + 2 - ic;
- clarot_(&c_true, &ilextr, &iltemp, &i__5, &c, &s,
- &a[jch - iskew * ic + ioffst + ic *
- a_dim1], &ilda, &extra, &ctemp);
- if (iltemp) {
- clartg_(&a[jch - iskew * icol + ioffst + icol
- * a_dim1], &ctemp, &realc, &s, &dummy)
- ;
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__1.r = realc * dummy.r, q__1.i = realc *
- dummy.i;
- c.r = q__1.r, c.i = q__1.i;
- q__1.r = s.r * dummy.r - s.i * dummy.i,
- q__1.i = s.r * dummy.i + s.i *
- dummy.r;
- s.r = q__1.r, s.i = q__1.i;
-/* Computing MIN */
- i__5 = iendch, i__6 = jch + jkl + jku;
- il = min(i__5,i__6) + 2 - jch;
- extra.r = 0.f, extra.i = 0.f;
- L__1 = jch + jkl + jku <= iendch;
- clarot_(&c_false, &c_true, &L__1, &il, &c, &s,
- &a[jch - iskew * icol + ioffst +
- icol * a_dim1], &ilda, &ctemp, &extra)
- ;
- ic = icol;
- }
-/* L110: */
- }
-/* L120: */
- }
-/* L130: */
- }
-
- jku = uub;
- i__1 = llb;
- for (jkl = 1; jkl <= i__1; ++jkl) {
-
-/* Transform from bandwidth JKL-1, JKU to
-JKL, JKU
-
- First row actually rotated is MIN( N+JK
-L, M )
- First column actually rotated is N
-
- Computing MIN */
- i__3 = *n, i__4 = *m + jku;
- iendch = min(i__3,i__4) - 1;
-/* Computing MIN */
- i__3 = *n + jkl;
- i__4 = 1 - jku;
- for (jr = min(i__3,*m) - 1; jr >= i__4; --jr) {
- extra.r = 0.f, extra.i = 0.f;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- d__1 = cos(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- c.r = q__1.r, c.i = q__1.i;
- d__1 = sin(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- s.r = q__1.r, s.i = q__1.i;
-/* Computing MAX */
- i__3 = 1, i__2 = jr - jkl + 1;
- icol = max(i__3,i__2);
- if (jr > 0) {
-/* Computing MIN */
- i__3 = *n, i__2 = jr + jku + 1;
- il = min(i__3,i__2) + 1 - icol;
- L__1 = jr + jku < *n;
- clarot_(&c_true, &c_false, &L__1, &il, &c, &s, &a[
- jr - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &dummy, &extra);
- }
-
-/* Chase "EXTRA" back down */
-
- ir = jr;
- i__3 = iendch;
- i__2 = jkl + jku;
- for (jch = jr + jku; i__2 < 0 ? jch >= i__3 : jch <=
- i__3; jch += i__2) {
- ilextr = ir > 0;
- if (ilextr) {
- clartg_(&a[ir - iskew * jch + ioffst + jch *
- a_dim1], &extra, &realc, &s, &dummy);
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__1.r = realc * dummy.r, q__1.i = realc *
- dummy.i;
- c.r = q__1.r, c.i = q__1.i;
- q__1.r = s.r * dummy.r - s.i * dummy.i,
- q__1.i = s.r * dummy.i + s.i *
- dummy.r;
- s.r = q__1.r, s.i = q__1.i;
- }
- ir = max(1,ir);
-/* Computing MIN */
- i__5 = *m - 1, i__6 = jch + jkl;
- irow = min(i__5,i__6);
- iltemp = jch + jkl < *m;
- ctemp.r = 0.f, ctemp.i = 0.f;
- i__5 = irow + 2 - ir;
- clarot_(&c_false, &ilextr, &iltemp, &i__5, &c, &s,
- &a[ir - iskew * jch + ioffst + jch *
- a_dim1], &ilda, &extra, &ctemp);
- if (iltemp) {
- clartg_(&a[irow - iskew * jch + ioffst + jch *
- a_dim1], &ctemp, &realc, &s, &dummy);
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__1.r = realc * dummy.r, q__1.i = realc *
- dummy.i;
- c.r = q__1.r, c.i = q__1.i;
- q__1.r = s.r * dummy.r - s.i * dummy.i,
- q__1.i = s.r * dummy.i + s.i *
- dummy.r;
- s.r = q__1.r, s.i = q__1.i;
-/* Computing MIN */
- i__5 = iendch, i__6 = jch + jkl + jku;
- il = min(i__5,i__6) + 2 - jch;
- extra.r = 0.f, extra.i = 0.f;
- L__1 = jch + jkl + jku <= iendch;
- clarot_(&c_true, &c_true, &L__1, &il, &c, &s,
- &a[irow - iskew * jch + ioffst + jch *
- a_dim1], &ilda, &ctemp, &extra);
- ir = irow;
- }
-/* L140: */
- }
-/* L150: */
- }
-/* L160: */
- }
-
- }
-
- } else {
-
-/* Symmetric -- A = U D U'
- Hermitian -- A = U D U* */
-
- ipackg = ipack;
- ioffg = ioffst;
-
- if (topdwn) {
-
-/* Top-Down -- Generate Upper triangle only */
-
- if (ipack >= 5) {
- ipackg = 6;
- ioffg = uub + 1;
- } else {
- ipackg = 1;
- }
-
- i__1 = mnmin;
- for (j = 1; j <= i__1; ++j) {
- i__4 = (1 - iskew) * j + ioffg + j * a_dim1;
- i__2 = j;
- q__1.r = d[i__2], q__1.i = 0.f;
- a[i__4].r = q__1.r, a[i__4].i = q__1.i;
-/* L170: */
- }
-
- i__1 = uub;
- for (k = 1; k <= i__1; ++k) {
- i__4 = *n - 1;
- for (jc = 1; jc <= i__4; ++jc) {
-/* Computing MAX */
- i__2 = 1, i__3 = jc - k;
- irow = max(i__2,i__3);
-/* Computing MIN */
- i__2 = jc + 1, i__3 = k + 2;
- il = min(i__2,i__3);
- extra.r = 0.f, extra.i = 0.f;
- i__2 = jc - iskew * (jc + 1) + ioffg + (jc + 1) *
- a_dim1;
- ctemp.r = a[i__2].r, ctemp.i = a[i__2].i;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- d__1 = cos(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- c.r = q__1.r, c.i = q__1.i;
- d__1 = sin(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- s.r = q__1.r, s.i = q__1.i;
- if (csym) {
- ct.r = c.r, ct.i = c.i;
- st.r = s.r, st.i = s.i;
- } else {
- r_cnjg(&q__1, &ctemp);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- r_cnjg(&q__1, &c);
- ct.r = q__1.r, ct.i = q__1.i;
- r_cnjg(&q__1, &s);
- st.r = q__1.r, st.i = q__1.i;
- }
- L__1 = jc > k;
- clarot_(&c_false, &L__1, &c_true, &il, &c, &s, &a[
- irow - iskew * jc + ioffg + jc * a_dim1], &
- ilda, &extra, &ctemp);
-/* Computing MIN */
- i__3 = k, i__5 = *n - jc;
- i__2 = min(i__3,i__5) + 1;
- clarot_(&c_true, &c_true, &c_false, &i__2, &ct, &st, &
- a[(1 - iskew) * jc + ioffg + jc * a_dim1], &
- ilda, &ctemp, &dummy);
-
-/* Chase EXTRA back up the matrix
-*/
-
- icol = jc;
- i__2 = -k;
- for (jch = jc - k; i__2 < 0 ? jch >= 1 : jch <= 1;
- jch += i__2) {
- clartg_(&a[jch + 1 - iskew * (icol + 1) + ioffg +
- (icol + 1) * a_dim1], &extra, &realc, &s,
- &dummy);
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__2.r = realc * dummy.r, q__2.i = realc *
- dummy.i;
- r_cnjg(&q__1, &q__2);
- c.r = q__1.r, c.i = q__1.i;
- q__3.r = -(doublereal)s.r, q__3.i = -(doublereal)
- s.i;
- q__2.r = q__3.r * dummy.r - q__3.i * dummy.i,
- q__2.i = q__3.r * dummy.i + q__3.i *
- dummy.r;
- r_cnjg(&q__1, &q__2);
- s.r = q__1.r, s.i = q__1.i;
- i__3 = jch - iskew * (jch + 1) + ioffg + (jch + 1)
- * a_dim1;
- ctemp.r = a[i__3].r, ctemp.i = a[i__3].i;
- if (csym) {
- ct.r = c.r, ct.i = c.i;
- st.r = s.r, st.i = s.i;
- } else {
- r_cnjg(&q__1, &ctemp);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- r_cnjg(&q__1, &c);
- ct.r = q__1.r, ct.i = q__1.i;
- r_cnjg(&q__1, &s);
- st.r = q__1.r, st.i = q__1.i;
- }
- i__3 = k + 2;
- clarot_(&c_true, &c_true, &c_true, &i__3, &c, &s,
- &a[(1 - iskew) * jch + ioffg + jch *
- a_dim1], &ilda, &ctemp, &extra);
-/* Computing MAX */
- i__3 = 1, i__5 = jch - k;
- irow = max(i__3,i__5);
-/* Computing MIN */
- i__3 = jch + 1, i__5 = k + 2;
- il = min(i__3,i__5);
- extra.r = 0.f, extra.i = 0.f;
- L__1 = jch > k;
- clarot_(&c_false, &L__1, &c_true, &il, &ct, &st, &
- a[irow - iskew * jch + ioffg + jch *
- a_dim1], &ilda, &extra, &ctemp);
- icol = jch;
-/* L180: */
- }
-/* L190: */
- }
-/* L200: */
- }
-
-/* If we need lower triangle, copy from upper. No
-te that
- the order of copying is chosen to work for 'q'
- -> 'b' */
-
- if (ipack != ipackg && ipack != 3) {
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- irow = ioffst - iskew * jc;
- if (csym) {
-/* Computing MIN */
- i__2 = *n, i__3 = jc + uub;
- i__4 = min(i__2,i__3);
- for (jr = jc; jr <= i__4; ++jr) {
- i__2 = jr + irow + jc * a_dim1;
- i__3 = jc - iskew * jr + ioffg + jr * a_dim1;
- a[i__2].r = a[i__3].r, a[i__2].i = a[i__3].i;
-/* L210: */
- }
- } else {
-/* Computing MIN */
- i__2 = *n, i__3 = jc + uub;
- i__4 = min(i__2,i__3);
- for (jr = jc; jr <= i__4; ++jr) {
- i__2 = jr + irow + jc * a_dim1;
- r_cnjg(&q__1, &a[jc - iskew * jr + ioffg + jr
- * a_dim1]);
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
-/* L220: */
- }
- }
-/* L230: */
- }
- if (ipack == 5) {
- i__1 = *n;
- for (jc = *n - uub + 1; jc <= i__1; ++jc) {
- i__4 = uub + 1;
- for (jr = *n + 2 - jc; jr <= i__4; ++jr) {
- i__2 = jr + jc * a_dim1;
- a[i__2].r = 0.f, a[i__2].i = 0.f;
-/* L240: */
- }
-/* L250: */
- }
- }
- if (ipackg == 6) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
- }
- } else {
-
-/* Bottom-Up -- Generate Lower triangle only */
-
- if (ipack >= 5) {
- ipackg = 5;
- if (ipack == 6) {
- ioffg = 1;
- }
- } else {
- ipackg = 2;
- }
-
- i__1 = mnmin;
- for (j = 1; j <= i__1; ++j) {
- i__4 = (1 - iskew) * j + ioffg + j * a_dim1;
- i__2 = j;
- q__1.r = d[i__2], q__1.i = 0.f;
- a[i__4].r = q__1.r, a[i__4].i = q__1.i;
-/* L260: */
- }
-
- i__1 = uub;
- for (k = 1; k <= i__1; ++k) {
- for (jc = *n - 1; jc >= 1; --jc) {
-/* Computing MIN */
- i__4 = *n + 1 - jc, i__2 = k + 2;
- il = min(i__4,i__2);
- extra.r = 0.f, extra.i = 0.f;
- i__4 = (1 - iskew) * jc + 1 + ioffg + jc * a_dim1;
- ctemp.r = a[i__4].r, ctemp.i = a[i__4].i;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- d__1 = cos(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- c.r = q__1.r, c.i = q__1.i;
- d__1 = sin(angle);
- clarnd_(&q__2, &c__5, &iseed[1]);
- q__1.r = d__1 * q__2.r, q__1.i = d__1 * q__2.i;
- s.r = q__1.r, s.i = q__1.i;
- if (csym) {
- ct.r = c.r, ct.i = c.i;
- st.r = s.r, st.i = s.i;
- } else {
- r_cnjg(&q__1, &ctemp);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- r_cnjg(&q__1, &c);
- ct.r = q__1.r, ct.i = q__1.i;
- r_cnjg(&q__1, &s);
- st.r = q__1.r, st.i = q__1.i;
- }
- L__1 = *n - jc > k;
- clarot_(&c_false, &c_true, &L__1, &il, &c, &s, &a[(1
- - iskew) * jc + ioffg + jc * a_dim1], &ilda, &
- ctemp, &extra);
-/* Computing MAX */
- i__4 = 1, i__2 = jc - k + 1;
- icol = max(i__4,i__2);
- i__4 = jc + 2 - icol;
- clarot_(&c_true, &c_false, &c_true, &i__4, &ct, &st, &
- a[jc - iskew * icol + ioffg + icol * a_dim1],
- &ilda, &dummy, &ctemp);
-
-/* Chase EXTRA back down the matrix
- */
-
- icol = jc;
- i__4 = *n - 1;
- i__2 = k;
- for (jch = jc + k; i__2 < 0 ? jch >= i__4 : jch <=
- i__4; jch += i__2) {
- clartg_(&a[jch - iskew * icol + ioffg + icol *
- a_dim1], &extra, &realc, &s, &dummy);
- clarnd_(&q__1, &c__5, &iseed[1]);
- dummy.r = q__1.r, dummy.i = q__1.i;
- q__1.r = realc * dummy.r, q__1.i = realc *
- dummy.i;
- c.r = q__1.r, c.i = q__1.i;
- q__1.r = s.r * dummy.r - s.i * dummy.i, q__1.i =
- s.r * dummy.i + s.i * dummy.r;
- s.r = q__1.r, s.i = q__1.i;
- i__3 = (1 - iskew) * jch + 1 + ioffg + jch *
- a_dim1;
- ctemp.r = a[i__3].r, ctemp.i = a[i__3].i;
- if (csym) {
- ct.r = c.r, ct.i = c.i;
- st.r = s.r, st.i = s.i;
- } else {
- r_cnjg(&q__1, &ctemp);
- ctemp.r = q__1.r, ctemp.i = q__1.i;
- r_cnjg(&q__1, &c);
- ct.r = q__1.r, ct.i = q__1.i;
- r_cnjg(&q__1, &s);
- st.r = q__1.r, st.i = q__1.i;
- }
- i__3 = k + 2;
- clarot_(&c_true, &c_true, &c_true, &i__3, &c, &s,
- &a[jch - iskew * icol + ioffg + icol *
- a_dim1], &ilda, &extra, &ctemp);
-/* Computing MIN */
- i__3 = *n + 1 - jch, i__5 = k + 2;
- il = min(i__3,i__5);
- extra.r = 0.f, extra.i = 0.f;
- L__1 = *n - jch > k;
- clarot_(&c_false, &c_true, &L__1, &il, &ct, &st, &
- a[(1 - iskew) * jch + ioffg + jch *
- a_dim1], &ilda, &ctemp, &extra);
- icol = jch;
-/* L270: */
- }
-/* L280: */
- }
-/* L290: */
- }
-
-/* If we need upper triangle, copy from lower. No
-te that
- the order of copying is chosen to work for 'b'
- -> 'q' */
-
- if (ipack != ipackg && ipack != 4) {
- for (jc = *n; jc >= 1; --jc) {
- irow = ioffst - iskew * jc;
- if (csym) {
-/* Computing MAX */
- i__2 = 1, i__4 = jc - uub;
- i__1 = max(i__2,i__4);
- for (jr = jc; jr >= i__1; --jr) {
- i__2 = jr + irow + jc * a_dim1;
- i__4 = jc - iskew * jr + ioffg + jr * a_dim1;
- a[i__2].r = a[i__4].r, a[i__2].i = a[i__4].i;
-/* L300: */
- }
- } else {
-/* Computing MAX */
- i__2 = 1, i__4 = jc - uub;
- i__1 = max(i__2,i__4);
- for (jr = jc; jr >= i__1; --jr) {
- i__2 = jr + irow + jc * a_dim1;
- r_cnjg(&q__1, &a[jc - iskew * jr + ioffg + jr
- * a_dim1]);
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
-/* L310: */
- }
- }
-/* L320: */
- }
- if (ipack == 6) {
- i__1 = uub;
- for (jc = 1; jc <= i__1; ++jc) {
- i__2 = uub + 1 - jc;
- for (jr = 1; jr <= i__2; ++jr) {
- i__4 = jr + jc * a_dim1;
- a[i__4].r = 0.f, a[i__4].i = 0.f;
-/* L330: */
- }
-/* L340: */
- }
- }
- if (ipackg == 5) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
- }
- }
-
-/* Ensure that the diagonal is real if Hermitian */
-
- if (! csym) {
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- irow = ioffst + (1 - iskew) * jc;
- i__2 = irow + jc * a_dim1;
- i__4 = irow + jc * a_dim1;
- d__1 = a[i__4].r;
- q__1.r = d__1, q__1.i = 0.f;
- a[i__2].r = q__1.r, a[i__2].i = q__1.i;
-/* L350: */
- }
- }
-
- }
-
- } else {
-
-/* 4) Generate Banded Matrix by first
- Rotating by random Unitary matrices,
- then reducing the bandwidth using Householder
- transformations.
-
- Note: we should get here only if LDA .ge. N */
-
- if (isym == 1) {
-
-/* Non-symmetric -- A = U D V */
-
- clagge_(&mr, &nc, &llb, &uub, &d[1], &a[a_offset], lda, &iseed[1],
- &work[1], &iinfo);
- } else {
-
-/* Symmetric -- A = U D U' or
- Hermitian -- A = U D U* */
-
- if (csym) {
- clagsy_(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1]
- , &iinfo);
- } else {
- claghe_(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1]
- , &iinfo);
- }
- }
-
- if (iinfo != 0) {
- *info = 3;
- return 0;
- }
- }
-
-/* 5) Pack the matrix */
-
- if (ipack != ipackg) {
- if (ipack == 1) {
-
-/* 'U' -- Upper triangular, not packed */
-
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j + 1; i <= i__2; ++i) {
- i__4 = i + j * a_dim1;
- a[i__4].r = 0.f, a[i__4].i = 0.f;
-/* L360: */
- }
-/* L370: */
- }
-
- } else if (ipack == 2) {
-
-/* 'L' -- Lower triangular, not packed */
-
- i__1 = *m;
- for (j = 2; j <= i__1; ++j) {
- i__2 = j - 1;
- for (i = 1; i <= i__2; ++i) {
- i__4 = i + j * a_dim1;
- a[i__4].r = 0.f, a[i__4].i = 0.f;
-/* L380: */
- }
-/* L390: */
- }
-
- } else if (ipack == 3) {
-
-/* 'C' -- Upper triangle packed Columnwise. */
-
- icol = 1;
- irow = 0;
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- ++irow;
- if (irow > *lda) {
- irow = 1;
- ++icol;
- }
- i__4 = irow + icol * a_dim1;
- i__3 = i + j * a_dim1;
- a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
-/* L400: */
- }
-/* L410: */
- }
-
- } else if (ipack == 4) {
-
-/* 'R' -- Lower triangle packed Columnwise. */
-
- icol = 1;
- irow = 0;
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j; i <= i__2; ++i) {
- ++irow;
- if (irow > *lda) {
- irow = 1;
- ++icol;
- }
- i__4 = irow + icol * a_dim1;
- i__3 = i + j * a_dim1;
- a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
-/* L420: */
- }
-/* L430: */
- }
-
- } else if (ipack >= 5) {
-
-/* 'B' -- The lower triangle is packed as a band matrix.
-
- 'Q' -- The upper triangle is packed as a band matrix.
-
- 'Z' -- The whole matrix is packed as a band matrix.
-*/
-
- if (ipack == 5) {
- uub = 0;
- }
- if (ipack == 6) {
- llb = 0;
- }
-
- i__1 = uub;
- for (j = 1; j <= i__1; ++j) {
-/* Computing MIN */
- i__2 = j + llb;
- for (i = min(i__2,*m); i >= 1; --i) {
- i__2 = i - j + uub + 1 + j * a_dim1;
- i__4 = i + j * a_dim1;
- a[i__2].r = a[i__4].r, a[i__2].i = a[i__4].i;
-/* L440: */
- }
-/* L450: */
- }
-
- i__1 = *n;
- for (j = uub + 2; j <= i__1; ++j) {
-/* Computing MIN */
- i__4 = j + llb;
- i__2 = min(i__4,*m);
- for (i = j - uub; i <= i__2; ++i) {
- i__4 = i - j + uub + 1 + j * a_dim1;
- i__3 = i + j * a_dim1;
- a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
-/* L460: */
- }
-/* L470: */
- }
- }
-
-/* If packed, zero out extraneous elements.
-
- Symmetric/Triangular Packed --
- zero out everything after A(IROW,ICOL) */
-
- if (ipack == 3 || ipack == 4) {
- i__1 = *m;
- for (jc = icol; jc <= i__1; ++jc) {
- i__2 = *lda;
- for (jr = irow + 1; jr <= i__2; ++jr) {
- i__4 = jr + jc * a_dim1;
- a[i__4].r = 0.f, a[i__4].i = 0.f;
-/* L480: */
- }
- irow = 0;
-/* L490: */
- }
-
- } else if (ipack >= 5) {
-
-/* Packed Band --
- 1st row is now in A( UUB+2-j, j), zero above it
- m-th row is now in A( M+UUB-j,j), zero below it
- last non-zero diagonal is now in A( UUB+LLB+1,j ),
-
- zero below it, too. */
-
- ir1 = uub + llb + 2;
- ir2 = uub + *m + 2;
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- i__2 = uub + 1 - jc;
- for (jr = 1; jr <= i__2; ++jr) {
- i__4 = jr + jc * a_dim1;
- a[i__4].r = 0.f, a[i__4].i = 0.f;
-/* L500: */
- }
-/* Computing MAX
- Computing MIN */
- i__3 = ir1, i__5 = ir2 - jc;
- i__2 = 1, i__4 = min(i__3,i__5);
- i__6 = *lda;
- for (jr = max(i__2,i__4); jr <= i__6; ++jr) {
- i__2 = jr + jc * a_dim1;
- a[i__2].r = 0.f, a[i__2].i = 0.f;
-/* L510: */
- }
-/* L520: */
- }
- }
- }
-
- return 0;
-
-/* End of CLATMS */
-
-} /* clatms_ */
-
diff --git a/TESTING/MATGEN/csymv.c b/TESTING/MATGEN/csymv.c
deleted file mode 100644
index 94470c2..0000000
--- a/TESTING/MATGEN/csymv.c
+++ /dev/null
@@ -1,408 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int csymv_(char *uplo, integer *n, complex *alpha, complex *
- a, integer *lda, complex *x, integer *incx, complex *beta, complex *y,
- integer *incy)
-{
-/* -- 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
- =======
-
- CSYMV performs the matrix-vector operation
-
- y := alpha*A*x + beta*y,
-
- where alpha and beta are scalars, x and y are n element vectors and
- A is an n by n symmetric matrix.
-
- Arguments
- ==========
-
- UPLO - CHARACTER*1
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX array, dimension ( LDA, N )
- Before entry, with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the symmetric matrix and the strictly
- lower triangular part of A is not referenced.
- Before entry, with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the symmetric matrix and the strictly
- upper triangular part of A is not referenced.
- Unchanged on exit.
-
- LDA - INTEGER
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, N ).
- Unchanged on exit.
-
- X - COMPLEX array, dimension at least
- ( 1 + ( N - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the N-
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - COMPLEX array, dimension at least
- ( 1 + ( N - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y. On exit, Y is overwritten by the updated
- vector y.
-
- INCY - INTEGER
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- =====================================================================
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- complex q__1, q__2, q__3, q__4;
- /* Local variables */
- static integer info;
- static complex temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*lda < max(1,*n)) {
- info = 5;
- } else if (*incx == 0) {
- info = 7;
- } else if (*incy == 0) {
- info = 10;
- }
- if (info != 0) {
- xerbla_("CSYMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || alpha->r == 0.f && alpha->i == 0.f && (beta->r == 1.f &&
- beta->i == 0.f)) {
- return 0;
- }
-
-/* Set up the start points in X and Y. */
-
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A.
-
- First form y := beta*y. */
-
- if (beta->r != 1.f || beta->i != 0.f) {
- if (*incy == 1) {
- if (beta->r == 0.f && beta->i == 0.f) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- Y(i).r = 0.f, Y(i).i = 0.f;
-/* L10: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- i__3 = i;
- q__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
- q__1.i = beta->r * Y(i).i + beta->i * Y(i)
- .r;
- Y(i).r = q__1.r, Y(i).i = q__1.i;
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (beta->r == 0.f && beta->i == 0.f) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = iy;
- Y(iy).r = 0.f, Y(iy).i = 0.f;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = iy;
- i__3 = iy;
- q__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
- q__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
- .r;
- Y(iy).r = q__1.r, Y(iy).i = q__1.i;
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (alpha->r == 0.f && alpha->i == 0.f) {
- return 0;
- }
- if (lsame_(uplo, "U")) {
-
-/* Form y when A is stored in upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- q__1.r = alpha->r * X(j).r - alpha->i * X(j).i, q__1.i =
- alpha->r * X(j).i + alpha->i * X(j).r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- temp2.r = 0.f, temp2.i = 0.f;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i + q__2.i;
- Y(i).r = q__1.r, Y(i).i = q__1.i;
- i__3 = i + j * a_dim1;
- i__4 = i;
- q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i).i,
- q__2.i = A(i,j).r * X(i).i + A(i,j).i * X(
- i).r;
- q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
- temp2.r = q__1.r, temp2.i = q__1.i;
-/* L50: */
- }
- i__2 = j;
- i__3 = j;
- i__4 = j + j * a_dim1;
- q__3.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, q__3.i =
- temp1.r * A(j,j).i + temp1.i * A(j,j).r;
- q__2.r = Y(j).r + q__3.r, q__2.i = Y(j).i + q__3.i;
- q__4.r = alpha->r * temp2.r - alpha->i * temp2.i, q__4.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
- Y(j).r = q__1.r, Y(j).i = q__1.i;
-/* L60: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, q__1.i =
- alpha->r * X(jx).i + alpha->i * X(jx).r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- temp2.r = 0.f, temp2.i = 0.f;
- ix = kx;
- iy = ky;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i + q__2.i;
- Y(iy).r = q__1.r, Y(iy).i = q__1.i;
- i__3 = i + j * a_dim1;
- i__4 = ix;
- q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix).i,
- q__2.i = A(i,j).r * X(ix).i + A(i,j).i * X(
- ix).r;
- q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
- temp2.r = q__1.r, temp2.i = q__1.i;
- ix += *incx;
- iy += *incy;
-/* L70: */
- }
- i__2 = jy;
- i__3 = jy;
- i__4 = j + j * a_dim1;
- q__3.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, q__3.i =
- temp1.r * A(j,j).i + temp1.i * A(j,j).r;
- q__2.r = Y(jy).r + q__3.r, q__2.i = Y(jy).i + q__3.i;
- q__4.r = alpha->r * temp2.r - alpha->i * temp2.i, q__4.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- q__1.r = q__2.r + q__4.r, q__1.i = q__2.i + q__4.i;
- Y(jy).r = q__1.r, Y(jy).i = q__1.i;
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- } else {
-
-/* Form y when A is stored in lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- q__1.r = alpha->r * X(j).r - alpha->i * X(j).i, q__1.i =
- alpha->r * X(j).i + alpha->i * X(j).r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- temp2.r = 0.f, temp2.i = 0.f;
- i__2 = j;
- i__3 = j;
- i__4 = j + j * a_dim1;
- q__2.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, q__2.i =
- temp1.r * A(j,j).i + temp1.i * A(j,j).r;
- q__1.r = Y(j).r + q__2.r, q__1.i = Y(j).i + q__2.i;
- Y(j).r = q__1.r, Y(j).i = q__1.i;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- q__1.r = Y(i).r + q__2.r, q__1.i = Y(i).i + q__2.i;
- Y(i).r = q__1.r, Y(i).i = q__1.i;
- i__3 = i + j * a_dim1;
- i__4 = i;
- q__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i).i,
- q__2.i = A(i,j).r * X(i).i + A(i,j).i * X(
- i).r;
- q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
- temp2.r = q__1.r, temp2.i = q__1.i;
-/* L90: */
- }
- i__2 = j;
- i__3 = j;
- q__2.r = alpha->r * temp2.r - alpha->i * temp2.i, q__2.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- q__1.r = Y(j).r + q__2.r, q__1.i = Y(j).i + q__2.i;
- Y(j).r = q__1.r, Y(j).i = q__1.i;
-/* L100: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- q__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, q__1.i =
- alpha->r * X(jx).i + alpha->i * X(jx).r;
- temp1.r = q__1.r, temp1.i = q__1.i;
- temp2.r = 0.f, temp2.i = 0.f;
- i__2 = jy;
- i__3 = jy;
- i__4 = j + j * a_dim1;
- q__2.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, q__2.i =
- temp1.r * A(j,j).i + temp1.i * A(j,j).r;
- q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
- Y(jy).r = q__1.r, Y(jy).i = q__1.i;
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- iy += *incy;
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- q__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- q__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- q__1.r = Y(iy).r + q__2.r, q__1.i = Y(iy).i + q__2.i;
- Y(iy).r = q__1.r, Y(iy).i = q__1.i;
- i__3 = i + j * a_dim1;
- i__4 = ix;
- q__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix).i,
- q__2.i = A(i,j).r * X(ix).i + A(i,j).i * X(
- ix).r;
- q__1.r = temp2.r + q__2.r, q__1.i = temp2.i + q__2.i;
- temp2.r = q__1.r, temp2.i = q__1.i;
-/* L110: */
- }
- i__2 = jy;
- i__3 = jy;
- q__2.r = alpha->r * temp2.r - alpha->i * temp2.i, q__2.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- q__1.r = Y(jy).r + q__2.r, q__1.i = Y(jy).i + q__2.i;
- Y(jy).r = q__1.r, Y(jy).i = q__1.i;
- jx += *incx;
- jy += *incy;
-/* L120: */
- }
- }
- }
-
- return 0;
-
-/* End of CSYMV */
-
-} /* csymv_ */
-
diff --git a/TESTING/MATGEN/dlabad.c b/TESTING/MATGEN/dlabad.c
deleted file mode 100644
index 03fa9fd..0000000
--- a/TESTING/MATGEN/dlabad.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int dlabad_(doublereal *small, doublereal *large)
-{
-/* -- 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
- =======
-
- DLABAD takes as input the values computed by SLAMCH for underflow and
-
- overflow, and returns the square root of each of these values if the
-
- log of LARGE is sufficiently large. This subroutine is intended to
- identify machines with a large exponent range, such as the Crays, and
-
- redefine the underflow and overflow limits to be the square roots of
-
- the values computed by DLAMCH. This subroutine is needed because
- DLAMCH does not compensate for poor arithmetic in the upper half of
- the exponent range, as is found on a Cray.
-
- Arguments
- =========
-
- SMALL (input/output) DOUBLE PRECISION
- On entry, the underflow threshold as computed by DLAMCH.
- On exit, if LOG10(LARGE) is sufficiently large, the square
- root of SMALL, otherwise unchanged.
-
- LARGE (input/output) DOUBLE PRECISION
- On entry, the overflow threshold as computed by DLAMCH.
- On exit, if LOG10(LARGE) is sufficiently large, the square
- root of LARGE, otherwise unchanged.
-
- =====================================================================
-
-
-
- If it looks like we're on a Cray, take the square root of
- SMALL and LARGE to avoid overflow and underflow problems. */
- /* Builtin functions */
- double d_lg10(doublereal *), sqrt(doublereal);
-
-
- if (d_lg10(large) > 2e3) {
- *small = sqrt(*small);
- *large = sqrt(*large);
- }
-
- return 0;
-
-/* End of DLABAD */
-
-} /* dlabad_ */
-
diff --git a/TESTING/MATGEN/dlagge.c b/TESTING/MATGEN/dlagge.c
deleted file mode 100644
index 8d4e4ba..0000000
--- a/TESTING/MATGEN/dlagge.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__3 = 3;
-static integer c__1 = 1;
-static doublereal c_b11 = 1.;
-static doublereal c_b13 = 0.;
-
-/* Subroutine */ int dlagge_(integer *m, integer *n, integer *kl, integer *ku,
- doublereal *d, doublereal *a, integer *lda, integer *iseed,
- doublereal *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- doublereal d__1;
-
- /* Builtin functions */
- double d_sign(doublereal *, doublereal *);
-
- /* Local variables */
- extern /* Subroutine */ int dger_(integer *, integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *, doublereal *,
- integer *);
- extern doublereal dnrm2_(integer *, doublereal *, integer *);
- static integer i, j;
- extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
- integer *), dgemv_(char *, integer *, integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *, doublereal *,
- doublereal *, integer *);
- static doublereal wa, wb, wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), dlarnv_(
- integer *, integer *, integer *, doublereal *);
- static doublereal tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0)
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- DLAGGE generates a real general m by n matrix A, by pre- and post-
- multiplying a real diagonal matrix D with random orthogonal matrices:
-
- A = U*D*V. The lower and upper bandwidths may then be reduced to
- kl and ku by additional orthogonal transformations.
-
- Arguments
- =========
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- KL (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= KL <= M-1.
-
- KU (input) INTEGER
- The number of nonzero superdiagonals within the band of A.
- 0 <= KU <= N-1.
-
- D (input) DOUBLE PRECISION array, dimension (min(M,N))
- The diagonal elements of the diagonal matrix D.
-
- A (output) DOUBLE PRECISION array, dimension (LDA,N)
- The generated m by n matrix A.
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= M.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) DOUBLE PRECISION array, dimension (M+N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*m < 0) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (*kl < 0 || *kl > *m - 1) {
- *info = -3;
- } else if (*ku < 0 || *ku > *n - 1) {
- *info = -4;
- } else if (*lda < max(1,*m)) {
- *info = -7;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("DLAGGE", &i__1);
- return 0;
- }
-
-/* initialize A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = 0.;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = min(*m,*n);
- for (i = 1; i <= i__1; ++i) {
- a[i + i * a_dim1] = d[i];
-/* L30: */
- }
-
-/* pre- and post-multiply A by random orthogonal matrices */
-
- for (i = min(*m,*n); i >= 1; --i) {
- if (i < *m) {
-
-/* generate random reflection */
-
- i__1 = *m - i + 1;
- dlarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *m - i + 1;
- wn = dnrm2_(&i__1, &work[1], &c__1);
- wa = d_sign(&wn, &work[1]);
- if (wn == 0.) {
- tau = 0.;
- } else {
- wb = work[1] + wa;
- i__1 = *m - i;
- d__1 = 1. / wb;
- dscal_(&i__1, &d__1, &work[2], &c__1);
- work[1] = 1.;
- tau = wb / wa;
- }
-
-/* multiply A(i:m,i:n) by random reflection from the lef
-t */
-
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- dgemv_("Transpose", &i__1, &i__2, &c_b11, &a[i + i * a_dim1], lda,
- &work[1], &c__1, &c_b13, &work[*m + 1], &c__1);
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- d__1 = -tau;
- dger_(&i__1, &i__2, &d__1, &work[1], &c__1, &work[*m + 1], &c__1,
- &a[i + i * a_dim1], lda);
- }
- if (i < *n) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- dlarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = dnrm2_(&i__1, &work[1], &c__1);
- wa = d_sign(&wn, &work[1]);
- if (wn == 0.) {
- tau = 0.;
- } else {
- wb = work[1] + wa;
- i__1 = *n - i;
- d__1 = 1. / wb;
- dscal_(&i__1, &d__1, &work[2], &c__1);
- work[1] = 1.;
- tau = wb / wa;
- }
-
-/* multiply A(i:m,i:n) by random reflection from the rig
-ht */
-
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- dgemv_("No transpose", &i__1, &i__2, &c_b11, &a[i + i * a_dim1],
- lda, &work[1], &c__1, &c_b13, &work[*n + 1], &c__1);
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- d__1 = -tau;
- dger_(&i__1, &i__2, &d__1, &work[*n + 1], &c__1, &work[1], &c__1,
- &a[i + i * a_dim1], lda);
- }
-/* L40: */
- }
-
-/* Reduce number of subdiagonals to KL and number of superdiagonals
- to KU
-
- Computing MAX */
- i__2 = *m - 1 - *kl, i__3 = *n - 1 - *ku;
- i__1 = max(i__2,i__3);
- for (i = 1; i <= i__1; ++i) {
- if (*kl <= *ku) {
-
-/* annihilate subdiagonal elements first (necessary if K
-L = 0)
-
- Computing MIN */
- i__2 = *m - 1 - *kl;
- if (i <= min(i__2,*n)) {
-
-/* generate reflection to annihilate A(kl+i+1:m,i
-) */
-
- i__2 = *m - *kl - i + 1;
- wn = dnrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
- wa = d_sign(&wn, &a[*kl + i + i * a_dim1]);
- if (wn == 0.) {
- tau = 0.;
- } else {
- wb = a[*kl + i + i * a_dim1] + wa;
- i__2 = *m - *kl - i;
- d__1 = 1. / wb;
- dscal_(&i__2, &d__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
- a[*kl + i + i * a_dim1] = 1.;
- tau = wb / wa;
- }
-
-/* apply reflection to A(kl+i:m,i+1:n) from the l
-eft */
-
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- dgemv_("Transpose", &i__2, &i__3, &c_b11, &a[*kl + i + (i + 1)
- * a_dim1], lda, &a[*kl + i + i * a_dim1], &c__1, &
- c_b13, &work[1], &c__1);
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- d__1 = -tau;
- dger_(&i__2, &i__3, &d__1, &a[*kl + i + i * a_dim1], &c__1, &
- work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
- a[*kl + i + i * a_dim1] = -wa;
- }
-
-/* Computing MIN */
- i__2 = *n - 1 - *ku;
- if (i <= min(i__2,*m)) {
-
-/* generate reflection to annihilate A(i,ku+i+1:n
-) */
-
- i__2 = *n - *ku - i + 1;
- wn = dnrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- wa = d_sign(&wn, &a[i + (*ku + i) * a_dim1]);
- if (wn == 0.) {
- tau = 0.;
- } else {
- wb = a[i + (*ku + i) * a_dim1] + wa;
- i__2 = *n - *ku - i;
- d__1 = 1. / wb;
- dscal_(&i__2, &d__1, &a[i + (*ku + i + 1) * a_dim1], lda);
- a[i + (*ku + i) * a_dim1] = 1.;
- tau = wb / wa;
- }
-
-/* apply reflection to A(i+1:m,ku+i:n) from the r
-ight */
-
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- dgemv_("No transpose", &i__2, &i__3, &c_b11, &a[i + 1 + (*ku
- + i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda,
- &c_b13, &work[1], &c__1);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- d__1 = -tau;
- dger_(&i__2, &i__3, &d__1, &work[1], &c__1, &a[i + (*ku + i) *
- a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
- a[i + (*ku + i) * a_dim1] = -wa;
- }
- } else {
-
-/* annihilate superdiagonal elements first (necessary if
-
- KU = 0)
-
- Computing MIN */
- i__2 = *n - 1 - *ku;
- if (i <= min(i__2,*m)) {
-
-/* generate reflection to annihilate A(i,ku+i+1:n
-) */
-
- i__2 = *n - *ku - i + 1;
- wn = dnrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- wa = d_sign(&wn, &a[i + (*ku + i) * a_dim1]);
- if (wn == 0.) {
- tau = 0.;
- } else {
- wb = a[i + (*ku + i) * a_dim1] + wa;
- i__2 = *n - *ku - i;
- d__1 = 1. / wb;
- dscal_(&i__2, &d__1, &a[i + (*ku + i + 1) * a_dim1], lda);
- a[i + (*ku + i) * a_dim1] = 1.;
- tau = wb / wa;
- }
-
-/* apply reflection to A(i+1:m,ku+i:n) from the r
-ight */
-
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- dgemv_("No transpose", &i__2, &i__3, &c_b11, &a[i + 1 + (*ku
- + i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda,
- &c_b13, &work[1], &c__1);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- d__1 = -tau;
- dger_(&i__2, &i__3, &d__1, &work[1], &c__1, &a[i + (*ku + i) *
- a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
- a[i + (*ku + i) * a_dim1] = -wa;
- }
-
-/* Computing MIN */
- i__2 = *m - 1 - *kl;
- if (i <= min(i__2,*n)) {
-
-/* generate reflection to annihilate A(kl+i+1:m,i
-) */
-
- i__2 = *m - *kl - i + 1;
- wn = dnrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
- wa = d_sign(&wn, &a[*kl + i + i * a_dim1]);
- if (wn == 0.) {
- tau = 0.;
- } else {
- wb = a[*kl + i + i * a_dim1] + wa;
- i__2 = *m - *kl - i;
- d__1 = 1. / wb;
- dscal_(&i__2, &d__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
- a[*kl + i + i * a_dim1] = 1.;
- tau = wb / wa;
- }
-
-/* apply reflection to A(kl+i:m,i+1:n) from the l
-eft */
-
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- dgemv_("Transpose", &i__2, &i__3, &c_b11, &a[*kl + i + (i + 1)
- * a_dim1], lda, &a[*kl + i + i * a_dim1], &c__1, &
- c_b13, &work[1], &c__1);
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- d__1 = -tau;
- dger_(&i__2, &i__3, &d__1, &a[*kl + i + i * a_dim1], &c__1, &
- work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
- a[*kl + i + i * a_dim1] = -wa;
- }
- }
-
- i__2 = *m;
- for (j = *kl + i + 1; j <= i__2; ++j) {
- a[j + i * a_dim1] = 0.;
-/* L50: */
- }
-
- i__2 = *n;
- for (j = *ku + i + 1; j <= i__2; ++j) {
- a[i + j * a_dim1] = 0.;
-/* L60: */
- }
-/* L70: */
- }
- return 0;
-
-/* End of DLAGGE */
-
-} /* dlagge_ */
-
diff --git a/TESTING/MATGEN/dlagsy.c b/TESTING/MATGEN/dlagsy.c
deleted file mode 100644
index 46c837a..0000000
--- a/TESTING/MATGEN/dlagsy.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__3 = 3;
-static integer c__1 = 1;
-static doublereal c_b12 = 0.;
-static doublereal c_b19 = -1.;
-static doublereal c_b26 = 1.;
-
-/* Subroutine */ int dlagsy_(integer *n, integer *k, doublereal *d,
- doublereal *a, integer *lda, integer *iseed, doublereal *work,
- integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- doublereal d__1;
-
- /* Builtin functions */
- double d_sign(doublereal *, doublereal *);
-
- /* Local variables */
- extern /* Subroutine */ int dger_(integer *, integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *, doublereal *,
- integer *);
- extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *,
- integer *), dnrm2_(integer *, doublereal *, integer *);
- extern /* Subroutine */ int dsyr2_(char *, integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *, doublereal *,
- integer *);
- static integer i, j;
- static doublereal alpha;
- extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
- integer *), dgemv_(char *, integer *, integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *, doublereal *,
- doublereal *, integer *), daxpy_(integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *), dsymv_(char *,
- integer *, doublereal *, doublereal *, integer *, doublereal *,
- integer *, doublereal *, doublereal *, integer *);
- static doublereal wa, wb, wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), dlarnv_(
- integer *, integer *, integer *, doublereal *);
- static doublereal tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0)
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- DLAGSY generates a real symmetric matrix A, by pre- and post-
- multiplying a real diagonal matrix D with a random orthogonal matrix:
-
- A = U*D*U'. The semi-bandwidth may then be reduced to k by additional
-
- orthogonal transformations.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- K (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= K <= N-1.
-
- D (input) DOUBLE PRECISION array, dimension (N)
- The diagonal elements of the diagonal matrix D.
-
- A (output) DOUBLE PRECISION array, dimension (LDA,N)
- The generated n by n symmetric matrix A (the full matrix is
- stored).
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) DOUBLE PRECISION array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*k < 0 || *k > *n - 1) {
- *info = -2;
- } else if (*lda < max(1,*n)) {
- *info = -5;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("DLAGSY", &i__1);
- return 0;
- }
-
-/* initialize lower triangle of A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = 0.;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- a[i + i * a_dim1] = d[i];
-/* L30: */
- }
-
-/* Generate lower triangle of symmetric matrix */
-
- for (i = *n - 1; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- dlarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = dnrm2_(&i__1, &work[1], &c__1);
- wa = d_sign(&wn, &work[1]);
- if (wn == 0.) {
- tau = 0.;
- } else {
- wb = work[1] + wa;
- i__1 = *n - i;
- d__1 = 1. / wb;
- dscal_(&i__1, &d__1, &work[2], &c__1);
- work[1] = 1.;
- tau = wb / wa;
- }
-
-/* apply random reflection to A(i:n,i:n) from the left
- and the right
-
- compute y := tau * A * u */
-
- i__1 = *n - i + 1;
- dsymv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
- &c_b12, &work[*n + 1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( y, u ) * u */
-
- i__1 = *n - i + 1;
- alpha = tau * -.5 * ddot_(&i__1, &work[*n + 1], &c__1, &work[1], &
- c__1);
- i__1 = *n - i + 1;
- daxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
-
-/* apply the transformation as a rank-2 update to A(i:n,i:n) */
-
- i__1 = *n - i + 1;
- dsyr2_("Lower", &i__1, &c_b19, &work[1], &c__1, &work[*n + 1], &c__1,
- &a[i + i * a_dim1], lda);
-/* L40: */
- }
-
-/* Reduce number of subdiagonals to K */
-
- i__1 = *n - 1 - *k;
- for (i = 1; i <= i__1; ++i) {
-
-/* generate reflection to annihilate A(k+i+1:n,i) */
-
- i__2 = *n - *k - i + 1;
- wn = dnrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
- wa = d_sign(&wn, &a[*k + i + i * a_dim1]);
- if (wn == 0.) {
- tau = 0.;
- } else {
- wb = a[*k + i + i * a_dim1] + wa;
- i__2 = *n - *k - i;
- d__1 = 1. / wb;
- dscal_(&i__2, &d__1, &a[*k + i + 1 + i * a_dim1], &c__1);
- a[*k + i + i * a_dim1] = 1.;
- tau = wb / wa;
- }
-
-/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
-
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- dgemv_("Transpose", &i__2, &i__3, &c_b26, &a[*k + i + (i + 1) *
- a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b12, &work[1]
- , &c__1);
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- d__1 = -tau;
- dger_(&i__2, &i__3, &d__1, &a[*k + i + i * a_dim1], &c__1, &work[1], &
- c__1, &a[*k + i + (i + 1) * a_dim1], lda);
-
-/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
-ht
-
- compute y := tau * A * u */
-
- i__2 = *n - *k - i + 1;
- dsymv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
- k + i + i * a_dim1], &c__1, &c_b12, &work[1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( y, u ) * u */
-
- i__2 = *n - *k - i + 1;
- alpha = tau * -.5 * ddot_(&i__2, &work[1], &c__1, &a[*k + i + i *
- a_dim1], &c__1);
- i__2 = *n - *k - i + 1;
- daxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
- ;
-
-/* apply symmetric rank-2 update to A(k+i:n,k+i:n) */
-
- i__2 = *n - *k - i + 1;
- dsyr2_("Lower", &i__2, &c_b19, &a[*k + i + i * a_dim1], &c__1, &work[
- 1], &c__1, &a[*k + i + (*k + i) * a_dim1], lda);
-
- a[*k + i + i * a_dim1] = -wa;
- i__2 = *n;
- for (j = *k + i + 1; j <= i__2; ++j) {
- a[j + i * a_dim1] = 0.;
-/* L50: */
- }
-/* L60: */
- }
-
-/* Store full symmetric matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- a[j + i * a_dim1] = a[i + j * a_dim1];
-/* L70: */
- }
-/* L80: */
- }
- return 0;
-
-/* End of DLAGSY */
-
-} /* dlagsy_ */
-
diff --git a/TESTING/MATGEN/dlaran.c b/TESTING/MATGEN/dlaran.c
deleted file mode 100644
index c4101b8..0000000
--- a/TESTING/MATGEN/dlaran.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-doublereal dlaran_(integer *iseed)
-{
- /* System generated locals */
- doublereal ret_val;
-
- /* Local variables */
- static integer it1, it2, it3, it4;
-
-
-/* -- LAPACK auxiliary routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- DLARAN returns a random real number from a uniform (0,1)
- distribution.
-
- Arguments
- =========
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- Further Details
- ===============
-
- This routine uses a multiplicative congruential method with modulus
- 2**48 and multiplier 33952834046453 (see G.S.Fishman,
- 'Multiplicative congruential random number generators with modulus
- 2**b: an exhaustive analysis for b = 32 and a partial analysis for
- b = 48', Math. Comp. 189, pp 331-344, 1990).
-
- 48-bit integers are stored in 4 integer array elements with 12 bits
- per element. Hence the routine is portable across machines with
- integers of 32 bits or more.
-
- =====================================================================
-
-
-
- multiply the seed by the multiplier modulo 2**48
-
- Parameter adjustments */
- --iseed;
-
- /* Function Body */
- it4 = iseed[4] * 2549;
- it3 = it4 / 4096;
- it4 -= it3 << 12;
- it3 = it3 + iseed[3] * 2549 + iseed[4] * 2508;
- it2 = it3 / 4096;
- it3 -= it2 << 12;
- it2 = it2 + iseed[2] * 2549 + iseed[3] * 2508 + iseed[4] * 322;
- it1 = it2 / 4096;
- it2 -= it1 << 12;
- it1 = it1 + iseed[1] * 2549 + iseed[2] * 2508 + iseed[3] * 322 + iseed[4]
- * 494;
- it1 %= 4096;
-
-/* return updated seed */
-
- iseed[1] = it1;
- iseed[2] = it2;
- iseed[3] = it3;
- iseed[4] = it4;
-
-/* convert 48-bit integer to a real number in the interval (0,1) */
-
- ret_val = ((doublereal) it1 + ((doublereal) it2 + ((doublereal) it3 + (
- doublereal) it4 * 2.44140625e-4) * 2.44140625e-4) * 2.44140625e-4)
- * 2.44140625e-4;
- return ret_val;
-
-/* End of DLARAN */
-
-} /* dlaran_ */
-
diff --git a/TESTING/MATGEN/dlarge.c b/TESTING/MATGEN/dlarge.c
deleted file mode 100644
index 86840c4..0000000
--- a/TESTING/MATGEN/dlarge.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__3 = 3;
-static integer c__1 = 1;
-static doublereal c_b8 = 1.;
-static doublereal c_b10 = 0.;
-
-/* Subroutine */ int dlarge_(integer *n, doublereal *a, integer *lda, integer
- *iseed, doublereal *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1;
- doublereal d__1;
-
- /* Builtin functions */
- double d_sign(doublereal *, doublereal *);
-
- /* Local variables */
- extern /* Subroutine */ int dger_(integer *, integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *, doublereal *,
- integer *);
- extern doublereal dnrm2_(integer *, doublereal *, integer *);
- static integer i;
- extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
- integer *), dgemv_(char *, integer *, integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *, doublereal *,
- doublereal *, integer *);
- static doublereal wa, wb, wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), dlarnv_(
- integer *, integer *, integer *, doublereal *);
- static doublereal tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0)
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- DLARGE pre- and post-multiplies a real general n by n matrix A
- with a random orthogonal matrix: A = U*D*U'.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
- On entry, the original n by n matrix A.
- On exit, A is overwritten by U*A*U' for some random
- orthogonal matrix U.
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) DOUBLE PRECISION array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*lda < max(1,*n)) {
- *info = -3;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("DLARGE", &i__1);
- return 0;
- }
-
-/* pre- and post-multiply A by random orthogonal matrix */
-
- for (i = *n; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- dlarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = dnrm2_(&i__1, &work[1], &c__1);
- wa = d_sign(&wn, &work[1]);
- if (wn == 0.) {
- tau = 0.;
- } else {
- wb = work[1] + wa;
- i__1 = *n - i;
- d__1 = 1. / wb;
- dscal_(&i__1, &d__1, &work[2], &c__1);
- work[1] = 1.;
- tau = wb / wa;
- }
-
-/* multiply A(i:n,1:n) by random reflection from the left */
-
- i__1 = *n - i + 1;
- dgemv_("Transpose", &i__1, n, &c_b8, &a[i + a_dim1], lda, &work[1], &
- c__1, &c_b10, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- d__1 = -tau;
- dger_(&i__1, n, &d__1, &work[1], &c__1, &work[*n + 1], &c__1, &a[i +
- a_dim1], lda);
-
-/* multiply A(1:n,i:n) by random reflection from the right */
-
- i__1 = *n - i + 1;
- dgemv_("No transpose", n, &i__1, &c_b8, &a[i * a_dim1 + 1], lda, &
- work[1], &c__1, &c_b10, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- d__1 = -tau;
- dger_(n, &i__1, &d__1, &work[*n + 1], &c__1, &work[1], &c__1, &a[i *
- a_dim1 + 1], lda);
-/* L10: */
- }
- return 0;
-
-/* End of DLARGE */
-
-} /* dlarge_ */
-
diff --git a/TESTING/MATGEN/dlarnd.c b/TESTING/MATGEN/dlarnd.c
deleted file mode 100644
index 20ec813..0000000
--- a/TESTING/MATGEN/dlarnd.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-doublereal dlarnd_(integer *idist, integer *iseed)
-{
- /* System generated locals */
- doublereal ret_val;
-
- /* Builtin functions */
- double log(doublereal), sqrt(doublereal), cos(doublereal);
-
- /* Local variables */
- static doublereal t1, t2;
- extern doublereal dlaran_(integer *);
-
-
-/* -- 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
-
-
- Purpose
- =======
-
- DLARND returns a random real number from a uniform or normal
- distribution.
-
- Arguments
- =========
-
- IDIST (input) INTEGER
- Specifies the distribution of the random numbers:
- = 1: uniform (0,1)
- = 2: uniform (-1,1)
- = 3: normal (0,1)
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- Further Details
- ===============
-
- This routine calls the auxiliary routine DLARAN to generate a random
-
- real number from a uniform (0,1) distribution. The Box-Muller method
-
- is used to transform numbers from a uniform to a normal distribution.
-
-
- =====================================================================
-
-
-
- Generate a real random number from a uniform (0,1) distribution
-
- Parameter adjustments */
- --iseed;
-
- /* Function Body */
- t1 = dlaran_(&iseed[1]);
-
- if (*idist == 1) {
-
-/* uniform (0,1) */
-
- ret_val = t1;
- } else if (*idist == 2) {
-
-/* uniform (-1,1) */
-
- ret_val = t1 * 2. - 1.;
- } else if (*idist == 3) {
-
-/* normal (0,1) */
-
- t2 = dlaran_(&iseed[1]);
- ret_val = sqrt(log(t1) * -2.) * cos(t2 *
- 6.2831853071795864769252867663);
- }
- return ret_val;
-
-/* End of DLARND */
-
-} /* dlarnd_ */
-
diff --git a/TESTING/MATGEN/dlarnv.c b/TESTING/MATGEN/dlarnv.c
deleted file mode 100644
index c0b3f3e..0000000
--- a/TESTING/MATGEN/dlarnv.c
+++ /dev/null
@@ -1,126 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int dlarnv_(integer *idist, integer *iseed, integer *n,
- doublereal *x)
-{
-/* -- 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
-
-
- Purpose
- =======
-
- DLARNV returns a vector of n random real numbers from a uniform or
- normal distribution.
-
- Arguments
- =========
-
- IDIST (input) INTEGER
- Specifies the distribution of the random numbers:
- = 1: uniform (0,1)
- = 2: uniform (-1,1)
- = 3: normal (0,1)
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- N (input) INTEGER
- The number of random numbers to be generated.
-
- X (output) DOUBLE PRECISION array, dimension (N)
- The generated random numbers.
-
- Further Details
- ===============
-
- This routine calls the auxiliary routine DLARUV to generate random
- real numbers from a uniform (0,1) distribution, in batches of up to
- 128 using vectorisable code. The Box-Muller method is used to
- transform numbers from a uniform to a normal distribution.
-
- =====================================================================
-
-
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer i__1, i__2, i__3;
- /* Builtin functions */
- double log(doublereal), sqrt(doublereal), cos(doublereal);
- /* Local variables */
- static integer i;
- static doublereal u[128];
- static integer il, iv;
- extern /* Subroutine */ int dlaruv_(integer *, integer *, doublereal *);
- static integer il2;
-
-
-#define U(I) u[(I)]
-#define X(I) x[(I)-1]
-#define ISEED(I) iseed[(I)-1]
-
-
- i__1 = *n;
- for (iv = 1; iv <= *n; iv += 64) {
-/* Computing MIN */
- i__2 = 64, i__3 = *n - iv + 1;
- il = min(i__2,i__3);
- if (*idist == 3) {
- il2 = il << 1;
- } else {
- il2 = il;
- }
-
-/* Call DLARUV to generate IL2 numbers from a uniform (0,1)
- distribution (IL2 <= LV) */
-
- dlaruv_(&ISEED(1), &il2, u);
-
- if (*idist == 1) {
-
-/* Copy generated numbers */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- X(iv + i - 1) = U(i - 1);
-/* L10: */
- }
- } else if (*idist == 2) {
-
-/* Convert generated numbers to uniform (-1,1) distribut
-ion */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- X(iv + i - 1) = U(i - 1) * 2. - 1.;
-/* L20: */
- }
- } else if (*idist == 3) {
-
-/* Convert generated numbers to normal (0,1) distributio
-n */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- X(iv + i - 1) = sqrt(log(U((i << 1) - 2)) * -2.) * cos(U((i <<
- 1) - 1) * 6.2831853071795864769252867663);
-/* L30: */
- }
- }
-/* L40: */
- }
- return 0;
-
-/* End of DLARNV */
-
-} /* dlarnv_ */
-
diff --git a/TESTING/MATGEN/dlaror.c b/TESTING/MATGEN/dlaror.c
deleted file mode 100644
index 17b12d4..0000000
--- a/TESTING/MATGEN/dlaror.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static doublereal c_b9 = 0.;
-static doublereal c_b10 = 1.;
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int dlaror_(char *side, char *init, integer *m, integer *n,
- doublereal *a, integer *lda, integer *iseed, doublereal *x, integer *
- info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
- doublereal d__1;
-
- /* Builtin functions */
- double d_sign(doublereal *, doublereal *);
-
- /* Local variables */
- static integer kbeg;
- extern /* Subroutine */ int dger_(integer *, integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *, doublereal *,
- integer *);
- static integer jcol, irow;
- extern doublereal dnrm2_(integer *, doublereal *, integer *);
- static integer j;
- extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
- integer *);
- extern logical lsame_(char *, char *);
- extern /* Subroutine */ int dgemv_(char *, integer *, integer *,
- doublereal *, doublereal *, integer *, doublereal *, integer *,
- doublereal *, doublereal *, integer *);
- static integer ixfrm, itype, nxfrm;
- static doublereal xnorm;
- extern doublereal dlarnd_(integer *, integer *);
- extern /* Subroutine */ int dlaset_(char *, integer *, integer *,
- doublereal *, doublereal *, doublereal *, integer *),
- xerbla_(char *, integer *);
- static doublereal factor, xnorms;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- DLAROR pre- or post-multiplies an M by N matrix A by a random
- orthogonal matrix U, overwriting A. A may optionally be initialized
-
- to the identity matrix before multiplying by U. U is generated using
-
- the method of G.W. Stewart (SIAM J. Numer. Anal. 17, 1980, 403-409).
-
-
- Arguments
- =========
-
- SIDE (input) CHARACTER*1
- Specifies whether A is multiplied on the left or right by U.
-
- = 'L': Multiply A on the left (premultiply) by U
- = 'R': Multiply A on the right (postmultiply) by U'
- = 'C' or 'T': Multiply A on the left by U and the right
- by U' (Here, U' means U-transpose.)
-
- INIT (input) CHARACTER*1
- Specifies whether or not A should be initialized to the
- identity matrix.
- = 'I': Initialize A to (a section of) the identity matrix
- before applying U.
- = 'N': No initialization. Apply U to the input matrix A.
-
- INIT = 'I' may be used to generate square or rectangular
- orthogonal matrices:
-
- For M = N and SIDE = 'L' or 'R', the rows will be orthogonal
-
- to each other, as will the columns.
-
- If M < N, SIDE = 'R' produces a dense matrix whose rows are
- orthogonal and whose columns are not, while SIDE = 'L'
- produces a matrix whose rows are orthogonal, and whose first
-
- M columns are orthogonal, and whose remaining columns are
- zero.
-
- If M > N, SIDE = 'L' produces a dense matrix whose columns
- are orthogonal and whose rows are not, while SIDE = 'R'
- produces a matrix whose columns are orthogonal, and whose
- first M rows are orthogonal, and whose remaining rows are
- zero.
-
- M (input) INTEGER
- The number of rows of A.
-
- N (input) INTEGER
- The number of columns of A.
-
- A (input/output) DOUBLE PRECISION array, dimension (LDA, N)
- On entry, the array A.
- On exit, overwritten by U A ( if SIDE = 'L' ),
- or by A U ( if SIDE = 'R' ),
- or by U A U' ( if SIDE = 'C' or 'T').
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= max(1,M).
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry ISEED specifies the seed of the random number
- generator. The array elements should be between 0 and 4095;
- if not they will be reduced mod 4096. Also, ISEED(4) must
- be odd. The random number generator uses a linear
- congruential sequence limited to small integers, and so
- should produce machine independent random numbers. The
- values of ISEED are changed on exit, and can be used in the
- next call to DLAROR to continue the same random number
- sequence.
-
- X (workspace) DOUBLE PRECISION array, dimension (3*MAX( M, N ))
-
- Workspace of length
- 2*M + N if SIDE = 'L',
- 2*N + M if SIDE = 'R',
- 3*N if SIDE = 'C' or 'T'.
-
- INFO (output) INTEGER
- An error flag. It is set to:
- = 0: normal return
- < 0: if INFO = -k, the k-th argument had an illegal value
- = 1: if the random numbers generated by DLARND are bad.
-
- =====================================================================
-
-
-
- Parameter adjustments */
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --x;
-
- /* Function Body */
- if (*n == 0 || *m == 0) {
- return 0;
- }
-
- itype = 0;
- if (lsame_(side, "L")) {
- itype = 1;
- } else if (lsame_(side, "R")) {
- itype = 2;
- } else if (lsame_(side, "C") || lsame_(side, "T")) {
- itype = 3;
- }
-
-/* Check for argument errors. */
-
- *info = 0;
- if (itype == 0) {
- *info = -1;
- } else if (*m < 0) {
- *info = -3;
- } else if (*n < 0 || itype == 3 && *n != *m) {
- *info = -4;
- } else if (*lda < *m) {
- *info = -6;
- }
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("DLAROR", &i__1);
- return 0;
- }
-
- if (itype == 1) {
- nxfrm = *m;
- } else {
- nxfrm = *n;
- }
-
-/* Initialize A to the identity matrix if desired */
-
- if (lsame_(init, "I")) {
- dlaset_("Full", m, n, &c_b9, &c_b10, &a[a_offset], lda);
- }
-
-/* If no rotation possible, multiply by random +/-1
-
- Compute rotation by computing Householder transformations
- H(2), H(3), ..., H(nhouse) */
-
- i__1 = nxfrm;
- for (j = 1; j <= i__1; ++j) {
- x[j] = 0.;
-/* L10: */
- }
-
- i__1 = nxfrm;
- for (ixfrm = 2; ixfrm <= i__1; ++ixfrm) {
- kbeg = nxfrm - ixfrm + 1;
-
-/* Generate independent normal( 0, 1 ) random numbers */
-
- i__2 = nxfrm;
- for (j = kbeg; j <= i__2; ++j) {
- x[j] = dlarnd_(&c__3, &iseed[1]);
-/* L20: */
- }
-
-/* Generate a Householder transformation from the random vector
- X */
-
- xnorm = dnrm2_(&ixfrm, &x[kbeg], &c__1);
- xnorms = d_sign(&xnorm, &x[kbeg]);
- d__1 = -x[kbeg];
- x[kbeg + nxfrm] = d_sign(&c_b10, &d__1);
- factor = xnorms * (xnorms + x[kbeg]);
- if (abs(factor) < 1e-20) {
- *info = 1;
- xerbla_("DLAROR", info);
- return 0;
- } else {
- factor = 1. / factor;
- }
- x[kbeg] += xnorms;
-
-/* Apply Householder transformation to A */
-
- if (itype == 1 || itype == 3) {
-
-/* Apply H(k) from the left. */
-
- dgemv_("T", &ixfrm, n, &c_b10, &a[kbeg + a_dim1], lda, &x[kbeg], &
- c__1, &c_b9, &x[(nxfrm << 1) + 1], &c__1);
- d__1 = -factor;
- dger_(&ixfrm, n, &d__1, &x[kbeg], &c__1, &x[(nxfrm << 1) + 1], &
- c__1, &a[kbeg + a_dim1], lda);
-
- }
-
- if (itype == 2 || itype == 3) {
-
-/* Apply H(k) from the right. */
-
- dgemv_("N", m, &ixfrm, &c_b10, &a[kbeg * a_dim1 + 1], lda, &x[
- kbeg], &c__1, &c_b9, &x[(nxfrm << 1) + 1], &c__1);
- d__1 = -factor;
- dger_(m, &ixfrm, &d__1, &x[(nxfrm << 1) + 1], &c__1, &x[kbeg], &
- c__1, &a[kbeg * a_dim1 + 1], lda);
-
- }
-/* L30: */
- }
-
- d__1 = dlarnd_(&c__3, &iseed[1]);
- x[nxfrm * 2] = d_sign(&c_b10, &d__1);
-
-/* Scale the matrix A by D. */
-
- if (itype == 1 || itype == 3) {
- i__1 = *m;
- for (irow = 1; irow <= i__1; ++irow) {
- dscal_(n, &x[nxfrm + irow], &a[irow + a_dim1], lda);
-/* L40: */
- }
- }
-
- if (itype == 2 || itype == 3) {
- i__1 = *n;
- for (jcol = 1; jcol <= i__1; ++jcol) {
- dscal_(m, &x[nxfrm + jcol], &a[jcol * a_dim1 + 1], &c__1);
-/* L50: */
- }
- }
- return 0;
-
-/* End of DLAROR */
-
-} /* dlaror_ */
-
diff --git a/TESTING/MATGEN/dlarot.c b/TESTING/MATGEN/dlarot.c
deleted file mode 100644
index 9fcad67..0000000
--- a/TESTING/MATGEN/dlarot.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__4 = 4;
-static integer c__8 = 8;
-static integer c__1 = 1;
-
-/* Subroutine */ int dlarot_(logical *lrows, logical *lleft, logical *lright,
- integer *nl, doublereal *c, doublereal *s, doublereal *a, integer *
- lda, doublereal *xleft, doublereal *xright)
-{
- /* System generated locals */
- integer i__1;
-
- /* Local variables */
- static integer iinc;
- extern /* Subroutine */ int drot_(integer *, doublereal *, integer *,
- doublereal *, integer *, doublereal *, doublereal *);
- static integer inext, ix, iy, nt;
- static doublereal xt[2], yt[2];
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static integer iyt;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- DLAROT applies a (Givens) rotation to two adjacent rows or
- columns, where one element of the first and/or last column/row
- may be a separate variable. This is specifically indended
- for use on matrices stored in some format other than GE, so
- that elements of the matrix may be used or modified for which
- no array element is provided.
-
- One example is a symmetric matrix in SB format (bandwidth=4), for
-
- which UPLO='L': Two adjacent rows will have the format:
-
- row j: * * * * * . . . .
- row j+1: * * * * * . . . .
-
- '*' indicates elements for which storage is provided,
- '.' indicates elements for which no storage is provided, but
- are not necessarily zero; their values are determined by
- symmetry. ' ' indicates elements which are necessarily zero,
- and have no storage provided.
-
- Those columns which have two '*'s can be handled by DROT.
- Those columns which have no '*'s can be ignored, since as long
- as the Givens rotations are carefully applied to preserve
- symmetry, their values are determined.
- Those columns which have one '*' have to be handled separately,
- by using separate variables "p" and "q":
-
- row j: * * * * * p . . .
- row j+1: q * * * * * . . . .
-
- The element p would have to be set correctly, then that column
- is rotated, setting p to its new value. The next call to
- DLAROT would rotate columns j and j+1, using p, and restore
- symmetry. The element q would start out being zero, and be
- made non-zero by the rotation. Later, rotations would presumably
-
- be chosen to zero q out.
-
- Typical Calling Sequences: rotating the i-th and (i+1)-st rows.
- ------- ------- ---------
-
- General dense matrix:
-
- CALL DLAROT(.TRUE.,.FALSE.,.FALSE., N, C,S,
- A(i,1),LDA, DUMMY, DUMMY)
-
- General banded matrix in GB format:
-
- j = MAX(1, i-KL )
- NL = MIN( N, i+KU+1 ) + 1-j
- CALL DLAROT( .TRUE., i-KL.GE.1, i+KU.LT.N, NL, C,S,
- A(KU+i+1-j,j),LDA-1, XLEFT, XRIGHT )
-
- [ note that i+1-j is just MIN(i,KL+1) ]
-
- Symmetric banded matrix in SY format, bandwidth K,
- lower triangle only:
-
- j = MAX(1, i-K )
- NL = MIN( K+1, i ) + 1
- CALL DLAROT( .TRUE., i-K.GE.1, .TRUE., NL, C,S,
- A(i,j), LDA, XLEFT, XRIGHT )
-
- Same, but upper triangle only:
-
- NL = MIN( K+1, N-i ) + 1
- CALL DLAROT( .TRUE., .TRUE., i+K.LT.N, NL, C,S,
- A(i,i), LDA, XLEFT, XRIGHT )
-
- Symmetric banded matrix in SB format, bandwidth K,
- lower triangle only:
-
- [ same as for SY, except:]
- . . . .
- A(i+1-j,j), LDA-1, XLEFT, XRIGHT )
-
- [ note that i+1-j is just MIN(i,K+1) ]
-
- Same, but upper triangle only:
- . . .
- A(K+1,i), LDA-1, XLEFT, XRIGHT )
-
- Rotating columns is just the transpose of rotating rows, except
-
- for GB and SB: (rotating columns i and i+1)
-
- GB:
- j = MAX(1, i-KU )
- NL = MIN( N, i+KL+1 ) + 1-j
- CALL DLAROT( .TRUE., i-KU.GE.1, i+KL.LT.N, NL, C,S,
- A(KU+j+1-i,i),LDA-1, XTOP, XBOTTM )
-
- [note that KU+j+1-i is just MAX(1,KU+2-i)]
-
- SB: (upper triangle)
-
- . . . . . .
- A(K+j+1-i,i),LDA-1, XTOP, XBOTTM )
-
- SB: (lower triangle)
-
- . . . . . .
- A(1,i),LDA-1, XTOP, XBOTTM )
-
- Arguments
- =========
-
- LROWS - LOGICAL
- If .TRUE., then DLAROT will rotate two rows. If .FALSE.,
- then it will rotate two columns.
- Not modified.
-
- LLEFT - LOGICAL
- If .TRUE., then XLEFT will be used instead of the
- corresponding element of A for the first element in the
- second row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.)
- If .FALSE., then the corresponding element of A will be
- used.
- Not modified.
-
- LRIGHT - LOGICAL
- If .TRUE., then XRIGHT will be used instead of the
- corresponding element of A for the last element in the
- first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
-
- .FALSE., then the corresponding element of A will be used.
- Not modified.
-
- NL - INTEGER
- The length of the rows (if LROWS=.TRUE.) or columns (if
- LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
- used, the columns/rows they are in should be included in
- NL, e.g., if LLEFT = LRIGHT = .TRUE., then NL must be at
- least 2. The number of rows/columns to be rotated
- exclusive of those involving XLEFT and/or XRIGHT may
- not be negative, i.e., NL minus how many of LLEFT and
- LRIGHT are .TRUE. must be at least zero; if not, XERBLA
- will be called.
- Not modified.
-
- C, S - DOUBLE PRECISION
- Specify the Givens rotation to be applied. If LROWS is
- true, then the matrix ( c s )
- (-s c ) is applied from the left;
- if false, then the transpose thereof is applied from the
- right. For a Givens rotation, C**2 + S**2 should be 1,
- but this is not checked.
- Not modified.
-
- A - DOUBLE PRECISION array.
- The array containing the rows/columns to be rotated. The
- first element of A should be the upper left element to
- be rotated.
- Read and modified.
-
- LDA - INTEGER
- The "effective" leading dimension of A. If A contains
- a matrix stored in GE or SY format, then this is just
- the leading dimension of A as dimensioned in the calling
- routine. If A contains a matrix stored in band (GB or SB)
- format, then this should be *one less* than the leading
- dimension used in the calling routine. Thus, if
- A were dimensioned A(LDA,*) in DLAROT, then A(1,j) would
- be the j-th element in the first of the two rows
- to be rotated, and A(2,j) would be the j-th in the second,
- regardless of how the array may be stored in the calling
- routine. [A cannot, however, actually be dimensioned thus,
-
- since for band format, the row number may exceed LDA, which
-
- is not legal FORTRAN.]
- If LROWS=.TRUE., then LDA must be at least 1, otherwise
- it must be at least NL minus the number of .TRUE. values
- in XLEFT and XRIGHT.
- Not modified.
-
- XLEFT - DOUBLE PRECISION
- If LLEFT is .TRUE., then XLEFT will be used and modified
- instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
- (if LROWS=.FALSE.).
- Read and modified.
-
- XRIGHT - DOUBLE PRECISION
- If LRIGHT is .TRUE., then XRIGHT will be used and modified
- instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
- (if LROWS=.FALSE.).
- Read and modified.
-
- =====================================================================
-
-
-
- Set up indices, arrays for ends
-
- Parameter adjustments */
- --a;
-
- /* Function Body */
- if (*lrows) {
- iinc = *lda;
- inext = 1;
- } else {
- iinc = 1;
- inext = *lda;
- }
-
- if (*lleft) {
- nt = 1;
- ix = iinc + 1;
- iy = *lda + 2;
- xt[0] = a[1];
- yt[0] = *xleft;
- } else {
- nt = 0;
- ix = 1;
- iy = inext + 1;
- }
-
- if (*lright) {
- iyt = inext + 1 + (*nl - 1) * iinc;
- ++nt;
- xt[nt - 1] = *xright;
- yt[nt - 1] = a[iyt];
- }
-
-/* Check for errors */
-
- if (*nl < nt) {
- xerbla_("DLAROT", &c__4);
- return 0;
- }
- if (*lda <= 0 || ! (*lrows) && *lda < *nl - nt) {
- xerbla_("DLAROT", &c__8);
- return 0;
- }
-
-/* Rotate */
-
- i__1 = *nl - nt;
- drot_(&i__1, &a[ix], &iinc, &a[iy], &iinc, c, s);
- drot_(&nt, xt, &c__1, yt, &c__1, c, s);
-
-/* Stuff values back into XLEFT, XRIGHT, etc. */
-
- if (*lleft) {
- a[1] = xt[0];
- *xleft = yt[0];
- }
-
- if (*lright) {
- *xright = xt[nt - 1];
- a[iyt] = yt[nt - 1];
- }
-
- return 0;
-
-/* End of DLAROT */
-
-} /* dlarot_ */
-
diff --git a/TESTING/MATGEN/dlartg.c b/TESTING/MATGEN/dlartg.c
deleted file mode 100644
index 5763969..0000000
--- a/TESTING/MATGEN/dlartg.c
+++ /dev/null
@@ -1,158 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int dlartg_(doublereal *f, doublereal *g, doublereal *cs,
- doublereal *sn, doublereal *r)
-{
-/* -- 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
-
-
- Purpose
- =======
-
- DLARTG generate a plane rotation so that
-
- [ CS SN ] . [ F ] = [ R ] where CS**2 + SN**2 = 1.
- [ -SN CS ] [ G ] [ 0 ]
-
- This is a slower, more accurate version of the BLAS1 routine DROTG,
- with the following other differences:
- F and G are unchanged on return.
- If G=0, then CS=1 and SN=0.
- If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any
- floating point operations (saves work in DBDSQR when
- there are zeros on the diagonal).
-
- If F exceeds G in magnitude, CS will be positive.
-
- Arguments
- =========
-
- F (input) DOUBLE PRECISION
- The first component of vector to be rotated.
-
- G (input) DOUBLE PRECISION
- The second component of vector to be rotated.
-
- CS (output) DOUBLE PRECISION
- The cosine of the rotation.
-
- SN (output) DOUBLE PRECISION
- The sine of the rotation.
-
- R (output) DOUBLE PRECISION
- The nonzero component of the rotated vector.
-
- =====================================================================
-*/
- /* Initialized data */
- static logical first = TRUE_;
- /* System generated locals */
- integer i__1;
- doublereal d__1, d__2;
- /* Builtin functions */
- double log(doublereal), pow_di(doublereal *, integer *), sqrt(doublereal);
- /* Local variables */
- static integer i;
- static doublereal scale;
- static integer count;
- static doublereal f1, g1, safmn2, safmx2;
- extern doublereal dlamch_(char *);
- static doublereal safmin, eps;
-
-
-
- if (first) {
- first = FALSE_;
- safmin = dlamch_("S");
- eps = dlamch_("E");
- d__1 = dlamch_("B");
- i__1 = (integer) (log(safmin / eps) / log(dlamch_("B")) / 2.);
- safmn2 = pow_di(&d__1, &i__1);
- safmx2 = 1. / safmn2;
- }
- if (*g == 0.) {
- *cs = 1.;
- *sn = 0.;
- *r = *f;
- } else if (*f == 0.) {
- *cs = 0.;
- *sn = 1.;
- *r = *g;
- } else {
- f1 = *f;
- g1 = *g;
-/* Computing MAX */
- d__1 = abs(f1), d__2 = abs(g1);
- scale = max(d__1,d__2);
- if (scale >= safmx2) {
- count = 0;
-L10:
- ++count;
- f1 *= safmn2;
- g1 *= safmn2;
-/* Computing MAX */
- d__1 = abs(f1), d__2 = abs(g1);
- scale = max(d__1,d__2);
- if (scale >= safmx2) {
- goto L10;
- }
-/* Computing 2nd power */
- d__1 = f1;
-/* Computing 2nd power */
- d__2 = g1;
- *r = sqrt(d__1 * d__1 + d__2 * d__2);
- *cs = f1 / *r;
- *sn = g1 / *r;
- i__1 = count;
- for (i = 1; i <= count; ++i) {
- *r *= safmx2;
-/* L20: */
- }
- } else if (scale <= safmn2) {
- count = 0;
-L30:
- ++count;
- f1 *= safmx2;
- g1 *= safmx2;
-/* Computing MAX */
- d__1 = abs(f1), d__2 = abs(g1);
- scale = max(d__1,d__2);
- if (scale <= safmn2) {
- goto L30;
- }
-/* Computing 2nd power */
- d__1 = f1;
-/* Computing 2nd power */
- d__2 = g1;
- *r = sqrt(d__1 * d__1 + d__2 * d__2);
- *cs = f1 / *r;
- *sn = g1 / *r;
- i__1 = count;
- for (i = 1; i <= count; ++i) {
- *r *= safmn2;
-/* L40: */
- }
- } else {
-/* Computing 2nd power */
- d__1 = f1;
-/* Computing 2nd power */
- d__2 = g1;
- *r = sqrt(d__1 * d__1 + d__2 * d__2);
- *cs = f1 / *r;
- *sn = g1 / *r;
- }
- if (abs(*f) > abs(*g) && *cs < 0.) {
- *cs = -(*cs);
- *sn = -(*sn);
- *r = -(*r);
- }
- }
- return 0;
-
-/* End of DLARTG */
-
-} /* dlartg_ */
-
diff --git a/TESTING/MATGEN/dlaruv.c b/TESTING/MATGEN/dlaruv.c
deleted file mode 100644
index 41b4a01..0000000
--- a/TESTING/MATGEN/dlaruv.c
+++ /dev/null
@@ -1,152 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int dlaruv_(integer *iseed, integer *n, doublereal *x)
-{
-/* -- 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
- =======
-
- DLARUV returns a vector of n random real numbers from a uniform (0,1)
-
- distribution (n <= 128).
-
- This is an auxiliary routine called by DLARNV and ZLARNV.
-
- Arguments
- =========
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- N (input) INTEGER
- The number of random numbers to be generated. N <= 128.
-
- X (output) DOUBLE PRECISION array, dimension (N)
- The generated random numbers.
-
- Further Details
- ===============
-
- This routine uses a multiplicative congruential method with modulus
- 2**48 and multiplier 33952834046453 (see G.S.Fishman,
- 'Multiplicative congruential random number generators with modulus
- 2**b: an exhaustive analysis for b = 32 and a partial analysis for
- b = 48', Math. Comp. 189, pp 331-344, 1990).
-
- 48-bit integers are stored in 4 integer array elements with 12 bits
- per element. Hence the routine is portable across machines with
- integers of 32 bits or more.
-
- =====================================================================
-
-
-
- Parameter adjustments
- Function Body */
- /* Initialized data */
- static integer mm[512] /* was [128][4] */ = { 494,2637,255,2008,1253,
- 3344,4084,1739,3143,3468,688,1657,1238,3166,1292,3422,1270,2016,
- 154,2862,697,1706,491,931,1444,444,3577,3944,2184,1661,3482,657,
- 3023,3618,1267,1828,164,3798,3087,2400,2870,3876,1905,1593,1797,
- 1234,3460,328,2861,1950,617,2070,3331,769,1558,2412,2800,189,287,
- 2045,1227,2838,209,2770,3654,3993,192,2253,3491,2889,2857,2094,
- 1818,688,1407,634,3231,815,3524,1914,516,164,303,2144,3480,119,
- 3357,837,2826,2332,2089,3780,1700,3712,150,2000,3375,1621,3090,
- 3765,1149,3146,33,3082,2741,359,3316,1749,185,2784,2202,2199,1364,
- 1244,2020,3160,2785,2772,1217,1822,1245,2252,3904,2774,997,2573,
- 1148,545,322,789,1440,752,2859,123,1848,643,2405,2638,2344,46,
- 3814,913,3649,339,3808,822,2832,3078,3633,2970,637,2249,2081,4019,
- 1478,242,481,2075,4058,622,3376,812,234,641,4005,1122,3135,2640,
- 2302,40,1832,2247,2034,2637,1287,1691,496,1597,2394,2584,1843,336,
- 1472,2407,433,2096,1761,2810,566,442,41,1238,1086,603,840,3168,
- 1499,1084,3438,2408,1589,2391,288,26,512,1456,171,1677,2657,2270,
- 2587,2961,1970,1817,676,1410,3723,2803,3185,184,663,499,3784,1631,
- 1925,3912,1398,1349,1441,2224,2411,1907,3192,2786,382,37,759,2948,
- 1862,3802,2423,2051,2295,1332,1832,2405,3638,3661,327,3660,716,
- 1842,3987,1368,1848,2366,2508,3754,1766,3572,2893,307,1297,3966,
- 758,2598,3406,2922,1038,2934,2091,2451,1580,1958,2055,1507,1078,
- 3273,17,854,2916,3971,2889,3831,2621,1541,893,736,3992,787,2125,
- 2364,2460,257,1574,3912,1216,3248,3401,2124,2762,149,2245,166,466,
- 4018,1399,190,2879,153,2320,18,712,2159,2318,2091,3443,1510,449,
- 1956,2201,3137,3399,1321,2271,3667,2703,629,2365,2431,1113,3922,
- 2554,184,2099,3228,4012,1921,3452,3901,572,3309,3171,817,3039,
- 1696,1256,3715,2077,3019,1497,1101,717,51,981,1978,1813,3881,76,
- 3846,3694,1682,124,1660,3997,479,1141,886,3514,1301,3604,1888,
- 1836,1990,2058,692,1194,20,3285,2046,2107,3508,3525,3801,2549,
- 1145,2253,305,3301,1065,3133,2913,3285,1241,1197,3729,2501,1673,
- 541,2753,949,2361,1165,4081,2725,3305,3069,3617,3733,409,2157,
- 1361,3973,1865,2525,1409,3445,3577,77,3761,2149,1449,3005,225,85,
- 3673,3117,3089,1349,2057,413,65,1845,697,3085,3441,1573,3689,2941,
- 929,533,2841,4077,721,2821,2249,2397,2817,245,1913,1997,3121,997,
- 1833,2877,1633,981,2009,941,2449,197,2441,285,1473,2741,3129,909,
- 2801,421,4073,2813,2337,1429,1177,1901,81,1669,2633,2269,129,1141,
- 249,3917,2481,3941,2217,2749,3041,1877,345,2861,1809,3141,2825,
- 157,2881,3637,1465,2829,2161,3365,361,2685,3745,2325,3609,3821,
- 3537,517,3017,2141,1537 };
- /* System generated locals */
- integer i__1;
- /* Local variables */
- static integer i, i1, i2, i3, i4, it1, it2, it3, it4;
-
-
-#define MM(I) mm[(I)]
-#define WAS(I) was[(I)]
-#define ISEED(I) iseed[(I)-1]
-#define X(I) x[(I)-1]
-
-
-
- i1 = ISEED(1);
- i2 = ISEED(2);
- i3 = ISEED(3);
- i4 = ISEED(4);
-
- i__1 = min(*n,128);
- for (i = 1; i <= min(*n,128); ++i) {
-
-/* Multiply the seed by i-th power of the multiplier modulo 2**
-48 */
-
- it4 = i4 * MM(i + 383);
- it3 = it4 / 4096;
- it4 -= it3 << 12;
- it3 = it3 + i3 * MM(i + 383) + i4 * MM(i + 255);
- it2 = it3 / 4096;
- it3 -= it2 << 12;
- it2 = it2 + i2 * MM(i + 383) + i3 * MM(i + 255) + i4 * MM(i + 127);
- it1 = it2 / 4096;
- it2 -= it1 << 12;
- it1 = it1 + i1 * MM(i + 383) + i2 * MM(i + 255) + i3 * MM(i + 127) +
- i4 * MM(i - 1);
- it1 %= 4096;
-
-/* Convert 48-bit integer to a real number in the interval (0,1
-) */
-
- X(i) = ((doublereal) it1 + ((doublereal) it2 + ((doublereal) it3 + (
- doublereal) it4 * 2.44140625e-4) * 2.44140625e-4) *
- 2.44140625e-4) * 2.44140625e-4;
-/* L10: */
- }
-
-/* Return final value of seed */
-
- ISEED(1) = it1;
- ISEED(2) = it2;
- ISEED(3) = it3;
- ISEED(4) = it4;
- return 0;
-
-/* End of DLARUV */
-
-} /* dlaruv_ */
-
diff --git a/TESTING/MATGEN/dlaset.c b/TESTING/MATGEN/dlaset.c
deleted file mode 100644
index 064a99d..0000000
--- a/TESTING/MATGEN/dlaset.c
+++ /dev/null
@@ -1,131 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int dlaset_(char *uplo, integer *m, integer *n, doublereal *
- alpha, doublereal *beta, doublereal *a, integer *lda)
-{
-/* -- 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
- =======
-
- DLASET initializes an m-by-n matrix A to BETA on the diagonal and
- ALPHA on the offdiagonals.
-
- Arguments
- =========
-
- UPLO (input) CHARACTER*1
- Specifies the part of the matrix A to be set.
- = 'U': Upper triangular part is set; the strictly lower
-
- triangular part of A is not changed.
- = 'L': Lower triangular part is set; the strictly upper
-
- triangular part of A is not changed.
- Otherwise: All of the matrix A is set.
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- ALPHA (input) DOUBLE PRECISION
- The constant to which the offdiagonal elements are to be set.
-
-
- BETA (input) DOUBLE PRECISION
- The constant to which the diagonal elements are to be set.
-
- A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
- On exit, the leading m-by-n submatrix of A is set as follows:
-
-
- if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n,
- if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n,
- otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j,
-
- and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n).
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= max(1,M).
-
- =====================================================================
-
- Function Body */
- /* System generated locals */
- integer i__1, i__2, i__3;
- /* Local variables */
- static integer i, j;
- extern logical lsame_(char *, char *);
-
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- if (lsame_(uplo, "U")) {
-
-/* Set the strictly upper triangular or trapezoidal part of the
-
- array to ALPHA. */
-
- i__1 = *n;
- for (j = 2; j <= *n; ++j) {
-/* Computing MIN */
- i__3 = j - 1;
- i__2 = min(i__3,*m);
- for (i = 1; i <= min(j-1,*m); ++i) {
- A(i,j) = *alpha;
-/* L10: */
- }
-/* L20: */
- }
-
- } else if (lsame_(uplo, "L")) {
-
-/* Set the strictly lower triangular or trapezoidal part of the
-
- array to ALPHA. */
-
- i__1 = min(*m,*n);
- for (j = 1; j <= min(*m,*n); ++j) {
- i__2 = *m;
- for (i = j + 1; i <= *m; ++i) {
- A(i,j) = *alpha;
-/* L30: */
- }
-/* L40: */
- }
-
- } else {
-
-/* Set the leading m-by-n submatrix to ALPHA. */
-
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- A(i,j) = *alpha;
-/* L50: */
- }
-/* L60: */
- }
- }
-
-/* Set the first min(M,N) diagonal elements to BETA. */
-
- i__1 = min(*m,*n);
- for (i = 1; i <= min(*m,*n); ++i) {
- A(i,i) = *beta;
-/* L70: */
- }
-
- return 0;
-
-/* End of DLASET */
-
-} /* dlaset_ */
-
diff --git a/TESTING/MATGEN/dlatb4.c b/TESTING/MATGEN/dlatb4.c
deleted file mode 100644
index a1f4399..0000000
--- a/TESTING/MATGEN/dlatb4.c
+++ /dev/null
@@ -1,464 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include <string.h>
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__2 = 2;
-
-/* Subroutine */ int dlatb4_(char *path, integer *imat, integer *m, integer *
- n, char *type, integer *kl, integer *ku, doublereal *anorm, integer *
- mode, doublereal *cndnum, char *dist)
-{
- /* Initialized data */
-
- static logical first = TRUE_;
-
- /* System generated locals */
- integer i__1;
-
- /* Builtin functions */
- double sqrt(doublereal);
-
- /* Local variables */
- static doublereal badc1, badc2, large, small;
- static char c2[2];
- extern /* Subroutine */ int dlabad_(doublereal *, doublereal *);
- extern doublereal dlamch_(char *);
- extern logical lsamen_(integer *, char *, char *);
- static integer mat;
- static doublereal eps;
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
- Purpose
- =======
-
- DLATB4 sets parameters for the matrix generator based on the type of
-
- matrix to be generated.
-
- Arguments
- =========
-
- PATH (input) CHARACTER*3
- The LAPACK path name.
-
- IMAT (input) INTEGER
- An integer key describing which matrix to generate for this
- path.
-
- M (input) INTEGER
- The number of rows in the matrix to be generated.
-
- N (input) INTEGER
- The number of columns in the matrix to be generated.
-
- TYPE (output) CHARACTER*1
- The type of the matrix to be generated:
- = 'S': symmetric matrix
- = 'P': symmetric positive (semi)definite matrix
- = 'N': nonsymmetric matrix
-
- KL (output) INTEGER
- The lower band width of the matrix to be generated.
-
- KU (output) INTEGER
- The upper band width of the matrix to be generated.
-
- ANORM (output) DOUBLE PRECISION
- The desired norm of the matrix to be generated. The diagonal
-
- matrix of singular values or eigenvalues is scaled by this
- value.
-
- MODE (output) INTEGER
- A key indicating how to choose the vector of eigenvalues.
-
- CNDNUM (output) DOUBLE PRECISION
- The desired condition number.
-
- DIST (output) CHARACTER*1
- The type of distribution to be used by the random number
- generator.
-
- =====================================================================
-
-
-
- Set some constants for use in the subroutine. */
-
- if (first) {
- first = FALSE_;
- eps = dlamch_("Precision");
- badc2 = .1 / eps;
- badc1 = sqrt(badc2);
- small = dlamch_("Safe minimum");
- large = 1. / small;
-
-/* If it looks like we're on a Cray, take the square root of
- SMALL and LARGE to avoid overflow and underflow problems. */
-
- dlabad_(&small, &large);
- small = small / eps * .25;
- large = 1. / small;
- }
-
- strncpy(c2, path + 1, 2);
-
-/* Set some parameters we don't plan to change. */
-
- *(unsigned char *)dist = 'S';
- *mode = 3;
-
- if (lsamen_(&c__2, c2, "QR") || lsamen_(&c__2, c2, "LQ")
- || lsamen_(&c__2, c2, "QL") || lsamen_(&c__2, c2, "RQ")) {
-
-/* xQR, xLQ, xQL, xRQ: Set parameters to generate a general
- M x N matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- *ku = 0;
- } else if (*imat == 2) {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- } else if (*imat == 3) {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "GE")) {
-
-/* xGE: Set parameters to generate a general M x N matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- *ku = 0;
- } else if (*imat == 2) {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- } else if (*imat == 3) {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (*imat == 8) {
- *cndnum = badc1;
- } else if (*imat == 9) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 10) {
- *anorm = small;
- } else if (*imat == 11) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "GB")) {
-
-/* xGB: Set parameters to generate a general banded matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the condition number and norm. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2 * .1;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "GT")) {
-
-/* xGT: Set parameters to generate a general tridiagonal matri
-x.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- } else {
- *kl = 1;
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 3) {
- *cndnum = badc1;
- } else if (*imat == 4) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 5 || *imat == 11) {
- *anorm = small;
- } else if (*imat == 6 || *imat == 12) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "PO") || lsamen_(&c__2, c2, "PP") || lsamen_(&c__2, c2, "SY") || lsamen_(&c__2, c2,
- "SP")) {
-
-/* xPO, xPP, xSY, xSP: Set parameters to generate a
- symmetric matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = *(unsigned char *)c2;
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- } else {
-/* Computing MAX */
- i__1 = *n - 1;
- *kl = max(i__1,0);
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 6) {
- *cndnum = badc1;
- } else if (*imat == 7) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 8) {
- *anorm = small;
- } else if (*imat == 9) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "PB")) {
-
-/* xPB: Set parameters to generate a symmetric band matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'P';
-
-/* Set the norm and condition number. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "PT")) {
-
-/* xPT: Set parameters to generate a symmetric positive defini
-te
- tridiagonal matrix. */
-
- *(unsigned char *)type = 'P';
- if (*imat == 1) {
- *kl = 0;
- } else {
- *kl = 1;
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 3) {
- *cndnum = badc1;
- } else if (*imat == 4) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 5 || *imat == 11) {
- *anorm = small;
- } else if (*imat == 6 || *imat == 12) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "TR") || lsamen_(&c__2, c2, "TP")) {
-
-/* xTR, xTP: Set parameters to generate a triangular matrix
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- mat = abs(*imat);
- if (mat == 1 || mat == 7) {
- *kl = 0;
- *ku = 0;
- } else if (*imat < 0) {
-/* Computing MAX */
- i__1 = *n - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (mat == 3 || mat == 9) {
- *cndnum = badc1;
- } else if (mat == 4) {
- *cndnum = badc2;
- } else if (mat == 10) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (mat == 5) {
- *anorm = small;
- } else if (mat == 6) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "TB")) {
-
-/* xTB: Set parameters to generate a triangular band matrix.
-
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the norm and condition number. */
-
- if (*imat == 2 || *imat == 8) {
- *cndnum = badc1;
- } else if (*imat == 3 || *imat == 9) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 4) {
- *anorm = small;
- } else if (*imat == 5) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
- }
- if (*n <= 1) {
- *cndnum = 1.;
- }
-
- return 0;
-
-/* End of DLATB4 */
-
-} /* dlatb4_ */
-
diff --git a/TESTING/MATGEN/dlatm1.c b/TESTING/MATGEN/dlatm1.c
deleted file mode 100644
index bbd69fb..0000000
--- a/TESTING/MATGEN/dlatm1.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int dlatm1_(integer *mode, doublereal *cond, integer *irsign,
- integer *idist, integer *iseed, doublereal *d, integer *n, integer *
- info)
-{
- /* System generated locals */
- integer i__1, i__2;
- doublereal d__1;
-
- /* Builtin functions */
- double pow_dd(doublereal *, doublereal *), pow_di(doublereal *, integer *)
- , log(doublereal), exp(doublereal);
-
- /* Local variables */
- static doublereal temp;
- static integer i;
- static doublereal alpha;
- extern doublereal dlaran_(integer *);
- extern /* Subroutine */ int xerbla_(char *, integer *), dlarnv_(
- integer *, integer *, integer *, doublereal *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- DLATM1 computes the entries of D(1..N) as specified by
- MODE, COND and IRSIGN. IDIST and ISEED determine the generation
- of random numbers. DLATM1 is called by SLATMR to generate
- random test matrices for LAPACK programs.
-
- Arguments
- =========
-
- MODE - INTEGER
- On entry describes how D is to be computed:
- MODE = 0 means do not change D.
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- Not modified.
-
- COND - DOUBLE PRECISION
- On entry, used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- IRSIGN - INTEGER
- On entry, if MODE neither -6, 0 nor 6, determines sign of
- entries of D
- 0 => leave entries of D unchanged
- 1 => multiply each entry of D by 1 or -1 with probability .5
-
-
- IDIST - CHARACTER*1
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => UNIFORM( 0, 1 )
- 2 => UNIFORM( -1, 1 )
- 3 => NORMAL( 0, 1 )
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. The random number generator uses a
- linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to DLATM1
- to continue the same random number sequence.
- Changed on exit.
-
- D - DOUBLE PRECISION array, dimension ( MIN( M , N ) )
- Array to be computed according to MODE, COND and IRSIGN.
- May be changed on exit if MODE is nonzero.
-
- N - INTEGER
- Number of entries of D. Not modified.
-
- INFO - INTEGER
- 0 => normal termination
- -1 => if MODE not in range -6 to 6
- -2 => if MODE neither -6, 0 nor 6, and
- IRSIGN neither 0 nor 1
- -3 => if MODE neither -6, 0 nor 6 and COND less than 1
- -4 => if MODE equals 6 or -6 and IDIST not in range 1 to 3
-
- -7 => if N negative
-
- =====================================================================
-
-
-
- Decode and Test the input parameters. Initialize flags & seed.
-
- Parameter adjustments */
- --d;
- --iseed;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*n == 0) {
- return 0;
- }
-
-/* Set INFO if an error */
-
- if (*mode < -6 || *mode > 6) {
- *info = -1;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && (*irsign != 0 && *
- irsign != 1)) {
- *info = -2;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && *cond < 1.) {
- *info = -3;
- } else if ((*mode == 6 || *mode == -6) && (*idist < 1 || *idist > 3)) {
- *info = -4;
- } else if (*n < 0) {
- *info = -7;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("DLATM1", &i__1);
- return 0;
- }
-
-/* Compute D according to COND and MODE */
-
- if (*mode != 0) {
- switch (abs(*mode)) {
- case 1: goto L10;
- case 2: goto L30;
- case 3: goto L50;
- case 4: goto L70;
- case 5: goto L90;
- case 6: goto L110;
- }
-
-/* One large D value: */
-
-L10:
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- d[i] = 1. / *cond;
-/* L20: */
- }
- d[1] = 1.;
- goto L120;
-
-/* One small D value: */
-
-L30:
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- d[i] = 1.;
-/* L40: */
- }
- d[*n] = 1. / *cond;
- goto L120;
-
-/* Exponentially distributed D values: */
-
-L50:
- d[1] = 1.;
- if (*n > 1) {
- d__1 = -1. / (doublereal) (*n - 1);
- alpha = pow_dd(cond, &d__1);
- i__1 = *n;
- for (i = 2; i <= i__1; ++i) {
- i__2 = i - 1;
- d[i] = pow_di(&alpha, &i__2);
-/* L60: */
- }
- }
- goto L120;
-
-/* Arithmetically distributed D values: */
-
-L70:
- d[1] = 1.;
- if (*n > 1) {
- temp = 1. / *cond;
- alpha = (1. - temp) / (doublereal) (*n - 1);
- i__1 = *n;
- for (i = 2; i <= i__1; ++i) {
- d[i] = (doublereal) (*n - i) * alpha + temp;
-/* L80: */
- }
- }
- goto L120;
-
-/* Randomly distributed D values on ( 1/COND , 1): */
-
-L90:
- alpha = log(1. / *cond);
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- d[i] = exp(alpha * dlaran_(&iseed[1]));
-/* L100: */
- }
- goto L120;
-
-/* Randomly distributed D values from IDIST */
-
-L110:
- dlarnv_(idist, &iseed[1], n, &d[1]);
-
-L120:
-
-/* If MODE neither -6 nor 0 nor 6, and IRSIGN = 1, assign
- random signs to D */
-
- if (*mode != -6 && *mode != 0 && *mode != 6 && *irsign == 1) {
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- temp = dlaran_(&iseed[1]);
- if (temp > .5) {
- d[i] = -d[i];
- }
-/* L130: */
- }
- }
-
-/* Reverse if MODE < 0 */
-
- if (*mode < 0) {
- i__1 = *n / 2;
- for (i = 1; i <= i__1; ++i) {
- temp = d[i];
- d[i] = d[*n + 1 - i];
- d[*n + 1 - i] = temp;
-/* L140: */
- }
- }
-
- }
-
- return 0;
-
-/* End of DLATM1 */
-
-} /* dlatm1_ */
-
diff --git a/TESTING/MATGEN/dlatm2.c b/TESTING/MATGEN/dlatm2.c
deleted file mode 100644
index b4f2b28..0000000
--- a/TESTING/MATGEN/dlatm2.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-doublereal dlatm2_(integer *m, integer *n, integer *i, integer *j, integer *
- kl, integer *ku, integer *idist, integer *iseed, doublereal *d,
- integer *igrade, doublereal *dl, doublereal *dr, integer *ipvtng,
- integer *iwork, doublereal *sparse)
-{
- /* System generated locals */
- doublereal ret_val;
-
- /* Local variables */
- static integer isub, jsub;
- static doublereal temp;
- extern doublereal dlaran_(integer *), dlarnd_(integer *, integer *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
-
-
-
- Purpose
- =======
-
- DLATM2 returns the (I,J) entry of a random matrix of dimension
- (M, N) described by the other paramters. It is called by the
- DLATMR routine in order to build random test matrices. No error
- checking on parameters is done, because this routine is called in
-
- a tight loop by DLATMR which has already checked the parameters.
-
- Use of DLATM2 differs from SLATM3 in the order in which the random
-
- number generator is called to fill in random matrix entries.
- With DLATM2, the generator is called to fill in the pivoted matrix
-
- columnwise. With DLATM3, the generator is called to fill in the
- matrix columnwise, after which it is pivoted. Thus, DLATM3 can
- be used to construct random matrices which differ only in their
- order of rows and/or columns. DLATM2 is used to construct band
- matrices while avoiding calling the random number generator for
- entries outside the band (and therefore generating random numbers
-
-
- The matrix whose (I,J) entry is returned is constructed as
- follows (this routine only computes one entry):
-
- If I is outside (1..M) or J is outside (1..N), return zero
- (this is convenient for generating matrices in band format).
-
-
- Generate a matrix A with random entries of distribution IDIST.
-
- Set the diagonal to D.
-
- Grade the matrix, if desired, from the left (by DL) and/or
- from the right (by DR or DL) as specified by IGRADE.
-
- Permute, if desired, the rows and/or columns as specified by
- IPVTNG and IWORK.
-
- Band the matrix to have lower bandwidth KL and upper
- bandwidth KU.
-
- Set random entries to zero as specified by SPARSE.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of matrix. Not modified.
-
- N - INTEGER
- Number of columns of matrix. Not modified.
-
- I - INTEGER
- Row of entry to be returned. Not modified.
-
- J - INTEGER
- Column of entry to be returned. Not modified.
-
- KL - INTEGER
- Lower bandwidth. Not modified.
-
- KU - INTEGER
- Upper bandwidth. Not modified.
-
- IDIST - INTEGER
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => UNIFORM( 0, 1 )
- 2 => UNIFORM( -1, 1 )
- 3 => NORMAL( 0, 1 )
- Not modified.
-
- ISEED - INTEGER array of dimension ( 4 )
- Seed for random number generator.
- Changed on exit.
-
- D - DOUBLE PRECISION array of dimension ( MIN( I , J ) )
- Diagonal entries of matrix. Not modified.
-
- IGRADE - INTEGER
- Specifies grading of matrix as follows:
- 0 => no grading
- 1 => matrix premultiplied by diag( DL )
- 2 => matrix postmultiplied by diag( DR )
- 3 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- 4 => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- 5 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- Not modified.
-
- DL - DOUBLE PRECISION array ( I or J, as appropriate )
- Left scale factors for grading matrix. Not modified.
-
- DR - DOUBLE PRECISION array ( I or J, as appropriate )
- Right scale factors for grading matrix. Not modified.
-
- IPVTNG - INTEGER
- On entry specifies pivoting permutations as follows:
- 0 => none.
- 1 => row pivoting.
- 2 => column pivoting.
- 3 => full pivoting, i.e., on both sides.
- Not modified.
-
- IWORK - INTEGER array ( I or J, as appropriate )
- This array specifies the permutation used. The
- row (or column) in position K was originally in
- position IWORK( K ).
- This differs from IWORK for DLATM3. Not modified.
-
- SPARSE - DOUBLE PRECISION between 0. and 1.
- On entry specifies the sparsity of the matrix
- if sparse matix is to be generated.
- SPARSE should lie between 0 and 1.
- A uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- =====================================================================
-
-
-
-
-
-
-
-
- -----------------------------------------------------------------------
-
-
-
-
- Check for I and J in range
-
- Parameter adjustments */
- --iwork;
- --dr;
- --dl;
- --d;
- --iseed;
-
- /* Function Body */
- if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
- ret_val = 0.;
- return ret_val;
- }
-
-/* Check for banding */
-
- if (*j > *i + *ku || *j < *i - *kl) {
- ret_val = 0.;
- return ret_val;
- }
-
-/* Check for sparsity */
-
- if (*sparse > 0.) {
- if (dlaran_(&iseed[1]) < *sparse) {
- ret_val = 0.;
- return ret_val;
- }
- }
-
-/* Compute subscripts depending on IPVTNG */
-
- if (*ipvtng == 0) {
- isub = *i;
- jsub = *j;
- } else if (*ipvtng == 1) {
- isub = iwork[*i];
- jsub = *j;
- } else if (*ipvtng == 2) {
- isub = *i;
- jsub = iwork[*j];
- } else if (*ipvtng == 3) {
- isub = iwork[*i];
- jsub = iwork[*j];
- }
-
-/* Compute entry and grade it according to IGRADE */
-
- if (isub == jsub) {
- temp = d[isub];
- } else {
- temp = dlarnd_(idist, &iseed[1]);
- }
- if (*igrade == 1) {
- temp *= dl[isub];
- } else if (*igrade == 2) {
- temp *= dr[jsub];
- } else if (*igrade == 3) {
- temp = temp * dl[isub] * dr[jsub];
- } else if (*igrade == 4 && isub != jsub) {
- temp = temp * dl[isub] / dl[jsub];
- } else if (*igrade == 5) {
- temp = temp * dl[isub] * dl[jsub];
- }
- ret_val = temp;
- return ret_val;
-
-/* End of DLATM2 */
-
-} /* dlatm2_ */
-
diff --git a/TESTING/MATGEN/dlatm3.c b/TESTING/MATGEN/dlatm3.c
deleted file mode 100644
index 1302755..0000000
--- a/TESTING/MATGEN/dlatm3.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-doublereal dlatm3_(integer *m, integer *n, integer *i, integer *j, integer *
- isub, integer *jsub, integer *kl, integer *ku, integer *idist,
- integer *iseed, doublereal *d, integer *igrade, doublereal *dl,
- doublereal *dr, integer *ipvtng, integer *iwork, doublereal *sparse)
-{
- /* System generated locals */
- doublereal ret_val;
-
- /* Local variables */
- static doublereal temp;
- extern doublereal dlaran_(integer *), dlarnd_(integer *, integer *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
-
-
-
- Purpose
- =======
-
- DLATM3 returns the (ISUB,JSUB) entry of a random matrix of
- dimension (M, N) described by the other paramters. (ISUB,JSUB)
- is the final position of the (I,J) entry after pivoting
- according to IPVTNG and IWORK. DLATM3 is called by the
- DLATMR routine in order to build random test matrices. No error
- checking on parameters is done, because this routine is called in
-
- a tight loop by DLATMR which has already checked the parameters.
-
- Use of DLATM3 differs from SLATM2 in the order in which the random
-
- number generator is called to fill in random matrix entries.
- With DLATM2, the generator is called to fill in the pivoted matrix
-
- columnwise. With DLATM3, the generator is called to fill in the
- matrix columnwise, after which it is pivoted. Thus, DLATM3 can
- be used to construct random matrices which differ only in their
- order of rows and/or columns. DLATM2 is used to construct band
- matrices while avoiding calling the random number generator for
- entries outside the band (and therefore generating random numbers
-
- in different orders for different pivot orders).
-
- The matrix whose (ISUB,JSUB) entry is returned is constructed as
- follows (this routine only computes one entry):
-
- If ISUB is outside (1..M) or JSUB is outside (1..N), return zero
-
- (this is convenient for generating matrices in band format).
-
-
- Generate a matrix A with random entries of distribution IDIST.
-
- Set the diagonal to D.
-
- Grade the matrix, if desired, from the left (by DL) and/or
- from the right (by DR or DL) as specified by IGRADE.
-
- Permute, if desired, the rows and/or columns as specified by
- IPVTNG and IWORK.
-
- Band the matrix to have lower bandwidth KL and upper
- bandwidth KU.
-
- Set random entries to zero as specified by SPARSE.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of matrix. Not modified.
-
- N - INTEGER
- Number of columns of matrix. Not modified.
-
- I - INTEGER
- Row of unpivoted entry to be returned. Not modified.
-
- J - INTEGER
- Column of unpivoted entry to be returned. Not modified.
-
- ISUB - INTEGER
- Row of pivoted entry to be returned. Changed on exit.
-
- JSUB - INTEGER
- Column of pivoted entry to be returned. Changed on exit.
-
- KL - INTEGER
- Lower bandwidth. Not modified.
-
- KU - INTEGER
- Upper bandwidth. Not modified.
-
- IDIST - INTEGER
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => UNIFORM( 0, 1 )
- 2 => UNIFORM( -1, 1 )
- 3 => NORMAL( 0, 1 )
- Not modified.
-
- ISEED - INTEGER array of dimension ( 4 )
- Seed for random number generator.
- Changed on exit.
-
- D - DOUBLE PRECISION array of dimension ( MIN( I , J ) )
- Diagonal entries of matrix. Not modified.
-
- IGRADE - INTEGER
- Specifies grading of matrix as follows:
- 0 => no grading
- 1 => matrix premultiplied by diag( DL )
- 2 => matrix postmultiplied by diag( DR )
- 3 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- 4 => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- 5 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- Not modified.
-
- DL - DOUBLE PRECISION array ( I or J, as appropriate )
- Left scale factors for grading matrix. Not modified.
-
- DR - DOUBLE PRECISION array ( I or J, as appropriate )
- Right scale factors for grading matrix. Not modified.
-
- IPVTNG - INTEGER
- On entry specifies pivoting permutations as follows:
- 0 => none.
- 1 => row pivoting.
- 2 => column pivoting.
- 3 => full pivoting, i.e., on both sides.
- Not modified.
-
- IWORK - INTEGER array ( I or J, as appropriate )
- This array specifies the permutation used. The
- row (or column) originally in position K is in
- position IWORK( K ) after pivoting.
- This differs from IWORK for DLATM2. Not modified.
-
- SPARSE - DOUBLE PRECISION between 0. and 1.
- On entry specifies the sparsity of the matrix
- if sparse matix is to be generated.
- SPARSE should lie between 0 and 1.
- A uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- =====================================================================
-
-
-
-
-
-
-
-
- -----------------------------------------------------------------------
-
-
-
-
- Check for I and J in range
-
- Parameter adjustments */
- --iwork;
- --dr;
- --dl;
- --d;
- --iseed;
-
- /* Function Body */
- if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
- *isub = *i;
- *jsub = *j;
- ret_val = 0.;
- return ret_val;
- }
-
-/* Compute subscripts depending on IPVTNG */
-
- if (*ipvtng == 0) {
- *isub = *i;
- *jsub = *j;
- } else if (*ipvtng == 1) {
- *isub = iwork[*i];
- *jsub = *j;
- } else if (*ipvtng == 2) {
- *isub = *i;
- *jsub = iwork[*j];
- } else if (*ipvtng == 3) {
- *isub = iwork[*i];
- *jsub = iwork[*j];
- }
-
-/* Check for banding */
-
- if (*jsub > *isub + *ku || *jsub < *isub - *kl) {
- ret_val = 0.;
- return ret_val;
- }
-
-/* Check for sparsity */
-
- if (*sparse > 0.) {
- if (dlaran_(&iseed[1]) < *sparse) {
- ret_val = 0.;
- return ret_val;
- }
- }
-
-/* Compute entry and grade it according to IGRADE */
-
- if (*i == *j) {
- temp = d[*i];
- } else {
- temp = dlarnd_(idist, &iseed[1]);
- }
- if (*igrade == 1) {
- temp *= dl[*i];
- } else if (*igrade == 2) {
- temp *= dr[*j];
- } else if (*igrade == 3) {
- temp = temp * dl[*i] * dr[*j];
- } else if (*igrade == 4 && *i != *j) {
- temp = temp * dl[*i] / dl[*j];
- } else if (*igrade == 5) {
- temp = temp * dl[*i] * dl[*j];
- }
- ret_val = temp;
- return ret_val;
-
-/* End of DLATM3 */
-
-} /* dlatm3_ */
-
diff --git a/TESTING/MATGEN/dlatme.c b/TESTING/MATGEN/dlatme.c
deleted file mode 100644
index 33a15b4..0000000
--- a/TESTING/MATGEN/dlatme.c
+++ /dev/null
@@ -1,682 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__1 = 1;
-static doublereal c_b23 = 0.;
-static integer c__0 = 0;
-static doublereal c_b39 = 1.;
-
-/* Subroutine */ int dlatme_(integer *n, char *dist, integer *iseed,
- doublereal *d, integer *mode, doublereal *cond, doublereal *dmax__,
- char *ei, char *rsign, char *upper, char *sim, doublereal *ds,
- integer *modes, doublereal *conds, integer *kl, integer *ku,
- doublereal *anorm, doublereal *a, integer *lda, doublereal *work,
- integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
- doublereal d__1, d__2, d__3;
-
- /* Local variables */
- static logical bads;
- extern /* Subroutine */ int dger_(integer *, integer *, doublereal *,
- doublereal *, integer *, doublereal *, integer *, doublereal *,
- integer *);
- static integer isim;
- static doublereal temp;
- static logical badei;
- static integer i, j;
- static doublereal alpha;
- extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
- integer *);
- extern logical lsame_(char *, char *);
- extern /* Subroutine */ int dgemv_(char *, integer *, integer *,
- doublereal *, doublereal *, integer *, doublereal *, integer *,
- doublereal *, doublereal *, integer *);
- static integer iinfo;
- static doublereal tempa[1];
- static integer icols;
- static logical useei;
- static integer idist;
- extern /* Subroutine */ int dcopy_(integer *, doublereal *, integer *,
- doublereal *, integer *);
- static integer irows;
- extern /* Subroutine */ int dlatm1_(integer *, doublereal *, integer *,
- integer *, integer *, doublereal *, integer *, integer *);
- static integer ic, jc;
- extern doublereal dlange_(char *, integer *, integer *, doublereal *,
- integer *, doublereal *);
- static integer ir, jr;
- extern /* Subroutine */ int dlarge_(integer *, doublereal *, integer *,
- integer *, doublereal *, integer *), dlarfg_(integer *,
- doublereal *, doublereal *, integer *, doublereal *);
- extern doublereal dlaran_(integer *);
- extern /* Subroutine */ int dlaset_(char *, integer *, integer *,
- doublereal *, doublereal *, doublereal *, integer *),
- xerbla_(char *, integer *), dlarnv_(integer *, integer *,
- integer *, doublereal *);
- static integer irsign, iupper;
- static doublereal xnorms;
- static integer jcr;
- static doublereal tau;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- DLATME generates random non-symmetric square matrices with
- specified eigenvalues for testing LAPACK programs.
-
- DLATME operates by applying the following sequence of
- operations:
-
- 1. Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX, and RSIGN
- as described below.
-
- 2. If complex conjugate pairs are desired (MODE=0 and EI(1)='R',
- or MODE=5), certain pairs of adjacent elements of D are
- interpreted as the real and complex parts of a complex
- conjugate pair; A thus becomes block diagonal, with 1x1
- and 2x2 blocks.
-
- 3. If UPPER='T', the upper triangle of A is set to random values
- out of distribution DIST.
-
- 4. If SIM='T', A is multiplied on the left by a random matrix
- X, whose singular values are specified by DS, MODES, and
- CONDS, and on the right by X inverse.
-
- 5. If KL < N-1, the lower bandwidth is reduced to KL using
- Householder transformations. If KU < N-1, the upper
- bandwidth is reduced to KU.
-
- 6. If ANORM is not negative, the matrix is scaled to have
- maximum-element-norm ANORM.
-
- (Note: since the matrix cannot be reduced beyond Hessenberg form,
-
- no packing options are available.)
-
- Arguments
- =========
-
- N - INTEGER
- The number of columns (or rows) of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate the random eigen-/singular values, and for the
- upper triangle (see UPPER).
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to DLATME
- to continue the same random number sequence.
- Changed on exit.
-
- D - DOUBLE PRECISION array, dimension ( N )
- This array is used to specify the eigenvalues of A. If
- MODE=0, then D is assumed to contain the eigenvalues (but
- see the description of EI), otherwise they will be
- computed according to MODE, COND, DMAX, and RSIGN and
- placed in D.
- Modified if MODE is nonzero.
-
- MODE - INTEGER
- On entry this describes how the eigenvalues are to
- be specified:
- MODE = 0 means use D (with EI) as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed. Each odd-even pair
- of elements will be either used as two real
- eigenvalues or as the real and imaginary part
- of a complex conjugate pair of eigenvalues;
- the choice of which is done is random, with
- 50-50 probability, for each pair.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is between 1 and 4, D has entries ranging
- from 1 to 1/COND, if between -1 and -4, D has entries
- ranging from 1/COND to 1,
- Not modified.
-
- COND - DOUBLE PRECISION
- On entry, this is used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - DOUBLE PRECISION
- If MODE is neither -6, 0 nor 6, the contents of D, as
- computed according to MODE and COND, will be scaled by
- DMAX / max(abs(D(i))). Note that DMAX need not be
- positive: if DMAX is negative (or zero), D will be
- scaled by a negative number (or zero).
- Not modified.
-
- EI - CHARACTER*1 array, dimension ( N )
- If MODE is 0, and EI(1) is not ' ' (space character),
- this array specifies which elements of D (on input) are
- real eigenvalues and which are the real and imaginary parts
-
- of a complex conjugate pair of eigenvalues. The elements
- of EI may then only have the values 'R' and 'I'. If
- EI(j)='R' and EI(j+1)='I', then the j-th eigenvalue is
- CMPLX( D(j) , D(j+1) ), and the (j+1)-th is the complex
- conjugate thereof. If EI(j)=EI(j+1)='R', then the j-th
- eigenvalue is D(j) (i.e., real). EI(1) may not be 'I',
- nor may two adjacent elements of EI both have the value 'I'.
-
- If MODE is not 0, then EI is ignored. If MODE is 0 and
- EI(1)=' ', then the eigenvalues will all be real.
- Not modified.
-
- RSIGN - CHARACTER*1
- If MODE is not 0, 6, or -6, and RSIGN='T', then the
- elements of D, as computed according to MODE and COND, will
-
- be multiplied by a random sign (+1 or -1). If RSIGN='F',
- they will not be. RSIGN may only have the values 'T' or
- 'F'.
- Not modified.
-
- UPPER - CHARACTER*1
- If UPPER='T', then the elements of A above the diagonal
- (and above the 2x2 diagonal blocks, if A has complex
- eigenvalues) will be set to random numbers out of DIST.
- If UPPER='F', they will not. UPPER may only have the
- values 'T' or 'F'.
- Not modified.
-
- SIM - CHARACTER*1
- If SIM='T', then A will be operated on by a "similarity
- transform", i.e., multiplied on the left by a matrix X and
- on the right by X inverse. X = U S V, where U and V are
- random unitary matrices and S is a (diagonal) matrix of
- singular values specified by DS, MODES, and CONDS. If
- SIM='F', then A will not be transformed.
- Not modified.
-
- DS - DOUBLE PRECISION array, dimension ( N )
- This array is used to specify the singular values of X,
- in the same way that D specifies the eigenvalues of A.
- If MODE=0, the DS contains the singular values, which
- may not be zero.
- Modified if MODE is nonzero.
-
- MODES - INTEGER
- CONDS - DOUBLE PRECISION
- Same as MODE and COND, but for specifying the diagonal
- of S. MODES=-6 and +6 are not allowed (since they would
- result in randomly ill-conditioned eigenvalues.)
-
- KL - INTEGER
- This specifies the lower bandwidth of the matrix. KL=1
- specifies upper Hessenberg form. If KL is at least N-1,
- then A will have full lower bandwidth. KL must be at
- least 1.
- Not modified.
-
- KU - INTEGER
- This specifies the upper bandwidth of the matrix. KU=1
- specifies lower Hessenberg form. If KU is at least N-1,
- then A will have full upper bandwidth; if KU and KL
- are both at least N-1, then A will be dense. Only one of
- KU and KL may be less than N-1. KU must be at least 1.
- Not modified.
-
- ANORM - DOUBLE PRECISION
- If ANORM is not negative, then A will be scaled by a non-
- negative real number to make the maximum-element-norm of A
- to be ANORM.
- Not modified.
-
- A - DOUBLE PRECISION array, dimension ( LDA, N )
- On exit A is the desired test matrix.
- Modified.
-
- LDA - INTEGER
- LDA specifies the first dimension of A as declared in the
- calling program. LDA must be at least N.
- Not modified.
-
- WORK - DOUBLE PRECISION array, dimension ( 3*N )
- Workspace.
- Modified.
-
- INFO - INTEGER
- Error code. On exit, INFO will be set to one of the
- following values:
- 0 => normal return
- -1 => N negative
- -2 => DIST illegal string
- -5 => MODE not in range -6 to 6
- -6 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -8 => EI(1) is not ' ' or 'R', EI(j) is not 'R' or 'I', or
-
- two adjacent elements of EI are 'I'.
- -9 => RSIGN is not 'T' or 'F'
- -10 => UPPER is not 'T' or 'F'
- -11 => SIM is not 'T' or 'F'
- -12 => MODES=0 and DS has a zero singular value.
- -13 => MODES is not in the range -5 to 5.
- -14 => MODES is nonzero and CONDS is less than 1.
- -15 => KL is less than 1.
- -16 => KU is less than 1, or KL and KU are both less than
- N-1.
- -19 => LDA is less than N.
- 1 => Error return from DLATM1 (computing D)
- 2 => Cannot scale to DMAX (max. eigenvalue is 0)
- 3 => Error return from DLATM1 (computing DS)
- 4 => Error return from DLARGE
- 5 => Zero singular value from DLATM1.
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- --ei;
- --ds;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --work;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else {
- idist = -1;
- }
-
-/* Check EI */
-
- useei = TRUE_;
- badei = FALSE_;
- if (lsame_(ei + 1, " ") || *mode != 0) {
- useei = FALSE_;
- } else {
- if (lsame_(ei + 1, "R")) {
- i__1 = *n;
- for (j = 2; j <= i__1; ++j) {
- if (lsame_(ei + j, "I")) {
- if (lsame_(ei + (j - 1), "I")) {
- badei = TRUE_;
- }
- } else {
- if (! lsame_(ei + j, "R")) {
- badei = TRUE_;
- }
- }
-/* L10: */
- }
- } else {
- badei = TRUE_;
- }
- }
-
-/* Decode RSIGN */
-
- if (lsame_(rsign, "T")) {
- irsign = 1;
- } else if (lsame_(rsign, "F")) {
- irsign = 0;
- } else {
- irsign = -1;
- }
-
-/* Decode UPPER */
-
- if (lsame_(upper, "T")) {
- iupper = 1;
- } else if (lsame_(upper, "F")) {
- iupper = 0;
- } else {
- iupper = -1;
- }
-
-/* Decode SIM */
-
- if (lsame_(sim, "T")) {
- isim = 1;
- } else if (lsame_(sim, "F")) {
- isim = 0;
- } else {
- isim = -1;
- }
-
-/* Check DS, if MODES=0 and ISIM=1 */
-
- bads = FALSE_;
- if (*modes == 0 && isim == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- if (ds[j] == 0.) {
- bads = TRUE_;
- }
-/* L20: */
- }
- }
-
-/* Set INFO if an error */
-
- if (*n < 0) {
- *info = -1;
- } else if (idist == -1) {
- *info = -2;
- } else if (abs(*mode) > 6) {
- *info = -5;
- } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.) {
- *info = -6;
- } else if (badei) {
- *info = -8;
- } else if (irsign == -1) {
- *info = -9;
- } else if (iupper == -1) {
- *info = -10;
- } else if (isim == -1) {
- *info = -11;
- } else if (bads) {
- *info = -12;
- } else if (isim == 1 && abs(*modes) > 5) {
- *info = -13;
- } else if (isim == 1 && *modes != 0 && *conds < 1.) {
- *info = -14;
- } else if (*kl < 1) {
- *info = -15;
- } else if (*ku < 1 || *ku < *n - 1 && *kl < *n - 1) {
- *info = -16;
- } else if (*lda < max(1,*n)) {
- *info = -19;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("DLATME", &i__1);
- return 0;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L30: */
- }
-
- if (iseed[4] % 2 != 1) {
- ++iseed[4];
- }
-
-/* 2) Set up diagonal of A
-
- Compute D according to COND and MODE */
-
- dlatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], n, &iinfo);
- if (iinfo != 0) {
- *info = 1;
- return 0;
- }
- if (*mode != 0 && abs(*mode) != 6) {
-
-/* Scale by DMAX */
-
- temp = abs(d[1]);
- i__1 = *n;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- d__2 = temp, d__3 = (d__1 = d[i], abs(d__1));
- temp = max(d__2,d__3);
-/* L40: */
- }
-
- if (temp > 0.) {
- alpha = *dmax__ / temp;
- } else if (*dmax__ != 0.) {
- *info = 2;
- return 0;
- } else {
- alpha = 0.;
- }
-
- dscal_(n, &alpha, &d[1], &c__1);
-
- }
-
- dlaset_("Full", n, n, &c_b23, &c_b23, &a[a_offset], lda);
- i__1 = *lda + 1;
- dcopy_(n, &d[1], &c__1, &a[a_offset], &i__1);
-
-/* Set up complex conjugate pairs */
-
- if (*mode == 0) {
- if (useei) {
- i__1 = *n;
- for (j = 2; j <= i__1; ++j) {
- if (lsame_(ei + j, "I")) {
- a[j - 1 + j * a_dim1] = a[j + j * a_dim1];
- a[j + (j - 1) * a_dim1] = -a[j + j * a_dim1];
- a[j + j * a_dim1] = a[j - 1 + (j - 1) * a_dim1];
- }
-/* L50: */
- }
- }
-
- } else if (abs(*mode) == 5) {
-
- i__1 = *n;
- for (j = 2; j <= i__1; j += 2) {
- if (dlaran_(&iseed[1]) > .5) {
- a[j - 1 + j * a_dim1] = a[j + j * a_dim1];
- a[j + (j - 1) * a_dim1] = -a[j + j * a_dim1];
- a[j + j * a_dim1] = a[j - 1 + (j - 1) * a_dim1];
- }
-/* L60: */
- }
- }
-
-/* 3) If UPPER='T', set upper triangle of A to random numbers.
- (but don't modify the corners of 2x2 blocks.) */
-
- if (iupper != 0) {
- i__1 = *n;
- for (jc = 2; jc <= i__1; ++jc) {
- if (a[jc - 1 + jc * a_dim1] != 0.) {
- jr = jc - 2;
- } else {
- jr = jc - 1;
- }
- dlarnv_(&idist, &iseed[1], &jr, &a[jc * a_dim1 + 1]);
-/* L70: */
- }
- }
-
-/* 4) If SIM='T', apply similarity transformation.
-
- -1
- Transform is X A X , where X = U S V, thus
-
- it is U S V A V' (1/S) U' */
-
- if (isim != 0) {
-
-/* Compute S (singular values of the eigenvector matrix)
- according to CONDS and MODES */
-
- dlatm1_(modes, conds, &c__0, &c__0, &iseed[1], &ds[1], n, &iinfo);
- if (iinfo != 0) {
- *info = 3;
- return 0;
- }
-
-/* Multiply by V and V' */
-
- dlarge_(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
- if (iinfo != 0) {
- *info = 4;
- return 0;
- }
-
-/* Multiply by S and (1/S) */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- dscal_(n, &ds[j], &a[j + a_dim1], lda);
- if (ds[j] != 0.) {
- d__1 = 1. / ds[j];
- dscal_(n, &d__1, &a[j * a_dim1 + 1], &c__1);
- } else {
- *info = 5;
- return 0;
- }
-/* L80: */
- }
-
-/* Multiply by U and U' */
-
- dlarge_(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
- if (iinfo != 0) {
- *info = 4;
- return 0;
- }
- }
-
-/* 5) Reduce the bandwidth. */
-
- if (*kl < *n - 1) {
-
-/* Reduce bandwidth -- kill column */
-
- i__1 = *n - 1;
- for (jcr = *kl + 1; jcr <= i__1; ++jcr) {
- ic = jcr - *kl;
- irows = *n + 1 - jcr;
- icols = *n + *kl - jcr;
-
- dcopy_(&irows, &a[jcr + ic * a_dim1], &c__1, &work[1], &c__1);
- xnorms = work[1];
- dlarfg_(&irows, &xnorms, &work[2], &c__1, &tau);
- work[1] = 1.;
-
- dgemv_("T", &irows, &icols, &c_b39, &a[jcr + (ic + 1) * a_dim1],
- lda, &work[1], &c__1, &c_b23, &work[irows + 1], &c__1)
- ;
- d__1 = -tau;
- dger_(&irows, &icols, &d__1, &work[1], &c__1, &work[irows + 1], &
- c__1, &a[jcr + (ic + 1) * a_dim1], lda);
-
- dgemv_("N", n, &irows, &c_b39, &a[jcr * a_dim1 + 1], lda, &work[1]
- , &c__1, &c_b23, &work[irows + 1], &c__1);
- d__1 = -tau;
- dger_(n, &irows, &d__1, &work[irows + 1], &c__1, &work[1], &c__1,
- &a[jcr * a_dim1 + 1], lda);
-
- a[jcr + ic * a_dim1] = xnorms;
- i__2 = irows - 1;
- dlaset_("Full", &i__2, &c__1, &c_b23, &c_b23, &a[jcr + 1 + ic *
- a_dim1], lda);
-/* L90: */
- }
- } else if (*ku < *n - 1) {
-
-/* Reduce upper bandwidth -- kill a row at a time. */
-
- i__1 = *n - 1;
- for (jcr = *ku + 1; jcr <= i__1; ++jcr) {
- ir = jcr - *ku;
- irows = *n + *ku - jcr;
- icols = *n + 1 - jcr;
-
- dcopy_(&icols, &a[ir + jcr * a_dim1], lda, &work[1], &c__1);
- xnorms = work[1];
- dlarfg_(&icols, &xnorms, &work[2], &c__1, &tau);
- work[1] = 1.;
-
- dgemv_("N", &irows, &icols, &c_b39, &a[ir + 1 + jcr * a_dim1],
- lda, &work[1], &c__1, &c_b23, &work[icols + 1], &c__1)
- ;
- d__1 = -tau;
- dger_(&irows, &icols, &d__1, &work[icols + 1], &c__1, &work[1], &
- c__1, &a[ir + 1 + jcr * a_dim1], lda);
-
- dgemv_("C", &icols, n, &c_b39, &a[jcr + a_dim1], lda, &work[1], &
- c__1, &c_b23, &work[icols + 1], &c__1);
- d__1 = -tau;
- dger_(&icols, n, &d__1, &work[1], &c__1, &work[icols + 1], &c__1,
- &a[jcr + a_dim1], lda);
-
- a[ir + jcr * a_dim1] = xnorms;
- i__2 = icols - 1;
- dlaset_("Full", &c__1, &i__2, &c_b23, &c_b23, &a[ir + (jcr + 1) *
- a_dim1], lda);
-/* L100: */
- }
- }
-
-/* Scale the matrix to have norm ANORM */
-
- if (*anorm >= 0.) {
- temp = dlange_("M", n, n, &a[a_offset], lda, tempa);
- if (temp > 0.) {
- alpha = *anorm / temp;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- dscal_(n, &alpha, &a[j * a_dim1 + 1], &c__1);
-/* L110: */
- }
- }
- }
-
- return 0;
-
-/* End of DLATME */
-
-} /* dlatme_ */
-
diff --git a/TESTING/MATGEN/dlatmr.c b/TESTING/MATGEN/dlatmr.c
deleted file mode 100644
index 7998df1..0000000
--- a/TESTING/MATGEN/dlatmr.c
+++ /dev/null
@@ -1,1288 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__0 = 0;
-static integer c__1 = 1;
-
-/* Subroutine */ int dlatmr_(integer *m, integer *n, char *dist, integer *
- iseed, char *sym, doublereal *d, integer *mode, doublereal *cond,
- doublereal *dmax__, char *rsign, char *grade, doublereal *dl, integer
- *model, doublereal *condl, doublereal *dr, integer *moder, doublereal
- *condr, char *pivtng, integer *ipivot, integer *kl, integer *ku,
- doublereal *sparse, doublereal *anorm, char *pack, doublereal *a,
- integer *lda, integer *iwork, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
- doublereal d__1, d__2, d__3;
-
- /* Local variables */
- static integer isub, jsub;
- static doublereal temp;
- static integer isym, i, j, k;
- static doublereal alpha;
- extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
- integer *);
- static integer ipack;
- extern logical lsame_(char *, char *);
- static doublereal tempa[1];
- static integer iisub, idist, jjsub, mnmin;
- static logical dzero;
- static integer mnsub;
- static doublereal onorm;
- static integer mxsub, npvts;
- extern /* Subroutine */ int dlatm1_(integer *, doublereal *, integer *,
- integer *, integer *, doublereal *, integer *, integer *);
- extern doublereal dlatm2_(integer *, integer *, integer *, integer *,
- integer *, integer *, integer *, integer *, doublereal *, integer
- *, doublereal *, doublereal *, integer *, integer *, doublereal *)
- , dlatm3_(integer *, integer *, integer *, integer *, integer *,
- integer *, integer *, integer *, integer *, integer *, doublereal
- *, integer *, doublereal *, doublereal *, integer *, integer *,
- doublereal *), dlangb_(char *, integer *, integer *, integer *,
- doublereal *, integer *, doublereal *), dlange_(char *,
- integer *, integer *, doublereal *, integer *, doublereal *);
- static integer igrade;
- extern doublereal dlansb_(char *, char *, integer *, integer *,
- doublereal *, integer *, doublereal *);
- static logical fulbnd;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical badpvt;
- extern doublereal dlansp_(char *, char *, integer *, doublereal *,
- doublereal *), dlansy_(char *, char *, integer *,
- doublereal *, integer *, doublereal *);
- static integer irsign, ipvtng, kll, kuu;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- DLATMR generates random matrices of various types for testing
- LAPACK programs.
-
- DLATMR operates by applying the following sequence of
- operations:
-
- Generate a matrix A with random entries of distribution DIST
- which is symmetric if SYM='S', and nonsymmetric
- if SYM='N'.
-
- Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX and RSIGN
- as described below.
-
- Grade the matrix, if desired, from the left and/or right
- as specified by GRADE. The inputs DL, MODEL, CONDL, DR,
- MODER and CONDR also determine the grading as described
- below.
-
- Permute, if desired, the rows and/or columns as specified by
- PIVTNG and IPIVOT.
-
- Set random entries to zero, if desired, to get a random sparse
- matrix as specified by SPARSE.
-
- Make A a band matrix, if desired, by zeroing out the matrix
- outside a band of lower bandwidth KL and upper bandwidth KU.
-
-
- Scale A, if desired, to have maximum entry ANORM.
-
- Pack the matrix if desired. Options specified by PACK are:
- no packing
- zero out upper half (if symmetric)
- zero out lower half (if symmetric)
- store the upper half columnwise (if symmetric or
- square upper triangular)
- store the lower half columnwise (if symmetric or
- square lower triangular)
- same as upper half rowwise if symmetric
- store the lower triangle in banded format (if symmetric)
- store the upper triangle in banded format (if symmetric)
- store the entire matrix in banded format
-
- Note: If two calls to DLATMR differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
-
- If two calls to DLATMR both have full bandwidth (KL = M-1
- and KU = N-1), and differ only in the PIVTNG and PACK
- parameters, then the matrices generated will differ only
- in the order of the rows and/or columns, and otherwise
- contain the same data. This consistency cannot be and
- is not maintained with less than full bandwidth.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of A. Not modified.
-
- N - INTEGER
- Number of columns of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate a random matrix .
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- Not modified.
-
- ISEED - INTEGER array, dimension (4)
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to DLATMR
- to continue the same random number sequence.
- Changed on exit.
-
- SYM - CHARACTER*1
- If SYM='S' or 'H', generated matrix is symmetric.
- If SYM='N', generated matrix is nonsymmetric.
- Not modified.
-
- D - DOUBLE PRECISION array, dimension (min(M,N))
- On entry this array specifies the diagonal entries
- of the diagonal of A. D may either be specified
- on entry, or set according to MODE and COND as described
- below. May be changed on exit if MODE is nonzero.
-
- MODE - INTEGER
- On entry describes how D is to be used:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- Not modified.
-
- COND - DOUBLE PRECISION
- On entry, used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - DOUBLE PRECISION
- If MODE neither -6, 0 nor 6, the diagonal is scaled by
- DMAX / max(abs(D(i))), so that maximum absolute entry
- of diagonal is abs(DMAX). If DMAX is negative (or zero),
- diagonal will be scaled by a negative number (or zero).
-
- RSIGN - CHARACTER*1
- If MODE neither -6, 0 nor 6, specifies sign of diagonal
- as follows:
- 'T' => diagonal entries are multiplied by 1 or -1
- with probability .5
- 'F' => diagonal unchanged
- Not modified.
-
- GRADE - CHARACTER*1
- Specifies grading of matrix as follows:
- 'N' => no grading
- 'L' => matrix premultiplied by diag( DL )
- (only if matrix nonsymmetric)
- 'R' => matrix postmultiplied by diag( DR )
- (only if matrix nonsymmetric)
- 'B' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- (only if matrix nonsymmetric)
- 'S' or 'H' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- ('S' for symmetric, or 'H' for Hermitian)
- 'E' => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- ( 'E' for eigenvalue invariance)
- (only if matrix nonsymmetric)
- Note: if GRADE='E', then M must equal N.
- Not modified.
-
- DL - DOUBLE PRECISION array, dimension (M)
- If MODEL=0, then on entry this array specifies the diagonal
-
- entries of a diagonal matrix used as described under GRADE
- above. If MODEL is not zero, then DL will be set according
- to MODEL and CONDL, analogous to the way D is set according
-
- to MODE and COND (except there is no DMAX parameter for DL).
-
- If GRADE='E', then DL cannot have zero entries.
- Not referenced if GRADE = 'N' or 'R'. Changed on exit.
-
- MODEL - INTEGER
- This specifies how the diagonal array DL is to be computed,
-
- just as MODE specifies how D is to be computed.
- Not modified.
-
- CONDL - DOUBLE PRECISION
- When MODEL is not zero, this specifies the condition number
-
- of the computed DL. Not modified.
-
- DR - DOUBLE PRECISION array, dimension (N)
- If MODER=0, then on entry this array specifies the diagonal
-
- entries of a diagonal matrix used as described under GRADE
- above. If MODER is not zero, then DR will be set according
- to MODER and CONDR, analogous to the way D is set according
-
- to MODE and COND (except there is no DMAX parameter for DR).
-
- Not referenced if GRADE = 'N', 'L', 'H', 'S' or 'E'.
- Changed on exit.
-
- MODER - INTEGER
- This specifies how the diagonal array DR is to be computed,
-
- just as MODE specifies how D is to be computed.
- Not modified.
-
- CONDR - DOUBLE PRECISION
- When MODER is not zero, this specifies the condition number
-
- of the computed DR. Not modified.
-
- PIVTNG - CHARACTER*1
- On entry specifies pivoting permutations as follows:
- 'N' or ' ' => none.
- 'L' => left or row pivoting (matrix must be nonsymmetric).
- 'R' => right or column pivoting (matrix must be
- nonsymmetric).
- 'B' or 'F' => both or full pivoting, i.e., on both sides.
- In this case, M must equal N
-
- If two calls to DLATMR both have full bandwidth (KL = M-1
- and KU = N-1), and differ only in the PIVTNG and PACK
- parameters, then the matrices generated will differ only
- in the order of the rows and/or columns, and otherwise
- contain the same data. This consistency cannot be
- maintained with less than full bandwidth.
-
- IPIVOT - INTEGER array, dimension (N or M)
- This array specifies the permutation used. After the
- basic matrix is generated, the rows, columns, or both
- are permuted. If, say, row pivoting is selected, DLATMR
- starts with the *last* row and interchanges the M-th and
- IPIVOT(M)-th rows, then moves to the next-to-last row,
- interchanging the (M-1)-th and the IPIVOT(M-1)-th rows,
- and so on. In terms of "2-cycles", the permutation is
- (1 IPIVOT(1)) (2 IPIVOT(2)) ... (M IPIVOT(M))
- where the rightmost cycle is applied first. This is the
- *inverse* of the effect of pivoting in LINPACK. The idea
- is that factoring (with pivoting) an identity matrix
- which has been inverse-pivoted in this way should
- result in a pivot vector identical to IPIVOT.
- Not referenced if PIVTNG = 'N'. Not modified.
-
- SPARSE - DOUBLE PRECISION
- On entry specifies the sparsity of the matrix if a sparse
- matrix is to be generated. SPARSE should lie between
- 0 and 1. To generate a sparse matrix, for each matrix entry
-
- a uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- KL - INTEGER
- On entry specifies the lower bandwidth of the matrix. For
- example, KL=0 implies upper triangular, KL=1 implies upper
- Hessenberg, and KL at least M-1 implies the matrix is not
- banded. Must equal KU if matrix is symmetric.
- Not modified.
-
- KU - INTEGER
- On entry specifies the upper bandwidth of the matrix. For
- example, KU=0 implies lower triangular, KU=1 implies lower
- Hessenberg, and KU at least N-1 implies the matrix is not
- banded. Must equal KL if matrix is symmetric.
- Not modified.
-
- ANORM - DOUBLE PRECISION
- On entry specifies maximum entry of output matrix
- (output matrix will by multiplied by a constant so that
- its largest absolute entry equal ANORM)
- if ANORM is nonnegative. If ANORM is negative no scaling
- is done. Not modified.
-
- PACK - CHARACTER*1
- On entry specifies packing of matrix as follows:
- 'N' => no packing
- 'U' => zero out all subdiagonal entries (if symmetric)
- 'L' => zero out all superdiagonal entries (if symmetric)
- 'C' => store the upper triangle columnwise
- (only if matrix symmetric or square upper triangular)
-
- 'R' => store the lower triangle columnwise
- (only if matrix symmetric or square lower triangular)
-
- (same as upper half rowwise if symmetric)
- 'B' => store the lower triangle in band storage scheme
- (only if matrix symmetric)
- 'Q' => store the upper triangle in band storage scheme
- (only if matrix symmetric)
- 'Z' => store the entire matrix in band storage scheme
- (pivoting can be provided for by using this
- option to store A in the trailing rows of
- the allocated storage)
-
- Using these options, the various LAPACK packed and banded
- storage schemes can be obtained:
- GB - use 'Z'
- PB, SB or TB - use 'B' or 'Q'
- PP, SP or TP - use 'C' or 'R'
-
- If two calls to DLATMR differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
- Not modified.
-
- A - DOUBLE PRECISION array, dimension (LDA,N)
- On exit A is the desired test matrix. Only those
- entries of A which are significant on output
- will be referenced (even if A is in packed or band
- storage format). The 'unoccupied corners' of A in
- band format will be zeroed out.
-
- LDA - INTEGER
- on entry LDA specifies the first dimension of A as
- declared in the calling program.
- If PACK='N', 'U' or 'L', LDA must be at least max ( 1, M ).
-
- If PACK='C' or 'R', LDA must be at least 1.
- If PACK='B', or 'Q', LDA must be MIN ( KU+1, N )
- If PACK='Z', LDA must be at least KUU+KLL+1, where
- KUU = MIN ( KU, N-1 ) and KLL = MIN ( KL, N-1 )
- Not modified.
-
- IWORK - INTEGER array, dimension ( N or M)
- Workspace. Not referenced if PIVTNG = 'N'. Changed on exit.
-
-
- INFO - INTEGER
- Error parameter on exit:
- 0 => normal return
- -1 => M negative or unequal to N and SYM='S' or 'H'
- -2 => N negative
- -3 => DIST illegal string
- -5 => SYM illegal string
- -7 => MODE not in range -6 to 6
- -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -10 => MODE neither -6, 0 nor 6 and RSIGN illegal string
- -11 => GRADE illegal string, or GRADE='E' and
- M not equal to N, or GRADE='L', 'R', 'B' or 'E' and
- SYM = 'S' or 'H'
- -12 => GRADE = 'E' and DL contains zero
- -13 => MODEL not in range -6 to 6 and GRADE= 'L', 'B', 'H',
-
- 'S' or 'E'
- -14 => CONDL less than 1.0, GRADE='L', 'B', 'H', 'S' or 'E',
-
- and MODEL neither -6, 0 nor 6
- -16 => MODER not in range -6 to 6 and GRADE= 'R' or 'B'
- -17 => CONDR less than 1.0, GRADE='R' or 'B', and
- MODER neither -6, 0 nor 6
- -18 => PIVTNG illegal string, or PIVTNG='B' or 'F' and
- M not equal to N, or PIVTNG='L' or 'R' and SYM='S'
- or 'H'
- -19 => IPIVOT contains out of range number and
- PIVTNG not equal to 'N'
- -20 => KL negative
- -21 => KU negative, or SYM='S' or 'H' and KU not equal to KL
-
- -22 => SPARSE not in range 0. to 1.
- -24 => PACK illegal string, or PACK='U', 'L', 'B' or 'Q'
- and SYM='N', or PACK='C' and SYM='N' and either KL
- not equal to 0 or N not equal to M, or PACK='R' and
- SYM='N', and either KU not equal to 0 or N not equal
-
- to M
- -26 => LDA too small
- 1 => Error return from DLATM1 (computing D)
- 2 => Cannot scale diagonal to DMAX (max. entry is 0)
- 3 => Error return from DLATM1 (computing DL)
- 4 => Error return from DLATM1 (computing DR)
- 5 => ANORM is positive, but matrix constructed prior to
- attempting to scale it to have norm ANORM, is zero
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- --dl;
- --dr;
- --ipivot;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iwork;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*m == 0 || *n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else {
- idist = -1;
- }
-
-/* Decode SYM */
-
- if (lsame_(sym, "S")) {
- isym = 0;
- } else if (lsame_(sym, "N")) {
- isym = 1;
- } else if (lsame_(sym, "H")) {
- isym = 0;
- } else {
- isym = -1;
- }
-
-/* Decode RSIGN */
-
- if (lsame_(rsign, "F")) {
- irsign = 0;
- } else if (lsame_(rsign, "T")) {
- irsign = 1;
- } else {
- irsign = -1;
- }
-
-/* Decode PIVTNG */
-
- if (lsame_(pivtng, "N")) {
- ipvtng = 0;
- } else if (lsame_(pivtng, " ")) {
- ipvtng = 0;
- } else if (lsame_(pivtng, "L")) {
- ipvtng = 1;
- npvts = *m;
- } else if (lsame_(pivtng, "R")) {
- ipvtng = 2;
- npvts = *n;
- } else if (lsame_(pivtng, "B")) {
- ipvtng = 3;
- npvts = min(*n,*m);
- } else if (lsame_(pivtng, "F")) {
- ipvtng = 3;
- npvts = min(*n,*m);
- } else {
- ipvtng = -1;
- }
-
-/* Decode GRADE */
-
- if (lsame_(grade, "N")) {
- igrade = 0;
- } else if (lsame_(grade, "L")) {
- igrade = 1;
- } else if (lsame_(grade, "R")) {
- igrade = 2;
- } else if (lsame_(grade, "B")) {
- igrade = 3;
- } else if (lsame_(grade, "E")) {
- igrade = 4;
- } else if (lsame_(grade, "H") || lsame_(grade, "S")) {
- igrade = 5;
- } else {
- igrade = -1;
- }
-
-/* Decode PACK */
-
- if (lsame_(pack, "N")) {
- ipack = 0;
- } else if (lsame_(pack, "U")) {
- ipack = 1;
- } else if (lsame_(pack, "L")) {
- ipack = 2;
- } else if (lsame_(pack, "C")) {
- ipack = 3;
- } else if (lsame_(pack, "R")) {
- ipack = 4;
- } else if (lsame_(pack, "B")) {
- ipack = 5;
- } else if (lsame_(pack, "Q")) {
- ipack = 6;
- } else if (lsame_(pack, "Z")) {
- ipack = 7;
- } else {
- ipack = -1;
- }
-
-/* Set certain internal parameters */
-
- mnmin = min(*m,*n);
-/* Computing MIN */
- i__1 = *kl, i__2 = *m - 1;
- kll = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *ku, i__2 = *n - 1;
- kuu = min(i__1,i__2);
-
-/* If inv(DL) is used, check to see if DL has a zero entry. */
-
- dzero = FALSE_;
- if (igrade == 4 && *model == 0) {
- i__1 = *m;
- for (i = 1; i <= i__1; ++i) {
- if (dl[i] == 0.) {
- dzero = TRUE_;
- }
-/* L10: */
- }
- }
-
-/* Check values in IPIVOT */
-
- badpvt = FALSE_;
- if (ipvtng > 0) {
- i__1 = npvts;
- for (j = 1; j <= i__1; ++j) {
- if (ipivot[j] <= 0 || ipivot[j] > npvts) {
- badpvt = TRUE_;
- }
-/* L20: */
- }
- }
-
-/* Set INFO if an error */
-
- if (*m < 0) {
- *info = -1;
- } else if (*m != *n && isym == 0) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (idist == -1) {
- *info = -3;
- } else if (isym == -1) {
- *info = -5;
- } else if (*mode < -6 || *mode > 6) {
- *info = -7;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && *cond < 1.) {
- *info = -8;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && irsign == -1) {
- *info = -10;
- } else if (igrade == -1 || igrade == 4 && *m != *n || igrade >= 1 &&
- igrade <= 4 && isym == 0) {
- *info = -11;
- } else if (igrade == 4 && dzero) {
- *info = -12;
- } else if ((igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5) && (
- *model < -6 || *model > 6)) {
- *info = -13;
- } else if ((igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5) && (
- *model != -6 && *model != 0 && *model != 6) && *condl < 1.) {
- *info = -14;
- } else if ((igrade == 2 || igrade == 3) && (*moder < -6 || *moder > 6)) {
- *info = -16;
- } else if ((igrade == 2 || igrade == 3) && (*moder != -6 && *moder != 0 &&
- *moder != 6) && *condr < 1.) {
- *info = -17;
- } else if (ipvtng == -1 || ipvtng == 3 && *m != *n || (ipvtng == 1 ||
- ipvtng == 2) && isym == 0) {
- *info = -18;
- } else if (ipvtng != 0 && badpvt) {
- *info = -19;
- } else if (*kl < 0) {
- *info = -20;
- } else if (*ku < 0 || isym == 0 && *kl != *ku) {
- *info = -21;
- } else if (*sparse < 0. || *sparse > 1.) {
- *info = -22;
- } else if (ipack == -1 || (ipack == 1 || ipack == 2 || ipack == 5 ||
- ipack == 6) && isym == 1 || ipack == 3 && isym == 1 && (*kl != 0
- || *m != *n) || ipack == 4 && isym == 1 && (*ku != 0 || *m != *n))
- {
- *info = -24;
- } else if ((ipack == 0 || ipack == 1 || ipack == 2) && *lda < max(1,*m) ||
- (ipack == 3 || ipack == 4) && *lda < 1 || (ipack == 5 || ipack ==
- 6) && *lda < kuu + 1 || ipack == 7 && *lda < kll + kuu + 1) {
- *info = -26;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("DLATMR", &i__1);
- return 0;
- }
-
-/* Decide if we can pivot consistently */
-
- fulbnd = FALSE_;
- if (kuu == *n - 1 && kll == *m - 1) {
- fulbnd = TRUE_;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L30: */
- }
-
- iseed[4] = (iseed[4] / 2 << 1) + 1;
-
-/* 2) Set up D, DL, and DR, if indicated.
-
- Compute D according to COND and MODE */
-
- dlatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, info);
- if (*info != 0) {
- *info = 1;
- return 0;
- }
- if (*mode != 0 && *mode != -6 && *mode != 6) {
-
-/* Scale by DMAX */
-
- temp = abs(d[1]);
- i__1 = mnmin;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- d__2 = temp, d__3 = (d__1 = d[i], abs(d__1));
- temp = max(d__2,d__3);
-/* L40: */
- }
- if (temp == 0. && *dmax__ != 0.) {
- *info = 2;
- return 0;
- }
- if (temp != 0.) {
- alpha = *dmax__ / temp;
- } else {
- alpha = 1.;
- }
- i__1 = mnmin;
- for (i = 1; i <= i__1; ++i) {
- d[i] = alpha * d[i];
-/* L50: */
- }
-
- }
-
-/* Compute DL if grading set */
-
- if (igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5) {
- dlatm1_(model, condl, &c__0, &idist, &iseed[1], &dl[1], m, info);
- if (*info != 0) {
- *info = 3;
- return 0;
- }
- }
-
-/* Compute DR if grading set */
-
- if (igrade == 2 || igrade == 3) {
- dlatm1_(moder, condr, &c__0, &idist, &iseed[1], &dr[1], n, info);
- if (*info != 0) {
- *info = 4;
- return 0;
- }
- }
-
-/* 3) Generate IWORK if pivoting */
-
- if (ipvtng > 0) {
- i__1 = npvts;
- for (i = 1; i <= i__1; ++i) {
- iwork[i] = i;
-/* L60: */
- }
- if (fulbnd) {
- i__1 = npvts;
- for (i = 1; i <= i__1; ++i) {
- k = ipivot[i];
- j = iwork[i];
- iwork[i] = iwork[k];
- iwork[k] = j;
-/* L70: */
- }
- } else {
- for (i = npvts; i >= 1; --i) {
- k = ipivot[i];
- j = iwork[i];
- iwork[i] = iwork[k];
- iwork[k] = j;
-/* L80: */
- }
- }
- }
-
-/* 4) Generate matrices for each kind of PACKing
- Always sweep matrix columnwise (if symmetric, upper
- half only) so that matrix generated does not depend
- on PACK */
-
- if (fulbnd) {
-
-/* Use DLATM3 so matrices generated with differing PIVOTing onl
-y
- differ only in the order of their rows and/or columns. */
-
- if (ipack == 0) {
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- a[isub + jsub * a_dim1] = temp;
- a[jsub + isub * a_dim1] = temp;
-/* L90: */
- }
-/* L100: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- a[isub + jsub * a_dim1] = temp;
-/* L110: */
- }
-/* L120: */
- }
- }
-
- } else if (ipack == 1) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mnsub + mxsub * a_dim1] = temp;
- if (mnsub != mxsub) {
- a[mxsub + mnsub * a_dim1] = 0.;
- }
-/* L130: */
- }
-/* L140: */
- }
-
- } else if (ipack == 2) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mxsub + mnsub * a_dim1] = temp;
- if (mnsub != mxsub) {
- a[mnsub + mxsub * a_dim1] = 0.;
- }
-/* L150: */
- }
-/* L160: */
- }
-
- } else if (ipack == 3) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
-
-/* Compute K = location of (ISUB,JSUB) ent
-ry in packed
- array */
-
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- k = mxsub * (mxsub - 1) / 2 + mnsub;
-
-/* Convert K to (IISUB,JJSUB) location */
-
- jjsub = (k - 1) / *lda + 1;
- iisub = k - *lda * (jjsub - 1);
-
- a[iisub + jjsub * a_dim1] = temp;
-/* L170: */
- }
-/* L180: */
- }
-
- } else if (ipack == 4) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
-
-/* Compute K = location of (I,J) entry in
-packed array */
-
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mnsub == 1) {
- k = mxsub;
- } else {
- k = *n * (*n + 1) / 2 - (*n - mnsub + 1) * (*n -
- mnsub + 2) / 2 + mxsub - mnsub + 1;
- }
-
-/* Convert K to (IISUB,JJSUB) location */
-
- jjsub = (k - 1) / *lda + 1;
- iisub = k - *lda * (jjsub - 1);
-
- a[iisub + jjsub * a_dim1] = temp;
-/* L190: */
- }
-/* L200: */
- }
-
- } else if (ipack == 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- if (i < 1) {
- a[j - i + 1 + (i + *n) * a_dim1] = 0.;
- } else {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mxsub - mnsub + 1 + mnsub * a_dim1] = temp;
- }
-/* L210: */
- }
-/* L220: */
- }
-
- } else if (ipack == 6) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mnsub - mxsub + kuu + 1 + mxsub * a_dim1] = temp;
-/* L230: */
- }
-/* L240: */
- }
-
- } else if (ipack == 7) {
-
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mnsub - mxsub + kuu + 1 + mxsub * a_dim1] = temp;
- if (i < 1) {
- a[j - i + 1 + kuu + (i + *n) * a_dim1] = 0.;
- }
- if (i >= 1 && mnsub != mxsub) {
- a[mxsub - mnsub + 1 + kuu + mnsub * a_dim1] =
- temp;
- }
-/* L250: */
- }
-/* L260: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j + kll;
- for (i = j - kuu; i <= i__2; ++i) {
- temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- a[isub - jsub + kuu + 1 + jsub * a_dim1] = temp;
-/* L270: */
- }
-/* L280: */
- }
- }
-
- }
-
- } else {
-
-/* Use DLATM2 */
-
- if (ipack == 0) {
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- a[j + i * a_dim1] = a[i + j * a_dim1];
-/* L290: */
- }
-/* L300: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
-/* L310: */
- }
-/* L320: */
- }
- }
-
- } else if (ipack == 1) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- if (i != j) {
- a[j + i * a_dim1] = 0.;
- }
-/* L330: */
- }
-/* L340: */
- }
-
- } else if (ipack == 2) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- a[j + i * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- if (i != j) {
- a[i + j * a_dim1] = 0.;
- }
-/* L350: */
- }
-/* L360: */
- }
-
- } else if (ipack == 3) {
-
- isub = 0;
- jsub = 1;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- ++isub;
- if (isub > *lda) {
- isub = 1;
- ++jsub;
- }
- a[isub + jsub * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[1],
- &ipvtng, &iwork[1], sparse);
-/* L370: */
- }
-/* L380: */
- }
-
- } else if (ipack == 4) {
-
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
-
-/* Compute K = location of (I,J) en
-try in packed array */
-
- if (i == 1) {
- k = j;
- } else {
- k = *n * (*n + 1) / 2 - (*n - i + 1) * (*n - i +
- 2) / 2 + j - i + 1;
- }
-
-/* Convert K to (ISUB,JSUB) locatio
-n */
-
- jsub = (k - 1) / *lda + 1;
- isub = k - *lda * (jsub - 1);
-
- a[isub + jsub * a_dim1] = dlatm2_(m, n, &i, &j, kl,
- ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],
- &dr[1], &ipvtng, &iwork[1], sparse);
-/* L390: */
- }
-/* L400: */
- }
- } else {
- isub = 0;
- jsub = 1;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j; i <= i__2; ++i) {
- ++isub;
- if (isub > *lda) {
- isub = 1;
- ++jsub;
- }
- a[isub + jsub * a_dim1] = dlatm2_(m, n, &i, &j, kl,
- ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],
- &dr[1], &ipvtng, &iwork[1], sparse);
-/* L410: */
- }
-/* L420: */
- }
- }
-
- } else if (ipack == 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- if (i < 1) {
- a[j - i + 1 + (i + *n) * a_dim1] = 0.;
- } else {
- a[j - i + 1 + i * a_dim1] = dlatm2_(m, n, &i, &j, kl,
- ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],
- &dr[1], &ipvtng, &iwork[1], sparse);
- }
-/* L430: */
- }
-/* L440: */
- }
-
- } else if (ipack == 6) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- a[i - j + kuu + 1 + j * a_dim1] = dlatm2_(m, n, &i, &j,
- kl, ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],
- &dr[1], &ipvtng, &iwork[1], sparse);
-/* L450: */
- }
-/* L460: */
- }
-
- } else if (ipack == 7) {
-
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- a[i - j + kuu + 1 + j * a_dim1] = dlatm2_(m, n, &i, &
- j, kl, ku, &idist, &iseed[1], &d[1], &igrade,
- &dl[1], &dr[1], &ipvtng, &iwork[1], sparse);
- if (i < 1) {
- a[j - i + 1 + kuu + (i + *n) * a_dim1] = 0.;
- }
- if (i >= 1 && i != j) {
- a[j - i + 1 + kuu + i * a_dim1] = a[i - j + kuu +
- 1 + j * a_dim1];
- }
-/* L470: */
- }
-/* L480: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j + kll;
- for (i = j - kuu; i <= i__2; ++i) {
- a[i - j + kuu + 1 + j * a_dim1] = dlatm2_(m, n, &i, &
- j, kl, ku, &idist, &iseed[1], &d[1], &igrade,
- &dl[1], &dr[1], &ipvtng, &iwork[1], sparse);
-/* L490: */
- }
-/* L500: */
- }
- }
-
- }
-
- }
-
-/* 5) Scaling the norm */
-
- if (ipack == 0) {
- onorm = dlange_("M", m, n, &a[a_offset], lda, tempa);
- } else if (ipack == 1) {
- onorm = dlansy_("M", "U", n, &a[a_offset], lda, tempa);
- } else if (ipack == 2) {
- onorm = dlansy_("M", "L", n, &a[a_offset], lda, tempa);
- } else if (ipack == 3) {
- onorm = dlansp_("M", "U", n, &a[a_offset], tempa);
- } else if (ipack == 4) {
- onorm = dlansp_("M", "L", n, &a[a_offset], tempa);
- } else if (ipack == 5) {
- onorm = dlansb_("M", "L", n, &kll, &a[a_offset], lda, tempa);
- } else if (ipack == 6) {
- onorm = dlansb_("M", "U", n, &kuu, &a[a_offset], lda, tempa);
- } else if (ipack == 7) {
- onorm = dlangb_("M", n, &kll, &kuu, &a[a_offset], lda, tempa);
- }
-
- if (*anorm >= 0.) {
-
- if (*anorm > 0. && onorm == 0.) {
-
-/* Desired scaling impossible */
-
- *info = 5;
- return 0;
-
- } else if (*anorm > 1. && onorm < 1. || *anorm < 1. && onorm > 1.) {
-
-/* Scale carefully to avoid over / underflow */
-
- if (ipack <= 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- d__1 = 1. / onorm;
- dscal_(m, &d__1, &a[j * a_dim1 + 1], &c__1);
- dscal_(m, anorm, &a[j * a_dim1 + 1], &c__1);
-/* L510: */
- }
-
- } else if (ipack == 3 || ipack == 4) {
-
- i__1 = *n * (*n + 1) / 2;
- d__1 = 1. / onorm;
- dscal_(&i__1, &d__1, &a[a_offset], &c__1);
- i__1 = *n * (*n + 1) / 2;
- dscal_(&i__1, anorm, &a[a_offset], &c__1);
-
- } else if (ipack >= 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = kll + kuu + 1;
- d__1 = 1. / onorm;
- dscal_(&i__2, &d__1, &a[j * a_dim1 + 1], &c__1);
- i__2 = kll + kuu + 1;
- dscal_(&i__2, anorm, &a[j * a_dim1 + 1], &c__1);
-/* L520: */
- }
-
- }
-
- } else {
-
-/* Scale straightforwardly */
-
- if (ipack <= 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- d__1 = *anorm / onorm;
- dscal_(m, &d__1, &a[j * a_dim1 + 1], &c__1);
-/* L530: */
- }
-
- } else if (ipack == 3 || ipack == 4) {
-
- i__1 = *n * (*n + 1) / 2;
- d__1 = *anorm / onorm;
- dscal_(&i__1, &d__1, &a[a_offset], &c__1);
-
- } else if (ipack >= 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = kll + kuu + 1;
- d__1 = *anorm / onorm;
- dscal_(&i__2, &d__1, &a[j * a_dim1 + 1], &c__1);
-/* L540: */
- }
- }
-
- }
-
- }
-
-/* End of DLATMR */
-
- return 0;
-} /* dlatmr_ */
-
diff --git a/TESTING/MATGEN/dlatms.c b/TESTING/MATGEN/dlatms.c
deleted file mode 100644
index 2426951..0000000
--- a/TESTING/MATGEN/dlatms.c
+++ /dev/null
@@ -1,1341 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__1 = 1;
-static doublereal c_b22 = 0.;
-static logical c_true = TRUE_;
-static logical c_false = FALSE_;
-
-int
-dlatms_(integer *m, integer *n, char *dist, integer *
- iseed, char *sym, doublereal *d, integer *mode, doublereal *cond,
- doublereal *dmax__, integer *kl, integer *ku, char *pack,
- doublereal *a, integer *lda, doublereal *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
- doublereal d__1, d__2, d__3;
- logical L__1;
-
- /* Builtin functions */
- double cos(doublereal), sin(doublereal);
-
- /* Local variables */
- static integer ilda, icol;
- static doublereal temp;
- static integer irow, isym;
- static doublereal c;
- static integer i, j, k;
- static doublereal s, alpha, angle;
- static integer ipack;
- extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
- integer *);
- static integer ioffg;
- extern logical lsame_(char *, char *);
- static integer iinfo, idist, mnmin;
- extern /* Subroutine */ int dcopy_(integer *, doublereal *, integer *,
- doublereal *, integer *);
- static integer iskew;
- static doublereal extra, dummy;
- extern /* Subroutine */ int dlatm1_(integer *, doublereal *, integer *,
- integer *, integer *, doublereal *, integer *, integer *);
- static integer ic, jc, nc;
- extern /* Subroutine */ int dlagge_(integer *, integer *, integer *,
- integer *, doublereal *, doublereal *, integer *, integer *,
- doublereal *, integer *);
- static integer il, iendch, ir, jr, ipackg, mr, minlda;
- extern doublereal dlarnd_(integer *, integer *);
- extern /* Subroutine */ int dlaset_(char *, integer *, integer *,
- doublereal *, doublereal *, doublereal *, integer *),
- dlartg_(doublereal *, doublereal *, doublereal *, doublereal *,
- doublereal *), xerbla_(char *, integer *), dlagsy_(
- integer *, integer *, doublereal *, doublereal *, integer *,
- integer *, doublereal *, integer *), dlarot_(logical *, logical *,
- logical *, integer *, doublereal *, doublereal *, doublereal *,
- integer *, doublereal *, doublereal *);
- static logical iltemp, givens;
- static integer ioffst, irsign;
- static logical ilextr, topdwn;
- static integer ir1, ir2, isympk, jch, llb, jkl, jku, uub;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- DLATMS generates random matrices with specified singular values
- (or symmetric/hermitian with specified eigenvalues)
- for testing LAPACK programs.
-
- DLATMS operates by applying the following sequence of
- operations:
-
- Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX, and SYM
- as described below.
-
- Generate a matrix with the appropriate band structure, by one
- of two methods:
-
- Method A:
- Generate a dense M x N matrix by multiplying D on the left
- and the right by random unitary matrices, then:
-
- Reduce the bandwidth according to KL and KU, using
- Householder transformations.
-
- Method B:
- Convert the bandwidth-0 (i.e., diagonal) matrix to a
- bandwidth-1 matrix using Givens rotations, "chasing"
- out-of-band elements back, much as in QR; then
- convert the bandwidth-1 to a bandwidth-2 matrix, etc.
- Note that for reasonably small bandwidths (relative to
- M and N) this requires less storage, as a dense matrix
- is not generated. Also, for symmetric matrices, only
- one triangle is generated.
-
- Method A is chosen if the bandwidth is a large fraction of the
- order of the matrix, and LDA is at least M (so a dense
- matrix can be stored.) Method B is chosen if the bandwidth
-
- is small (< 1/2 N for symmetric, < .3 N+M for
- non-symmetric), or LDA is less than M and not less than the
-
- bandwidth.
-
- Pack the matrix if desired. Options specified by PACK are:
- no packing
- zero out upper half (if symmetric)
- zero out lower half (if symmetric)
- store the upper half columnwise (if symmetric or upper
- triangular)
- store the lower half columnwise (if symmetric or lower
- triangular)
- store the lower triangle in banded format (if symmetric
- or lower triangular)
- store the upper triangle in banded format (if symmetric
- or upper triangular)
- store the entire matrix in banded format
- If Method B is chosen, and band format is specified, then the
- matrix will be generated in the band format, so no repacking
-
- will be necessary.
-
- Arguments
- =========
-
- M - INTEGER
- The number of rows of A. Not modified.
-
- N - INTEGER
- The number of columns of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate the random eigen-/singular values.
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to DLATMS
- to continue the same random number sequence.
- Changed on exit.
-
- SYM - CHARACTER*1
- If SYM='S' or 'H', the generated matrix is symmetric, with
- eigenvalues specified by D, COND, MODE, and DMAX; they
- may be positive, negative, or zero.
- If SYM='P', the generated matrix is symmetric, with
- eigenvalues (= singular values) specified by D, COND,
- MODE, and DMAX; they will not be negative.
- If SYM='N', the generated matrix is nonsymmetric, with
- singular values specified by D, COND, MODE, and DMAX;
- they will not be negative.
- Not modified.
-
- D - DOUBLE PRECISION array, dimension ( MIN( M , N ) )
- This array is used to specify the singular values or
- eigenvalues of A (see SYM, above.) If MODE=0, then D is
- assumed to contain the singular/eigenvalues, otherwise
- they will be computed according to MODE, COND, and DMAX,
- and placed in D.
- Modified if MODE is nonzero.
-
- MODE - INTEGER
- On entry this describes how the singular/eigenvalues are to
-
- be specified:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- If SYM='S' or 'H', and MODE is neither 0, 6, nor -6, then
- the elements of D will also be multiplied by a random
- sign (i.e., +1 or -1.)
- Not modified.
-
- COND - DOUBLE PRECISION
- On entry, this is used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - DOUBLE PRECISION
- If MODE is neither -6, 0 nor 6, the contents of D, as
- computed according to MODE and COND, will be scaled by
- DMAX / max(abs(D(i))); thus, the maximum absolute eigen- or
-
- singular value (which is to say the norm) will be abs(DMAX).
-
- Note that DMAX need not be positive: if DMAX is negative
- (or zero), D will be scaled by a negative number (or zero).
-
- Not modified.
-
- KL - INTEGER
- This specifies the lower bandwidth of the matrix. For
- example, KL=0 implies upper triangular, KL=1 implies upper
- Hessenberg, and KL being at least M-1 means that the matrix
-
- has full lower bandwidth. KL must equal KU if the matrix
- is symmetric.
- Not modified.
-
- KU - INTEGER
- This specifies the upper bandwidth of the matrix. For
- example, KU=0 implies lower triangular, KU=1 implies lower
- Hessenberg, and KU being at least N-1 means that the matrix
-
- has full upper bandwidth. KL must equal KU if the matrix
- is symmetric.
- Not modified.
-
- PACK - CHARACTER*1
- This specifies packing of matrix as follows:
- 'N' => no packing
- 'U' => zero out all subdiagonal entries (if symmetric)
- 'L' => zero out all superdiagonal entries (if symmetric)
- 'C' => store the upper triangle columnwise
- (only if the matrix is symmetric or upper triangular)
-
- 'R' => store the lower triangle columnwise
- (only if the matrix is symmetric or lower triangular)
-
- 'B' => store the lower triangle in band storage scheme
- (only if matrix symmetric or lower triangular)
- 'Q' => store the upper triangle in band storage scheme
- (only if matrix symmetric or upper triangular)
- 'Z' => store the entire matrix in band storage scheme
- (pivoting can be provided for by using this
- option to store A in the trailing rows of
- the allocated storage)
-
- Using these options, the various LAPACK packed and banded
- storage schemes can be obtained:
- GB - use 'Z'
- PB, SB or TB - use 'B' or 'Q'
- PP, SP or TP - use 'C' or 'R'
-
- If two calls to DLATMS differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
- Not modified.
-
- A - DOUBLE PRECISION array, dimension ( LDA, N )
- On exit A is the desired test matrix. A is first generated
- in full (unpacked) form, and then packed, if so specified
- by PACK. Thus, the first M elements of the first N
- columns will always be modified. If PACK specifies a
- packed or banded storage scheme, all LDA elements of the
- first N columns will be modified; the elements of the
- array which do not correspond to elements of the generated
- matrix are set to zero.
- Modified.
-
- LDA - INTEGER
- LDA specifies the first dimension of A as declared in the
- calling program. If PACK='N', 'U', 'L', 'C', or 'R', then
- LDA must be at least M. If PACK='B' or 'Q', then LDA must
- be at least MIN( KL, M-1) (which is equal to MIN(KU,N-1)).
- If PACK='Z', LDA must be large enough to hold the packed
- array: MIN( KU, N-1) + MIN( KL, M-1) + 1.
- Not modified.
-
- WORK - DOUBLE PRECISION array, dimension ( 3*MAX( N , M ) )
- Workspace.
- Modified.
-
- INFO - INTEGER
- Error code. On exit, INFO will be set to one of the
- following values:
- 0 => normal return
- -1 => M negative or unequal to N and SYM='S', 'H', or 'P'
- -2 => N negative
- -3 => DIST illegal string
- -5 => SYM illegal string
- -7 => MODE not in range -6 to 6
- -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -10 => KL negative
- -11 => KU negative, or SYM='S' or 'H' and KU not equal to KL
-
- -12 => PACK illegal string, or PACK='U' or 'L', and SYM='N';
-
- or PACK='C' or 'Q' and SYM='N' and KL is not zero;
- or PACK='R' or 'B' and SYM='N' and KU is not zero;
- or PACK='U', 'L', 'C', 'R', 'B', or 'Q', and M is not
-
- N.
- -14 => LDA is less than M, or PACK='Z' and LDA is less than
-
- MIN(KU,N-1) + MIN(KL,M-1) + 1.
- 1 => Error return from DLATM1
- 2 => Cannot scale to DMAX (max. sing. value is 0)
- 3 => Error return from DLAGGE or SLAGSY
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --work;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*m == 0 || *n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else {
- idist = -1;
- }
-
-/* Decode SYM */
-
- if (lsame_(sym, "N")) {
- isym = 1;
- irsign = 0;
- } else if (lsame_(sym, "P")) {
- isym = 2;
- irsign = 0;
- } else if (lsame_(sym, "S")) {
- isym = 2;
- irsign = 1;
- } else if (lsame_(sym, "H")) {
- isym = 2;
- irsign = 1;
- } else {
- isym = -1;
- }
-
-/* Decode PACK */
-
- isympk = 0;
- if (lsame_(pack, "N")) {
- ipack = 0;
- } else if (lsame_(pack, "U")) {
- ipack = 1;
- isympk = 1;
- } else if (lsame_(pack, "L")) {
- ipack = 2;
- isympk = 1;
- } else if (lsame_(pack, "C")) {
- ipack = 3;
- isympk = 2;
- } else if (lsame_(pack, "R")) {
- ipack = 4;
- isympk = 3;
- } else if (lsame_(pack, "B")) {
- ipack = 5;
- isympk = 3;
- } else if (lsame_(pack, "Q")) {
- ipack = 6;
- isympk = 2;
- } else if (lsame_(pack, "Z")) {
- ipack = 7;
- } else {
- ipack = -1;
- }
-
-/* Set certain internal parameters */
-
- mnmin = min(*m,*n);
-/* Computing MIN */
- i__1 = *kl, i__2 = *m - 1;
- llb = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *ku, i__2 = *n - 1;
- uub = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *m, i__2 = *n + llb;
- mr = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *n, i__2 = *m + uub;
- nc = min(i__1,i__2);
-
- if (ipack == 5 || ipack == 6) {
- minlda = uub + 1;
- } else if (ipack == 7) {
- minlda = llb + uub + 1;
- } else {
- minlda = *m;
- }
-
-/* Use Givens rotation method if bandwidth small enough,
- or if LDA is too small to store the matrix unpacked. */
-
- givens = FALSE_;
- if (isym == 1) {
-/* Computing MAX */
- i__1 = 1, i__2 = mr + nc;
- if ((doublereal) (llb + uub) < (doublereal) max(i__1,i__2) * .3) {
- givens = TRUE_;
- }
- } else {
- if (llb << 1 < *m) {
- givens = TRUE_;
- }
- }
- if (*lda < *m && *lda >= minlda) {
- givens = TRUE_;
- }
-
-/* Set INFO if an error */
-
- if (*m < 0) {
- *info = -1;
- } else if (*m != *n && isym != 1) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (idist == -1) {
- *info = -3;
- } else if (isym == -1) {
- *info = -5;
- } else if (abs(*mode) > 6) {
- *info = -7;
- } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.) {
- *info = -8;
- } else if (*kl < 0) {
- *info = -10;
- } else if (*ku < 0 || isym != 1 && *kl != *ku) {
- *info = -11;
- } else if (ipack == -1 || isympk == 1 && isym == 1 || isympk == 2 && isym
- == 1 && *kl > 0 || isympk == 3 && isym == 1 && *ku > 0 || isympk
- != 0 && *m != *n) {
- *info = -12;
- } else if (*lda < max(1,minlda)) {
- *info = -14;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("DLATMS", &i__1);
- return 0;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L10: */
- }
-
- if (iseed[4] % 2 != 1) {
- ++iseed[4];
- }
-
-/* 2) Set up D if indicated.
-
- Compute D according to COND and MODE */
-
- dlatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, &iinfo);
- if (iinfo != 0) {
- *info = 1;
- return 0;
- }
-
-/* Choose Top-Down if D is (apparently) increasing,
- Bottom-Up if D is (apparently) decreasing. */
-
- if (abs(d[1]) <= (d__1 = d[mnmin], abs(d__1))) {
- topdwn = TRUE_;
- } else {
- topdwn = FALSE_;
- }
-
- if (*mode != 0 && abs(*mode) != 6) {
-
-/* Scale by DMAX */
-
- temp = abs(d[1]);
- i__1 = mnmin;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- d__2 = temp, d__3 = (d__1 = d[i], abs(d__1));
- temp = max(d__2,d__3);
-/* L20: */
- }
-
- if (temp > 0.) {
- alpha = *dmax__ / temp;
- } else {
- *info = 2;
- return 0;
- }
-
- dscal_(&mnmin, &alpha, &d[1], &c__1);
-
- }
-
-/* 3) Generate Banded Matrix using Givens rotations.
- Also the special case of UUB=LLB=0
-
- Compute Addressing constants to cover all
- storage formats. Whether GE, SY, GB, or SB,
- upper or lower triangle or both,
- the (i,j)-th element is in
- A( i - ISKEW*j + IOFFST, j ) */
-
- if (ipack > 4) {
- ilda = *lda - 1;
- iskew = 1;
- if (ipack > 5) {
- ioffst = uub + 1;
- } else {
- ioffst = 1;
- }
- } else {
- ilda = *lda;
- iskew = 0;
- ioffst = 0;
- }
-
-/* IPACKG is the format that the matrix is generated in. If this is
- different from IPACK, then the matrix must be repacked at the
- end. It also signals how to compute the norm, for scaling. */
-
- ipackg = 0;
- dlaset_("Full", lda, n, &c_b22, &c_b22, &a[a_offset], lda);
-
-/* Diagonal Matrix -- We are done, unless it
- is to be stored SP/PP/TP (PACK='R' or 'C') */
-
- if (llb == 0 && uub == 0) {
- i__1 = ilda + 1;
- dcopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffst + a_dim1], &i__1);
- if (ipack <= 2 || ipack >= 5) {
- ipackg = ipack;
- }
-
- } else if (givens) {
-
-/* Check whether to use Givens rotations,
- Householder transformations, or nothing. */
-
- if (isym == 1) {
-
-/* Non-symmetric -- A = U D V */
-
- if (ipack > 4) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
-
- i__1 = ilda + 1;
- dcopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffst + a_dim1], &
- i__1);
-
- if (topdwn) {
- jkl = 0;
- i__1 = uub;
- for (jku = 1; jku <= i__1; ++jku) {
-
-/* Transform from bandwidth JKL, JKU-1 to
-JKL, JKU
-
- Last row actually rotated is M
- Last column actually rotated is MIN( M+
-JKU, N )
-
- Computing MIN */
- i__3 = *m + jku;
- i__2 = min(i__3,*n) + jkl - 1;
- for (jr = 1; jr <= i__2; ++jr) {
- extra = 0.;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- c = cos(angle);
- s = sin(angle);
-/* Computing MAX */
- i__3 = 1, i__4 = jr - jkl;
- icol = max(i__3,i__4);
- if (jr < *m) {
-/* Computing MIN */
- i__3 = *n, i__4 = jr + jku;
- il = min(i__3,i__4) + 1 - icol;
- L__1 = jr > jkl;
- dlarot_(&c_true, &L__1, &c_false, &il, &c, &s, &a[
- jr - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &extra, &dummy);
- }
-
-/* Chase "EXTRA" back up */
-
- ir = jr;
- ic = icol;
- i__3 = -jkl - jku;
- for (jch = jr - jkl; i__3 < 0 ? jch >= 1 : jch <= 1;
- jch += i__3) {
- if (ir < *m) {
- dlartg_(&a[ir + 1 - iskew * (ic + 1) + ioffst
- + (ic + 1) * a_dim1], &extra, &c, &s,
- &dummy);
- }
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jku;
- irow = max(i__4,i__5);
- il = ir + 2 - irow;
- temp = 0.;
- iltemp = jch > jku;
- d__1 = -s;
- dlarot_(&c_false, &iltemp, &c_true, &il, &c, &
- d__1, &a[irow - iskew * ic + ioffst + ic *
- a_dim1], &ilda, &temp, &extra);
- if (iltemp) {
- dlartg_(&a[irow + 1 - iskew * (ic + 1) +
- ioffst + (ic + 1) * a_dim1], &temp, &
- c, &s, &dummy);
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jku - jkl;
- icol = max(i__4,i__5);
- il = ic + 2 - icol;
- extra = 0.;
- L__1 = jch > jku + jkl;
- d__1 = -s;
- dlarot_(&c_true, &L__1, &c_true, &il, &c, &
- d__1, &a[irow - iskew * icol + ioffst
- + icol * a_dim1], &ilda, &extra, &
- temp);
- ic = icol;
- ir = irow;
- }
-/* L30: */
- }
-/* L40: */
- }
-/* L50: */
- }
-
- jku = uub;
- i__1 = llb;
- for (jkl = 1; jkl <= i__1; ++jkl) {
-
-/* Transform from bandwidth JKL-1, JKU to
-JKL, JKU
-
- Computing MIN */
- i__3 = *n + jkl;
- i__2 = min(i__3,*m) + jku - 1;
- for (jc = 1; jc <= i__2; ++jc) {
- extra = 0.;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- c = cos(angle);
- s = sin(angle);
-/* Computing MAX */
- i__3 = 1, i__4 = jc - jku;
- irow = max(i__3,i__4);
- if (jc < *n) {
-/* Computing MIN */
- i__3 = *m, i__4 = jc + jkl;
- il = min(i__3,i__4) + 1 - irow;
- L__1 = jc > jku;
- dlarot_(&c_false, &L__1, &c_false, &il, &c, &s, &
- a[irow - iskew * jc + ioffst + jc *
- a_dim1], &ilda, &extra, &dummy);
- }
-
-/* Chase "EXTRA" back up */
-
- ic = jc;
- ir = irow;
- i__3 = -jkl - jku;
- for (jch = jc - jku; i__3 < 0 ? jch >= 1 : jch <= 1;
- jch += i__3) {
- if (ic < *n) {
- dlartg_(&a[ir + 1 - iskew * (ic + 1) + ioffst
- + (ic + 1) * a_dim1], &extra, &c, &s,
- &dummy);
- }
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jkl;
- icol = max(i__4,i__5);
- il = ic + 2 - icol;
- temp = 0.;
- iltemp = jch > jkl;
- d__1 = -s;
- dlarot_(&c_true, &iltemp, &c_true, &il, &c, &d__1,
- &a[ir - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &temp, &extra);
- if (iltemp) {
- dlartg_(&a[ir + 1 - iskew * (icol + 1) +
- ioffst + (icol + 1) * a_dim1], &temp,
- &c, &s, &dummy);
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jkl - jku;
- irow = max(i__4,i__5);
- il = ir + 2 - irow;
- extra = 0.;
- L__1 = jch > jkl + jku;
- d__1 = -s;
- dlarot_(&c_false, &L__1, &c_true, &il, &c, &
- d__1, &a[irow - iskew * icol + ioffst
- + icol * a_dim1], &ilda, &extra, &
- temp);
- ic = icol;
- ir = irow;
- }
-/* L60: */
- }
-/* L70: */
- }
-/* L80: */
- }
-
- } else {
-
-/* Bottom-Up -- Start at the bottom right. */
-
- jkl = 0;
- i__1 = uub;
- for (jku = 1; jku <= i__1; ++jku) {
-
-/* Transform from bandwidth JKL, JKU-1 to
-JKL, JKU
-
- First row actually rotated is M
- First column actually rotated is MIN( M
-+JKU, N )
-
- Computing MIN */
- i__2 = *m, i__3 = *n + jkl;
- iendch = min(i__2,i__3) - 1;
-/* Computing MIN */
- i__2 = *m + jku;
- i__3 = 1 - jkl;
- for (jc = min(i__2,*n) - 1; jc >= i__3; --jc) {
- extra = 0.;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- c = cos(angle);
- s = sin(angle);
-/* Computing MAX */
- i__2 = 1, i__4 = jc - jku + 1;
- irow = max(i__2,i__4);
- if (jc > 0) {
-/* Computing MIN */
- i__2 = *m, i__4 = jc + jkl + 1;
- il = min(i__2,i__4) + 1 - irow;
- L__1 = jc + jkl < *m;
- dlarot_(&c_false, &c_false, &L__1, &il, &c, &s, &
- a[irow - iskew * jc + ioffst + jc *
- a_dim1], &ilda, &dummy, &extra);
- }
-
-/* Chase "EXTRA" back down */
-
- ic = jc;
- i__2 = iendch;
- i__4 = jkl + jku;
- for (jch = jc + jkl; i__4 < 0 ? jch >= i__2 : jch <=
- i__2; jch += i__4) {
- ilextr = ic > 0;
- if (ilextr) {
- dlartg_(&a[jch - iskew * ic + ioffst + ic *
- a_dim1], &extra, &c, &s, &dummy);
- }
- ic = max(1,ic);
-/* Computing MIN */
- i__5 = *n - 1, i__6 = jch + jku;
- icol = min(i__5,i__6);
- iltemp = jch + jku < *n;
- temp = 0.;
- i__5 = icol + 2 - ic;
- dlarot_(&c_true, &ilextr, &iltemp, &i__5, &c, &s,
- &a[jch - iskew * ic + ioffst + ic *
- a_dim1], &ilda, &extra, &temp);
- if (iltemp) {
- dlartg_(&a[jch - iskew * icol + ioffst + icol
- * a_dim1], &temp, &c, &s, &dummy);
-/* Computing MIN */
- i__5 = iendch, i__6 = jch + jkl + jku;
- il = min(i__5,i__6) + 2 - jch;
- extra = 0.;
- L__1 = jch + jkl + jku <= iendch;
- dlarot_(&c_false, &c_true, &L__1, &il, &c, &s,
- &a[jch - iskew * icol + ioffst +
- icol * a_dim1], &ilda, &temp, &extra);
- ic = icol;
- }
-/* L90: */
- }
-/* L100: */
- }
-/* L110: */
- }
-
- jku = uub;
- i__1 = llb;
- for (jkl = 1; jkl <= i__1; ++jkl) {
-
-/* Transform from bandwidth JKL-1, JKU to
-JKL, JKU
-
- First row actually rotated is MIN( N+JK
-L, M )
- First column actually rotated is N
-
- Computing MIN */
- i__3 = *n, i__4 = *m + jku;
- iendch = min(i__3,i__4) - 1;
-/* Computing MIN */
- i__3 = *n + jkl;
- i__4 = 1 - jku;
- for (jr = min(i__3,*m) - 1; jr >= i__4; --jr) {
- extra = 0.;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- c = cos(angle);
- s = sin(angle);
-/* Computing MAX */
- i__3 = 1, i__2 = jr - jkl + 1;
- icol = max(i__3,i__2);
- if (jr > 0) {
-/* Computing MIN */
- i__3 = *n, i__2 = jr + jku + 1;
- il = min(i__3,i__2) + 1 - icol;
- L__1 = jr + jku < *n;
- dlarot_(&c_true, &c_false, &L__1, &il, &c, &s, &a[
- jr - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &dummy, &extra);
- }
-
-/* Chase "EXTRA" back down */
-
- ir = jr;
- i__3 = iendch;
- i__2 = jkl + jku;
- for (jch = jr + jku; i__2 < 0 ? jch >= i__3 : jch <=
- i__3; jch += i__2) {
- ilextr = ir > 0;
- if (ilextr) {
- dlartg_(&a[ir - iskew * jch + ioffst + jch *
- a_dim1], &extra, &c, &s, &dummy);
- }
- ir = max(1,ir);
-/* Computing MIN */
- i__5 = *m - 1, i__6 = jch + jkl;
- irow = min(i__5,i__6);
- iltemp = jch + jkl < *m;
- temp = 0.;
- i__5 = irow + 2 - ir;
- dlarot_(&c_false, &ilextr, &iltemp, &i__5, &c, &s,
- &a[ir - iskew * jch + ioffst + jch *
- a_dim1], &ilda, &extra, &temp);
- if (iltemp) {
- dlartg_(&a[irow - iskew * jch + ioffst + jch *
- a_dim1], &temp, &c, &s, &dummy);
-/* Computing MIN */
- i__5 = iendch, i__6 = jch + jkl + jku;
- il = min(i__5,i__6) + 2 - jch;
- extra = 0.;
- L__1 = jch + jkl + jku <= iendch;
- dlarot_(&c_true, &c_true, &L__1, &il, &c, &s,
- &a[irow - iskew * jch + ioffst + jch *
- a_dim1], &ilda, &temp, &extra);
- ir = irow;
- }
-/* L120: */
- }
-/* L130: */
- }
-/* L140: */
- }
- }
-
- } else {
-
-/* Symmetric -- A = U D U' */
-
- ipackg = ipack;
- ioffg = ioffst;
-
- if (topdwn) {
-
-/* Top-Down -- Generate Upper triangle only */
-
- if (ipack >= 5) {
- ipackg = 6;
- ioffg = uub + 1;
- } else {
- ipackg = 1;
- }
- i__1 = ilda + 1;
- dcopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffg + a_dim1], &
- i__1);
-
- i__1 = uub;
- for (k = 1; k <= i__1; ++k) {
- i__4 = *n - 1;
- for (jc = 1; jc <= i__4; ++jc) {
-/* Computing MAX */
- i__2 = 1, i__3 = jc - k;
- irow = max(i__2,i__3);
-/* Computing MIN */
- i__2 = jc + 1, i__3 = k + 2;
- il = min(i__2,i__3);
- extra = 0.;
- temp = a[jc - iskew * (jc + 1) + ioffg + (jc + 1) *
- a_dim1];
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- c = cos(angle);
- s = sin(angle);
- L__1 = jc > k;
- dlarot_(&c_false, &L__1, &c_true, &il, &c, &s, &a[
- irow - iskew * jc + ioffg + jc * a_dim1], &
- ilda, &extra, &temp);
-/* Computing MIN */
- i__3 = k, i__5 = *n - jc;
- i__2 = min(i__3,i__5) + 1;
- dlarot_(&c_true, &c_true, &c_false, &i__2, &c, &s, &a[
- (1 - iskew) * jc + ioffg + jc * a_dim1], &
- ilda, &temp, &dummy);
-
-/* Chase EXTRA back up the matrix
-*/
-
- icol = jc;
- i__2 = -k;
- for (jch = jc - k; i__2 < 0 ? jch >= 1 : jch <= 1;
- jch += i__2) {
- dlartg_(&a[jch + 1 - iskew * (icol + 1) + ioffg +
- (icol + 1) * a_dim1], &extra, &c, &s, &
- dummy);
- temp = a[jch - iskew * (jch + 1) + ioffg + (jch +
- 1) * a_dim1];
- i__3 = k + 2;
- d__1 = -s;
- dlarot_(&c_true, &c_true, &c_true, &i__3, &c, &
- d__1, &a[(1 - iskew) * jch + ioffg + jch *
- a_dim1], &ilda, &temp, &extra);
-/* Computing MAX */
- i__3 = 1, i__5 = jch - k;
- irow = max(i__3,i__5);
-/* Computing MIN */
- i__3 = jch + 1, i__5 = k + 2;
- il = min(i__3,i__5);
- extra = 0.;
- L__1 = jch > k;
- d__1 = -s;
- dlarot_(&c_false, &L__1, &c_true, &il, &c, &d__1,
- &a[irow - iskew * jch + ioffg + jch *
- a_dim1], &ilda, &extra, &temp);
- icol = jch;
-/* L150: */
- }
-/* L160: */
- }
-/* L170: */
- }
-
-/* If we need lower triangle, copy from upper. No
-te that
- the order of copying is chosen to work for 'q'
- -> 'b' */
-
- if (ipack != ipackg && ipack != 3) {
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- irow = ioffst - iskew * jc;
-/* Computing MIN */
- i__2 = *n, i__3 = jc + uub;
- i__4 = min(i__2,i__3);
- for (jr = jc; jr <= i__4; ++jr) {
- a[jr + irow + jc * a_dim1] = a[jc - iskew * jr +
- ioffg + jr * a_dim1];
-/* L180: */
- }
-/* L190: */
- }
- if (ipack == 5) {
- i__1 = *n;
- for (jc = *n - uub + 1; jc <= i__1; ++jc) {
- i__4 = uub + 1;
- for (jr = *n + 2 - jc; jr <= i__4; ++jr) {
- a[jr + jc * a_dim1] = 0.;
-/* L200: */
- }
-/* L210: */
- }
- }
- if (ipackg == 6) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
- }
- } else {
-
-/* Bottom-Up -- Generate Lower triangle only */
-
- if (ipack >= 5) {
- ipackg = 5;
- if (ipack == 6) {
- ioffg = 1;
- }
- } else {
- ipackg = 2;
- }
- i__1 = ilda + 1;
- dcopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffg + a_dim1], &
- i__1);
-
- i__1 = uub;
- for (k = 1; k <= i__1; ++k) {
- for (jc = *n - 1; jc >= 1; --jc) {
-/* Computing MIN */
- i__4 = *n + 1 - jc, i__2 = k + 2;
- il = min(i__4,i__2);
- extra = 0.;
- temp = a[(1 - iskew) * jc + 1 + ioffg + jc * a_dim1];
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- c = cos(angle);
- s = -sin(angle);
- L__1 = *n - jc > k;
- dlarot_(&c_false, &c_true, &L__1, &il, &c, &s, &a[(1
- - iskew) * jc + ioffg + jc * a_dim1], &ilda, &
- temp, &extra);
-/* Computing MAX */
- i__4 = 1, i__2 = jc - k + 1;
- icol = max(i__4,i__2);
- i__4 = jc + 2 - icol;
- dlarot_(&c_true, &c_false, &c_true, &i__4, &c, &s, &a[
- jc - iskew * icol + ioffg + icol * a_dim1], &
- ilda, &dummy, &temp);
-
-/* Chase EXTRA back down the matrix
- */
-
- icol = jc;
- i__4 = *n - 1;
- i__2 = k;
- for (jch = jc + k; i__2 < 0 ? jch >= i__4 : jch <=
- i__4; jch += i__2) {
- dlartg_(&a[jch - iskew * icol + ioffg + icol *
- a_dim1], &extra, &c, &s, &dummy);
- temp = a[(1 - iskew) * jch + 1 + ioffg + jch *
- a_dim1];
- i__3 = k + 2;
- dlarot_(&c_true, &c_true, &c_true, &i__3, &c, &s,
- &a[jch - iskew * icol + ioffg + icol *
- a_dim1], &ilda, &extra, &temp);
-/* Computing MIN */
- i__3 = *n + 1 - jch, i__5 = k + 2;
- il = min(i__3,i__5);
- extra = 0.;
- L__1 = *n - jch > k;
- dlarot_(&c_false, &c_true, &L__1, &il, &c, &s, &a[
- (1 - iskew) * jch + ioffg + jch * a_dim1],
- &ilda, &temp, &extra);
- icol = jch;
-/* L220: */
- }
-/* L230: */
- }
-/* L240: */
- }
-
-/* If we need upper triangle, copy from lower. No
-te that
- the order of copying is chosen to work for 'b'
- -> 'q' */
-
- if (ipack != ipackg && ipack != 4) {
- for (jc = *n; jc >= 1; --jc) {
- irow = ioffst - iskew * jc;
-/* Computing MAX */
- i__2 = 1, i__4 = jc - uub;
- i__1 = max(i__2,i__4);
- for (jr = jc; jr >= i__1; --jr) {
- a[jr + irow + jc * a_dim1] = a[jc - iskew * jr +
- ioffg + jr * a_dim1];
-/* L250: */
- }
-/* L260: */
- }
- if (ipack == 6) {
- i__1 = uub;
- for (jc = 1; jc <= i__1; ++jc) {
- i__2 = uub + 1 - jc;
- for (jr = 1; jr <= i__2; ++jr) {
- a[jr + jc * a_dim1] = 0.;
-/* L270: */
- }
-/* L280: */
- }
- }
- if (ipackg == 5) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
- }
- }
- }
-
- } else {
-
-/* 4) Generate Banded Matrix by first
- Rotating by random Unitary matrices,
- then reducing the bandwidth using Householder
- transformations.
-
- Note: we should get here only if LDA .ge. N */
-
- if (isym == 1) {
-
-/* Non-symmetric -- A = U D V */
-
- dlagge_(&mr, &nc, &llb, &uub, &d[1], &a[a_offset], lda, &iseed[1],
- &work[1], &iinfo);
- } else {
-
-/* Symmetric -- A = U D U' */
-
- dlagsy_(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1], &
- iinfo);
-
- }
- if (iinfo != 0) {
- *info = 3;
- return 0;
- }
- }
-
-/* 5) Pack the matrix */
-
- if (ipack != ipackg) {
- if (ipack == 1) {
-
-/* 'U' -- Upper triangular, not packed */
-
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j + 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = 0.;
-/* L290: */
- }
-/* L300: */
- }
-
- } else if (ipack == 2) {
-
-/* 'L' -- Lower triangular, not packed */
-
- i__1 = *m;
- for (j = 2; j <= i__1; ++j) {
- i__2 = j - 1;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = 0.;
-/* L310: */
- }
-/* L320: */
- }
-
- } else if (ipack == 3) {
-
-/* 'C' -- Upper triangle packed Columnwise. */
-
- icol = 1;
- irow = 0;
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- ++irow;
- if (irow > *lda) {
- irow = 1;
- ++icol;
- }
- a[irow + icol * a_dim1] = a[i + j * a_dim1];
-/* L330: */
- }
-/* L340: */
- }
-
- } else if (ipack == 4) {
-
-/* 'R' -- Lower triangle packed Columnwise. */
-
- icol = 1;
- irow = 0;
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j; i <= i__2; ++i) {
- ++irow;
- if (irow > *lda) {
- irow = 1;
- ++icol;
- }
- a[irow + icol * a_dim1] = a[i + j * a_dim1];
-/* L350: */
- }
-/* L360: */
- }
-
- } else if (ipack >= 5) {
-
-/* 'B' -- The lower triangle is packed as a band matrix.
-
- 'Q' -- The upper triangle is packed as a band matrix.
-
- 'Z' -- The whole matrix is packed as a band matrix.
-*/
-
- if (ipack == 5) {
- uub = 0;
- }
- if (ipack == 6) {
- llb = 0;
- }
-
- i__1 = uub;
- for (j = 1; j <= i__1; ++j) {
-/* Computing MIN */
- i__2 = j + llb;
- for (i = min(i__2,*m); i >= 1; --i) {
- a[i - j + uub + 1 + j * a_dim1] = a[i + j * a_dim1];
-/* L370: */
- }
-/* L380: */
- }
-
- i__1 = *n;
- for (j = uub + 2; j <= i__1; ++j) {
-/* Computing MIN */
- i__4 = j + llb;
- i__2 = min(i__4,*m);
- for (i = j - uub; i <= i__2; ++i) {
- a[i - j + uub + 1 + j * a_dim1] = a[i + j * a_dim1];
-/* L390: */
- }
-/* L400: */
- }
- }
-
-/* If packed, zero out extraneous elements.
-
- Symmetric/Triangular Packed --
- zero out everything after A(IROW,ICOL) */
-
- if (ipack == 3 || ipack == 4) {
- i__1 = *m;
- for (jc = icol; jc <= i__1; ++jc) {
- i__2 = *lda;
- for (jr = irow + 1; jr <= i__2; ++jr) {
- a[jr + jc * a_dim1] = 0.;
-/* L410: */
- }
- irow = 0;
-/* L420: */
- }
-
- } else if (ipack >= 5) {
-
-/* Packed Band --
- 1st row is now in A( UUB+2-j, j), zero above it
- m-th row is now in A( M+UUB-j,j), zero below it
- last non-zero diagonal is now in A( UUB+LLB+1,j ),
-
- zero below it, too. */
-
- ir1 = uub + llb + 2;
- ir2 = uub + *m + 2;
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- i__2 = uub + 1 - jc;
- for (jr = 1; jr <= i__2; ++jr) {
- a[jr + jc * a_dim1] = 0.;
-/* L430: */
- }
-/* Computing MAX
- Computing MIN */
- i__3 = ir1, i__5 = ir2 - jc;
- i__2 = 1, i__4 = min(i__3,i__5);
- i__6 = *lda;
- for (jr = max(i__2,i__4); jr <= i__6; ++jr) {
- a[jr + jc * a_dim1] = 0.;
-/* L440: */
- }
-/* L450: */
- }
- }
- }
-
- return 0;
-
-/* End of DLATMS */
-
-} /* dlatms_ */
-
diff --git a/TESTING/MATGEN/lsamen.c b/TESTING/MATGEN/lsamen.c
deleted file mode 100644
index 82a5d18..0000000
--- a/TESTING/MATGEN/lsamen.c
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <string.h>
-#include "f2c.h"
-
-logical lsamen_(integer *n, 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
-
-
- Purpose
- =======
-
- LSAMEN tests if the first N letters of CA are the same as the
- first N letters of CB, regardless of case.
- LSAMEN returns .TRUE. if CA and CB are equivalent except for case
- and .FALSE. otherwise. LSAMEN also returns .FALSE. if LEN( CA )
- or LEN( CB ) is less than N.
-
- Arguments
- =========
-
- N (input) INTEGER
- The number of characters in CA and CB to be compared.
-
- CA (input) CHARACTER*(*)
- CB (input) CHARACTER*(*)
- CA and CB specify two character strings of length at least N.
-
- Only the first N characters of each string will be accessed.
-
-
- =====================================================================
-*/
- /* System generated locals */
- integer i__1;
- logical ret_val;
- /* Local variables */
- static integer i;
- extern logical lsame_(char *, char *);
-
-
- ret_val = FALSE_;
- if (strlen(ca) < *n || strlen(cb) < *n) {
- goto L20;
- }
-
-/* Do for each character in the two strings. */
-
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
-
-/* Test if the characters are equal using LSAME. */
-
- if (! lsame_(ca + (i - 1), cb + (i - 1))) {
- goto L20;
- }
-
-/* L10: */
- }
- ret_val = TRUE_;
-
-L20:
- return ret_val;
-
-/* End of LSAMEN */
-
-} /* lsamen_ */
-
diff --git a/TESTING/MATGEN/slabad.c b/TESTING/MATGEN/slabad.c
deleted file mode 100644
index 9294196..0000000
--- a/TESTING/MATGEN/slabad.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int slabad_(real *small, real *large)
-{
-/* -- 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
- =======
-
- SLABAD takes as input the values computed by SLAMCH for underflow and
-
- overflow, and returns the square root of each of these values if the
-
- log of LARGE is sufficiently large. This subroutine is intended to
- identify machines with a large exponent range, such as the Crays, and
-
- redefine the underflow and overflow limits to be the square roots of
-
- the values computed by SLAMCH. This subroutine is needed because
- SLAMCH does not compensate for poor arithmetic in the upper half of
- the exponent range, as is found on a Cray.
-
- Arguments
- =========
-
- SMALL (input/output) REAL
- On entry, the underflow threshold as computed by SLAMCH.
- On exit, if LOG10(LARGE) is sufficiently large, the square
- root of SMALL, otherwise unchanged.
-
- LARGE (input/output) REAL
- On entry, the overflow threshold as computed by SLAMCH.
- On exit, if LOG10(LARGE) is sufficiently large, the square
- root of LARGE, otherwise unchanged.
-
- =====================================================================
-
-
-
- If it looks like we're on a Cray, take the square root of
- SMALL and LARGE to avoid overflow and underflow problems. */
- /* Builtin functions */
- double r_lg10(real *), sqrt(doublereal);
-
-
- if (r_lg10(large) > 2e3f) {
- *small = sqrt(*small);
- *large = sqrt(*large);
- }
-
- return 0;
-
-/* End of SLABAD */
-
-} /* slabad_ */
-
diff --git a/TESTING/MATGEN/slagge.c b/TESTING/MATGEN/slagge.c
deleted file mode 100644
index 7844658..0000000
--- a/TESTING/MATGEN/slagge.c
+++ /dev/null
@@ -1,400 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__3 = 3;
-static integer c__1 = 1;
-static real c_b11 = 1.f;
-static real c_b13 = 0.f;
-
-/* Subroutine */ int slagge_(integer *m, integer *n, integer *kl, integer *ku,
- real *d, real *a, integer *lda, integer *iseed, real *work, integer *
- info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- real r__1;
-
- /* Builtin functions */
- double r_sign(real *, real *);
-
- /* Local variables */
- extern /* Subroutine */ int sger_(integer *, integer *, real *, real *,
- integer *, real *, integer *, real *, integer *);
- extern real snrm2_(integer *, real *, integer *);
- static integer i, j;
- extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *),
- sgemv_(char *, integer *, integer *, real *, real *, integer *,
- real *, integer *, real *, real *, integer *);
- static real wa, wb, wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), slarnv_(
- integer *, integer *, integer *, real *);
- static real tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0)
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- SLAGGE generates a real general m by n matrix A, by pre- and post-
- multiplying a real diagonal matrix D with random orthogonal matrices:
-
- A = U*D*V. The lower and upper bandwidths may then be reduced to
- kl and ku by additional orthogonal transformations.
-
- Arguments
- =========
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- KL (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= KL <= M-1.
-
- KU (input) INTEGER
- The number of nonzero superdiagonals within the band of A.
- 0 <= KU <= N-1.
-
- D (input) REAL array, dimension (min(M,N))
- The diagonal elements of the diagonal matrix D.
-
- A (output) REAL array, dimension (LDA,N)
- The generated m by n matrix A.
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= M.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) REAL array, dimension (M+N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*m < 0) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (*kl < 0 || *kl > *m - 1) {
- *info = -3;
- } else if (*ku < 0 || *ku > *n - 1) {
- *info = -4;
- } else if (*lda < max(1,*m)) {
- *info = -7;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("SLAGGE", &i__1);
- return 0;
- }
-
-/* initialize A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = 0.f;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = min(*m,*n);
- for (i = 1; i <= i__1; ++i) {
- a[i + i * a_dim1] = d[i];
-/* L30: */
- }
-
-/* pre- and post-multiply A by random orthogonal matrices */
-
- for (i = min(*m,*n); i >= 1; --i) {
- if (i < *m) {
-
-/* generate random reflection */
-
- i__1 = *m - i + 1;
- slarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *m - i + 1;
- wn = snrm2_(&i__1, &work[1], &c__1);
- wa = r_sign(&wn, &work[1]);
- if (wn == 0.f) {
- tau = 0.f;
- } else {
- wb = work[1] + wa;
- i__1 = *m - i;
- r__1 = 1.f / wb;
- sscal_(&i__1, &r__1, &work[2], &c__1);
- work[1] = 1.f;
- tau = wb / wa;
- }
-
-/* multiply A(i:m,i:n) by random reflection from the lef
-t */
-
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- sgemv_("Transpose", &i__1, &i__2, &c_b11, &a[i + i * a_dim1], lda,
- &work[1], &c__1, &c_b13, &work[*m + 1], &c__1);
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- r__1 = -(doublereal)tau;
- sger_(&i__1, &i__2, &r__1, &work[1], &c__1, &work[*m + 1], &c__1,
- &a[i + i * a_dim1], lda);
- }
- if (i < *n) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- slarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = snrm2_(&i__1, &work[1], &c__1);
- wa = r_sign(&wn, &work[1]);
- if (wn == 0.f) {
- tau = 0.f;
- } else {
- wb = work[1] + wa;
- i__1 = *n - i;
- r__1 = 1.f / wb;
- sscal_(&i__1, &r__1, &work[2], &c__1);
- work[1] = 1.f;
- tau = wb / wa;
- }
-
-/* multiply A(i:m,i:n) by random reflection from the rig
-ht */
-
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- sgemv_("No transpose", &i__1, &i__2, &c_b11, &a[i + i * a_dim1],
- lda, &work[1], &c__1, &c_b13, &work[*n + 1], &c__1);
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- r__1 = -(doublereal)tau;
- sger_(&i__1, &i__2, &r__1, &work[*n + 1], &c__1, &work[1], &c__1,
- &a[i + i * a_dim1], lda);
- }
-/* L40: */
- }
-
-/* Reduce number of subdiagonals to KL and number of superdiagonals
- to KU
-
- Computing MAX */
- i__2 = *m - 1 - *kl, i__3 = *n - 1 - *ku;
- i__1 = max(i__2,i__3);
- for (i = 1; i <= i__1; ++i) {
- if (*kl <= *ku) {
-
-/* annihilate subdiagonal elements first (necessary if K
-L = 0)
-
- Computing MIN */
- i__2 = *m - 1 - *kl;
- if (i <= min(i__2,*n)) {
-
-/* generate reflection to annihilate A(kl+i+1:m,i
-) */
-
- i__2 = *m - *kl - i + 1;
- wn = snrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
- wa = r_sign(&wn, &a[*kl + i + i * a_dim1]);
- if (wn == 0.f) {
- tau = 0.f;
- } else {
- wb = a[*kl + i + i * a_dim1] + wa;
- i__2 = *m - *kl - i;
- r__1 = 1.f / wb;
- sscal_(&i__2, &r__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
- a[*kl + i + i * a_dim1] = 1.f;
- tau = wb / wa;
- }
-
-/* apply reflection to A(kl+i:m,i+1:n) from the l
-eft */
-
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- sgemv_("Transpose", &i__2, &i__3, &c_b11, &a[*kl + i + (i + 1)
- * a_dim1], lda, &a[*kl + i + i * a_dim1], &c__1, &
- c_b13, &work[1], &c__1);
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- r__1 = -(doublereal)tau;
- sger_(&i__2, &i__3, &r__1, &a[*kl + i + i * a_dim1], &c__1, &
- work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
- a[*kl + i + i * a_dim1] = -(doublereal)wa;
- }
-
-/* Computing MIN */
- i__2 = *n - 1 - *ku;
- if (i <= min(i__2,*m)) {
-
-/* generate reflection to annihilate A(i,ku+i+1:n
-) */
-
- i__2 = *n - *ku - i + 1;
- wn = snrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- wa = r_sign(&wn, &a[i + (*ku + i) * a_dim1]);
- if (wn == 0.f) {
- tau = 0.f;
- } else {
- wb = a[i + (*ku + i) * a_dim1] + wa;
- i__2 = *n - *ku - i;
- r__1 = 1.f / wb;
- sscal_(&i__2, &r__1, &a[i + (*ku + i + 1) * a_dim1], lda);
- a[i + (*ku + i) * a_dim1] = 1.f;
- tau = wb / wa;
- }
-
-/* apply reflection to A(i+1:m,ku+i:n) from the r
-ight */
-
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- sgemv_("No transpose", &i__2, &i__3, &c_b11, &a[i + 1 + (*ku
- + i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda,
- &c_b13, &work[1], &c__1);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- r__1 = -(doublereal)tau;
- sger_(&i__2, &i__3, &r__1, &work[1], &c__1, &a[i + (*ku + i) *
- a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
- a[i + (*ku + i) * a_dim1] = -(doublereal)wa;
- }
- } else {
-
-/* annihilate superdiagonal elements first (necessary if
-
- KU = 0)
-
- Computing MIN */
- i__2 = *n - 1 - *ku;
- if (i <= min(i__2,*m)) {
-
-/* generate reflection to annihilate A(i,ku+i+1:n
-) */
-
- i__2 = *n - *ku - i + 1;
- wn = snrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- wa = r_sign(&wn, &a[i + (*ku + i) * a_dim1]);
- if (wn == 0.f) {
- tau = 0.f;
- } else {
- wb = a[i + (*ku + i) * a_dim1] + wa;
- i__2 = *n - *ku - i;
- r__1 = 1.f / wb;
- sscal_(&i__2, &r__1, &a[i + (*ku + i + 1) * a_dim1], lda);
- a[i + (*ku + i) * a_dim1] = 1.f;
- tau = wb / wa;
- }
-
-/* apply reflection to A(i+1:m,ku+i:n) from the r
-ight */
-
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- sgemv_("No transpose", &i__2, &i__3, &c_b11, &a[i + 1 + (*ku
- + i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda,
- &c_b13, &work[1], &c__1);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- r__1 = -(doublereal)tau;
- sger_(&i__2, &i__3, &r__1, &work[1], &c__1, &a[i + (*ku + i) *
- a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
- a[i + (*ku + i) * a_dim1] = -(doublereal)wa;
- }
-
-/* Computing MIN */
- i__2 = *m - 1 - *kl;
- if (i <= min(i__2,*n)) {
-
-/* generate reflection to annihilate A(kl+i+1:m,i
-) */
-
- i__2 = *m - *kl - i + 1;
- wn = snrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
- wa = r_sign(&wn, &a[*kl + i + i * a_dim1]);
- if (wn == 0.f) {
- tau = 0.f;
- } else {
- wb = a[*kl + i + i * a_dim1] + wa;
- i__2 = *m - *kl - i;
- r__1 = 1.f / wb;
- sscal_(&i__2, &r__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
- a[*kl + i + i * a_dim1] = 1.f;
- tau = wb / wa;
- }
-
-/* apply reflection to A(kl+i:m,i+1:n) from the l
-eft */
-
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- sgemv_("Transpose", &i__2, &i__3, &c_b11, &a[*kl + i + (i + 1)
- * a_dim1], lda, &a[*kl + i + i * a_dim1], &c__1, &
- c_b13, &work[1], &c__1);
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- r__1 = -(doublereal)tau;
- sger_(&i__2, &i__3, &r__1, &a[*kl + i + i * a_dim1], &c__1, &
- work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
- a[*kl + i + i * a_dim1] = -(doublereal)wa;
- }
- }
-
- i__2 = *m;
- for (j = *kl + i + 1; j <= i__2; ++j) {
- a[j + i * a_dim1] = 0.f;
-/* L50: */
- }
-
- i__2 = *n;
- for (j = *ku + i + 1; j <= i__2; ++j) {
- a[i + j * a_dim1] = 0.f;
-/* L60: */
- }
-/* L70: */
- }
- return 0;
-
-/* End of SLAGGE */
-
-} /* slagge_ */
-
diff --git a/TESTING/MATGEN/slagsy.c b/TESTING/MATGEN/slagsy.c
deleted file mode 100644
index 0471b82..0000000
--- a/TESTING/MATGEN/slagsy.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__3 = 3;
-static integer c__1 = 1;
-static real c_b12 = 0.f;
-static real c_b19 = -1.f;
-static real c_b26 = 1.f;
-
-/* Subroutine */ int slagsy_(integer *n, integer *k, real *d, real *a,
- integer *lda, integer *iseed, real *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- real r__1;
-
- /* Builtin functions */
- double r_sign(real *, real *);
-
- /* Local variables */
- extern /* Subroutine */ int sger_(integer *, integer *, real *, real *,
- integer *, real *, integer *, real *, integer *);
- extern real sdot_(integer *, real *, integer *, real *, integer *),
- snrm2_(integer *, real *, integer *);
- static integer i, j;
- extern /* Subroutine */ int ssyr2_(char *, integer *, real *, real *,
- integer *, real *, integer *, real *, integer *);
- static real alpha;
- extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *),
- sgemv_(char *, integer *, integer *, real *, real *, integer *,
- real *, integer *, real *, real *, integer *), saxpy_(
- integer *, real *, real *, integer *, real *, integer *), ssymv_(
- char *, integer *, real *, real *, integer *, real *, integer *,
- real *, real *, integer *);
- static real wa, wb, wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), slarnv_(
- integer *, integer *, integer *, real *);
- static real tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0)
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- SLAGSY generates a real symmetric matrix A, by pre- and post-
- multiplying a real diagonal matrix D with a random orthogonal matrix:
-
- A = U*D*U'. The semi-bandwidth may then be reduced to k by additional
-
- orthogonal transformations.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- K (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= K <= N-1.
-
- D (input) REAL array, dimension (N)
- The diagonal elements of the diagonal matrix D.
-
- A (output) REAL array, dimension (LDA,N)
- The generated n by n symmetric matrix A (the full matrix is
- stored).
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) REAL array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*k < 0 || *k > *n - 1) {
- *info = -2;
- } else if (*lda < max(1,*n)) {
- *info = -5;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("SLAGSY", &i__1);
- return 0;
- }
-
-/* initialize lower triangle of A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = 0.f;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- a[i + i * a_dim1] = d[i];
-/* L30: */
- }
-
-/* Generate lower triangle of symmetric matrix */
-
- for (i = *n - 1; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- slarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = snrm2_(&i__1, &work[1], &c__1);
- wa = r_sign(&wn, &work[1]);
- if (wn == 0.f) {
- tau = 0.f;
- } else {
- wb = work[1] + wa;
- i__1 = *n - i;
- r__1 = 1.f / wb;
- sscal_(&i__1, &r__1, &work[2], &c__1);
- work[1] = 1.f;
- tau = wb / wa;
- }
-
-/* apply random reflection to A(i:n,i:n) from the left
- and the right
-
- compute y := tau * A * u */
-
- i__1 = *n - i + 1;
- ssymv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
- &c_b12, &work[*n + 1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( y, u ) * u */
-
- i__1 = *n - i + 1;
- alpha = tau * -.5f * sdot_(&i__1, &work[*n + 1], &c__1, &work[1], &
- c__1);
- i__1 = *n - i + 1;
- saxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
-
-/* apply the transformation as a rank-2 update to A(i:n,i:n) */
-
- i__1 = *n - i + 1;
- ssyr2_("Lower", &i__1, &c_b19, &work[1], &c__1, &work[*n + 1], &c__1,
- &a[i + i * a_dim1], lda);
-/* L40: */
- }
-
-/* Reduce number of subdiagonals to K */
-
- i__1 = *n - 1 - *k;
- for (i = 1; i <= i__1; ++i) {
-
-/* generate reflection to annihilate A(k+i+1:n,i) */
-
- i__2 = *n - *k - i + 1;
- wn = snrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
- wa = r_sign(&wn, &a[*k + i + i * a_dim1]);
- if (wn == 0.f) {
- tau = 0.f;
- } else {
- wb = a[*k + i + i * a_dim1] + wa;
- i__2 = *n - *k - i;
- r__1 = 1.f / wb;
- sscal_(&i__2, &r__1, &a[*k + i + 1 + i * a_dim1], &c__1);
- a[*k + i + i * a_dim1] = 1.f;
- tau = wb / wa;
- }
-
-/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
-
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- sgemv_("Transpose", &i__2, &i__3, &c_b26, &a[*k + i + (i + 1) *
- a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b12, &work[1]
- , &c__1);
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- r__1 = -(doublereal)tau;
- sger_(&i__2, &i__3, &r__1, &a[*k + i + i * a_dim1], &c__1, &work[1], &
- c__1, &a[*k + i + (i + 1) * a_dim1], lda);
-
-/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
-ht
-
- compute y := tau * A * u */
-
- i__2 = *n - *k - i + 1;
- ssymv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
- k + i + i * a_dim1], &c__1, &c_b12, &work[1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( y, u ) * u */
-
- i__2 = *n - *k - i + 1;
- alpha = tau * -.5f * sdot_(&i__2, &work[1], &c__1, &a[*k + i + i *
- a_dim1], &c__1);
- i__2 = *n - *k - i + 1;
- saxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
- ;
-
-/* apply symmetric rank-2 update to A(k+i:n,k+i:n) */
-
- i__2 = *n - *k - i + 1;
- ssyr2_("Lower", &i__2, &c_b19, &a[*k + i + i * a_dim1], &c__1, &work[
- 1], &c__1, &a[*k + i + (*k + i) * a_dim1], lda);
-
- a[*k + i + i * a_dim1] = -(doublereal)wa;
- i__2 = *n;
- for (j = *k + i + 1; j <= i__2; ++j) {
- a[j + i * a_dim1] = 0.f;
-/* L50: */
- }
-/* L60: */
- }
-
-/* Store full symmetric matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- a[j + i * a_dim1] = a[i + j * a_dim1];
-/* L70: */
- }
-/* L80: */
- }
- return 0;
-
-/* End of SLAGSY */
-
-} /* slagsy_ */
-
diff --git a/TESTING/MATGEN/slaran.c b/TESTING/MATGEN/slaran.c
deleted file mode 100644
index d4723ea..0000000
--- a/TESTING/MATGEN/slaran.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-doublereal slaran_(integer *iseed)
-{
- /* System generated locals */
- real ret_val;
-
- /* Local variables */
- static integer it1, it2, it3, it4;
-
-
-/* -- LAPACK auxiliary routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- SLARAN returns a random real number from a uniform (0,1)
- distribution.
-
- Arguments
- =========
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- Further Details
- ===============
-
- This routine uses a multiplicative congruential method with modulus
- 2**48 and multiplier 33952834046453 (see G.S.Fishman,
- 'Multiplicative congruential random number generators with modulus
- 2**b: an exhaustive analysis for b = 32 and a partial analysis for
- b = 48', Math. Comp. 189, pp 331-344, 1990).
-
- 48-bit integers are stored in 4 integer array elements with 12 bits
- per element. Hence the routine is portable across machines with
- integers of 32 bits or more.
-
- =====================================================================
-
-
-
- multiply the seed by the multiplier modulo 2**48
-
- Parameter adjustments */
- --iseed;
-
- /* Function Body */
- it4 = iseed[4] * 2549;
- it3 = it4 / 4096;
- it4 -= it3 << 12;
- it3 = it3 + iseed[3] * 2549 + iseed[4] * 2508;
- it2 = it3 / 4096;
- it3 -= it2 << 12;
- it2 = it2 + iseed[2] * 2549 + iseed[3] * 2508 + iseed[4] * 322;
- it1 = it2 / 4096;
- it2 -= it1 << 12;
- it1 = it1 + iseed[1] * 2549 + iseed[2] * 2508 + iseed[3] * 322 + iseed[4]
- * 494;
- it1 %= 4096;
-
-/* return updated seed */
-
- iseed[1] = it1;
- iseed[2] = it2;
- iseed[3] = it3;
- iseed[4] = it4;
-
-/* convert 48-bit integer to a real number in the interval (0,1) */
-
- ret_val = ((real) it1 + ((real) it2 + ((real) it3 + (real) it4 *
- 2.44140625e-4f) * 2.44140625e-4f) * 2.44140625e-4f) *
- 2.44140625e-4f;
- return ret_val;
-
-/* End of SLARAN */
-
-} /* slaran_ */
-
diff --git a/TESTING/MATGEN/slarge.c b/TESTING/MATGEN/slarge.c
deleted file mode 100644
index 557f474..0000000
--- a/TESTING/MATGEN/slarge.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__3 = 3;
-static integer c__1 = 1;
-static real c_b8 = 1.f;
-static real c_b10 = 0.f;
-
-/* Subroutine */ int slarge_(integer *n, real *a, integer *lda, integer *
- iseed, real *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1;
- real r__1;
-
- /* Builtin functions */
- double r_sign(real *, real *);
-
- /* Local variables */
- extern /* Subroutine */ int sger_(integer *, integer *, real *, real *,
- integer *, real *, integer *, real *, integer *);
- extern real snrm2_(integer *, real *, integer *);
- static integer i;
- extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *),
- sgemv_(char *, integer *, integer *, real *, real *, integer *,
- real *, integer *, real *, real *, integer *);
- static real wa, wb, wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), slarnv_(
- integer *, integer *, integer *, real *);
- static real tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0)
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- SLARGE pre- and post-multiplies a real general n by n matrix A
- with a random orthogonal matrix: A = U*D*U'.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- A (input/output) REAL array, dimension (LDA,N)
- On entry, the original n by n matrix A.
- On exit, A is overwritten by U*A*U' for some random
- orthogonal matrix U.
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) REAL array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*lda < max(1,*n)) {
- *info = -3;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("SLARGE", &i__1);
- return 0;
- }
-
-/* pre- and post-multiply A by random orthogonal matrix */
-
- for (i = *n; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- slarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = snrm2_(&i__1, &work[1], &c__1);
- wa = r_sign(&wn, &work[1]);
- if (wn == 0.f) {
- tau = 0.f;
- } else {
- wb = work[1] + wa;
- i__1 = *n - i;
- r__1 = 1.f / wb;
- sscal_(&i__1, &r__1, &work[2], &c__1);
- work[1] = 1.f;
- tau = wb / wa;
- }
-
-/* multiply A(i:n,1:n) by random reflection from the left */
-
- i__1 = *n - i + 1;
- sgemv_("Transpose", &i__1, n, &c_b8, &a[i + a_dim1], lda, &work[1], &
- c__1, &c_b10, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- r__1 = -(doublereal)tau;
- sger_(&i__1, n, &r__1, &work[1], &c__1, &work[*n + 1], &c__1, &a[i +
- a_dim1], lda);
-
-/* multiply A(1:n,i:n) by random reflection from the right */
-
- i__1 = *n - i + 1;
- sgemv_("No transpose", n, &i__1, &c_b8, &a[i * a_dim1 + 1], lda, &
- work[1], &c__1, &c_b10, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- r__1 = -(doublereal)tau;
- sger_(n, &i__1, &r__1, &work[*n + 1], &c__1, &work[1], &c__1, &a[i *
- a_dim1 + 1], lda);
-/* L10: */
- }
- return 0;
-
-/* End of SLARGE */
-
-} /* slarge_ */
-
diff --git a/TESTING/MATGEN/slarnd.c b/TESTING/MATGEN/slarnd.c
deleted file mode 100644
index e3fcc0e..0000000
--- a/TESTING/MATGEN/slarnd.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-doublereal slarnd_(integer *idist, integer *iseed)
-{
- /* System generated locals */
- real ret_val;
-
- /* Builtin functions */
- double log(doublereal), sqrt(doublereal), cos(doublereal);
-
- /* Local variables */
- static real t1, t2;
- extern doublereal slaran_(integer *);
-
-
-/* -- 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
-
-
- Purpose
- =======
-
- SLARND returns a random real number from a uniform or normal
- distribution.
-
- Arguments
- =========
-
- IDIST (input) INTEGER
- Specifies the distribution of the random numbers:
- = 1: uniform (0,1)
- = 2: uniform (-1,1)
- = 3: normal (0,1)
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- Further Details
- ===============
-
- This routine calls the auxiliary routine SLARAN to generate a random
-
- real number from a uniform (0,1) distribution. The Box-Muller method
-
- is used to transform numbers from a uniform to a normal distribution.
-
-
- =====================================================================
-
-
-
- Generate a real random number from a uniform (0,1) distribution
-
- Parameter adjustments */
- --iseed;
-
- /* Function Body */
- t1 = slaran_(&iseed[1]);
-
- if (*idist == 1) {
-
-/* uniform (0,1) */
-
- ret_val = t1;
- } else if (*idist == 2) {
-
-/* uniform (-1,1) */
-
- ret_val = t1 * 2.f - 1.f;
- } else if (*idist == 3) {
-
-/* normal (0,1) */
-
- t2 = slaran_(&iseed[1]);
- ret_val = sqrt(log(t1) * -2.f) * cos(t2 *
- 6.2831853071795864769252867663f);
- }
- return ret_val;
-
-/* End of SLARND */
-
-} /* slarnd_ */
-
diff --git a/TESTING/MATGEN/slarnv.c b/TESTING/MATGEN/slarnv.c
deleted file mode 100644
index ee41fa8..0000000
--- a/TESTING/MATGEN/slarnv.c
+++ /dev/null
@@ -1,124 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int slarnv_(integer *idist, integer *iseed, integer *n, real
- *x)
-{
-/* -- 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
-
-
- Purpose
- =======
-
- SLARNV returns a vector of n random real numbers from a uniform or
- normal distribution.
-
- Arguments
- =========
-
- IDIST (input) INTEGER
- Specifies the distribution of the random numbers:
- = 1: uniform (0,1)
- = 2: uniform (-1,1)
- = 3: normal (0,1)
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- N (input) INTEGER
- The number of random numbers to be generated.
-
- X (output) REAL array, dimension (N)
- The generated random numbers.
-
- Further Details
- ===============
-
- This routine calls the auxiliary routine SLARUV to generate random
- real numbers from a uniform (0,1) distribution, in batches of up to
- 128 using vectorisable code. The Box-Muller method is used to
- transform numbers from a uniform to a normal distribution.
-
- =====================================================================
-
-
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer i__1, i__2, i__3;
- /* Builtin functions */
- double log(doublereal), sqrt(doublereal), cos(doublereal);
- /* Local variables */
- static integer i;
- static real u[128];
- static integer il, iv, il2;
- extern /* Subroutine */ int slaruv_(integer *, integer *, real *);
-
-
-#define X(I) x[(I)-1]
-#define ISEED(I) iseed[(I)-1]
-
-
- i__1 = *n;
- for (iv = 1; iv <= *n; iv += 64) {
-/* Computing MIN */
- i__2 = 64, i__3 = *n - iv + 1;
- il = min(i__2,i__3);
- if (*idist == 3) {
- il2 = il << 1;
- } else {
- il2 = il;
- }
-
-/* Call SLARUV to generate IL2 numbers from a uniform (0,1)
- distribution (IL2 <= LV) */
-
- slaruv_(&ISEED(1), &il2, u);
-
- if (*idist == 1) {
-
-/* Copy generated numbers */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- X(iv + i - 1) = u[i - 1];
-/* L10: */
- }
- } else if (*idist == 2) {
-
-/* Convert generated numbers to uniform (-1,1) distribut
-ion */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- X(iv + i - 1) = u[i - 1] * 2.f - 1.f;
-/* L20: */
- }
- } else if (*idist == 3) {
-
-/* Convert generated numbers to normal (0,1) distributio
-n */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- X(iv + i - 1) = sqrt(log(u[(i << 1) - 2]) * -2.f) * cos(u[(i
- << 1) - 1] * 6.2831853071795864769252867663f);
-/* L30: */
- }
- }
-/* L40: */
- }
- return 0;
-
-/* End of SLARNV */
-
-} /* slarnv_ */
-
diff --git a/TESTING/MATGEN/slaror.c b/TESTING/MATGEN/slaror.c
deleted file mode 100644
index e33c902..0000000
--- a/TESTING/MATGEN/slaror.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static real c_b9 = 0.f;
-static real c_b10 = 1.f;
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int slaror_(char *side, char *init, integer *m, integer *n,
- real *a, integer *lda, integer *iseed, real *x, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
- real r__1;
-
- /* Builtin functions */
- double r_sign(real *, real *);
-
- /* Local variables */
- static integer kbeg, jcol;
- extern /* Subroutine */ int sger_(integer *, integer *, real *, real *,
- integer *, real *, integer *, real *, integer *);
- static integer irow;
- extern real snrm2_(integer *, real *, integer *);
- static integer j;
- extern logical lsame_(char *, char *);
- extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *),
- sgemv_(char *, integer *, integer *, real *, real *, integer *,
- real *, integer *, real *, real *, integer *);
- static integer ixfrm, itype, nxfrm;
- static real xnorm;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static real factor;
- extern doublereal slarnd_(integer *, integer *);
- extern /* Subroutine */ int slaset_(char *, integer *, integer *, real *,
- real *, real *, integer *);
- static real xnorms;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- SLAROR pre- or post-multiplies an M by N matrix A by a random
- orthogonal matrix U, overwriting A. A may optionally be initialized
-
- to the identity matrix before multiplying by U. U is generated using
-
- the method of G.W. Stewart (SIAM J. Numer. Anal. 17, 1980, 403-409).
-
-
- Arguments
- =========
-
- SIDE (input) CHARACTER*1
- Specifies whether A is multiplied on the left or right by U.
-
- = 'L': Multiply A on the left (premultiply) by U
- = 'R': Multiply A on the right (postmultiply) by U'
- = 'C' or 'T': Multiply A on the left by U and the right
- by U' (Here, U' means U-transpose.)
-
- INIT (input) CHARACTER*1
- Specifies whether or not A should be initialized to the
- identity matrix.
- = 'I': Initialize A to (a section of) the identity matrix
- before applying U.
- = 'N': No initialization. Apply U to the input matrix A.
-
- INIT = 'I' may be used to generate square or rectangular
- orthogonal matrices:
-
- For M = N and SIDE = 'L' or 'R', the rows will be orthogonal
-
- to each other, as will the columns.
-
- If M < N, SIDE = 'R' produces a dense matrix whose rows are
- orthogonal and whose columns are not, while SIDE = 'L'
- produces a matrix whose rows are orthogonal, and whose first
-
- M columns are orthogonal, and whose remaining columns are
- zero.
-
- If M > N, SIDE = 'L' produces a dense matrix whose columns
- are orthogonal and whose rows are not, while SIDE = 'R'
- produces a matrix whose columns are orthogonal, and whose
- first M rows are orthogonal, and whose remaining rows are
- zero.
-
- M (input) INTEGER
- The number of rows of A.
-
- N (input) INTEGER
- The number of columns of A.
-
- A (input/output) REAL array, dimension (LDA, N)
- On entry, the array A.
- On exit, overwritten by U A ( if SIDE = 'L' ),
- or by A U ( if SIDE = 'R' ),
- or by U A U' ( if SIDE = 'C' or 'T').
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= max(1,M).
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry ISEED specifies the seed of the random number
- generator. The array elements should be between 0 and 4095;
- if not they will be reduced mod 4096. Also, ISEED(4) must
- be odd. The random number generator uses a linear
- congruential sequence limited to small integers, and so
- should produce machine independent random numbers. The
- values of ISEED are changed on exit, and can be used in the
- next call to SLAROR to continue the same random number
- sequence.
-
- X (workspace) REAL array, dimension (3*MAX( M, N ))
- Workspace of length
- 2*M + N if SIDE = 'L',
- 2*N + M if SIDE = 'R',
- 3*N if SIDE = 'C' or 'T'.
-
- INFO (output) INTEGER
- An error flag. It is set to:
- = 0: normal return
- < 0: if INFO = -k, the k-th argument had an illegal value
- = 1: if the random numbers generated by SLARND are bad.
-
- =====================================================================
-
-
-
- Parameter adjustments */
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --x;
-
- /* Function Body */
- if (*n == 0 || *m == 0) {
- return 0;
- }
-
- itype = 0;
- if (lsame_(side, "L")) {
- itype = 1;
- } else if (lsame_(side, "R")) {
- itype = 2;
- } else if (lsame_(side, "C") || lsame_(side, "T")) {
- itype = 3;
- }
-
-/* Check for argument errors. */
-
- *info = 0;
- if (itype == 0) {
- *info = -1;
- } else if (*m < 0) {
- *info = -3;
- } else if (*n < 0 || itype == 3 && *n != *m) {
- *info = -4;
- } else if (*lda < *m) {
- *info = -6;
- }
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("SLAROR", &i__1);
- return 0;
- }
-
- if (itype == 1) {
- nxfrm = *m;
- } else {
- nxfrm = *n;
- }
-
-/* Initialize A to the identity matrix if desired */
-
- if (lsame_(init, "I")) {
- slaset_("Full", m, n, &c_b9, &c_b10, &a[a_offset], lda);
- }
-
-/* If no rotation possible, multiply by random +/-1
-
- Compute rotation by computing Householder transformations
- H(2), H(3), ..., H(nhouse) */
-
- i__1 = nxfrm;
- for (j = 1; j <= i__1; ++j) {
- x[j] = 0.f;
-/* L10: */
- }
-
- i__1 = nxfrm;
- for (ixfrm = 2; ixfrm <= i__1; ++ixfrm) {
- kbeg = nxfrm - ixfrm + 1;
-
-/* Generate independent normal( 0, 1 ) random numbers */
-
- i__2 = nxfrm;
- for (j = kbeg; j <= i__2; ++j) {
- x[j] = slarnd_(&c__3, &iseed[1]);
-/* L20: */
- }
-
-/* Generate a Householder transformation from the random vector
- X */
-
- xnorm = snrm2_(&ixfrm, &x[kbeg], &c__1);
- xnorms = r_sign(&xnorm, &x[kbeg]);
- r__1 = -(doublereal)x[kbeg];
- x[kbeg + nxfrm] = r_sign(&c_b10, &r__1);
- factor = xnorms * (xnorms + x[kbeg]);
- if (dabs(factor) < 1e-20f) {
- *info = 1;
- xerbla_("SLAROR", info);
- return 0;
- } else {
- factor = 1.f / factor;
- }
- x[kbeg] += xnorms;
-
-/* Apply Householder transformation to A */
-
- if (itype == 1 || itype == 3) {
-
-/* Apply H(k) from the left. */
-
- sgemv_("T", &ixfrm, n, &c_b10, &a[kbeg + a_dim1], lda, &x[kbeg], &
- c__1, &c_b9, &x[(nxfrm << 1) + 1], &c__1);
- r__1 = -(doublereal)factor;
- sger_(&ixfrm, n, &r__1, &x[kbeg], &c__1, &x[(nxfrm << 1) + 1], &
- c__1, &a[kbeg + a_dim1], lda);
-
- }
-
- if (itype == 2 || itype == 3) {
-
-/* Apply H(k) from the right. */
-
- sgemv_("N", m, &ixfrm, &c_b10, &a[kbeg * a_dim1 + 1], lda, &x[
- kbeg], &c__1, &c_b9, &x[(nxfrm << 1) + 1], &c__1);
- r__1 = -(doublereal)factor;
- sger_(m, &ixfrm, &r__1, &x[(nxfrm << 1) + 1], &c__1, &x[kbeg], &
- c__1, &a[kbeg * a_dim1 + 1], lda);
-
- }
-/* L30: */
- }
-
- r__1 = slarnd_(&c__3, &iseed[1]);
- x[nxfrm * 2] = r_sign(&c_b10, &r__1);
-
-/* Scale the matrix A by D. */
-
- if (itype == 1 || itype == 3) {
- i__1 = *m;
- for (irow = 1; irow <= i__1; ++irow) {
- sscal_(n, &x[nxfrm + irow], &a[irow + a_dim1], lda);
-/* L40: */
- }
- }
-
- if (itype == 2 || itype == 3) {
- i__1 = *n;
- for (jcol = 1; jcol <= i__1; ++jcol) {
- sscal_(m, &x[nxfrm + jcol], &a[jcol * a_dim1 + 1], &c__1);
-/* L50: */
- }
- }
- return 0;
-
-/* End of SLAROR */
-
-} /* slaror_ */
-
diff --git a/TESTING/MATGEN/slarot.c b/TESTING/MATGEN/slarot.c
deleted file mode 100644
index 0ec97fa..0000000
--- a/TESTING/MATGEN/slarot.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__4 = 4;
-static integer c__8 = 8;
-static integer c__1 = 1;
-
-/* Subroutine */ int slarot_(logical *lrows, logical *lleft, logical *lright,
- integer *nl, real *c, real *s, real *a, integer *lda, real *xleft,
- real *xright)
-{
- /* System generated locals */
- integer i__1;
-
- /* Local variables */
- static integer iinc;
- extern /* Subroutine */ int srot_(integer *, real *, integer *, real *,
- integer *, real *, real *);
- static integer inext, ix, iy, nt;
- static real xt[2], yt[2];
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static integer iyt;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- SLAROT applies a (Givens) rotation to two adjacent rows or
- columns, where one element of the first and/or last column/row
- may be a separate variable. This is specifically indended
- for use on matrices stored in some format other than GE, so
- that elements of the matrix may be used or modified for which
- no array element is provided.
-
- One example is a symmetric matrix in SB format (bandwidth=4), for
-
- which UPLO='L': Two adjacent rows will have the format:
-
- row j: * * * * * . . . .
- row j+1: * * * * * . . . .
-
- '*' indicates elements for which storage is provided,
- '.' indicates elements for which no storage is provided, but
- are not necessarily zero; their values are determined by
- symmetry. ' ' indicates elements which are necessarily zero,
- and have no storage provided.
-
- Those columns which have two '*'s can be handled by SROT.
- Those columns which have no '*'s can be ignored, since as long
- as the Givens rotations are carefully applied to preserve
- symmetry, their values are determined.
- Those columns which have one '*' have to be handled separately,
- by using separate variables "p" and "q":
-
- row j: * * * * * p . . .
- row j+1: q * * * * * . . . .
-
- The element p would have to be set correctly, then that column
- is rotated, setting p to its new value. The next call to
- SLAROT would rotate columns j and j+1, using p, and restore
- symmetry. The element q would start out being zero, and be
- made non-zero by the rotation. Later, rotations would presumably
-
- be chosen to zero q out.
-
- Typical Calling Sequences: rotating the i-th and (i+1)-st rows.
- ------- ------- ---------
-
- General dense matrix:
-
- CALL SLAROT(.TRUE.,.FALSE.,.FALSE., N, C,S,
- A(i,1),LDA, DUMMY, DUMMY)
-
- General banded matrix in GB format:
-
- j = MAX(1, i-KL )
- NL = MIN( N, i+KU+1 ) + 1-j
- CALL SLAROT( .TRUE., i-KL.GE.1, i+KU.LT.N, NL, C,S,
- A(KU+i+1-j,j),LDA-1, XLEFT, XRIGHT )
-
- [ note that i+1-j is just MIN(i,KL+1) ]
-
- Symmetric banded matrix in SY format, bandwidth K,
- lower triangle only:
-
- j = MAX(1, i-K )
- NL = MIN( K+1, i ) + 1
- CALL SLAROT( .TRUE., i-K.GE.1, .TRUE., NL, C,S,
- A(i,j), LDA, XLEFT, XRIGHT )
-
- Same, but upper triangle only:
-
- NL = MIN( K+1, N-i ) + 1
- CALL SLAROT( .TRUE., .TRUE., i+K.LT.N, NL, C,S,
- A(i,i), LDA, XLEFT, XRIGHT )
-
- Symmetric banded matrix in SB format, bandwidth K,
- lower triangle only:
-
- [ same as for SY, except:]
- . . . .
- A(i+1-j,j), LDA-1, XLEFT, XRIGHT )
-
- [ note that i+1-j is just MIN(i,K+1) ]
-
- Same, but upper triangle only:
- . . .
- A(K+1,i), LDA-1, XLEFT, XRIGHT )
-
- Rotating columns is just the transpose of rotating rows, except
-
- for GB and SB: (rotating columns i and i+1)
-
- GB:
- j = MAX(1, i-KU )
- NL = MIN( N, i+KL+1 ) + 1-j
- CALL SLAROT( .TRUE., i-KU.GE.1, i+KL.LT.N, NL, C,S,
- A(KU+j+1-i,i),LDA-1, XTOP, XBOTTM )
-
- [note that KU+j+1-i is just MAX(1,KU+2-i)]
-
- SB: (upper triangle)
-
- . . . . . .
- A(K+j+1-i,i),LDA-1, XTOP, XBOTTM )
-
- SB: (lower triangle)
-
- . . . . . .
- A(1,i),LDA-1, XTOP, XBOTTM )
-
- Arguments
- =========
-
- LROWS - LOGICAL
- If .TRUE., then SLAROT will rotate two rows. If .FALSE.,
- then it will rotate two columns.
- Not modified.
-
- LLEFT - LOGICAL
- If .TRUE., then XLEFT will be used instead of the
- corresponding element of A for the first element in the
- second row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.)
- If .FALSE., then the corresponding element of A will be
- used.
- Not modified.
-
- LRIGHT - LOGICAL
- If .TRUE., then XRIGHT will be used instead of the
- corresponding element of A for the last element in the
- first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
-
- .FALSE., then the corresponding element of A will be used.
- Not modified.
-
- NL - INTEGER
- The length of the rows (if LROWS=.TRUE.) or columns (if
- LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
- used, the columns/rows they are in should be included in
- NL, e.g., if LLEFT = LRIGHT = .TRUE., then NL must be at
- least 2. The number of rows/columns to be rotated
- exclusive of those involving XLEFT and/or XRIGHT may
- not be negative, i.e., NL minus how many of LLEFT and
- LRIGHT are .TRUE. must be at least zero; if not, XERBLA
- will be called.
- Not modified.
-
- C, S - REAL
- Specify the Givens rotation to be applied. If LROWS is
- true, then the matrix ( c s )
- (-s c ) is applied from the left;
- if false, then the transpose thereof is applied from the
- right. For a Givens rotation, C**2 + S**2 should be 1,
- but this is not checked.
- Not modified.
-
- A - REAL array.
- The array containing the rows/columns to be rotated. The
- first element of A should be the upper left element to
- be rotated.
- Read and modified.
-
- LDA - INTEGER
- The "effective" leading dimension of A. If A contains
- a matrix stored in GE or SY format, then this is just
- the leading dimension of A as dimensioned in the calling
- routine. If A contains a matrix stored in band (GB or SB)
- format, then this should be *one less* than the leading
- dimension used in the calling routine. Thus, if
- A were dimensioned A(LDA,*) in SLAROT, then A(1,j) would
- be the j-th element in the first of the two rows
- to be rotated, and A(2,j) would be the j-th in the second,
- regardless of how the array may be stored in the calling
- routine. [A cannot, however, actually be dimensioned thus,
-
- since for band format, the row number may exceed LDA, which
-
- is not legal FORTRAN.]
- If LROWS=.TRUE., then LDA must be at least 1, otherwise
- it must be at least NL minus the number of .TRUE. values
- in XLEFT and XRIGHT.
- Not modified.
-
- XLEFT - REAL
- If LLEFT is .TRUE., then XLEFT will be used and modified
- instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
- (if LROWS=.FALSE.).
- Read and modified.
-
- XRIGHT - REAL
- If LRIGHT is .TRUE., then XRIGHT will be used and modified
- instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
- (if LROWS=.FALSE.).
- Read and modified.
-
- =====================================================================
-
-
-
- Set up indices, arrays for ends
-
- Parameter adjustments */
- --a;
-
- /* Function Body */
- if (*lrows) {
- iinc = *lda;
- inext = 1;
- } else {
- iinc = 1;
- inext = *lda;
- }
-
- if (*lleft) {
- nt = 1;
- ix = iinc + 1;
- iy = *lda + 2;
- xt[0] = a[1];
- yt[0] = *xleft;
- } else {
- nt = 0;
- ix = 1;
- iy = inext + 1;
- }
-
- if (*lright) {
- iyt = inext + 1 + (*nl - 1) * iinc;
- ++nt;
- xt[nt - 1] = *xright;
- yt[nt - 1] = a[iyt];
- }
-
-/* Check for errors */
-
- if (*nl < nt) {
- xerbla_("SLAROT", &c__4);
- return 0;
- }
- if (*lda <= 0 || ! (*lrows) && *lda < *nl - nt) {
- xerbla_("SLAROT", &c__8);
- return 0;
- }
-
-/* Rotate */
-
- i__1 = *nl - nt;
- srot_(&i__1, &a[ix], &iinc, &a[iy], &iinc, c, s);
- srot_(&nt, xt, &c__1, yt, &c__1, c, s);
-
-/* Stuff values back into XLEFT, XRIGHT, etc. */
-
- if (*lleft) {
- a[1] = xt[0];
- *xleft = yt[0];
- }
-
- if (*lright) {
- *xright = xt[nt - 1];
- a[iyt] = yt[nt - 1];
- }
-
- return 0;
-
-/* End of SLAROT */
-
-} /* slarot_ */
-
diff --git a/TESTING/MATGEN/slartg.c b/TESTING/MATGEN/slartg.c
deleted file mode 100644
index bd44870..0000000
--- a/TESTING/MATGEN/slartg.c
+++ /dev/null
@@ -1,156 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int slartg_(real *f, real *g, real *cs, real *sn, real *r)
-{
-/* -- 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
-
-
- Purpose
- =======
-
- SLARTG generate a plane rotation so that
-
- [ CS SN ] . [ F ] = [ R ] where CS**2 + SN**2 = 1.
- [ -SN CS ] [ G ] [ 0 ]
-
- This is a slower, more accurate version of the BLAS1 routine SROTG,
- with the following other differences:
- F and G are unchanged on return.
- If G=0, then CS=1 and SN=0.
- If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any
- floating point operations (saves work in SBDSQR when
- there are zeros on the diagonal).
-
- If F exceeds G in magnitude, CS will be positive.
-
- Arguments
- =========
-
- F (input) REAL
- The first component of vector to be rotated.
-
- G (input) REAL
- The second component of vector to be rotated.
-
- CS (output) REAL
- The cosine of the rotation.
-
- SN (output) REAL
- The sine of the rotation.
-
- R (output) REAL
- The nonzero component of the rotated vector.
-
- =====================================================================
-*/
- /* Initialized data */
- static logical first = TRUE_;
- /* System generated locals */
- integer i__1;
- real r__1, r__2;
- /* Builtin functions */
- double log(doublereal), pow_ri(real *, integer *), sqrt(doublereal);
- /* Local variables */
- static integer i;
- static real scale;
- static integer count;
- static real f1, g1, safmn2, safmx2;
- extern float slamch_(char *);
- static real safmin, eps;
-
-
- if (first) {
- first = FALSE_;
- safmin = slamch_("S");
- eps = slamch_("E");
- r__1 = slamch_("B");
- i__1 = (integer) (log(safmin / eps) / log(slamch_("B")) / 2.f);
- safmn2 = pow_ri(&r__1, &i__1);
- safmx2 = 1.f / safmn2;
- }
- if (*g == 0.f) {
- *cs = 1.f;
- *sn = 0.f;
- *r = *f;
- } else if (*f == 0.f) {
- *cs = 0.f;
- *sn = 1.f;
- *r = *g;
- } else {
- f1 = *f;
- g1 = *g;
-/* Computing MAX */
- r__1 = dabs(f1), r__2 = dabs(g1);
- scale = dmax(r__1,r__2);
- if (scale >= safmx2) {
- count = 0;
-L10:
- ++count;
- f1 *= safmn2;
- g1 *= safmn2;
-/* Computing MAX */
- r__1 = dabs(f1), r__2 = dabs(g1);
- scale = dmax(r__1,r__2);
- if (scale >= safmx2) {
- goto L10;
- }
-/* Computing 2nd power */
- r__1 = f1;
-/* Computing 2nd power */
- r__2 = g1;
- *r = sqrt(r__1 * r__1 + r__2 * r__2);
- *cs = f1 / *r;
- *sn = g1 / *r;
- i__1 = count;
- for (i = 1; i <= count; ++i) {
- *r *= safmx2;
-/* L20: */
- }
- } else if (scale <= safmn2) {
- count = 0;
-L30:
- ++count;
- f1 *= safmx2;
- g1 *= safmx2;
-/* Computing MAX */
- r__1 = dabs(f1), r__2 = dabs(g1);
- scale = dmax(r__1,r__2);
- if (scale <= safmn2) {
- goto L30;
- }
-/* Computing 2nd power */
- r__1 = f1;
-/* Computing 2nd power */
- r__2 = g1;
- *r = sqrt(r__1 * r__1 + r__2 * r__2);
- *cs = f1 / *r;
- *sn = g1 / *r;
- i__1 = count;
- for (i = 1; i <= count; ++i) {
- *r *= safmn2;
-/* L40: */
- }
- } else {
-/* Computing 2nd power */
- r__1 = f1;
-/* Computing 2nd power */
- r__2 = g1;
- *r = sqrt(r__1 * r__1 + r__2 * r__2);
- *cs = f1 / *r;
- *sn = g1 / *r;
- }
- if (dabs(*f) > dabs(*g) && *cs < 0.f) {
- *cs = -(doublereal)(*cs);
- *sn = -(doublereal)(*sn);
- *r = -(doublereal)(*r);
- }
- }
- return 0;
-
-/* End of SLARTG */
-
-} /* slartg_ */
-
diff --git a/TESTING/MATGEN/slaruv.c b/TESTING/MATGEN/slaruv.c
deleted file mode 100644
index b2fd4b7..0000000
--- a/TESTING/MATGEN/slaruv.c
+++ /dev/null
@@ -1,152 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int slaruv_(integer *iseed, integer *n, real *x)
-{
-/* -- 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
- =======
-
- SLARUV returns a vector of n random real numbers from a uniform (0,1)
-
- distribution (n <= 128).
-
- This is an auxiliary routine called by SLARNV and CLARNV.
-
- Arguments
- =========
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- N (input) INTEGER
- The number of random numbers to be generated. N <= 128.
-
- X (output) REAL array, dimension (N)
- The generated random numbers.
-
- Further Details
- ===============
-
- This routine uses a multiplicative congruential method with modulus
- 2**48 and multiplier 33952834046453 (see G.S.Fishman,
- 'Multiplicative congruential random number generators with modulus
- 2**b: an exhaustive analysis for b = 32 and a partial analysis for
- b = 48', Math. Comp. 189, pp 331-344, 1990).
-
- 48-bit integers are stored in 4 integer array elements with 12 bits
- per element. Hence the routine is portable across machines with
- integers of 32 bits or more.
-
- =====================================================================
-
-
-
- Parameter adjustments
- Function Body */
- /* Initialized data */
- static integer mm[512] /* was [128][4] */ = { 494,2637,255,2008,1253,
- 3344,4084,1739,3143,3468,688,1657,1238,3166,1292,3422,1270,2016,
- 154,2862,697,1706,491,931,1444,444,3577,3944,2184,1661,3482,657,
- 3023,3618,1267,1828,164,3798,3087,2400,2870,3876,1905,1593,1797,
- 1234,3460,328,2861,1950,617,2070,3331,769,1558,2412,2800,189,287,
- 2045,1227,2838,209,2770,3654,3993,192,2253,3491,2889,2857,2094,
- 1818,688,1407,634,3231,815,3524,1914,516,164,303,2144,3480,119,
- 3357,837,2826,2332,2089,3780,1700,3712,150,2000,3375,1621,3090,
- 3765,1149,3146,33,3082,2741,359,3316,1749,185,2784,2202,2199,1364,
- 1244,2020,3160,2785,2772,1217,1822,1245,2252,3904,2774,997,2573,
- 1148,545,322,789,1440,752,2859,123,1848,643,2405,2638,2344,46,
- 3814,913,3649,339,3808,822,2832,3078,3633,2970,637,2249,2081,4019,
- 1478,242,481,2075,4058,622,3376,812,234,641,4005,1122,3135,2640,
- 2302,40,1832,2247,2034,2637,1287,1691,496,1597,2394,2584,1843,336,
- 1472,2407,433,2096,1761,2810,566,442,41,1238,1086,603,840,3168,
- 1499,1084,3438,2408,1589,2391,288,26,512,1456,171,1677,2657,2270,
- 2587,2961,1970,1817,676,1410,3723,2803,3185,184,663,499,3784,1631,
- 1925,3912,1398,1349,1441,2224,2411,1907,3192,2786,382,37,759,2948,
- 1862,3802,2423,2051,2295,1332,1832,2405,3638,3661,327,3660,716,
- 1842,3987,1368,1848,2366,2508,3754,1766,3572,2893,307,1297,3966,
- 758,2598,3406,2922,1038,2934,2091,2451,1580,1958,2055,1507,1078,
- 3273,17,854,2916,3971,2889,3831,2621,1541,893,736,3992,787,2125,
- 2364,2460,257,1574,3912,1216,3248,3401,2124,2762,149,2245,166,466,
- 4018,1399,190,2879,153,2320,18,712,2159,2318,2091,3443,1510,449,
- 1956,2201,3137,3399,1321,2271,3667,2703,629,2365,2431,1113,3922,
- 2554,184,2099,3228,4012,1921,3452,3901,572,3309,3171,817,3039,
- 1696,1256,3715,2077,3019,1497,1101,717,51,981,1978,1813,3881,76,
- 3846,3694,1682,124,1660,3997,479,1141,886,3514,1301,3604,1888,
- 1836,1990,2058,692,1194,20,3285,2046,2107,3508,3525,3801,2549,
- 1145,2253,305,3301,1065,3133,2913,3285,1241,1197,3729,2501,1673,
- 541,2753,949,2361,1165,4081,2725,3305,3069,3617,3733,409,2157,
- 1361,3973,1865,2525,1409,3445,3577,77,3761,2149,1449,3005,225,85,
- 3673,3117,3089,1349,2057,413,65,1845,697,3085,3441,1573,3689,2941,
- 929,533,2841,4077,721,2821,2249,2397,2817,245,1913,1997,3121,997,
- 1833,2877,1633,981,2009,941,2449,197,2441,285,1473,2741,3129,909,
- 2801,421,4073,2813,2337,1429,1177,1901,81,1669,2633,2269,129,1141,
- 249,3917,2481,3941,2217,2749,3041,1877,345,2861,1809,3141,2825,
- 157,2881,3637,1465,2829,2161,3365,361,2685,3745,2325,3609,3821,
- 3537,517,3017,2141,1537 };
- /* System generated locals */
- integer i__1;
- /* Local variables */
- static integer i, i1, i2, i3, i4, it1, it2, it3, it4;
-
-
-#define MM(I) mm[(I)]
-#define WAS(I) was[(I)]
-#define ISEED(I) iseed[(I)-1]
-#define X(I) x[(I)-1]
-
-
-
- i1 = ISEED(1);
- i2 = ISEED(2);
- i3 = ISEED(3);
- i4 = ISEED(4);
-
- i__1 = min(*n,128);
- for (i = 1; i <= min(*n,128); ++i) {
-
-/* Multiply the seed by i-th power of the multiplier modulo 2**
-48 */
-
- it4 = i4 * MM(i + 383);
- it3 = it4 / 4096;
- it4 -= it3 << 12;
- it3 = it3 + i3 * MM(i + 383) + i4 * MM(i + 255);
- it2 = it3 / 4096;
- it3 -= it2 << 12;
- it2 = it2 + i2 * MM(i + 383) + i3 * MM(i + 255) + i4 * MM(i + 127);
- it1 = it2 / 4096;
- it2 -= it1 << 12;
- it1 = it1 + i1 * MM(i + 383) + i2 * MM(i + 255) + i3 * MM(i + 127) +
- i4 * MM(i - 1);
- it1 %= 4096;
-
-/* Convert 48-bit integer to a real number in the interval (0,1
-) */
-
- X(i) = ((real) it1 + ((real) it2 + ((real) it3 + (real) it4 *
- 2.44140625e-4f) * 2.44140625e-4f) * 2.44140625e-4f) *
- 2.44140625e-4f;
-/* L10: */
- }
-
-/* Return final value of seed */
-
- ISEED(1) = it1;
- ISEED(2) = it2;
- ISEED(3) = it3;
- ISEED(4) = it4;
- return 0;
-
-/* End of SLARUV */
-
-} /* slaruv_ */
-
diff --git a/TESTING/MATGEN/slaset.c b/TESTING/MATGEN/slaset.c
deleted file mode 100644
index 9ea5eee..0000000
--- a/TESTING/MATGEN/slaset.c
+++ /dev/null
@@ -1,136 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int slaset_(char *uplo, integer *m, integer *n, real *alpha,
- real *beta, real *a, integer *lda)
-{
-/* -- 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
- =======
-
- SLASET initializes an m-by-n matrix A to BETA on the diagonal and
- ALPHA on the offdiagonals.
-
- Arguments
- =========
-
- UPLO (input) CHARACTER*1
- Specifies the part of the matrix A to be set.
- = 'U': Upper triangular part is set; the strictly lower
-
- triangular part of A is not changed.
- = 'L': Lower triangular part is set; the strictly upper
-
- triangular part of A is not changed.
- Otherwise: All of the matrix A is set.
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- ALPHA (input) REAL
- The constant to which the offdiagonal elements are to be set.
-
-
- BETA (input) REAL
- The constant to which the diagonal elements are to be set.
-
- A (input/output) REAL array, dimension (LDA,N)
- On exit, the leading m-by-n submatrix of A is set as follows:
-
-
- if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n,
- if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n,
- otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j,
-
- and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n).
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= max(1,M).
-
- =====================================================================
-
-
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- /* Local variables */
- static integer i, j;
- extern logical lsame_(char *, char *);
-
-
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- if (lsame_(uplo, "U")) {
-
-/* Set the strictly upper triangular or trapezoidal part of the
-
- array to ALPHA. */
-
- i__1 = *n;
- for (j = 2; j <= *n; ++j) {
-/* Computing MIN */
- i__3 = j - 1;
- i__2 = min(i__3,*m);
- for (i = 1; i <= min(j-1,*m); ++i) {
- A(i,j) = *alpha;
-/* L10: */
- }
-/* L20: */
- }
-
- } else if (lsame_(uplo, "L")) {
-
-/* Set the strictly lower triangular or trapezoidal part of the
-
- array to ALPHA. */
-
- i__1 = min(*m,*n);
- for (j = 1; j <= min(*m,*n); ++j) {
- i__2 = *m;
- for (i = j + 1; i <= *m; ++i) {
- A(i,j) = *alpha;
-/* L30: */
- }
-/* L40: */
- }
-
- } else {
-
-/* Set the leading m-by-n submatrix to ALPHA. */
-
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- A(i,j) = *alpha;
-/* L50: */
- }
-/* L60: */
- }
- }
-
-/* Set the first min(M,N) diagonal elements to BETA. */
-
- i__1 = min(*m,*n);
- for (i = 1; i <= min(*m,*n); ++i) {
- A(i,i) = *beta;
-/* L70: */
- }
-
- return 0;
-
-/* End of SLASET */
-
-} /* slaset_ */
-
diff --git a/TESTING/MATGEN/slatb4.c b/TESTING/MATGEN/slatb4.c
deleted file mode 100644
index 793592a..0000000
--- a/TESTING/MATGEN/slatb4.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include <string.h>
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__2 = 2;
-
-/* Subroutine */ int slatb4_(char *path, integer *imat, integer *m, integer *
- n, char *type, integer *kl, integer *ku, real *anorm, integer *mode,
- real *cndnum, char *dist)
-{
- /* Initialized data */
-
- static logical first = TRUE_;
-
- /* System generated locals */
- integer i__1;
-
- /* Builtin functions */
- double sqrt(doublereal);
-
- /* Local variables */
- static real badc1, badc2, large, small;
- static char c2[2];
- extern /* Subroutine */ int slabad_(real *, real *);
- extern float slamch_(char *);
- extern logical lsamen_(integer *, char *, char *);
- static integer mat;
- static real eps;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- SLATB4 sets parameters for the matrix generator based on the type of
-
- matrix to be generated.
-
- Arguments
- =========
-
- PATH (input) CHARACTER*3
- The LAPACK path name.
-
- IMAT (input) INTEGER
- An integer key describing which matrix to generate for this
- path.
-
- M (input) INTEGER
- The number of rows in the matrix to be generated.
-
- N (input) INTEGER
- The number of columns in the matrix to be generated.
-
- TYPE (output) CHARACTER*1
- The type of the matrix to be generated:
- = 'S': symmetric matrix
- = 'P': symmetric positive (semi)definite matrix
- = 'N': nonsymmetric matrix
-
- KL (output) INTEGER
- The lower band width of the matrix to be generated.
-
- KU (output) INTEGER
- The upper band width of the matrix to be generated.
-
- ANORM (output) REAL
- The desired norm of the matrix to be generated. The diagonal
-
- matrix of singular values or eigenvalues is scaled by this
- value.
-
- MODE (output) INTEGER
- A key indicating how to choose the vector of eigenvalues.
-
- CNDNUM (output) REAL
- The desired condition number.
-
- DIST (output) CHARACTER*1
- The type of distribution to be used by the random number
- generator.
-
- =====================================================================
-
-
-
- Set some constants for use in the subroutine. */
-
- if (first) {
- first = FALSE_;
- eps = slamch_("Precision");
- badc2 = .1f / eps;
- badc1 = sqrt(badc2);
- small = slamch_("Safe minimum");
- large = 1.f / small;
-
-/* If it looks like we're on a Cray, take the square root of
- SMALL and LARGE to avoid overflow and underflow problems. */
-
- slabad_(&small, &large);
- small = small / eps * .25f;
- large = 1.f / small;
- }
-
- strncpy(c2, path + 1, 2);
-
-/* Set some parameters we don't plan to change. */
-
- *(unsigned char *)dist = 'S';
- *mode = 3;
-
- if (lsamen_(&c__2, c2, "QR") || lsamen_(&c__2, c2, "LQ")
- || lsamen_(&c__2, c2, "QL") || lsamen_(&c__2, c2, "RQ")) {
-
-/* xQR, xLQ, xQL, xRQ: Set parameters to generate a general
- M x N matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- *ku = 0;
- } else if (*imat == 2) {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- } else if (*imat == 3) {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "GE")) {
-
-/* xGE: Set parameters to generate a general M x N matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- *ku = 0;
- } else if (*imat == 2) {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- } else if (*imat == 3) {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (*imat == 8) {
- *cndnum = badc1;
- } else if (*imat == 9) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 10) {
- *anorm = small;
- } else if (*imat == 11) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "GB")) {
-
-/* xGB: Set parameters to generate a general banded matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the condition number and norm. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2 * .1f;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "GT")) {
-
-/* xGT: Set parameters to generate a general tridiagonal matri
-x.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- } else {
- *kl = 1;
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 3) {
- *cndnum = badc1;
- } else if (*imat == 4) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 5 || *imat == 11) {
- *anorm = small;
- } else if (*imat == 6 || *imat == 12) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "PO") || lsamen_(&c__2, c2, "PP") || lsamen_(&c__2, c2, "SY") || lsamen_(&c__2, c2,
- "SP")) {
-
-/* xPO, xPP, xSY, xSP: Set parameters to generate a
- symmetric matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = *(unsigned char *)c2;
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- } else {
-/* Computing MAX */
- i__1 = *n - 1;
- *kl = max(i__1,0);
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 6) {
- *cndnum = badc1;
- } else if (*imat == 7) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 8) {
- *anorm = small;
- } else if (*imat == 9) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "PB")) {
-
-/* xPB: Set parameters to generate a symmetric band matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'P';
-
-/* Set the norm and condition number. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "PT")) {
-
-/* xPT: Set parameters to generate a symmetric positive defini
-te
- tridiagonal matrix. */
-
- *(unsigned char *)type = 'P';
- if (*imat == 1) {
- *kl = 0;
- } else {
- *kl = 1;
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 3) {
- *cndnum = badc1;
- } else if (*imat == 4) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 5 || *imat == 11) {
- *anorm = small;
- } else if (*imat == 6 || *imat == 12) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "TR") || lsamen_(&c__2, c2, "TP")) {
-
-/* xTR, xTP: Set parameters to generate a triangular matrix
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- mat = abs(*imat);
- if (mat == 1 || mat == 7) {
- *kl = 0;
- *ku = 0;
- } else if (*imat < 0) {
-/* Computing MAX */
- i__1 = *n - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (mat == 3 || mat == 9) {
- *cndnum = badc1;
- } else if (mat == 4) {
- *cndnum = badc2;
- } else if (mat == 10) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (mat == 5) {
- *anorm = small;
- } else if (mat == 6) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
-
- } else if (lsamen_(&c__2, c2, "TB")) {
-
-/* xTB: Set parameters to generate a triangular band matrix.
-
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the norm and condition number. */
-
- if (*imat == 2 || *imat == 8) {
- *cndnum = badc1;
- } else if (*imat == 3 || *imat == 9) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.f;
- }
-
- if (*imat == 4) {
- *anorm = small;
- } else if (*imat == 5) {
- *anorm = large;
- } else {
- *anorm = 1.f;
- }
- }
- if (*n <= 1) {
- *cndnum = 1.f;
- }
-
- return 0;
-
-/* End of SLATB4 */
-
-} /* slatb4_ */
-
diff --git a/TESTING/MATGEN/slatm1.c b/TESTING/MATGEN/slatm1.c
deleted file mode 100644
index 0a648b5..0000000
--- a/TESTING/MATGEN/slatm1.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Subroutine */ int slatm1_(integer *mode, real *cond, integer *irsign,
- integer *idist, integer *iseed, real *d, integer *n, integer *info)
-{
- /* System generated locals */
- integer i__1, i__2;
- doublereal d__1, d__2;
-
- /* Builtin functions */
- double pow_dd(doublereal *, doublereal *), pow_ri(real *, integer *), log(
- doublereal), exp(doublereal);
-
- /* Local variables */
- static real temp;
- static integer i;
- static real alpha;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- extern doublereal slaran_(integer *);
- extern /* Subroutine */ int slarnv_(integer *, integer *, integer *, real
- *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- SLATM1 computes the entries of D(1..N) as specified by
- MODE, COND and IRSIGN. IDIST and ISEED determine the generation
- of random numbers. SLATM1 is called by SLATMR to generate
- random test matrices for LAPACK programs.
-
- Arguments
- =========
-
- MODE - INTEGER
- On entry describes how D is to be computed:
- MODE = 0 means do not change D.
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- Not modified.
-
- COND - REAL
- On entry, used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- IRSIGN - INTEGER
- On entry, if MODE neither -6, 0 nor 6, determines sign of
- entries of D
- 0 => leave entries of D unchanged
- 1 => multiply each entry of D by 1 or -1 with probability .5
-
-
- IDIST - CHARACTER*1
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => UNIFORM( 0, 1 )
- 2 => UNIFORM( -1, 1 )
- 3 => NORMAL( 0, 1 )
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. The random number generator uses a
- linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to SLATM1
- to continue the same random number sequence.
- Changed on exit.
-
- D - REAL array, dimension ( MIN( M , N ) )
- Array to be computed according to MODE, COND and IRSIGN.
- May be changed on exit if MODE is nonzero.
-
- N - INTEGER
- Number of entries of D. Not modified.
-
- INFO - INTEGER
- 0 => normal termination
- -1 => if MODE not in range -6 to 6
- -2 => if MODE neither -6, 0 nor 6, and
- IRSIGN neither 0 nor 1
- -3 => if MODE neither -6, 0 nor 6 and COND less than 1
- -4 => if MODE equals 6 or -6 and IDIST not in range 1 to 3
-
- -7 => if N negative
-
- =====================================================================
-
-
-
- Decode and Test the input parameters. Initialize flags & seed.
-
- Parameter adjustments */
- --d;
- --iseed;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*n == 0) {
- return 0;
- }
-
-/* Set INFO if an error */
-
- if (*mode < -6 || *mode > 6) {
- *info = -1;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && (*irsign != 0 && *
- irsign != 1)) {
- *info = -2;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && *cond < 1.f) {
- *info = -3;
- } else if ((*mode == 6 || *mode == -6) && (*idist < 1 || *idist > 3)) {
- *info = -4;
- } else if (*n < 0) {
- *info = -7;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("SLATM1", &i__1);
- return 0;
- }
-
-/* Compute D according to COND and MODE */
-
- if (*mode != 0) {
- switch (abs(*mode)) {
- case 1: goto L10;
- case 2: goto L30;
- case 3: goto L50;
- case 4: goto L70;
- case 5: goto L90;
- case 6: goto L110;
- }
-
-/* One large D value: */
-
-L10:
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- d[i] = 1.f / *cond;
-/* L20: */
- }
- d[1] = 1.f;
- goto L120;
-
-/* One small D value: */
-
-L30:
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- d[i] = 1.f;
-/* L40: */
- }
- d[*n] = 1.f / *cond;
- goto L120;
-
-/* Exponentially distributed D values: */
-
-L50:
- d[1] = 1.f;
- if (*n > 1) {
- d__1 = (doublereal) (*cond);
- d__2 = (doublereal) (-1.f / (real) (*n - 1));
- alpha = pow_dd(&d__1, &d__2);
- i__1 = *n;
- for (i = 2; i <= i__1; ++i) {
- i__2 = i - 1;
- d[i] = pow_ri(&alpha, &i__2);
-/* L60: */
- }
- }
- goto L120;
-
-/* Arithmetically distributed D values: */
-
-L70:
- d[1] = 1.f;
- if (*n > 1) {
- temp = 1.f / *cond;
- alpha = (1.f - temp) / (real) (*n - 1);
- i__1 = *n;
- for (i = 2; i <= i__1; ++i) {
- d[i] = (real) (*n - i) * alpha + temp;
-/* L80: */
- }
- }
- goto L120;
-
-/* Randomly distributed D values on ( 1/COND , 1): */
-
-L90:
- alpha = log(1.f / *cond);
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- d[i] = exp(alpha * slaran_(&iseed[1]));
-/* L100: */
- }
- goto L120;
-
-/* Randomly distributed D values from IDIST */
-
-L110:
- slarnv_(idist, &iseed[1], n, &d[1]);
-
-L120:
-
-/* If MODE neither -6 nor 0 nor 6, and IRSIGN = 1, assign
- random signs to D */
-
- if (*mode != -6 && *mode != 0 && *mode != 6 && *irsign == 1) {
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- temp = slaran_(&iseed[1]);
- if (temp > .5f) {
- d[i] = -(doublereal)d[i];
- }
-/* L130: */
- }
- }
-
-/* Reverse if MODE < 0 */
-
- if (*mode < 0) {
- i__1 = *n / 2;
- for (i = 1; i <= i__1; ++i) {
- temp = d[i];
- d[i] = d[*n + 1 - i];
- d[*n + 1 - i] = temp;
-/* L140: */
- }
- }
-
- }
-
- return 0;
-
-/* End of SLATM1 */
-
-} /* slatm1_ */
-
diff --git a/TESTING/MATGEN/slatm2.c b/TESTING/MATGEN/slatm2.c
deleted file mode 100644
index e81bb47..0000000
--- a/TESTING/MATGEN/slatm2.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-doublereal slatm2_(integer *m, integer *n, integer *i, integer *j, integer *
- kl, integer *ku, integer *idist, integer *iseed, real *d, integer *
- igrade, real *dl, real *dr, integer *ipvtng, integer *iwork, real *
- sparse)
-{
- /* System generated locals */
- real ret_val;
-
- /* Local variables */
- static integer isub, jsub;
- static real temp;
- extern doublereal slaran_(integer *), slarnd_(integer *, integer *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
-
-
-
- Purpose
- =======
-
- SLATM2 returns the (I,J) entry of a random matrix of dimension
- (M, N) described by the other paramters. It is called by the
- SLATMR routine in order to build random test matrices. No error
- checking on parameters is done, because this routine is called in
-
- a tight loop by SLATMR which has already checked the parameters.
-
- Use of SLATM2 differs from SLATM3 in the order in which the random
-
- number generator is called to fill in random matrix entries.
- With SLATM2, the generator is called to fill in the pivoted matrix
-
- columnwise. With SLATM3, the generator is called to fill in the
- matrix columnwise, after which it is pivoted. Thus, SLATM3 can
- be used to construct random matrices which differ only in their
- order of rows and/or columns. SLATM2 is used to construct band
- matrices while avoiding calling the random number generator for
- entries outside the band (and therefore generating random numbers
-
-
- The matrix whose (I,J) entry is returned is constructed as
- follows (this routine only computes one entry):
-
- If I is outside (1..M) or J is outside (1..N), return zero
- (this is convenient for generating matrices in band format).
-
-
- Generate a matrix A with random entries of distribution IDIST.
-
- Set the diagonal to D.
-
- Grade the matrix, if desired, from the left (by DL) and/or
- from the right (by DR or DL) as specified by IGRADE.
-
- Permute, if desired, the rows and/or columns as specified by
- IPVTNG and IWORK.
-
- Band the matrix to have lower bandwidth KL and upper
- bandwidth KU.
-
- Set random entries to zero as specified by SPARSE.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of matrix. Not modified.
-
- N - INTEGER
- Number of columns of matrix. Not modified.
-
- I - INTEGER
- Row of entry to be returned. Not modified.
-
- J - INTEGER
- Column of entry to be returned. Not modified.
-
- KL - INTEGER
- Lower bandwidth. Not modified.
-
- KU - INTEGER
- Upper bandwidth. Not modified.
-
- IDIST - INTEGER
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => UNIFORM( 0, 1 )
- 2 => UNIFORM( -1, 1 )
- 3 => NORMAL( 0, 1 )
- Not modified.
-
- ISEED - INTEGER array of dimension ( 4 )
- Seed for random number generator.
- Changed on exit.
-
- D - REAL array of dimension ( MIN( I , J ) )
- Diagonal entries of matrix. Not modified.
-
- IGRADE - INTEGER
- Specifies grading of matrix as follows:
- 0 => no grading
- 1 => matrix premultiplied by diag( DL )
- 2 => matrix postmultiplied by diag( DR )
- 3 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- 4 => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- 5 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- Not modified.
-
- DL - REAL array ( I or J, as appropriate )
- Left scale factors for grading matrix. Not modified.
-
- DR - REAL array ( I or J, as appropriate )
- Right scale factors for grading matrix. Not modified.
-
- IPVTNG - INTEGER
- On entry specifies pivoting permutations as follows:
- 0 => none.
- 1 => row pivoting.
- 2 => column pivoting.
- 3 => full pivoting, i.e., on both sides.
- Not modified.
-
- IWORK - INTEGER array ( I or J, as appropriate )
- This array specifies the permutation used. The
- row (or column) in position K was originally in
- position IWORK( K ).
- This differs from IWORK for SLATM3. Not modified.
-
- SPARSE - REAL between 0. and 1.
- On entry specifies the sparsity of the matrix
- if sparse matix is to be generated.
- SPARSE should lie between 0 and 1.
- A uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- =====================================================================
-
-
-
-
-
-
-
-
- -----------------------------------------------------------------------
-
-
-
-
- Check for I and J in range
-
- Parameter adjustments */
- --iwork;
- --dr;
- --dl;
- --d;
- --iseed;
-
- /* Function Body */
- if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
- ret_val = 0.f;
- return ret_val;
- }
-
-/* Check for banding */
-
- if (*j > *i + *ku || *j < *i - *kl) {
- ret_val = 0.f;
- return ret_val;
- }
-
-/* Check for sparsity */
-
- if (*sparse > 0.f) {
- if (slaran_(&iseed[1]) < *sparse) {
- ret_val = 0.f;
- return ret_val;
- }
- }
-
-/* Compute subscripts depending on IPVTNG */
-
- if (*ipvtng == 0) {
- isub = *i;
- jsub = *j;
- } else if (*ipvtng == 1) {
- isub = iwork[*i];
- jsub = *j;
- } else if (*ipvtng == 2) {
- isub = *i;
- jsub = iwork[*j];
- } else if (*ipvtng == 3) {
- isub = iwork[*i];
- jsub = iwork[*j];
- }
-
-/* Compute entry and grade it according to IGRADE */
-
- if (isub == jsub) {
- temp = d[isub];
- } else {
- temp = slarnd_(idist, &iseed[1]);
- }
- if (*igrade == 1) {
- temp *= dl[isub];
- } else if (*igrade == 2) {
- temp *= dr[jsub];
- } else if (*igrade == 3) {
- temp = temp * dl[isub] * dr[jsub];
- } else if (*igrade == 4 && isub != jsub) {
- temp = temp * dl[isub] / dl[jsub];
- } else if (*igrade == 5) {
- temp = temp * dl[isub] * dl[jsub];
- }
- ret_val = temp;
- return ret_val;
-
-/* End of SLATM2 */
-
-} /* slatm2_ */
-
diff --git a/TESTING/MATGEN/slatm3.c b/TESTING/MATGEN/slatm3.c
deleted file mode 100644
index be6f4ec..0000000
--- a/TESTING/MATGEN/slatm3.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-doublereal slatm3_(integer *m, integer *n, integer *i, integer *j, integer *
- isub, integer *jsub, integer *kl, integer *ku, integer *idist,
- integer *iseed, real *d, integer *igrade, real *dl, real *dr, integer
- *ipvtng, integer *iwork, real *sparse)
-{
- /* System generated locals */
- real ret_val;
-
- /* Local variables */
- static real temp;
- extern doublereal slaran_(integer *), slarnd_(integer *, integer *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
-
-
-
- Purpose
- =======
-
- SLATM3 returns the (ISUB,JSUB) entry of a random matrix of
- dimension (M, N) described by the other paramters. (ISUB,JSUB)
- is the final position of the (I,J) entry after pivoting
- according to IPVTNG and IWORK. SLATM3 is called by the
- SLATMR routine in order to build random test matrices. No error
- checking on parameters is done, because this routine is called in
-
- a tight loop by SLATMR which has already checked the parameters.
-
- Use of SLATM3 differs from SLATM2 in the order in which the random
-
- number generator is called to fill in random matrix entries.
- With SLATM2, the generator is called to fill in the pivoted matrix
-
- columnwise. With SLATM3, the generator is called to fill in the
- matrix columnwise, after which it is pivoted. Thus, SLATM3 can
- be used to construct random matrices which differ only in their
- order of rows and/or columns. SLATM2 is used to construct band
- matrices while avoiding calling the random number generator for
- entries outside the band (and therefore generating random numbers
-
- in different orders for different pivot orders).
-
- The matrix whose (ISUB,JSUB) entry is returned is constructed as
- follows (this routine only computes one entry):
-
- If ISUB is outside (1..M) or JSUB is outside (1..N), return zero
-
- (this is convenient for generating matrices in band format).
-
-
- Generate a matrix A with random entries of distribution IDIST.
-
- Set the diagonal to D.
-
- Grade the matrix, if desired, from the left (by DL) and/or
- from the right (by DR or DL) as specified by IGRADE.
-
- Permute, if desired, the rows and/or columns as specified by
- IPVTNG and IWORK.
-
- Band the matrix to have lower bandwidth KL and upper
- bandwidth KU.
-
- Set random entries to zero as specified by SPARSE.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of matrix. Not modified.
-
- N - INTEGER
- Number of columns of matrix. Not modified.
-
- I - INTEGER
- Row of unpivoted entry to be returned. Not modified.
-
- J - INTEGER
- Column of unpivoted entry to be returned. Not modified.
-
- ISUB - INTEGER
- Row of pivoted entry to be returned. Changed on exit.
-
- JSUB - INTEGER
- Column of pivoted entry to be returned. Changed on exit.
-
- KL - INTEGER
- Lower bandwidth. Not modified.
-
- KU - INTEGER
- Upper bandwidth. Not modified.
-
- IDIST - INTEGER
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => UNIFORM( 0, 1 )
- 2 => UNIFORM( -1, 1 )
- 3 => NORMAL( 0, 1 )
- Not modified.
-
- ISEED - INTEGER array of dimension ( 4 )
- Seed for random number generator.
- Changed on exit.
-
- D - REAL array of dimension ( MIN( I , J ) )
- Diagonal entries of matrix. Not modified.
-
- IGRADE - INTEGER
- Specifies grading of matrix as follows:
- 0 => no grading
- 1 => matrix premultiplied by diag( DL )
- 2 => matrix postmultiplied by diag( DR )
- 3 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- 4 => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- 5 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- Not modified.
-
- DL - REAL array ( I or J, as appropriate )
- Left scale factors for grading matrix. Not modified.
-
- DR - REAL array ( I or J, as appropriate )
- Right scale factors for grading matrix. Not modified.
-
- IPVTNG - INTEGER
- On entry specifies pivoting permutations as follows:
- 0 => none.
- 1 => row pivoting.
- 2 => column pivoting.
- 3 => full pivoting, i.e., on both sides.
- Not modified.
-
- IWORK - INTEGER array ( I or J, as appropriate )
- This array specifies the permutation used. The
- row (or column) originally in position K is in
- position IWORK( K ) after pivoting.
- This differs from IWORK for SLATM2. Not modified.
-
- SPARSE - REAL between 0. and 1.
- On entry specifies the sparsity of the matrix
- if sparse matix is to be generated.
- SPARSE should lie between 0 and 1.
- A uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- =====================================================================
-
-
-
-
-
-
-
-
- -----------------------------------------------------------------------
-
-
-
-
- Check for I and J in range
-
- Parameter adjustments */
- --iwork;
- --dr;
- --dl;
- --d;
- --iseed;
-
- /* Function Body */
- if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
- *isub = *i;
- *jsub = *j;
- ret_val = 0.f;
- return ret_val;
- }
-
-/* Compute subscripts depending on IPVTNG */
-
- if (*ipvtng == 0) {
- *isub = *i;
- *jsub = *j;
- } else if (*ipvtng == 1) {
- *isub = iwork[*i];
- *jsub = *j;
- } else if (*ipvtng == 2) {
- *isub = *i;
- *jsub = iwork[*j];
- } else if (*ipvtng == 3) {
- *isub = iwork[*i];
- *jsub = iwork[*j];
- }
-
-/* Check for banding */
-
- if (*jsub > *isub + *ku || *jsub < *isub - *kl) {
- ret_val = 0.f;
- return ret_val;
- }
-
-/* Check for sparsity */
-
- if (*sparse > 0.f) {
- if (slaran_(&iseed[1]) < *sparse) {
- ret_val = 0.f;
- return ret_val;
- }
- }
-
-/* Compute entry and grade it according to IGRADE */
-
- if (*i == *j) {
- temp = d[*i];
- } else {
- temp = slarnd_(idist, &iseed[1]);
- }
- if (*igrade == 1) {
- temp *= dl[*i];
- } else if (*igrade == 2) {
- temp *= dr[*j];
- } else if (*igrade == 3) {
- temp = temp * dl[*i] * dr[*j];
- } else if (*igrade == 4 && *i != *j) {
- temp = temp * dl[*i] / dl[*j];
- } else if (*igrade == 5) {
- temp = temp * dl[*i] * dl[*j];
- }
- ret_val = temp;
- return ret_val;
-
-/* End of SLATM3 */
-
-} /* slatm3_ */
-
diff --git a/TESTING/MATGEN/slatme.c b/TESTING/MATGEN/slatme.c
deleted file mode 100644
index 929c5e0..0000000
--- a/TESTING/MATGEN/slatme.c
+++ /dev/null
@@ -1,676 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__1 = 1;
-static real c_b23 = 0.f;
-static integer c__0 = 0;
-static real c_b39 = 1.f;
-
-/* Subroutine */ int slatme_(integer *n, char *dist, integer *iseed, real *d,
- integer *mode, real *cond, real *dmax__, char *ei, char *rsign, char *
- upper, char *sim, real *ds, integer *modes, real *conds, integer *kl,
- integer *ku, real *anorm, real *a, integer *lda, real *work, integer *
- info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
- real r__1, r__2, r__3;
-
- /* Local variables */
- static logical bads;
- extern /* Subroutine */ int sger_(integer *, integer *, real *, real *,
- integer *, real *, integer *, real *, integer *);
- static integer isim;
- static real temp;
- static logical badei;
- static integer i, j;
- static real alpha;
- extern logical lsame_(char *, char *);
- static integer iinfo;
- extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *);
- static real tempa[1];
- static integer icols;
- static logical useei;
- static integer idist;
- extern /* Subroutine */ int sgemv_(char *, integer *, integer *, real *,
- real *, integer *, real *, integer *, real *, real *, integer *), scopy_(integer *, real *, integer *, real *, integer *);
- static integer irows;
- extern /* Subroutine */ int slatm1_(integer *, real *, integer *, integer
- *, integer *, real *, integer *, integer *);
- static integer ic, jc, ir, jr;
- extern doublereal slange_(char *, integer *, integer *, real *, integer *,
- real *);
- extern /* Subroutine */ int slarge_(integer *, real *, integer *, integer
- *, real *, integer *), slarfg_(integer *, real *, real *, integer
- *, real *), xerbla_(char *, integer *);
- extern doublereal slaran_(integer *);
- static integer irsign;
- extern /* Subroutine */ int slaset_(char *, integer *, integer *, real *,
- real *, real *, integer *);
- static integer iupper;
- extern /* Subroutine */ int slarnv_(integer *, integer *, integer *, real
- *);
- static real xnorms;
- static integer jcr;
- static real tau;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- SLATME generates random non-symmetric square matrices with
- specified eigenvalues for testing LAPACK programs.
-
- SLATME operates by applying the following sequence of
- operations:
-
- 1. Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX, and RSIGN
- as described below.
-
- 2. If complex conjugate pairs are desired (MODE=0 and EI(1)='R',
- or MODE=5), certain pairs of adjacent elements of D are
- interpreted as the real and complex parts of a complex
- conjugate pair; A thus becomes block diagonal, with 1x1
- and 2x2 blocks.
-
- 3. If UPPER='T', the upper triangle of A is set to random values
- out of distribution DIST.
-
- 4. If SIM='T', A is multiplied on the left by a random matrix
- X, whose singular values are specified by DS, MODES, and
- CONDS, and on the right by X inverse.
-
- 5. If KL < N-1, the lower bandwidth is reduced to KL using
- Householder transformations. If KU < N-1, the upper
- bandwidth is reduced to KU.
-
- 6. If ANORM is not negative, the matrix is scaled to have
- maximum-element-norm ANORM.
-
- (Note: since the matrix cannot be reduced beyond Hessenberg form,
-
- no packing options are available.)
-
- Arguments
- =========
-
- N - INTEGER
- The number of columns (or rows) of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate the random eigen-/singular values, and for the
- upper triangle (see UPPER).
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to SLATME
- to continue the same random number sequence.
- Changed on exit.
-
- D - REAL array, dimension ( N )
- This array is used to specify the eigenvalues of A. If
- MODE=0, then D is assumed to contain the eigenvalues (but
- see the description of EI), otherwise they will be
- computed according to MODE, COND, DMAX, and RSIGN and
- placed in D.
- Modified if MODE is nonzero.
-
- MODE - INTEGER
- On entry this describes how the eigenvalues are to
- be specified:
- MODE = 0 means use D (with EI) as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed. Each odd-even pair
- of elements will be either used as two real
- eigenvalues or as the real and imaginary part
- of a complex conjugate pair of eigenvalues;
- the choice of which is done is random, with
- 50-50 probability, for each pair.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is between 1 and 4, D has entries ranging
- from 1 to 1/COND, if between -1 and -4, D has entries
- ranging from 1/COND to 1,
- Not modified.
-
- COND - REAL
- On entry, this is used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - REAL
- If MODE is neither -6, 0 nor 6, the contents of D, as
- computed according to MODE and COND, will be scaled by
- DMAX / max(abs(D(i))). Note that DMAX need not be
- positive: if DMAX is negative (or zero), D will be
- scaled by a negative number (or zero).
- Not modified.
-
- EI - CHARACTER*1 array, dimension ( N )
- If MODE is 0, and EI(1) is not ' ' (space character),
- this array specifies which elements of D (on input) are
- real eigenvalues and which are the real and imaginary parts
-
- of a complex conjugate pair of eigenvalues. The elements
- of EI may then only have the values 'R' and 'I'. If
- EI(j)='R' and EI(j+1)='I', then the j-th eigenvalue is
- CMPLX( D(j) , D(j+1) ), and the (j+1)-th is the complex
- conjugate thereof. If EI(j)=EI(j+1)='R', then the j-th
- eigenvalue is D(j) (i.e., real). EI(1) may not be 'I',
- nor may two adjacent elements of EI both have the value 'I'.
-
- If MODE is not 0, then EI is ignored. If MODE is 0 and
- EI(1)=' ', then the eigenvalues will all be real.
- Not modified.
-
- RSIGN - CHARACTER*1
- If MODE is not 0, 6, or -6, and RSIGN='T', then the
- elements of D, as computed according to MODE and COND, will
-
- be multiplied by a random sign (+1 or -1). If RSIGN='F',
- they will not be. RSIGN may only have the values 'T' or
- 'F'.
- Not modified.
-
- UPPER - CHARACTER*1
- If UPPER='T', then the elements of A above the diagonal
- (and above the 2x2 diagonal blocks, if A has complex
- eigenvalues) will be set to random numbers out of DIST.
- If UPPER='F', they will not. UPPER may only have the
- values 'T' or 'F'.
- Not modified.
-
- SIM - CHARACTER*1
- If SIM='T', then A will be operated on by a "similarity
- transform", i.e., multiplied on the left by a matrix X and
- on the right by X inverse. X = U S V, where U and V are
- random unitary matrices and S is a (diagonal) matrix of
- singular values specified by DS, MODES, and CONDS. If
- SIM='F', then A will not be transformed.
- Not modified.
-
- DS - REAL array, dimension ( N )
- This array is used to specify the singular values of X,
- in the same way that D specifies the eigenvalues of A.
- If MODE=0, the DS contains the singular values, which
- may not be zero.
- Modified if MODE is nonzero.
-
- MODES - INTEGER
- CONDS - REAL
- Same as MODE and COND, but for specifying the diagonal
- of S. MODES=-6 and +6 are not allowed (since they would
- result in randomly ill-conditioned eigenvalues.)
-
- KL - INTEGER
- This specifies the lower bandwidth of the matrix. KL=1
- specifies upper Hessenberg form. If KL is at least N-1,
- then A will have full lower bandwidth. KL must be at
- least 1.
- Not modified.
-
- KU - INTEGER
- This specifies the upper bandwidth of the matrix. KU=1
- specifies lower Hessenberg form. If KU is at least N-1,
- then A will have full upper bandwidth; if KU and KL
- are both at least N-1, then A will be dense. Only one of
- KU and KL may be less than N-1. KU must be at least 1.
- Not modified.
-
- ANORM - REAL
- If ANORM is not negative, then A will be scaled by a non-
- negative real number to make the maximum-element-norm of A
- to be ANORM.
- Not modified.
-
- A - REAL array, dimension ( LDA, N )
- On exit A is the desired test matrix.
- Modified.
-
- LDA - INTEGER
- LDA specifies the first dimension of A as declared in the
- calling program. LDA must be at least N.
- Not modified.
-
- WORK - REAL array, dimension ( 3*N )
- Workspace.
- Modified.
-
- INFO - INTEGER
- Error code. On exit, INFO will be set to one of the
- following values:
- 0 => normal return
- -1 => N negative
- -2 => DIST illegal string
- -5 => MODE not in range -6 to 6
- -6 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -8 => EI(1) is not ' ' or 'R', EI(j) is not 'R' or 'I', or
-
- two adjacent elements of EI are 'I'.
- -9 => RSIGN is not 'T' or 'F'
- -10 => UPPER is not 'T' or 'F'
- -11 => SIM is not 'T' or 'F'
- -12 => MODES=0 and DS has a zero singular value.
- -13 => MODES is not in the range -5 to 5.
- -14 => MODES is nonzero and CONDS is less than 1.
- -15 => KL is less than 1.
- -16 => KU is less than 1, or KL and KU are both less than
- N-1.
- -19 => LDA is less than N.
- 1 => Error return from SLATM1 (computing D)
- 2 => Cannot scale to DMAX (max. eigenvalue is 0)
- 3 => Error return from SLATM1 (computing DS)
- 4 => Error return from SLARGE
- 5 => Zero singular value from SLATM1.
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- --ei;
- --ds;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --work;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else {
- idist = -1;
- }
-
-/* Check EI */
-
- useei = TRUE_;
- badei = FALSE_;
- if (lsame_(ei + 1, " ") || *mode != 0) {
- useei = FALSE_;
- } else {
- if (lsame_(ei + 1, "R")) {
- i__1 = *n;
- for (j = 2; j <= i__1; ++j) {
- if (lsame_(ei + j, "I")) {
- if (lsame_(ei + (j - 1), "I")) {
- badei = TRUE_;
- }
- } else {
- if (! lsame_(ei + j, "R")) {
- badei = TRUE_;
- }
- }
-/* L10: */
- }
- } else {
- badei = TRUE_;
- }
- }
-
-/* Decode RSIGN */
-
- if (lsame_(rsign, "T")) {
- irsign = 1;
- } else if (lsame_(rsign, "F")) {
- irsign = 0;
- } else {
- irsign = -1;
- }
-
-/* Decode UPPER */
-
- if (lsame_(upper, "T")) {
- iupper = 1;
- } else if (lsame_(upper, "F")) {
- iupper = 0;
- } else {
- iupper = -1;
- }
-
-/* Decode SIM */
-
- if (lsame_(sim, "T")) {
- isim = 1;
- } else if (lsame_(sim, "F")) {
- isim = 0;
- } else {
- isim = -1;
- }
-
-/* Check DS, if MODES=0 and ISIM=1 */
-
- bads = FALSE_;
- if (*modes == 0 && isim == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- if (ds[j] == 0.f) {
- bads = TRUE_;
- }
-/* L20: */
- }
- }
-
-/* Set INFO if an error */
-
- if (*n < 0) {
- *info = -1;
- } else if (idist == -1) {
- *info = -2;
- } else if (abs(*mode) > 6) {
- *info = -5;
- } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.f) {
- *info = -6;
- } else if (badei) {
- *info = -8;
- } else if (irsign == -1) {
- *info = -9;
- } else if (iupper == -1) {
- *info = -10;
- } else if (isim == -1) {
- *info = -11;
- } else if (bads) {
- *info = -12;
- } else if (isim == 1 && abs(*modes) > 5) {
- *info = -13;
- } else if (isim == 1 && *modes != 0 && *conds < 1.f) {
- *info = -14;
- } else if (*kl < 1) {
- *info = -15;
- } else if (*ku < 1 || *ku < *n - 1 && *kl < *n - 1) {
- *info = -16;
- } else if (*lda < max(1,*n)) {
- *info = -19;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("SLATME", &i__1);
- return 0;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L30: */
- }
-
- if (iseed[4] % 2 != 1) {
- ++iseed[4];
- }
-
-/* 2) Set up diagonal of A
-
- Compute D according to COND and MODE */
-
- slatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], n, &iinfo);
- if (iinfo != 0) {
- *info = 1;
- return 0;
- }
- if (*mode != 0 && abs(*mode) != 6) {
-
-/* Scale by DMAX */
-
- temp = dabs(d[1]);
- i__1 = *n;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- r__2 = temp, r__3 = (r__1 = d[i], dabs(r__1));
- temp = dmax(r__2,r__3);
-/* L40: */
- }
-
- if (temp > 0.f) {
- alpha = *dmax__ / temp;
- } else if (*dmax__ != 0.f) {
- *info = 2;
- return 0;
- } else {
- alpha = 0.f;
- }
-
- sscal_(n, &alpha, &d[1], &c__1);
-
- }
-
- slaset_("Full", n, n, &c_b23, &c_b23, &a[a_offset], lda);
- i__1 = *lda + 1;
- scopy_(n, &d[1], &c__1, &a[a_offset], &i__1);
-
-/* Set up complex conjugate pairs */
-
- if (*mode == 0) {
- if (useei) {
- i__1 = *n;
- for (j = 2; j <= i__1; ++j) {
- if (lsame_(ei + j, "I")) {
- a[j - 1 + j * a_dim1] = a[j + j * a_dim1];
- a[j + (j - 1) * a_dim1] = -(doublereal)a[j + j * a_dim1];
- a[j + j * a_dim1] = a[j - 1 + (j - 1) * a_dim1];
- }
-/* L50: */
- }
- }
-
- } else if (abs(*mode) == 5) {
-
- i__1 = *n;
- for (j = 2; j <= i__1; j += 2) {
- if (slaran_(&iseed[1]) > .5f) {
- a[j - 1 + j * a_dim1] = a[j + j * a_dim1];
- a[j + (j - 1) * a_dim1] = -(doublereal)a[j + j * a_dim1];
- a[j + j * a_dim1] = a[j - 1 + (j - 1) * a_dim1];
- }
-/* L60: */
- }
- }
-
-/* 3) If UPPER='T', set upper triangle of A to random numbers.
- (but don't modify the corners of 2x2 blocks.) */
-
- if (iupper != 0) {
- i__1 = *n;
- for (jc = 2; jc <= i__1; ++jc) {
- if (a[jc - 1 + jc * a_dim1] != 0.f) {
- jr = jc - 2;
- } else {
- jr = jc - 1;
- }
- slarnv_(&idist, &iseed[1], &jr, &a[jc * a_dim1 + 1]);
-/* L70: */
- }
- }
-
-/* 4) If SIM='T', apply similarity transformation.
-
- -1
- Transform is X A X , where X = U S V, thus
-
- it is U S V A V' (1/S) U' */
-
- if (isim != 0) {
-
-/* Compute S (singular values of the eigenvector matrix)
- according to CONDS and MODES */
-
- slatm1_(modes, conds, &c__0, &c__0, &iseed[1], &ds[1], n, &iinfo);
- if (iinfo != 0) {
- *info = 3;
- return 0;
- }
-
-/* Multiply by V and V' */
-
- slarge_(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
- if (iinfo != 0) {
- *info = 4;
- return 0;
- }
-
-/* Multiply by S and (1/S) */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- sscal_(n, &ds[j], &a[j + a_dim1], lda);
- if (ds[j] != 0.f) {
- r__1 = 1.f / ds[j];
- sscal_(n, &r__1, &a[j * a_dim1 + 1], &c__1);
- } else {
- *info = 5;
- return 0;
- }
-/* L80: */
- }
-
-/* Multiply by U and U' */
-
- slarge_(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
- if (iinfo != 0) {
- *info = 4;
- return 0;
- }
- }
-
-/* 5) Reduce the bandwidth. */
-
- if (*kl < *n - 1) {
-
-/* Reduce bandwidth -- kill column */
-
- i__1 = *n - 1;
- for (jcr = *kl + 1; jcr <= i__1; ++jcr) {
- ic = jcr - *kl;
- irows = *n + 1 - jcr;
- icols = *n + *kl - jcr;
-
- scopy_(&irows, &a[jcr + ic * a_dim1], &c__1, &work[1], &c__1);
- xnorms = work[1];
- slarfg_(&irows, &xnorms, &work[2], &c__1, &tau);
- work[1] = 1.f;
-
- sgemv_("T", &irows, &icols, &c_b39, &a[jcr + (ic + 1) * a_dim1],
- lda, &work[1], &c__1, &c_b23, &work[irows + 1], &c__1)
- ;
- r__1 = -(doublereal)tau;
- sger_(&irows, &icols, &r__1, &work[1], &c__1, &work[irows + 1], &
- c__1, &a[jcr + (ic + 1) * a_dim1], lda);
-
- sgemv_("N", n, &irows, &c_b39, &a[jcr * a_dim1 + 1], lda, &work[1]
- , &c__1, &c_b23, &work[irows + 1], &c__1);
- r__1 = -(doublereal)tau;
- sger_(n, &irows, &r__1, &work[irows + 1], &c__1, &work[1], &c__1,
- &a[jcr * a_dim1 + 1], lda);
-
- a[jcr + ic * a_dim1] = xnorms;
- i__2 = irows - 1;
- slaset_("Full", &i__2, &c__1, &c_b23, &c_b23, &a[jcr + 1 + ic *
- a_dim1], lda);
-/* L90: */
- }
- } else if (*ku < *n - 1) {
-
-/* Reduce upper bandwidth -- kill a row at a time. */
-
- i__1 = *n - 1;
- for (jcr = *ku + 1; jcr <= i__1; ++jcr) {
- ir = jcr - *ku;
- irows = *n + *ku - jcr;
- icols = *n + 1 - jcr;
-
- scopy_(&icols, &a[ir + jcr * a_dim1], lda, &work[1], &c__1);
- xnorms = work[1];
- slarfg_(&icols, &xnorms, &work[2], &c__1, &tau);
- work[1] = 1.f;
-
- sgemv_("N", &irows, &icols, &c_b39, &a[ir + 1 + jcr * a_dim1],
- lda, &work[1], &c__1, &c_b23, &work[icols + 1], &c__1)
- ;
- r__1 = -(doublereal)tau;
- sger_(&irows, &icols, &r__1, &work[icols + 1], &c__1, &work[1], &
- c__1, &a[ir + 1 + jcr * a_dim1], lda);
-
- sgemv_("C", &icols, n, &c_b39, &a[jcr + a_dim1], lda, &work[1], &
- c__1, &c_b23, &work[icols + 1], &c__1);
- r__1 = -(doublereal)tau;
- sger_(&icols, n, &r__1, &work[1], &c__1, &work[icols + 1], &c__1,
- &a[jcr + a_dim1], lda);
-
- a[ir + jcr * a_dim1] = xnorms;
- i__2 = icols - 1;
- slaset_("Full", &c__1, &i__2, &c_b23, &c_b23, &a[ir + (jcr + 1) *
- a_dim1], lda);
-/* L100: */
- }
- }
-
-/* Scale the matrix to have norm ANORM */
-
- if (*anorm >= 0.f) {
- temp = slange_("M", n, n, &a[a_offset], lda, tempa);
- if (temp > 0.f) {
- alpha = *anorm / temp;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- sscal_(n, &alpha, &a[j * a_dim1 + 1], &c__1);
-/* L110: */
- }
- }
- }
-
- return 0;
-
-/* End of SLATME */
-
-} /* slatme_ */
-
diff --git a/TESTING/MATGEN/slatmr.c b/TESTING/MATGEN/slatmr.c
deleted file mode 100644
index 31c39fe..0000000
--- a/TESTING/MATGEN/slatmr.c
+++ /dev/null
@@ -1,1289 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__0 = 0;
-static integer c__1 = 1;
-
-/* Subroutine */ int slatmr_(integer *m, integer *n, char *dist, integer *
- iseed, char *sym, real *d, integer *mode, real *cond, real *dmax__,
- char *rsign, char *grade, real *dl, integer *model, real *condl, real
- *dr, integer *moder, real *condr, char *pivtng, integer *ipivot,
- integer *kl, integer *ku, real *sparse, real *anorm, char *pack, real
- *a, integer *lda, integer *iwork, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
- real r__1, r__2, r__3;
-
- /* Local variables */
- static integer isub, jsub;
- static real temp;
- static integer isym, i, j, k;
- static real alpha;
- static integer ipack;
- extern logical lsame_(char *, char *);
- static real tempa[1];
- extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *);
- static integer iisub, idist, jjsub, mnmin;
- static logical dzero;
- static integer mnsub;
- static real onorm;
- static integer mxsub, npvts;
- extern /* Subroutine */ int slatm1_(integer *, real *, integer *, integer
- *, integer *, real *, integer *, integer *);
- extern doublereal slatm2_(integer *, integer *, integer *, integer *,
- integer *, integer *, integer *, integer *, real *, integer *,
- real *, real *, integer *, integer *, real *), slatm3_(integer *,
- integer *, integer *, integer *, integer *, integer *, integer *,
- integer *, integer *, integer *, real *, integer *, real *, real *
- , integer *, integer *, real *);
- static integer igrade;
- extern doublereal slangb_(char *, integer *, integer *, integer *, real *,
- integer *, real *), slange_(char *, integer *, integer *,
- real *, integer *, real *);
- static logical fulbnd;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical badpvt;
- extern doublereal slansb_(char *, char *, integer *, integer *, real *,
- integer *, real *);
- static integer irsign;
- extern doublereal slansp_(char *, char *, integer *, real *, real *);
- static integer ipvtng;
- extern doublereal slansy_(char *, char *, integer *, real *, integer *,
- real *);
- static integer kll, kuu;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- SLATMR generates random matrices of various types for testing
- LAPACK programs.
-
- SLATMR operates by applying the following sequence of
- operations:
-
- Generate a matrix A with random entries of distribution DIST
- which is symmetric if SYM='S', and nonsymmetric
- if SYM='N'.
-
- Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX and RSIGN
- as described below.
-
- Grade the matrix, if desired, from the left and/or right
- as specified by GRADE. The inputs DL, MODEL, CONDL, DR,
- MODER and CONDR also determine the grading as described
- below.
-
- Permute, if desired, the rows and/or columns as specified by
- PIVTNG and IPIVOT.
-
- Set random entries to zero, if desired, to get a random sparse
- matrix as specified by SPARSE.
-
- Make A a band matrix, if desired, by zeroing out the matrix
- outside a band of lower bandwidth KL and upper bandwidth KU.
-
-
- Scale A, if desired, to have maximum entry ANORM.
-
- Pack the matrix if desired. Options specified by PACK are:
- no packing
- zero out upper half (if symmetric)
- zero out lower half (if symmetric)
- store the upper half columnwise (if symmetric or
- square upper triangular)
- store the lower half columnwise (if symmetric or
- square lower triangular)
- same as upper half rowwise if symmetric
- store the lower triangle in banded format (if symmetric)
- store the upper triangle in banded format (if symmetric)
- store the entire matrix in banded format
-
- Note: If two calls to SLATMR differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
-
- If two calls to SLATMR both have full bandwidth (KL = M-1
- and KU = N-1), and differ only in the PIVTNG and PACK
- parameters, then the matrices generated will differ only
- in the order of the rows and/or columns, and otherwise
- contain the same data. This consistency cannot be and
- is not maintained with less than full bandwidth.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of A. Not modified.
-
- N - INTEGER
- Number of columns of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate a random matrix .
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- Not modified.
-
- ISEED - INTEGER array, dimension (4)
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to SLATMR
- to continue the same random number sequence.
- Changed on exit.
-
- SYM - CHARACTER*1
- If SYM='S' or 'H', generated matrix is symmetric.
- If SYM='N', generated matrix is nonsymmetric.
- Not modified.
-
- D - REAL array, dimension (min(M,N))
- On entry this array specifies the diagonal entries
- of the diagonal of A. D may either be specified
- on entry, or set according to MODE and COND as described
- below. May be changed on exit if MODE is nonzero.
-
- MODE - INTEGER
- On entry describes how D is to be used:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- Not modified.
-
- COND - REAL
- On entry, used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - REAL
- If MODE neither -6, 0 nor 6, the diagonal is scaled by
- DMAX / max(abs(D(i))), so that maximum absolute entry
- of diagonal is abs(DMAX). If DMAX is negative (or zero),
- diagonal will be scaled by a negative number (or zero).
-
- RSIGN - CHARACTER*1
- If MODE neither -6, 0 nor 6, specifies sign of diagonal
- as follows:
- 'T' => diagonal entries are multiplied by 1 or -1
- with probability .5
- 'F' => diagonal unchanged
- Not modified.
-
- GRADE - CHARACTER*1
- Specifies grading of matrix as follows:
- 'N' => no grading
- 'L' => matrix premultiplied by diag( DL )
- (only if matrix nonsymmetric)
- 'R' => matrix postmultiplied by diag( DR )
- (only if matrix nonsymmetric)
- 'B' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- (only if matrix nonsymmetric)
- 'S' or 'H' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- ('S' for symmetric, or 'H' for Hermitian)
- 'E' => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- ( 'E' for eigenvalue invariance)
- (only if matrix nonsymmetric)
- Note: if GRADE='E', then M must equal N.
- Not modified.
-
- DL - REAL array, dimension (M)
- If MODEL=0, then on entry this array specifies the diagonal
-
- entries of a diagonal matrix used as described under GRADE
- above. If MODEL is not zero, then DL will be set according
- to MODEL and CONDL, analogous to the way D is set according
-
- to MODE and COND (except there is no DMAX parameter for DL).
-
- If GRADE='E', then DL cannot have zero entries.
- Not referenced if GRADE = 'N' or 'R'. Changed on exit.
-
- MODEL - INTEGER
- This specifies how the diagonal array DL is to be computed,
-
- just as MODE specifies how D is to be computed.
- Not modified.
-
- CONDL - REAL
- When MODEL is not zero, this specifies the condition number
-
- of the computed DL. Not modified.
-
- DR - REAL array, dimension (N)
- If MODER=0, then on entry this array specifies the diagonal
-
- entries of a diagonal matrix used as described under GRADE
- above. If MODER is not zero, then DR will be set according
- to MODER and CONDR, analogous to the way D is set according
-
- to MODE and COND (except there is no DMAX parameter for DR).
-
- Not referenced if GRADE = 'N', 'L', 'H', 'S' or 'E'.
- Changed on exit.
-
- MODER - INTEGER
- This specifies how the diagonal array DR is to be computed,
-
- just as MODE specifies how D is to be computed.
- Not modified.
-
- CONDR - REAL
- When MODER is not zero, this specifies the condition number
-
- of the computed DR. Not modified.
-
- PIVTNG - CHARACTER*1
- On entry specifies pivoting permutations as follows:
- 'N' or ' ' => none.
- 'L' => left or row pivoting (matrix must be nonsymmetric).
- 'R' => right or column pivoting (matrix must be
- nonsymmetric).
- 'B' or 'F' => both or full pivoting, i.e., on both sides.
- In this case, M must equal N
-
- If two calls to SLATMR both have full bandwidth (KL = M-1
- and KU = N-1), and differ only in the PIVTNG and PACK
- parameters, then the matrices generated will differ only
- in the order of the rows and/or columns, and otherwise
- contain the same data. This consistency cannot be
- maintained with less than full bandwidth.
-
- IPIVOT - INTEGER array, dimension (N or M)
- This array specifies the permutation used. After the
- basic matrix is generated, the rows, columns, or both
- are permuted. If, say, row pivoting is selected, SLATMR
- starts with the *last* row and interchanges the M-th and
- IPIVOT(M)-th rows, then moves to the next-to-last row,
- interchanging the (M-1)-th and the IPIVOT(M-1)-th rows,
- and so on. In terms of "2-cycles", the permutation is
- (1 IPIVOT(1)) (2 IPIVOT(2)) ... (M IPIVOT(M))
- where the rightmost cycle is applied first. This is the
- *inverse* of the effect of pivoting in LINPACK. The idea
- is that factoring (with pivoting) an identity matrix
- which has been inverse-pivoted in this way should
- result in a pivot vector identical to IPIVOT.
- Not referenced if PIVTNG = 'N'. Not modified.
-
- SPARSE - REAL
- On entry specifies the sparsity of the matrix if a sparse
- matrix is to be generated. SPARSE should lie between
- 0 and 1. To generate a sparse matrix, for each matrix entry
-
- a uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- KL - INTEGER
- On entry specifies the lower bandwidth of the matrix. For
- example, KL=0 implies upper triangular, KL=1 implies upper
- Hessenberg, and KL at least M-1 implies the matrix is not
- banded. Must equal KU if matrix is symmetric.
- Not modified.
-
- KU - INTEGER
- On entry specifies the upper bandwidth of the matrix. For
- example, KU=0 implies lower triangular, KU=1 implies lower
- Hessenberg, and KU at least N-1 implies the matrix is not
- banded. Must equal KL if matrix is symmetric.
- Not modified.
-
- ANORM - REAL
- On entry specifies maximum entry of output matrix
- (output matrix will by multiplied by a constant so that
- its largest absolute entry equal ANORM)
- if ANORM is nonnegative. If ANORM is negative no scaling
- is done. Not modified.
-
- PACK - CHARACTER*1
- On entry specifies packing of matrix as follows:
- 'N' => no packing
- 'U' => zero out all subdiagonal entries (if symmetric)
- 'L' => zero out all superdiagonal entries (if symmetric)
- 'C' => store the upper triangle columnwise
- (only if matrix symmetric or square upper triangular)
-
- 'R' => store the lower triangle columnwise
- (only if matrix symmetric or square lower triangular)
-
- (same as upper half rowwise if symmetric)
- 'B' => store the lower triangle in band storage scheme
- (only if matrix symmetric)
- 'Q' => store the upper triangle in band storage scheme
- (only if matrix symmetric)
- 'Z' => store the entire matrix in band storage scheme
- (pivoting can be provided for by using this
- option to store A in the trailing rows of
- the allocated storage)
-
- Using these options, the various LAPACK packed and banded
- storage schemes can be obtained:
- GB - use 'Z'
- PB, SB or TB - use 'B' or 'Q'
- PP, SP or TP - use 'C' or 'R'
-
- If two calls to SLATMR differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
- Not modified.
-
- A - REAL array, dimension (LDA,N)
- On exit A is the desired test matrix. Only those
- entries of A which are significant on output
- will be referenced (even if A is in packed or band
- storage format). The 'unoccupied corners' of A in
- band format will be zeroed out.
-
- LDA - INTEGER
- on entry LDA specifies the first dimension of A as
- declared in the calling program.
- If PACK='N', 'U' or 'L', LDA must be at least max ( 1, M ).
-
- If PACK='C' or 'R', LDA must be at least 1.
- If PACK='B', or 'Q', LDA must be MIN ( KU+1, N )
- If PACK='Z', LDA must be at least KUU+KLL+1, where
- KUU = MIN ( KU, N-1 ) and KLL = MIN ( KL, N-1 )
- Not modified.
-
- IWORK - INTEGER array, dimension ( N or M)
- Workspace. Not referenced if PIVTNG = 'N'. Changed on exit.
-
-
- INFO - INTEGER
- Error parameter on exit:
- 0 => normal return
- -1 => M negative or unequal to N and SYM='S' or 'H'
- -2 => N negative
- -3 => DIST illegal string
- -5 => SYM illegal string
- -7 => MODE not in range -6 to 6
- -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -10 => MODE neither -6, 0 nor 6 and RSIGN illegal string
- -11 => GRADE illegal string, or GRADE='E' and
- M not equal to N, or GRADE='L', 'R', 'B' or 'E' and
- SYM = 'S' or 'H'
- -12 => GRADE = 'E' and DL contains zero
- -13 => MODEL not in range -6 to 6 and GRADE= 'L', 'B', 'H',
-
- 'S' or 'E'
- -14 => CONDL less than 1.0, GRADE='L', 'B', 'H', 'S' or 'E',
-
- and MODEL neither -6, 0 nor 6
- -16 => MODER not in range -6 to 6 and GRADE= 'R' or 'B'
- -17 => CONDR less than 1.0, GRADE='R' or 'B', and
- MODER neither -6, 0 nor 6
- -18 => PIVTNG illegal string, or PIVTNG='B' or 'F' and
- M not equal to N, or PIVTNG='L' or 'R' and SYM='S'
- or 'H'
- -19 => IPIVOT contains out of range number and
- PIVTNG not equal to 'N'
- -20 => KL negative
- -21 => KU negative, or SYM='S' or 'H' and KU not equal to KL
-
- -22 => SPARSE not in range 0. to 1.
- -24 => PACK illegal string, or PACK='U', 'L', 'B' or 'Q'
- and SYM='N', or PACK='C' and SYM='N' and either KL
- not equal to 0 or N not equal to M, or PACK='R' and
- SYM='N', and either KU not equal to 0 or N not equal
-
- to M
- -26 => LDA too small
- 1 => Error return from SLATM1 (computing D)
- 2 => Cannot scale diagonal to DMAX (max. entry is 0)
- 3 => Error return from SLATM1 (computing DL)
- 4 => Error return from SLATM1 (computing DR)
- 5 => ANORM is positive, but matrix constructed prior to
- attempting to scale it to have norm ANORM, is zero
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- --dl;
- --dr;
- --ipivot;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iwork;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*m == 0 || *n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else {
- idist = -1;
- }
-
-/* Decode SYM */
-
- if (lsame_(sym, "S")) {
- isym = 0;
- } else if (lsame_(sym, "N")) {
- isym = 1;
- } else if (lsame_(sym, "H")) {
- isym = 0;
- } else {
- isym = -1;
- }
-
-/* Decode RSIGN */
-
- if (lsame_(rsign, "F")) {
- irsign = 0;
- } else if (lsame_(rsign, "T")) {
- irsign = 1;
- } else {
- irsign = -1;
- }
-
-/* Decode PIVTNG */
-
- if (lsame_(pivtng, "N")) {
- ipvtng = 0;
- } else if (lsame_(pivtng, " ")) {
- ipvtng = 0;
- } else if (lsame_(pivtng, "L")) {
- ipvtng = 1;
- npvts = *m;
- } else if (lsame_(pivtng, "R")) {
- ipvtng = 2;
- npvts = *n;
- } else if (lsame_(pivtng, "B")) {
- ipvtng = 3;
- npvts = min(*n,*m);
- } else if (lsame_(pivtng, "F")) {
- ipvtng = 3;
- npvts = min(*n,*m);
- } else {
- ipvtng = -1;
- }
-
-/* Decode GRADE */
-
- if (lsame_(grade, "N")) {
- igrade = 0;
- } else if (lsame_(grade, "L")) {
- igrade = 1;
- } else if (lsame_(grade, "R")) {
- igrade = 2;
- } else if (lsame_(grade, "B")) {
- igrade = 3;
- } else if (lsame_(grade, "E")) {
- igrade = 4;
- } else if (lsame_(grade, "H") || lsame_(grade, "S")) {
- igrade = 5;
- } else {
- igrade = -1;
- }
-
-/* Decode PACK */
-
- if (lsame_(pack, "N")) {
- ipack = 0;
- } else if (lsame_(pack, "U")) {
- ipack = 1;
- } else if (lsame_(pack, "L")) {
- ipack = 2;
- } else if (lsame_(pack, "C")) {
- ipack = 3;
- } else if (lsame_(pack, "R")) {
- ipack = 4;
- } else if (lsame_(pack, "B")) {
- ipack = 5;
- } else if (lsame_(pack, "Q")) {
- ipack = 6;
- } else if (lsame_(pack, "Z")) {
- ipack = 7;
- } else {
- ipack = -1;
- }
-
-/* Set certain internal parameters */
-
- mnmin = min(*m,*n);
-/* Computing MIN */
- i__1 = *kl, i__2 = *m - 1;
- kll = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *ku, i__2 = *n - 1;
- kuu = min(i__1,i__2);
-
-/* If inv(DL) is used, check to see if DL has a zero entry. */
-
- dzero = FALSE_;
- if (igrade == 4 && *model == 0) {
- i__1 = *m;
- for (i = 1; i <= i__1; ++i) {
- if (dl[i] == 0.f) {
- dzero = TRUE_;
- }
-/* L10: */
- }
- }
-
-/* Check values in IPIVOT */
-
- badpvt = FALSE_;
- if (ipvtng > 0) {
- i__1 = npvts;
- for (j = 1; j <= i__1; ++j) {
- if (ipivot[j] <= 0 || ipivot[j] > npvts) {
- badpvt = TRUE_;
- }
-/* L20: */
- }
- }
-
-/* Set INFO if an error */
-
- if (*m < 0) {
- *info = -1;
- } else if (*m != *n && isym == 0) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (idist == -1) {
- *info = -3;
- } else if (isym == -1) {
- *info = -5;
- } else if (*mode < -6 || *mode > 6) {
- *info = -7;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && *cond < 1.f) {
- *info = -8;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && irsign == -1) {
- *info = -10;
- } else if (igrade == -1 || igrade == 4 && *m != *n || igrade >= 1 &&
- igrade <= 4 && isym == 0) {
- *info = -11;
- } else if (igrade == 4 && dzero) {
- *info = -12;
- } else if ((igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5) && (
- *model < -6 || *model > 6)) {
- *info = -13;
- } else if ((igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5) && (
- *model != -6 && *model != 0 && *model != 6) && *condl < 1.f) {
- *info = -14;
- } else if ((igrade == 2 || igrade == 3) && (*moder < -6 || *moder > 6)) {
- *info = -16;
- } else if ((igrade == 2 || igrade == 3) && (*moder != -6 && *moder != 0 &&
- *moder != 6) && *condr < 1.f) {
- *info = -17;
- } else if (ipvtng == -1 || ipvtng == 3 && *m != *n || (ipvtng == 1 ||
- ipvtng == 2) && isym == 0) {
- *info = -18;
- } else if (ipvtng != 0 && badpvt) {
- *info = -19;
- } else if (*kl < 0) {
- *info = -20;
- } else if (*ku < 0 || isym == 0 && *kl != *ku) {
- *info = -21;
- } else if (*sparse < 0.f || *sparse > 1.f) {
- *info = -22;
- } else if (ipack == -1 || (ipack == 1 || ipack == 2 || ipack == 5 ||
- ipack == 6) && isym == 1 || ipack == 3 && isym == 1 && (*kl != 0
- || *m != *n) || ipack == 4 && isym == 1 && (*ku != 0 || *m != *n))
- {
- *info = -24;
- } else if ((ipack == 0 || ipack == 1 || ipack == 2) && *lda < max(1,*m) ||
- (ipack == 3 || ipack == 4) && *lda < 1 || (ipack == 5 || ipack ==
- 6) && *lda < kuu + 1 || ipack == 7 && *lda < kll + kuu + 1) {
- *info = -26;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("SLATMR", &i__1);
- return 0;
- }
-
-/* Decide if we can pivot consistently */
-
- fulbnd = FALSE_;
- if (kuu == *n - 1 && kll == *m - 1) {
- fulbnd = TRUE_;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L30: */
- }
-
- iseed[4] = (iseed[4] / 2 << 1) + 1;
-
-/* 2) Set up D, DL, and DR, if indicated.
-
- Compute D according to COND and MODE */
-
- slatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, info);
- if (*info != 0) {
- *info = 1;
- return 0;
- }
- if (*mode != 0 && *mode != -6 && *mode != 6) {
-
-/* Scale by DMAX */
-
- temp = dabs(d[1]);
- i__1 = mnmin;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- r__2 = temp, r__3 = (r__1 = d[i], dabs(r__1));
- temp = dmax(r__2,r__3);
-/* L40: */
- }
- if (temp == 0.f && *dmax__ != 0.f) {
- *info = 2;
- return 0;
- }
- if (temp != 0.f) {
- alpha = *dmax__ / temp;
- } else {
- alpha = 1.f;
- }
- i__1 = mnmin;
- for (i = 1; i <= i__1; ++i) {
- d[i] = alpha * d[i];
-/* L50: */
- }
-
- }
-
-/* Compute DL if grading set */
-
- if (igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5) {
- slatm1_(model, condl, &c__0, &idist, &iseed[1], &dl[1], m, info);
- if (*info != 0) {
- *info = 3;
- return 0;
- }
- }
-
-/* Compute DR if grading set */
-
- if (igrade == 2 || igrade == 3) {
- slatm1_(moder, condr, &c__0, &idist, &iseed[1], &dr[1], n, info);
- if (*info != 0) {
- *info = 4;
- return 0;
- }
- }
-
-/* 3) Generate IWORK if pivoting */
-
- if (ipvtng > 0) {
- i__1 = npvts;
- for (i = 1; i <= i__1; ++i) {
- iwork[i] = i;
-/* L60: */
- }
- if (fulbnd) {
- i__1 = npvts;
- for (i = 1; i <= i__1; ++i) {
- k = ipivot[i];
- j = iwork[i];
- iwork[i] = iwork[k];
- iwork[k] = j;
-/* L70: */
- }
- } else {
- for (i = npvts; i >= 1; --i) {
- k = ipivot[i];
- j = iwork[i];
- iwork[i] = iwork[k];
- iwork[k] = j;
-/* L80: */
- }
- }
- }
-
-/* 4) Generate matrices for each kind of PACKing
- Always sweep matrix columnwise (if symmetric, upper
- half only) so that matrix generated does not depend
- on PACK */
-
- if (fulbnd) {
-
-/* Use SLATM3 so matrices generated with differing PIVOTing onl
-y
- differ only in the order of their rows and/or columns. */
-
- if (ipack == 0) {
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- a[isub + jsub * a_dim1] = temp;
- a[jsub + isub * a_dim1] = temp;
-/* L90: */
- }
-/* L100: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- a[isub + jsub * a_dim1] = temp;
-/* L110: */
- }
-/* L120: */
- }
- }
-
- } else if (ipack == 1) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mnsub + mxsub * a_dim1] = temp;
- if (mnsub != mxsub) {
- a[mxsub + mnsub * a_dim1] = 0.f;
- }
-/* L130: */
- }
-/* L140: */
- }
-
- } else if (ipack == 2) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mxsub + mnsub * a_dim1] = temp;
- if (mnsub != mxsub) {
- a[mnsub + mxsub * a_dim1] = 0.f;
- }
-/* L150: */
- }
-/* L160: */
- }
-
- } else if (ipack == 3) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
-
-/* Compute K = location of (ISUB,JSUB) ent
-ry in packed
- array */
-
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- k = mxsub * (mxsub - 1) / 2 + mnsub;
-
-/* Convert K to (IISUB,JJSUB) location */
-
- jjsub = (k - 1) / *lda + 1;
- iisub = k - *lda * (jjsub - 1);
-
- a[iisub + jjsub * a_dim1] = temp;
-/* L170: */
- }
-/* L180: */
- }
-
- } else if (ipack == 4) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
-
-/* Compute K = location of (I,J) entry in
-packed array */
-
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mnsub == 1) {
- k = mxsub;
- } else {
- k = *n * (*n + 1) / 2 - (*n - mnsub + 1) * (*n -
- mnsub + 2) / 2 + mxsub - mnsub + 1;
- }
-
-/* Convert K to (IISUB,JJSUB) location */
-
- jjsub = (k - 1) / *lda + 1;
- iisub = k - *lda * (jjsub - 1);
-
- a[iisub + jjsub * a_dim1] = temp;
-/* L190: */
- }
-/* L200: */
- }
-
- } else if (ipack == 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- if (i < 1) {
- a[j - i + 1 + (i + *n) * a_dim1] = 0.f;
- } else {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mxsub - mnsub + 1 + mnsub * a_dim1] = temp;
- }
-/* L210: */
- }
-/* L220: */
- }
-
- } else if (ipack == 6) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mnsub - mxsub + kuu + 1 + mxsub * a_dim1] = temp;
-/* L230: */
- }
-/* L240: */
- }
-
- } else if (ipack == 7) {
-
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- a[mnsub - mxsub + kuu + 1 + mxsub * a_dim1] = temp;
- if (i < 1) {
- a[j - i + 1 + kuu + (i + *n) * a_dim1] = 0.f;
- }
- if (i >= 1 && mnsub != mxsub) {
- a[mxsub - mnsub + 1 + kuu + mnsub * a_dim1] =
- temp;
- }
-/* L250: */
- }
-/* L260: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j + kll;
- for (i = j - kuu; i <= i__2; ++i) {
- temp = slatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- a[isub - jsub + kuu + 1 + jsub * a_dim1] = temp;
-/* L270: */
- }
-/* L280: */
- }
- }
-
- }
-
- } else {
-
-/* Use SLATM2 */
-
- if (ipack == 0) {
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = slatm2_(m, n, &i, &j, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- a[j + i * a_dim1] = a[i + j * a_dim1];
-/* L290: */
- }
-/* L300: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = slatm2_(m, n, &i, &j, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
-/* L310: */
- }
-/* L320: */
- }
- }
-
- } else if (ipack == 1) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = slatm2_(m, n, &i, &j, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- if (i != j) {
- a[j + i * a_dim1] = 0.f;
- }
-/* L330: */
- }
-/* L340: */
- }
-
- } else if (ipack == 2) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- a[j + i * a_dim1] = slatm2_(m, n, &i, &j, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- if (i != j) {
- a[i + j * a_dim1] = 0.f;
- }
-/* L350: */
- }
-/* L360: */
- }
-
- } else if (ipack == 3) {
-
- isub = 0;
- jsub = 1;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- ++isub;
- if (isub > *lda) {
- isub = 1;
- ++jsub;
- }
- a[isub + jsub * a_dim1] = slatm2_(m, n, &i, &j, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[1],
- &ipvtng, &iwork[1], sparse);
-/* L370: */
- }
-/* L380: */
- }
-
- } else if (ipack == 4) {
-
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
-
-/* Compute K = location of (I,J) en
-try in packed array */
-
- if (i == 1) {
- k = j;
- } else {
- k = *n * (*n + 1) / 2 - (*n - i + 1) * (*n - i +
- 2) / 2 + j - i + 1;
- }
-
-/* Convert K to (ISUB,JSUB) locatio
-n */
-
- jsub = (k - 1) / *lda + 1;
- isub = k - *lda * (jsub - 1);
-
- a[isub + jsub * a_dim1] = slatm2_(m, n, &i, &j, kl,
- ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],
- &dr[1], &ipvtng, &iwork[1], sparse);
-/* L390: */
- }
-/* L400: */
- }
- } else {
- isub = 0;
- jsub = 1;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j; i <= i__2; ++i) {
- ++isub;
- if (isub > *lda) {
- isub = 1;
- ++jsub;
- }
- a[isub + jsub * a_dim1] = slatm2_(m, n, &i, &j, kl,
- ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],
- &dr[1], &ipvtng, &iwork[1], sparse);
-/* L410: */
- }
-/* L420: */
- }
- }
-
- } else if (ipack == 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- if (i < 1) {
- a[j - i + 1 + (i + *n) * a_dim1] = 0.f;
- } else {
- a[j - i + 1 + i * a_dim1] = slatm2_(m, n, &i, &j, kl,
- ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],
- &dr[1], &ipvtng, &iwork[1], sparse);
- }
-/* L430: */
- }
-/* L440: */
- }
-
- } else if (ipack == 6) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- a[i - j + kuu + 1 + j * a_dim1] = slatm2_(m, n, &i, &j,
- kl, ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],
- &dr[1], &ipvtng, &iwork[1], sparse);
-/* L450: */
- }
-/* L460: */
- }
-
- } else if (ipack == 7) {
-
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- a[i - j + kuu + 1 + j * a_dim1] = slatm2_(m, n, &i, &
- j, kl, ku, &idist, &iseed[1], &d[1], &igrade,
- &dl[1], &dr[1], &ipvtng, &iwork[1], sparse);
- if (i < 1) {
- a[j - i + 1 + kuu + (i + *n) * a_dim1] = 0.f;
- }
- if (i >= 1 && i != j) {
- a[j - i + 1 + kuu + i * a_dim1] = a[i - j + kuu +
- 1 + j * a_dim1];
- }
-/* L470: */
- }
-/* L480: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j + kll;
- for (i = j - kuu; i <= i__2; ++i) {
- a[i - j + kuu + 1 + j * a_dim1] = slatm2_(m, n, &i, &
- j, kl, ku, &idist, &iseed[1], &d[1], &igrade,
- &dl[1], &dr[1], &ipvtng, &iwork[1], sparse);
-/* L490: */
- }
-/* L500: */
- }
- }
-
- }
-
- }
-
-/* 5) Scaling the norm */
-
- if (ipack == 0) {
- onorm = slange_("M", m, n, &a[a_offset], lda, tempa);
- } else if (ipack == 1) {
- onorm = slansy_("M", "U", n, &a[a_offset], lda, tempa);
- } else if (ipack == 2) {
- onorm = slansy_("M", "L", n, &a[a_offset], lda, tempa);
- } else if (ipack == 3) {
- onorm = slansp_("M", "U", n, &a[a_offset], tempa);
- } else if (ipack == 4) {
- onorm = slansp_("M", "L", n, &a[a_offset], tempa);
- } else if (ipack == 5) {
- onorm = slansb_("M", "L", n, &kll, &a[a_offset], lda, tempa);
- } else if (ipack == 6) {
- onorm = slansb_("M", "U", n, &kuu, &a[a_offset], lda, tempa);
- } else if (ipack == 7) {
- onorm = slangb_("M", n, &kll, &kuu, &a[a_offset], lda, tempa);
- }
-
- if (*anorm >= 0.f) {
-
- if (*anorm > 0.f && onorm == 0.f) {
-
-/* Desired scaling impossible */
-
- *info = 5;
- return 0;
-
- } else if (*anorm > 1.f && onorm < 1.f || *anorm < 1.f && onorm > 1.f)
- {
-
-/* Scale carefully to avoid over / underflow */
-
- if (ipack <= 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- r__1 = 1.f / onorm;
- sscal_(m, &r__1, &a[j * a_dim1 + 1], &c__1);
- sscal_(m, anorm, &a[j * a_dim1 + 1], &c__1);
-/* L510: */
- }
-
- } else if (ipack == 3 || ipack == 4) {
-
- i__1 = *n * (*n + 1) / 2;
- r__1 = 1.f / onorm;
- sscal_(&i__1, &r__1, &a[a_offset], &c__1);
- i__1 = *n * (*n + 1) / 2;
- sscal_(&i__1, anorm, &a[a_offset], &c__1);
-
- } else if (ipack >= 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = kll + kuu + 1;
- r__1 = 1.f / onorm;
- sscal_(&i__2, &r__1, &a[j * a_dim1 + 1], &c__1);
- i__2 = kll + kuu + 1;
- sscal_(&i__2, anorm, &a[j * a_dim1 + 1], &c__1);
-/* L520: */
- }
-
- }
-
- } else {
-
-/* Scale straightforwardly */
-
- if (ipack <= 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- r__1 = *anorm / onorm;
- sscal_(m, &r__1, &a[j * a_dim1 + 1], &c__1);
-/* L530: */
- }
-
- } else if (ipack == 3 || ipack == 4) {
-
- i__1 = *n * (*n + 1) / 2;
- r__1 = *anorm / onorm;
- sscal_(&i__1, &r__1, &a[a_offset], &c__1);
-
- } else if (ipack >= 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = kll + kuu + 1;
- r__1 = *anorm / onorm;
- sscal_(&i__2, &r__1, &a[j * a_dim1 + 1], &c__1);
-/* L540: */
- }
- }
-
- }
-
- }
-
-/* End of SLATMR */
-
- return 0;
-} /* slatmr_ */
-
diff --git a/TESTING/MATGEN/slatms.c b/TESTING/MATGEN/slatms.c
deleted file mode 100644
index 2bf2342..0000000
--- a/TESTING/MATGEN/slatms.c
+++ /dev/null
@@ -1,1337 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__1 = 1;
-static real c_b22 = 0.f;
-static logical c_true = TRUE_;
-static logical c_false = FALSE_;
-
-/* Subroutine */ int slatms_(integer *m, integer *n, char *dist, integer *
- iseed, char *sym, real *d, integer *mode, real *cond, real *dmax__,
- integer *kl, integer *ku, char *pack, real *a, integer *lda, real *
- work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
- real r__1, r__2, r__3;
- logical L__1;
-
- /* Builtin functions */
- double cos(doublereal), sin(doublereal);
-
- /* Local variables */
- static integer ilda, icol;
- static real temp;
- static integer irow, isym;
- static real c;
- static integer i, j, k;
- static real s, alpha, angle;
- static integer ipack, ioffg;
- extern logical lsame_(char *, char *);
- static integer iinfo;
- extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *);
- static integer idist, mnmin, iskew;
- static real extra, dummy;
- extern /* Subroutine */ int scopy_(integer *, real *, integer *, real *,
- integer *), slatm1_(integer *, real *, integer *, integer *,
- integer *, real *, integer *, integer *);
- static integer ic, jc, nc, il, iendch, ir, jr, ipackg, mr;
- extern /* Subroutine */ int slagge_(integer *, integer *, integer *,
- integer *, real *, real *, integer *, integer *, real *, integer *
- );
- static integer minlda;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- extern doublereal slarnd_(integer *, integer *);
- static logical iltemp, givens;
- static integer ioffst, irsign;
- extern /* Subroutine */ int slartg_(real *, real *, real *, real *, real *
- ), slaset_(char *, integer *, integer *, real *, real *, real *,
- integer *), slagsy_(integer *, integer *, real *, real *,
- integer *, integer *, real *, integer *), slarot_(logical *,
- logical *, logical *, integer *, real *, real *, real *, integer *
- , real *, real *);
- static logical ilextr, topdwn;
- static integer ir1, ir2, isympk, jch, llb, jkl, jku, uub;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- SLATMS generates random matrices with specified singular values
- (or symmetric/hermitian with specified eigenvalues)
- for testing LAPACK programs.
-
- SLATMS operates by applying the following sequence of
- operations:
-
- Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX, and SYM
- as described below.
-
- Generate a matrix with the appropriate band structure, by one
- of two methods:
-
- Method A:
- Generate a dense M x N matrix by multiplying D on the left
- and the right by random unitary matrices, then:
-
- Reduce the bandwidth according to KL and KU, using
- Householder transformations.
-
- Method B:
- Convert the bandwidth-0 (i.e., diagonal) matrix to a
- bandwidth-1 matrix using Givens rotations, "chasing"
- out-of-band elements back, much as in QR; then
- convert the bandwidth-1 to a bandwidth-2 matrix, etc.
- Note that for reasonably small bandwidths (relative to
- M and N) this requires less storage, as a dense matrix
- is not generated. Also, for symmetric matrices, only
- one triangle is generated.
-
- Method A is chosen if the bandwidth is a large fraction of the
- order of the matrix, and LDA is at least M (so a dense
- matrix can be stored.) Method B is chosen if the bandwidth
-
- is small (< 1/2 N for symmetric, < .3 N+M for
- non-symmetric), or LDA is less than M and not less than the
-
- bandwidth.
-
- Pack the matrix if desired. Options specified by PACK are:
- no packing
- zero out upper half (if symmetric)
- zero out lower half (if symmetric)
- store the upper half columnwise (if symmetric or upper
- triangular)
- store the lower half columnwise (if symmetric or lower
- triangular)
- store the lower triangle in banded format (if symmetric
- or lower triangular)
- store the upper triangle in banded format (if symmetric
- or upper triangular)
- store the entire matrix in banded format
- If Method B is chosen, and band format is specified, then the
- matrix will be generated in the band format, so no repacking
-
- will be necessary.
-
- Arguments
- =========
-
- M - INTEGER
- The number of rows of A. Not modified.
-
- N - INTEGER
- The number of columns of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate the random eigen-/singular values.
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to SLATMS
- to continue the same random number sequence.
- Changed on exit.
-
- SYM - CHARACTER*1
- If SYM='S' or 'H', the generated matrix is symmetric, with
- eigenvalues specified by D, COND, MODE, and DMAX; they
- may be positive, negative, or zero.
- If SYM='P', the generated matrix is symmetric, with
- eigenvalues (= singular values) specified by D, COND,
- MODE, and DMAX; they will not be negative.
- If SYM='N', the generated matrix is nonsymmetric, with
- singular values specified by D, COND, MODE, and DMAX;
- they will not be negative.
- Not modified.
-
- D - REAL array, dimension ( MIN( M , N ) )
- This array is used to specify the singular values or
- eigenvalues of A (see SYM, above.) If MODE=0, then D is
- assumed to contain the singular/eigenvalues, otherwise
- they will be computed according to MODE, COND, and DMAX,
- and placed in D.
- Modified if MODE is nonzero.
-
- MODE - INTEGER
- On entry this describes how the singular/eigenvalues are to
-
- be specified:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- If SYM='S' or 'H', and MODE is neither 0, 6, nor -6, then
- the elements of D will also be multiplied by a random
- sign (i.e., +1 or -1.)
- Not modified.
-
- COND - REAL
- On entry, this is used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - REAL
- If MODE is neither -6, 0 nor 6, the contents of D, as
- computed according to MODE and COND, will be scaled by
- DMAX / max(abs(D(i))); thus, the maximum absolute eigen- or
-
- singular value (which is to say the norm) will be abs(DMAX).
-
- Note that DMAX need not be positive: if DMAX is negative
- (or zero), D will be scaled by a negative number (or zero).
-
- Not modified.
-
- KL - INTEGER
- This specifies the lower bandwidth of the matrix. For
- example, KL=0 implies upper triangular, KL=1 implies upper
- Hessenberg, and KL being at least M-1 means that the matrix
-
- has full lower bandwidth. KL must equal KU if the matrix
- is symmetric.
- Not modified.
-
- KU - INTEGER
- This specifies the upper bandwidth of the matrix. For
- example, KU=0 implies lower triangular, KU=1 implies lower
- Hessenberg, and KU being at least N-1 means that the matrix
-
- has full upper bandwidth. KL must equal KU if the matrix
- is symmetric.
- Not modified.
-
- PACK - CHARACTER*1
- This specifies packing of matrix as follows:
- 'N' => no packing
- 'U' => zero out all subdiagonal entries (if symmetric)
- 'L' => zero out all superdiagonal entries (if symmetric)
- 'C' => store the upper triangle columnwise
- (only if the matrix is symmetric or upper triangular)
-
- 'R' => store the lower triangle columnwise
- (only if the matrix is symmetric or lower triangular)
-
- 'B' => store the lower triangle in band storage scheme
- (only if matrix symmetric or lower triangular)
- 'Q' => store the upper triangle in band storage scheme
- (only if matrix symmetric or upper triangular)
- 'Z' => store the entire matrix in band storage scheme
- (pivoting can be provided for by using this
- option to store A in the trailing rows of
- the allocated storage)
-
- Using these options, the various LAPACK packed and banded
- storage schemes can be obtained:
- GB - use 'Z'
- PB, SB or TB - use 'B' or 'Q'
- PP, SP or TP - use 'C' or 'R'
-
- If two calls to SLATMS differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
- Not modified.
-
- A - REAL array, dimension ( LDA, N )
- On exit A is the desired test matrix. A is first generated
-
- in full (unpacked) form, and then packed, if so specified
- by PACK. Thus, the first M elements of the first N
- columns will always be modified. If PACK specifies a
- packed or banded storage scheme, all LDA elements of the
- first N columns will be modified; the elements of the
- array which do not correspond to elements of the generated
- matrix are set to zero.
- Modified.
-
- LDA - INTEGER
- LDA specifies the first dimension of A as declared in the
- calling program. If PACK='N', 'U', 'L', 'C', or 'R', then
- LDA must be at least M. If PACK='B' or 'Q', then LDA must
- be at least MIN( KL, M-1) (which is equal to MIN(KU,N-1)).
- If PACK='Z', LDA must be large enough to hold the packed
- array: MIN( KU, N-1) + MIN( KL, M-1) + 1.
- Not modified.
-
- WORK - REAL array, dimension ( 3*MAX( N , M ) )
- Workspace.
- Modified.
-
- INFO - INTEGER
- Error code. On exit, INFO will be set to one of the
- following values:
- 0 => normal return
- -1 => M negative or unequal to N and SYM='S', 'H', or 'P'
- -2 => N negative
- -3 => DIST illegal string
- -5 => SYM illegal string
- -7 => MODE not in range -6 to 6
- -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -10 => KL negative
- -11 => KU negative, or SYM='S' or 'H' and KU not equal to KL
-
- -12 => PACK illegal string, or PACK='U' or 'L', and SYM='N';
-
- or PACK='C' or 'Q' and SYM='N' and KL is not zero;
- or PACK='R' or 'B' and SYM='N' and KU is not zero;
- or PACK='U', 'L', 'C', 'R', 'B', or 'Q', and M is not
-
- N.
- -14 => LDA is less than M, or PACK='Z' and LDA is less than
-
- MIN(KU,N-1) + MIN(KL,M-1) + 1.
- 1 => Error return from SLATM1
- 2 => Cannot scale to DMAX (max. sing. value is 0)
- 3 => Error return from SLAGGE or SLAGSY
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --work;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*m == 0 || *n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else {
- idist = -1;
- }
-
-/* Decode SYM */
-
- if (lsame_(sym, "N")) {
- isym = 1;
- irsign = 0;
- } else if (lsame_(sym, "P")) {
- isym = 2;
- irsign = 0;
- } else if (lsame_(sym, "S")) {
- isym = 2;
- irsign = 1;
- } else if (lsame_(sym, "H")) {
- isym = 2;
- irsign = 1;
- } else {
- isym = -1;
- }
-
-/* Decode PACK */
-
- isympk = 0;
- if (lsame_(pack, "N")) {
- ipack = 0;
- } else if (lsame_(pack, "U")) {
- ipack = 1;
- isympk = 1;
- } else if (lsame_(pack, "L")) {
- ipack = 2;
- isympk = 1;
- } else if (lsame_(pack, "C")) {
- ipack = 3;
- isympk = 2;
- } else if (lsame_(pack, "R")) {
- ipack = 4;
- isympk = 3;
- } else if (lsame_(pack, "B")) {
- ipack = 5;
- isympk = 3;
- } else if (lsame_(pack, "Q")) {
- ipack = 6;
- isympk = 2;
- } else if (lsame_(pack, "Z")) {
- ipack = 7;
- } else {
- ipack = -1;
- }
-
-/* Set certain internal parameters */
-
- mnmin = min(*m,*n);
-/* Computing MIN */
- i__1 = *kl, i__2 = *m - 1;
- llb = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *ku, i__2 = *n - 1;
- uub = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *m, i__2 = *n + llb;
- mr = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *n, i__2 = *m + uub;
- nc = min(i__1,i__2);
-
- if (ipack == 5 || ipack == 6) {
- minlda = uub + 1;
- } else if (ipack == 7) {
- minlda = llb + uub + 1;
- } else {
- minlda = *m;
- }
-
-/* Use Givens rotation method if bandwidth small enough,
- or if LDA is too small to store the matrix unpacked. */
-
- givens = FALSE_;
- if (isym == 1) {
-/* Computing MAX */
- i__1 = 1, i__2 = mr + nc;
- if ((real) (llb + uub) < (real) max(i__1,i__2) * .3f) {
- givens = TRUE_;
- }
- } else {
- if (llb << 1 < *m) {
- givens = TRUE_;
- }
- }
- if (*lda < *m && *lda >= minlda) {
- givens = TRUE_;
- }
-
-/* Set INFO if an error */
-
- if (*m < 0) {
- *info = -1;
- } else if (*m != *n && isym != 1) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (idist == -1) {
- *info = -3;
- } else if (isym == -1) {
- *info = -5;
- } else if (abs(*mode) > 6) {
- *info = -7;
- } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.f) {
- *info = -8;
- } else if (*kl < 0) {
- *info = -10;
- } else if (*ku < 0 || isym != 1 && *kl != *ku) {
- *info = -11;
- } else if (ipack == -1 || isympk == 1 && isym == 1 || isympk == 2 && isym
- == 1 && *kl > 0 || isympk == 3 && isym == 1 && *ku > 0 || isympk
- != 0 && *m != *n) {
- *info = -12;
- } else if (*lda < max(1,minlda)) {
- *info = -14;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("SLATMS", &i__1);
- return 0;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L10: */
- }
-
- if (iseed[4] % 2 != 1) {
- ++iseed[4];
- }
-
-/* 2) Set up D if indicated.
-
- Compute D according to COND and MODE */
-
- slatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, &iinfo);
- if (iinfo != 0) {
- *info = 1;
- return 0;
- }
-
-/* Choose Top-Down if D is (apparently) increasing,
- Bottom-Up if D is (apparently) decreasing. */
-
- if (dabs(d[1]) <= (r__1 = d[mnmin], dabs(r__1))) {
- topdwn = TRUE_;
- } else {
- topdwn = FALSE_;
- }
-
- if (*mode != 0 && abs(*mode) != 6) {
-
-/* Scale by DMAX */
-
- temp = dabs(d[1]);
- i__1 = mnmin;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- r__2 = temp, r__3 = (r__1 = d[i], dabs(r__1));
- temp = dmax(r__2,r__3);
-/* L20: */
- }
-
- if (temp > 0.f) {
- alpha = *dmax__ / temp;
- } else {
- *info = 2;
- return 0;
- }
-
- sscal_(&mnmin, &alpha, &d[1], &c__1);
-
- }
-
-/* 3) Generate Banded Matrix using Givens rotations.
- Also the special case of UUB=LLB=0
-
- Compute Addressing constants to cover all
- storage formats. Whether GE, SY, GB, or SB,
- upper or lower triangle or both,
- the (i,j)-th element is in
- A( i - ISKEW*j + IOFFST, j ) */
-
- if (ipack > 4) {
- ilda = *lda - 1;
- iskew = 1;
- if (ipack > 5) {
- ioffst = uub + 1;
- } else {
- ioffst = 1;
- }
- } else {
- ilda = *lda;
- iskew = 0;
- ioffst = 0;
- }
-
-/* IPACKG is the format that the matrix is generated in. If this is
- different from IPACK, then the matrix must be repacked at the
- end. It also signals how to compute the norm, for scaling. */
-
- ipackg = 0;
- slaset_("Full", lda, n, &c_b22, &c_b22, &a[a_offset], lda);
-
-/* Diagonal Matrix -- We are done, unless it
- is to be stored SP/PP/TP (PACK='R' or 'C') */
-
- if (llb == 0 && uub == 0) {
- i__1 = ilda + 1;
- scopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffst + a_dim1], &i__1);
- if (ipack <= 2 || ipack >= 5) {
- ipackg = ipack;
- }
-
- } else if (givens) {
-
-/* Check whether to use Givens rotations,
- Householder transformations, or nothing. */
-
- if (isym == 1) {
-
-/* Non-symmetric -- A = U D V */
-
- if (ipack > 4) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
-
- i__1 = ilda + 1;
- scopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffst + a_dim1], &
- i__1);
-
- if (topdwn) {
- jkl = 0;
- i__1 = uub;
- for (jku = 1; jku <= i__1; ++jku) {
-
-/* Transform from bandwidth JKL, JKU-1 to
-JKL, JKU
-
- Last row actually rotated is M
- Last column actually rotated is MIN( M+
-JKU, N )
-
- Computing MIN */
- i__3 = *m + jku;
- i__2 = min(i__3,*n) + jkl - 1;
- for (jr = 1; jr <= i__2; ++jr) {
- extra = 0.f;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- c = cos(angle);
- s = sin(angle);
-/* Computing MAX */
- i__3 = 1, i__4 = jr - jkl;
- icol = max(i__3,i__4);
- if (jr < *m) {
-/* Computing MIN */
- i__3 = *n, i__4 = jr + jku;
- il = min(i__3,i__4) + 1 - icol;
- L__1 = jr > jkl;
- slarot_(&c_true, &L__1, &c_false, &il, &c, &s, &a[
- jr - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &extra, &dummy);
- }
-
-/* Chase "EXTRA" back up */
-
- ir = jr;
- ic = icol;
- i__3 = -jkl - jku;
- for (jch = jr - jkl; i__3 < 0 ? jch >= 1 : jch <= 1;
- jch += i__3) {
- if (ir < *m) {
- slartg_(&a[ir + 1 - iskew * (ic + 1) + ioffst
- + (ic + 1) * a_dim1], &extra, &c, &s,
- &dummy);
- }
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jku;
- irow = max(i__4,i__5);
- il = ir + 2 - irow;
- temp = 0.f;
- iltemp = jch > jku;
- r__1 = -(doublereal)s;
- slarot_(&c_false, &iltemp, &c_true, &il, &c, &
- r__1, &a[irow - iskew * ic + ioffst + ic *
- a_dim1], &ilda, &temp, &extra);
- if (iltemp) {
- slartg_(&a[irow + 1 - iskew * (ic + 1) +
- ioffst + (ic + 1) * a_dim1], &temp, &
- c, &s, &dummy);
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jku - jkl;
- icol = max(i__4,i__5);
- il = ic + 2 - icol;
- extra = 0.f;
- L__1 = jch > jku + jkl;
- r__1 = -(doublereal)s;
- slarot_(&c_true, &L__1, &c_true, &il, &c, &
- r__1, &a[irow - iskew * icol + ioffst
- + icol * a_dim1], &ilda, &extra, &
- temp);
- ic = icol;
- ir = irow;
- }
-/* L30: */
- }
-/* L40: */
- }
-/* L50: */
- }
-
- jku = uub;
- i__1 = llb;
- for (jkl = 1; jkl <= i__1; ++jkl) {
-
-/* Transform from bandwidth JKL-1, JKU to
-JKL, JKU
-
- Computing MIN */
- i__3 = *n + jkl;
- i__2 = min(i__3,*m) + jku - 1;
- for (jc = 1; jc <= i__2; ++jc) {
- extra = 0.f;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- c = cos(angle);
- s = sin(angle);
-/* Computing MAX */
- i__3 = 1, i__4 = jc - jku;
- irow = max(i__3,i__4);
- if (jc < *n) {
-/* Computing MIN */
- i__3 = *m, i__4 = jc + jkl;
- il = min(i__3,i__4) + 1 - irow;
- L__1 = jc > jku;
- slarot_(&c_false, &L__1, &c_false, &il, &c, &s, &
- a[irow - iskew * jc + ioffst + jc *
- a_dim1], &ilda, &extra, &dummy);
- }
-
-/* Chase "EXTRA" back up */
-
- ic = jc;
- ir = irow;
- i__3 = -jkl - jku;
- for (jch = jc - jku; i__3 < 0 ? jch >= 1 : jch <= 1;
- jch += i__3) {
- if (ic < *n) {
- slartg_(&a[ir + 1 - iskew * (ic + 1) + ioffst
- + (ic + 1) * a_dim1], &extra, &c, &s,
- &dummy);
- }
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jkl;
- icol = max(i__4,i__5);
- il = ic + 2 - icol;
- temp = 0.f;
- iltemp = jch > jkl;
- r__1 = -(doublereal)s;
- slarot_(&c_true, &iltemp, &c_true, &il, &c, &r__1,
- &a[ir - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &temp, &extra);
- if (iltemp) {
- slartg_(&a[ir + 1 - iskew * (icol + 1) +
- ioffst + (icol + 1) * a_dim1], &temp,
- &c, &s, &dummy);
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jkl - jku;
- irow = max(i__4,i__5);
- il = ir + 2 - irow;
- extra = 0.f;
- L__1 = jch > jkl + jku;
- r__1 = -(doublereal)s;
- slarot_(&c_false, &L__1, &c_true, &il, &c, &
- r__1, &a[irow - iskew * icol + ioffst
- + icol * a_dim1], &ilda, &extra, &
- temp);
- ic = icol;
- ir = irow;
- }
-/* L60: */
- }
-/* L70: */
- }
-/* L80: */
- }
-
- } else {
-
-/* Bottom-Up -- Start at the bottom right. */
-
- jkl = 0;
- i__1 = uub;
- for (jku = 1; jku <= i__1; ++jku) {
-
-/* Transform from bandwidth JKL, JKU-1 to
-JKL, JKU
-
- First row actually rotated is M
- First column actually rotated is MIN( M
-+JKU, N )
-
- Computing MIN */
- i__2 = *m, i__3 = *n + jkl;
- iendch = min(i__2,i__3) - 1;
-/* Computing MIN */
- i__2 = *m + jku;
- i__3 = 1 - jkl;
- for (jc = min(i__2,*n) - 1; jc >= i__3; --jc) {
- extra = 0.f;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- c = cos(angle);
- s = sin(angle);
-/* Computing MAX */
- i__2 = 1, i__4 = jc - jku + 1;
- irow = max(i__2,i__4);
- if (jc > 0) {
-/* Computing MIN */
- i__2 = *m, i__4 = jc + jkl + 1;
- il = min(i__2,i__4) + 1 - irow;
- L__1 = jc + jkl < *m;
- slarot_(&c_false, &c_false, &L__1, &il, &c, &s, &
- a[irow - iskew * jc + ioffst + jc *
- a_dim1], &ilda, &dummy, &extra);
- }
-
-/* Chase "EXTRA" back down */
-
- ic = jc;
- i__2 = iendch;
- i__4 = jkl + jku;
- for (jch = jc + jkl; i__4 < 0 ? jch >= i__2 : jch <=
- i__2; jch += i__4) {
- ilextr = ic > 0;
- if (ilextr) {
- slartg_(&a[jch - iskew * ic + ioffst + ic *
- a_dim1], &extra, &c, &s, &dummy);
- }
- ic = max(1,ic);
-/* Computing MIN */
- i__5 = *n - 1, i__6 = jch + jku;
- icol = min(i__5,i__6);
- iltemp = jch + jku < *n;
- temp = 0.f;
- i__5 = icol + 2 - ic;
- slarot_(&c_true, &ilextr, &iltemp, &i__5, &c, &s,
- &a[jch - iskew * ic + ioffst + ic *
- a_dim1], &ilda, &extra, &temp);
- if (iltemp) {
- slartg_(&a[jch - iskew * icol + ioffst + icol
- * a_dim1], &temp, &c, &s, &dummy);
-/* Computing MIN */
- i__5 = iendch, i__6 = jch + jkl + jku;
- il = min(i__5,i__6) + 2 - jch;
- extra = 0.f;
- L__1 = jch + jkl + jku <= iendch;
- slarot_(&c_false, &c_true, &L__1, &il, &c, &s,
- &a[jch - iskew * icol + ioffst +
- icol * a_dim1], &ilda, &temp, &extra);
- ic = icol;
- }
-/* L90: */
- }
-/* L100: */
- }
-/* L110: */
- }
-
- jku = uub;
- i__1 = llb;
- for (jkl = 1; jkl <= i__1; ++jkl) {
-
-/* Transform from bandwidth JKL-1, JKU to
-JKL, JKU
-
- First row actually rotated is MIN( N+JK
-L, M )
- First column actually rotated is N
-
- Computing MIN */
- i__3 = *n, i__4 = *m + jku;
- iendch = min(i__3,i__4) - 1;
-/* Computing MIN */
- i__3 = *n + jkl;
- i__4 = 1 - jku;
- for (jr = min(i__3,*m) - 1; jr >= i__4; --jr) {
- extra = 0.f;
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- c = cos(angle);
- s = sin(angle);
-/* Computing MAX */
- i__3 = 1, i__2 = jr - jkl + 1;
- icol = max(i__3,i__2);
- if (jr > 0) {
-/* Computing MIN */
- i__3 = *n, i__2 = jr + jku + 1;
- il = min(i__3,i__2) + 1 - icol;
- L__1 = jr + jku < *n;
- slarot_(&c_true, &c_false, &L__1, &il, &c, &s, &a[
- jr - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &dummy, &extra);
- }
-
-/* Chase "EXTRA" back down */
-
- ir = jr;
- i__3 = iendch;
- i__2 = jkl + jku;
- for (jch = jr + jku; i__2 < 0 ? jch >= i__3 : jch <=
- i__3; jch += i__2) {
- ilextr = ir > 0;
- if (ilextr) {
- slartg_(&a[ir - iskew * jch + ioffst + jch *
- a_dim1], &extra, &c, &s, &dummy);
- }
- ir = max(1,ir);
-/* Computing MIN */
- i__5 = *m - 1, i__6 = jch + jkl;
- irow = min(i__5,i__6);
- iltemp = jch + jkl < *m;
- temp = 0.f;
- i__5 = irow + 2 - ir;
- slarot_(&c_false, &ilextr, &iltemp, &i__5, &c, &s,
- &a[ir - iskew * jch + ioffst + jch *
- a_dim1], &ilda, &extra, &temp);
- if (iltemp) {
- slartg_(&a[irow - iskew * jch + ioffst + jch *
- a_dim1], &temp, &c, &s, &dummy);
-/* Computing MIN */
- i__5 = iendch, i__6 = jch + jkl + jku;
- il = min(i__5,i__6) + 2 - jch;
- extra = 0.f;
- L__1 = jch + jkl + jku <= iendch;
- slarot_(&c_true, &c_true, &L__1, &il, &c, &s,
- &a[irow - iskew * jch + ioffst + jch *
- a_dim1], &ilda, &temp, &extra);
- ir = irow;
- }
-/* L120: */
- }
-/* L130: */
- }
-/* L140: */
- }
- }
-
- } else {
-
-/* Symmetric -- A = U D U' */
-
- ipackg = ipack;
- ioffg = ioffst;
-
- if (topdwn) {
-
-/* Top-Down -- Generate Upper triangle only */
-
- if (ipack >= 5) {
- ipackg = 6;
- ioffg = uub + 1;
- } else {
- ipackg = 1;
- }
- i__1 = ilda + 1;
- scopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffg + a_dim1], &
- i__1);
-
- i__1 = uub;
- for (k = 1; k <= i__1; ++k) {
- i__4 = *n - 1;
- for (jc = 1; jc <= i__4; ++jc) {
-/* Computing MAX */
- i__2 = 1, i__3 = jc - k;
- irow = max(i__2,i__3);
-/* Computing MIN */
- i__2 = jc + 1, i__3 = k + 2;
- il = min(i__2,i__3);
- extra = 0.f;
- temp = a[jc - iskew * (jc + 1) + ioffg + (jc + 1) *
- a_dim1];
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- c = cos(angle);
- s = sin(angle);
- L__1 = jc > k;
- slarot_(&c_false, &L__1, &c_true, &il, &c, &s, &a[
- irow - iskew * jc + ioffg + jc * a_dim1], &
- ilda, &extra, &temp);
-/* Computing MIN */
- i__3 = k, i__5 = *n - jc;
- i__2 = min(i__3,i__5) + 1;
- slarot_(&c_true, &c_true, &c_false, &i__2, &c, &s, &a[
- (1 - iskew) * jc + ioffg + jc * a_dim1], &
- ilda, &temp, &dummy);
-
-/* Chase EXTRA back up the matrix
-*/
-
- icol = jc;
- i__2 = -k;
- for (jch = jc - k; i__2 < 0 ? jch >= 1 : jch <= 1;
- jch += i__2) {
- slartg_(&a[jch + 1 - iskew * (icol + 1) + ioffg +
- (icol + 1) * a_dim1], &extra, &c, &s, &
- dummy);
- temp = a[jch - iskew * (jch + 1) + ioffg + (jch +
- 1) * a_dim1];
- i__3 = k + 2;
- r__1 = -(doublereal)s;
- slarot_(&c_true, &c_true, &c_true, &i__3, &c, &
- r__1, &a[(1 - iskew) * jch + ioffg + jch *
- a_dim1], &ilda, &temp, &extra);
-/* Computing MAX */
- i__3 = 1, i__5 = jch - k;
- irow = max(i__3,i__5);
-/* Computing MIN */
- i__3 = jch + 1, i__5 = k + 2;
- il = min(i__3,i__5);
- extra = 0.f;
- L__1 = jch > k;
- r__1 = -(doublereal)s;
- slarot_(&c_false, &L__1, &c_true, &il, &c, &r__1,
- &a[irow - iskew * jch + ioffg + jch *
- a_dim1], &ilda, &extra, &temp);
- icol = jch;
-/* L150: */
- }
-/* L160: */
- }
-/* L170: */
- }
-
-/* If we need lower triangle, copy from upper. No
-te that
- the order of copying is chosen to work for 'q'
- -> 'b' */
-
- if (ipack != ipackg && ipack != 3) {
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- irow = ioffst - iskew * jc;
-/* Computing MIN */
- i__2 = *n, i__3 = jc + uub;
- i__4 = min(i__2,i__3);
- for (jr = jc; jr <= i__4; ++jr) {
- a[jr + irow + jc * a_dim1] = a[jc - iskew * jr +
- ioffg + jr * a_dim1];
-/* L180: */
- }
-/* L190: */
- }
- if (ipack == 5) {
- i__1 = *n;
- for (jc = *n - uub + 1; jc <= i__1; ++jc) {
- i__4 = uub + 1;
- for (jr = *n + 2 - jc; jr <= i__4; ++jr) {
- a[jr + jc * a_dim1] = 0.f;
-/* L200: */
- }
-/* L210: */
- }
- }
- if (ipackg == 6) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
- }
- } else {
-
-/* Bottom-Up -- Generate Lower triangle only */
-
- if (ipack >= 5) {
- ipackg = 5;
- if (ipack == 6) {
- ioffg = 1;
- }
- } else {
- ipackg = 2;
- }
- i__1 = ilda + 1;
- scopy_(&mnmin, &d[1], &c__1, &a[1 - iskew + ioffg + a_dim1], &
- i__1);
-
- i__1 = uub;
- for (k = 1; k <= i__1; ++k) {
- for (jc = *n - 1; jc >= 1; --jc) {
-/* Computing MIN */
- i__4 = *n + 1 - jc, i__2 = k + 2;
- il = min(i__4,i__2);
- extra = 0.f;
- temp = a[(1 - iskew) * jc + 1 + ioffg + jc * a_dim1];
- angle = slarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663f;
- c = cos(angle);
- s = -(doublereal)sin(angle);
- L__1 = *n - jc > k;
- slarot_(&c_false, &c_true, &L__1, &il, &c, &s, &a[(1
- - iskew) * jc + ioffg + jc * a_dim1], &ilda, &
- temp, &extra);
-/* Computing MAX */
- i__4 = 1, i__2 = jc - k + 1;
- icol = max(i__4,i__2);
- i__4 = jc + 2 - icol;
- slarot_(&c_true, &c_false, &c_true, &i__4, &c, &s, &a[
- jc - iskew * icol + ioffg + icol * a_dim1], &
- ilda, &dummy, &temp);
-
-/* Chase EXTRA back down the matrix
- */
-
- icol = jc;
- i__4 = *n - 1;
- i__2 = k;
- for (jch = jc + k; i__2 < 0 ? jch >= i__4 : jch <=
- i__4; jch += i__2) {
- slartg_(&a[jch - iskew * icol + ioffg + icol *
- a_dim1], &extra, &c, &s, &dummy);
- temp = a[(1 - iskew) * jch + 1 + ioffg + jch *
- a_dim1];
- i__3 = k + 2;
- slarot_(&c_true, &c_true, &c_true, &i__3, &c, &s,
- &a[jch - iskew * icol + ioffg + icol *
- a_dim1], &ilda, &extra, &temp);
-/* Computing MIN */
- i__3 = *n + 1 - jch, i__5 = k + 2;
- il = min(i__3,i__5);
- extra = 0.f;
- L__1 = *n - jch > k;
- slarot_(&c_false, &c_true, &L__1, &il, &c, &s, &a[
- (1 - iskew) * jch + ioffg + jch * a_dim1],
- &ilda, &temp, &extra);
- icol = jch;
-/* L220: */
- }
-/* L230: */
- }
-/* L240: */
- }
-
-/* If we need upper triangle, copy from lower. No
-te that
- the order of copying is chosen to work for 'b'
- -> 'q' */
-
- if (ipack != ipackg && ipack != 4) {
- for (jc = *n; jc >= 1; --jc) {
- irow = ioffst - iskew * jc;
-/* Computing MAX */
- i__2 = 1, i__4 = jc - uub;
- i__1 = max(i__2,i__4);
- for (jr = jc; jr >= i__1; --jr) {
- a[jr + irow + jc * a_dim1] = a[jc - iskew * jr +
- ioffg + jr * a_dim1];
-/* L250: */
- }
-/* L260: */
- }
- if (ipack == 6) {
- i__1 = uub;
- for (jc = 1; jc <= i__1; ++jc) {
- i__2 = uub + 1 - jc;
- for (jr = 1; jr <= i__2; ++jr) {
- a[jr + jc * a_dim1] = 0.f;
-/* L270: */
- }
-/* L280: */
- }
- }
- if (ipackg == 5) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
- }
- }
- }
-
- } else {
-
-/* 4) Generate Banded Matrix by first
- Rotating by random Unitary matrices,
- then reducing the bandwidth using Householder
- transformations.
-
- Note: we should get here only if LDA .ge. N */
-
- if (isym == 1) {
-
-/* Non-symmetric -- A = U D V */
-
- slagge_(&mr, &nc, &llb, &uub, &d[1], &a[a_offset], lda, &iseed[1],
- &work[1], &iinfo);
- } else {
-
-/* Symmetric -- A = U D U' */
-
- slagsy_(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1], &
- iinfo);
-
- }
- if (iinfo != 0) {
- *info = 3;
- return 0;
- }
- }
-
-/* 5) Pack the matrix */
-
- if (ipack != ipackg) {
- if (ipack == 1) {
-
-/* 'U' -- Upper triangular, not packed */
-
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j + 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = 0.f;
-/* L290: */
- }
-/* L300: */
- }
-
- } else if (ipack == 2) {
-
-/* 'L' -- Lower triangular, not packed */
-
- i__1 = *m;
- for (j = 2; j <= i__1; ++j) {
- i__2 = j - 1;
- for (i = 1; i <= i__2; ++i) {
- a[i + j * a_dim1] = 0.f;
-/* L310: */
- }
-/* L320: */
- }
-
- } else if (ipack == 3) {
-
-/* 'C' -- Upper triangle packed Columnwise. */
-
- icol = 1;
- irow = 0;
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- ++irow;
- if (irow > *lda) {
- irow = 1;
- ++icol;
- }
- a[irow + icol * a_dim1] = a[i + j * a_dim1];
-/* L330: */
- }
-/* L340: */
- }
-
- } else if (ipack == 4) {
-
-/* 'R' -- Lower triangle packed Columnwise. */
-
- icol = 1;
- irow = 0;
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j; i <= i__2; ++i) {
- ++irow;
- if (irow > *lda) {
- irow = 1;
- ++icol;
- }
- a[irow + icol * a_dim1] = a[i + j * a_dim1];
-/* L350: */
- }
-/* L360: */
- }
-
- } else if (ipack >= 5) {
-
-/* 'B' -- The lower triangle is packed as a band matrix.
-
- 'Q' -- The upper triangle is packed as a band matrix.
-
- 'Z' -- The whole matrix is packed as a band matrix.
-*/
-
- if (ipack == 5) {
- uub = 0;
- }
- if (ipack == 6) {
- llb = 0;
- }
-
- i__1 = uub;
- for (j = 1; j <= i__1; ++j) {
-/* Computing MIN */
- i__2 = j + llb;
- for (i = min(i__2,*m); i >= 1; --i) {
- a[i - j + uub + 1 + j * a_dim1] = a[i + j * a_dim1];
-/* L370: */
- }
-/* L380: */
- }
-
- i__1 = *n;
- for (j = uub + 2; j <= i__1; ++j) {
-/* Computing MIN */
- i__4 = j + llb;
- i__2 = min(i__4,*m);
- for (i = j - uub; i <= i__2; ++i) {
- a[i - j + uub + 1 + j * a_dim1] = a[i + j * a_dim1];
-/* L390: */
- }
-/* L400: */
- }
- }
-
-/* If packed, zero out extraneous elements.
-
- Symmetric/Triangular Packed --
- zero out everything after A(IROW,ICOL) */
-
- if (ipack == 3 || ipack == 4) {
- i__1 = *m;
- for (jc = icol; jc <= i__1; ++jc) {
- i__2 = *lda;
- for (jr = irow + 1; jr <= i__2; ++jr) {
- a[jr + jc * a_dim1] = 0.f;
-/* L410: */
- }
- irow = 0;
-/* L420: */
- }
-
- } else if (ipack >= 5) {
-
-/* Packed Band --
- 1st row is now in A( UUB+2-j, j), zero above it
- m-th row is now in A( M+UUB-j,j), zero below it
- last non-zero diagonal is now in A( UUB+LLB+1,j ),
-
- zero below it, too. */
-
- ir1 = uub + llb + 2;
- ir2 = uub + *m + 2;
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- i__2 = uub + 1 - jc;
- for (jr = 1; jr <= i__2; ++jr) {
- a[jr + jc * a_dim1] = 0.f;
-/* L430: */
- }
-/* Computing MAX
- Computing MIN */
- i__3 = ir1, i__5 = ir2 - jc;
- i__2 = 1, i__4 = min(i__3,i__5);
- i__6 = *lda;
- for (jr = max(i__2,i__4); jr <= i__6; ++jr) {
- a[jr + jc * a_dim1] = 0.f;
-/* L440: */
- }
-/* L450: */
- }
- }
- }
-
- return 0;
-
-/* End of SLATMS */
-
-} /* slatms_ */
-
diff --git a/TESTING/MATGEN/slu_Cnames.h b/TESTING/MATGEN/slu_Cnames.h
deleted file mode 120000
index e9e2972..0000000
--- a/TESTING/MATGEN/slu_Cnames.h
+++ /dev/null
@@ -1 +0,0 @@
-../../SRC/slu_Cnames.h
\ No newline at end of file
diff --git a/TESTING/MATGEN/zlacgv.c b/TESTING/MATGEN/zlacgv.c
deleted file mode 100644
index ba1df58..0000000
--- a/TESTING/MATGEN/zlacgv.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int zlacgv_(integer *n, doublecomplex *x, integer *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
-
-
- Purpose
- =======
-
- ZLACGV conjugates a complex vector of length N.
-
- Arguments
- =========
-
- N (input) INTEGER
- The length of the vector X. N >= 0.
-
- X (input/output) COMPLEX*16 array, dimension
- (1+(N-1)*abs(INCX))
- On entry, the vector of length N to be conjugated.
- On exit, X is overwritten with conjg(X).
-
- INCX (input) INTEGER
- The spacing between successive elements of X.
-
- =====================================================================
-
-
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer i__1, i__2;
- doublecomplex z__1;
- /* Builtin functions */
- void d_cnjg(doublecomplex *, doublecomplex *);
- /* Local variables */
- static integer ioff, i;
-
-
-#define X(I) x[(I)-1]
-
-
- if (*incx == 1) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- d_cnjg(&z__1, &X(i));
- X(i).r = z__1.r, X(i).i = z__1.i;
-/* L10: */
- }
- } else {
- ioff = 1;
- if (*incx < 0) {
- ioff = 1 - (*n - 1) * *incx;
- }
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = ioff;
- d_cnjg(&z__1, &X(ioff));
- X(ioff).r = z__1.r, X(ioff).i = z__1.i;
- ioff += *incx;
-/* L20: */
- }
- }
- return 0;
-
-/* End of ZLACGV */
-
-} /* zlacgv_ */
-
diff --git a/TESTING/MATGEN/zlagge.c b/TESTING/MATGEN/zlagge.c
deleted file mode 100644
index 0129749..0000000
--- a/TESTING/MATGEN/zlagge.c
+++ /dev/null
@@ -1,465 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static doublecomplex c_b1 = {0.,0.};
-static doublecomplex c_b2 = {1.,0.};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int zlagge_(integer *m, integer *n, integer *kl, integer *ku,
- doublereal *d, doublecomplex *a, integer *lda, integer *iseed,
- doublecomplex *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- doublereal d__1;
- doublecomplex z__1;
-
- /* Builtin functions */
- double z_abs(doublecomplex *);
- void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer i, j;
- extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
- doublecomplex *, integer *, doublecomplex *, integer *,
- doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
- doublecomplex *, integer *), zgemv_(char *, integer *, integer *,
- doublecomplex *, doublecomplex *, integer *, doublecomplex *,
- integer *, doublecomplex *, doublecomplex *, integer *);
- extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
- static doublecomplex wa, wb;
- static doublereal wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), zlacgv_(
- integer *, doublecomplex *, integer *), zlarnv_(integer *,
- integer *, integer *, doublecomplex *);
- static doublecomplex tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- ZLAGGE generates a complex general m by n matrix A, by pre- and post-
-
- multiplying a real diagonal matrix D with random unitary matrices:
- A = U*D*V. The lower and upper bandwidths may then be reduced to
- kl and ku by additional unitary transformations.
-
- Arguments
- =========
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- KL (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= KL <= M-1.
-
- KU (input) INTEGER
- The number of nonzero superdiagonals within the band of A.
- 0 <= KU <= N-1.
-
- D (input) DOUBLE PRECISION array, dimension (min(M,N))
- The diagonal elements of the diagonal matrix D.
-
- A (output) COMPLEX*16 array, dimension (LDA,N)
- The generated m by n matrix A.
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= M.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) COMPLEX*16 array, dimension (M+N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*m < 0) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (*kl < 0 || *kl > *m - 1) {
- *info = -3;
- } else if (*ku < 0 || *ku > *n - 1) {
- *info = -4;
- } else if (*lda < max(1,*m)) {
- *info = -7;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("ZLAGGE", &i__1);
- return 0;
- }
-
-/* initialize A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = min(*m,*n);
- for (i = 1; i <= i__1; ++i) {
- i__2 = i + i * a_dim1;
- i__3 = i;
- a[i__2].r = d[i__3], a[i__2].i = 0.;
-/* L30: */
- }
-
-/* pre- and post-multiply A by random unitary matrices */
-
- for (i = min(*m,*n); i >= 1; --i) {
- if (i < *m) {
-
-/* generate random reflection */
-
- i__1 = *m - i + 1;
- zlarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *m - i + 1;
- wn = dznrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / z_abs(&work[1]);
- z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__1 = *m - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__1, &z__1, &work[2], &c__1);
- work[1].r = 1., work[1].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* multiply A(i:m,i:n) by random reflection from the lef
-t */
-
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- zgemv_("Conjugate transpose", &i__1, &i__2, &c_b2, &a[i + i *
- a_dim1], lda, &work[1], &c__1, &c_b1, &work[*m + 1], &
- c__1);
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&i__1, &i__2, &z__1, &work[1], &c__1, &work[*m + 1], &c__1,
- &a[i + i * a_dim1], lda);
- }
- if (i < *n) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- zlarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = dznrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / z_abs(&work[1]);
- z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__1 = *n - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__1, &z__1, &work[2], &c__1);
- work[1].r = 1., work[1].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* multiply A(i:m,i:n) by random reflection from the rig
-ht */
-
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- zgemv_("No transpose", &i__1, &i__2, &c_b2, &a[i + i * a_dim1],
- lda, &work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
- i__1 = *m - i + 1;
- i__2 = *n - i + 1;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&i__1, &i__2, &z__1, &work[*n + 1], &c__1, &work[1], &c__1,
- &a[i + i * a_dim1], lda);
- }
-/* L40: */
- }
-
-/* Reduce number of subdiagonals to KL and number of superdiagonals
- to KU
-
- Computing MAX */
- i__2 = *m - 1 - *kl, i__3 = *n - 1 - *ku;
- i__1 = max(i__2,i__3);
- for (i = 1; i <= i__1; ++i) {
- if (*kl <= *ku) {
-
-/* annihilate subdiagonal elements first (necessary if K
-L = 0)
-
- Computing MIN */
- i__2 = *m - 1 - *kl;
- if (i <= min(i__2,*n)) {
-
-/* generate reflection to annihilate A(kl+i+1:m,i
-) */
-
- i__2 = *m - *kl - i + 1;
- wn = dznrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
- d__1 = wn / z_abs(&a[*kl + i + i * a_dim1]);
- i__2 = *kl + i + i * a_dim1;
- z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- i__2 = *kl + i + i * a_dim1;
- z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__2 = *m - *kl - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__2, &z__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
- i__2 = *kl + i + i * a_dim1;
- a[i__2].r = 1., a[i__2].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* apply reflection to A(kl+i:m,i+1:n) from the l
-eft */
-
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- zgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*kl + i
- + (i + 1) * a_dim1], lda, &a[*kl + i + i * a_dim1], &
- c__1, &c_b1, &work[1], &c__1);
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&i__2, &i__3, &z__1, &a[*kl + i + i * a_dim1], &c__1, &
- work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
- i__2 = *kl + i + i * a_dim1;
- z__1.r = -wa.r, z__1.i = -wa.i;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
- }
-
-/* Computing MIN */
- i__2 = *n - 1 - *ku;
- if (i <= min(i__2,*m)) {
-
-/* generate reflection to annihilate A(i,ku+i+1:n
-) */
-
- i__2 = *n - *ku - i + 1;
- wn = dznrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- d__1 = wn / z_abs(&a[i + (*ku + i) * a_dim1]);
- i__2 = i + (*ku + i) * a_dim1;
- z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- i__2 = i + (*ku + i) * a_dim1;
- z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__2 = *n - *ku - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__2, &z__1, &a[i + (*ku + i + 1) * a_dim1], lda);
- i__2 = i + (*ku + i) * a_dim1;
- a[i__2].r = 1., a[i__2].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* apply reflection to A(i+1:m,ku+i:n) from the r
-ight */
-
- i__2 = *n - *ku - i + 1;
- zlacgv_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- zgemv_("No transpose", &i__2, &i__3, &c_b2, &a[i + 1 + (*ku +
- i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda, &
- c_b1, &work[1], &c__1);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&i__2, &i__3, &z__1, &work[1], &c__1, &a[i + (*ku + i)
- * a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
- i__2 = i + (*ku + i) * a_dim1;
- z__1.r = -wa.r, z__1.i = -wa.i;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
- }
- } else {
-
-/* annihilate superdiagonal elements first (necessary if
-
- KU = 0)
-
- Computing MIN */
- i__2 = *n - 1 - *ku;
- if (i <= min(i__2,*m)) {
-
-/* generate reflection to annihilate A(i,ku+i+1:n
-) */
-
- i__2 = *n - *ku - i + 1;
- wn = dznrm2_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- d__1 = wn / z_abs(&a[i + (*ku + i) * a_dim1]);
- i__2 = i + (*ku + i) * a_dim1;
- z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- i__2 = i + (*ku + i) * a_dim1;
- z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__2 = *n - *ku - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__2, &z__1, &a[i + (*ku + i + 1) * a_dim1], lda);
- i__2 = i + (*ku + i) * a_dim1;
- a[i__2].r = 1., a[i__2].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* apply reflection to A(i+1:m,ku+i:n) from the r
-ight */
-
- i__2 = *n - *ku - i + 1;
- zlacgv_(&i__2, &a[i + (*ku + i) * a_dim1], lda);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- zgemv_("No transpose", &i__2, &i__3, &c_b2, &a[i + 1 + (*ku +
- i) * a_dim1], lda, &a[i + (*ku + i) * a_dim1], lda, &
- c_b1, &work[1], &c__1);
- i__2 = *m - i;
- i__3 = *n - *ku - i + 1;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&i__2, &i__3, &z__1, &work[1], &c__1, &a[i + (*ku + i)
- * a_dim1], lda, &a[i + 1 + (*ku + i) * a_dim1], lda);
- i__2 = i + (*ku + i) * a_dim1;
- z__1.r = -wa.r, z__1.i = -wa.i;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
- }
-
-/* Computing MIN */
- i__2 = *m - 1 - *kl;
- if (i <= min(i__2,*n)) {
-
-/* generate reflection to annihilate A(kl+i+1:m,i
-) */
-
- i__2 = *m - *kl - i + 1;
- wn = dznrm2_(&i__2, &a[*kl + i + i * a_dim1], &c__1);
- d__1 = wn / z_abs(&a[*kl + i + i * a_dim1]);
- i__2 = *kl + i + i * a_dim1;
- z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- i__2 = *kl + i + i * a_dim1;
- z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__2 = *m - *kl - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__2, &z__1, &a[*kl + i + 1 + i * a_dim1], &c__1);
- i__2 = *kl + i + i * a_dim1;
- a[i__2].r = 1., a[i__2].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* apply reflection to A(kl+i:m,i+1:n) from the l
-eft */
-
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- zgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*kl + i
- + (i + 1) * a_dim1], lda, &a[*kl + i + i * a_dim1], &
- c__1, &c_b1, &work[1], &c__1);
- i__2 = *m - *kl - i + 1;
- i__3 = *n - i;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&i__2, &i__3, &z__1, &a[*kl + i + i * a_dim1], &c__1, &
- work[1], &c__1, &a[*kl + i + (i + 1) * a_dim1], lda);
- i__2 = *kl + i + i * a_dim1;
- z__1.r = -wa.r, z__1.i = -wa.i;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
- }
- }
-
- i__2 = *m;
- for (j = *kl + i + 1; j <= i__2; ++j) {
- i__3 = j + i * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
-/* L50: */
- }
-
- i__2 = *n;
- for (j = *ku + i + 1; j <= i__2; ++j) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
-/* L60: */
- }
-/* L70: */
- }
- return 0;
-
-/* End of ZLAGGE */
-
-} /* zlagge_ */
-
diff --git a/TESTING/MATGEN/zlaghe.c b/TESTING/MATGEN/zlaghe.c
deleted file mode 100644
index 4cad7aa..0000000
--- a/TESTING/MATGEN/zlaghe.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static doublecomplex c_b1 = {0.,0.};
-static doublecomplex c_b2 = {1.,0.};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int zlaghe_(integer *n, integer *k, doublereal *d,
- doublecomplex *a, integer *lda, integer *iseed, doublecomplex *work,
- integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- doublereal d__1;
- doublecomplex z__1, z__2, z__3, z__4;
-
- /* Builtin functions */
- double z_abs(doublecomplex *);
- void z_div(doublecomplex *, doublecomplex *, doublecomplex *), d_cnjg(
- doublecomplex *, doublecomplex *);
-
- /* Local variables */
- extern /* Subroutine */ int zher2_(char *, integer *, doublecomplex *,
- doublecomplex *, integer *, doublecomplex *, integer *,
- doublecomplex *, integer *);
- static integer i, j;
- static doublecomplex alpha;
- extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
- doublecomplex *, integer *, doublecomplex *, integer *,
- doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
- doublecomplex *, integer *);
- extern /* Double Complex */ VOID zdotc_(doublecomplex *, integer *,
- doublecomplex *, integer *, doublecomplex *, integer *);
- extern /* Subroutine */ int zgemv_(char *, integer *, integer *,
- doublecomplex *, doublecomplex *, integer *, doublecomplex *,
- integer *, doublecomplex *, doublecomplex *, integer *),
- zhemv_(char *, integer *, doublecomplex *, doublecomplex *,
- integer *, doublecomplex *, integer *, doublecomplex *,
- doublecomplex *, integer *), zaxpy_(integer *,
- doublecomplex *, doublecomplex *, integer *, doublecomplex *,
- integer *);
- extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
- static doublecomplex wa, wb;
- static doublereal wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), zlarnv_(
- integer *, integer *, integer *, doublecomplex *);
- static doublecomplex tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- ZLAGHE generates a complex hermitian matrix A, by pre- and post-
- multiplying a real diagonal matrix D with a random unitary matrix:
- A = U*D*U'. The semi-bandwidth may then be reduced to k by additional
-
- unitary transformations.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- K (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= K <= N-1.
-
- D (input) DOUBLE PRECISION array, dimension (N)
- The diagonal elements of the diagonal matrix D.
-
- A (output) COMPLEX*16 array, dimension (LDA,N)
- The generated n by n hermitian matrix A (the full matrix is
- stored).
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) COMPLEX*16 array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*k < 0 || *k > *n - 1) {
- *info = -2;
- } else if (*lda < max(1,*n)) {
- *info = -5;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("ZLAGHE", &i__1);
- return 0;
- }
-
-/* initialize lower triangle of A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i + i * a_dim1;
- i__3 = i;
- a[i__2].r = d[i__3], a[i__2].i = 0.;
-/* L30: */
- }
-
-/* Generate lower triangle of hermitian matrix */
-
- for (i = *n - 1; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- zlarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = dznrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / z_abs(&work[1]);
- z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__1 = *n - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__1, &z__1, &work[2], &c__1);
- work[1].r = 1., work[1].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* apply random reflection to A(i:n,i:n) from the left
- and the right
-
- compute y := tau * A * u */
-
- i__1 = *n - i + 1;
- zhemv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
- &c_b1, &work[*n + 1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( y, u ) * u */
-
- z__3.r = -.5, z__3.i = 0.;
- z__2.r = z__3.r * tau.r - z__3.i * tau.i, z__2.i = z__3.r * tau.i +
- z__3.i * tau.r;
- i__1 = *n - i + 1;
- zdotc_(&z__4, &i__1, &work[*n + 1], &c__1, &work[1], &c__1);
- z__1.r = z__2.r * z__4.r - z__2.i * z__4.i, z__1.i = z__2.r * z__4.i
- + z__2.i * z__4.r;
- alpha.r = z__1.r, alpha.i = z__1.i;
- i__1 = *n - i + 1;
- zaxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
-
-/* apply the transformation as a rank-2 update to A(i:n,i:n) */
-
- i__1 = *n - i + 1;
- z__1.r = -1., z__1.i = 0.;
- zher2_("Lower", &i__1, &z__1, &work[1], &c__1, &work[*n + 1], &c__1, &
- a[i + i * a_dim1], lda);
-/* L40: */
- }
-
-/* Reduce number of subdiagonals to K */
-
- i__1 = *n - 1 - *k;
- for (i = 1; i <= i__1; ++i) {
-
-/* generate reflection to annihilate A(k+i+1:n,i) */
-
- i__2 = *n - *k - i + 1;
- wn = dznrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
- d__1 = wn / z_abs(&a[*k + i + i * a_dim1]);
- i__2 = *k + i + i * a_dim1;
- z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- i__2 = *k + i + i * a_dim1;
- z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__2 = *n - *k - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__2, &z__1, &a[*k + i + 1 + i * a_dim1], &c__1);
- i__2 = *k + i + i * a_dim1;
- a[i__2].r = 1., a[i__2].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
-
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- zgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*k + i + (i + 1)
- * a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b1, &work[
- 1], &c__1);
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&i__2, &i__3, &z__1, &a[*k + i + i * a_dim1], &c__1, &work[1],
- &c__1, &a[*k + i + (i + 1) * a_dim1], lda);
-
-/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
-ht
-
- compute y := tau * A * u */
-
- i__2 = *n - *k - i + 1;
- zhemv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
- k + i + i * a_dim1], &c__1, &c_b1, &work[1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( y, u ) * u */
-
- z__3.r = -.5, z__3.i = 0.;
- z__2.r = z__3.r * tau.r - z__3.i * tau.i, z__2.i = z__3.r * tau.i +
- z__3.i * tau.r;
- i__2 = *n - *k - i + 1;
- zdotc_(&z__4, &i__2, &work[1], &c__1, &a[*k + i + i * a_dim1], &c__1);
- z__1.r = z__2.r * z__4.r - z__2.i * z__4.i, z__1.i = z__2.r * z__4.i
- + z__2.i * z__4.r;
- alpha.r = z__1.r, alpha.i = z__1.i;
- i__2 = *n - *k - i + 1;
- zaxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
- ;
-
-/* apply hermitian rank-2 update to A(k+i:n,k+i:n) */
-
- i__2 = *n - *k - i + 1;
- z__1.r = -1., z__1.i = 0.;
- zher2_("Lower", &i__2, &z__1, &a[*k + i + i * a_dim1], &c__1, &work[1]
- , &c__1, &a[*k + i + (*k + i) * a_dim1], lda);
-
- i__2 = *k + i + i * a_dim1;
- z__1.r = -wa.r, z__1.i = -wa.i;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
- i__2 = *n;
- for (j = *k + i + 1; j <= i__2; ++j) {
- i__3 = j + i * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
-/* L50: */
- }
-/* L60: */
- }
-
-/* Store full hermitian matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- i__3 = j + i * a_dim1;
- d_cnjg(&z__1, &a[i + j * a_dim1]);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
-/* L70: */
- }
-/* L80: */
- }
- return 0;
-
-/* End of ZLAGHE */
-
-} /* zlaghe_ */
-
diff --git a/TESTING/MATGEN/zlagsy.c b/TESTING/MATGEN/zlagsy.c
deleted file mode 100644
index fb6da0d..0000000
--- a/TESTING/MATGEN/zlagsy.c
+++ /dev/null
@@ -1,365 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static doublecomplex c_b1 = {0.,0.};
-static doublecomplex c_b2 = {1.,0.};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int zlagsy_(integer *n, integer *k, doublereal *d,
- doublecomplex *a, integer *lda, integer *iseed, doublecomplex *work,
- integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6, i__7, i__8,
- i__9;
- doublereal d__1;
- doublecomplex z__1, z__2, z__3, z__4;
-
- /* Builtin functions */
- double z_abs(doublecomplex *);
- void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer i, j;
- static doublecomplex alpha;
- extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
- doublecomplex *, integer *, doublecomplex *, integer *,
- doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
- doublecomplex *, integer *);
- extern /* Double Complex */ VOID zdotc_(doublecomplex *, integer *,
- doublecomplex *, integer *, doublecomplex *, integer *);
- extern /* Subroutine */ int zgemv_(char *, integer *, integer *,
- doublecomplex *, doublecomplex *, integer *, doublecomplex *,
- integer *, doublecomplex *, doublecomplex *, integer *),
- zaxpy_(integer *, doublecomplex *, doublecomplex *, integer *,
- doublecomplex *, integer *), zsymv_(char *, integer *,
- doublecomplex *, doublecomplex *, integer *, doublecomplex *,
- integer *, doublecomplex *, doublecomplex *, integer *);
- extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
- static integer ii, jj;
- static doublecomplex wa, wb;
- static doublereal wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), zlacgv_(
- integer *, doublecomplex *, integer *), zlarnv_(integer *,
- integer *, integer *, doublecomplex *);
- static doublecomplex tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- ZLAGSY generates a complex symmetric matrix A, by pre- and post-
- multiplying a real diagonal matrix D with a random unitary matrix:
- A = U*D*U**T. The semi-bandwidth may then be reduced to k by
- additional unitary transformations.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- K (input) INTEGER
- The number of nonzero subdiagonals within the band of A.
- 0 <= K <= N-1.
-
- D (input) DOUBLE PRECISION array, dimension (N)
- The diagonal elements of the diagonal matrix D.
-
- A (output) COMPLEX*16 array, dimension (LDA,N)
- The generated n by n symmetric matrix A (the full matrix is
- stored).
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) COMPLEX*16 array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*k < 0 || *k > *n - 1) {
- *info = -2;
- } else if (*lda < max(1,*n)) {
- *info = -5;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("ZLAGSY", &i__1);
- return 0;
- }
-
-/* initialize lower triangle of A to diagonal matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = *n;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i + i * a_dim1;
- i__3 = i;
- a[i__2].r = d[i__3], a[i__2].i = 0.;
-/* L30: */
- }
-
-/* Generate lower triangle of symmetric matrix */
-
- for (i = *n - 1; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- zlarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = dznrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / z_abs(&work[1]);
- z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__1 = *n - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__1, &z__1, &work[2], &c__1);
- work[1].r = 1., work[1].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* apply random reflection to A(i:n,i:n) from the left
- and the right
-
- compute y := tau * A * conjg(u) */
-
- i__1 = *n - i + 1;
- zlacgv_(&i__1, &work[1], &c__1);
- i__1 = *n - i + 1;
- zsymv_("Lower", &i__1, &tau, &a[i + i * a_dim1], lda, &work[1], &c__1,
- &c_b1, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- zlacgv_(&i__1, &work[1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( u, y ) * u */
-
- z__3.r = -.5, z__3.i = 0.;
- z__2.r = z__3.r * tau.r - z__3.i * tau.i, z__2.i = z__3.r * tau.i +
- z__3.i * tau.r;
- i__1 = *n - i + 1;
- zdotc_(&z__4, &i__1, &work[1], &c__1, &work[*n + 1], &c__1);
- z__1.r = z__2.r * z__4.r - z__2.i * z__4.i, z__1.i = z__2.r * z__4.i
- + z__2.i * z__4.r;
- alpha.r = z__1.r, alpha.i = z__1.i;
- i__1 = *n - i + 1;
- zaxpy_(&i__1, &alpha, &work[1], &c__1, &work[*n + 1], &c__1);
-
-/* apply the transformation as a rank-2 update to A(i:n,i:n)
-
- CALL ZSYR2( 'Lower', N-I+1, -ONE, WORK, 1, WORK( N+1 ), 1,
-
- $ A( I, I ), LDA ) */
-
- i__1 = *n;
- for (jj = i; jj <= i__1; ++jj) {
- i__2 = *n;
- for (ii = jj; ii <= i__2; ++ii) {
- i__3 = ii + jj * a_dim1;
- i__4 = ii + jj * a_dim1;
- i__5 = ii - i + 1;
- i__6 = *n + jj - i + 1;
- z__3.r = work[i__5].r * work[i__6].r - work[i__5].i * work[
- i__6].i, z__3.i = work[i__5].r * work[i__6].i + work[
- i__5].i * work[i__6].r;
- z__2.r = a[i__4].r - z__3.r, z__2.i = a[i__4].i - z__3.i;
- i__7 = *n + ii - i + 1;
- i__8 = jj - i + 1;
- z__4.r = work[i__7].r * work[i__8].r - work[i__7].i * work[
- i__8].i, z__4.i = work[i__7].r * work[i__8].i + work[
- i__7].i * work[i__8].r;
- z__1.r = z__2.r - z__4.r, z__1.i = z__2.i - z__4.i;
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
-/* L40: */
- }
-/* L50: */
- }
-/* L60: */
- }
-
-/* Reduce number of subdiagonals to K */
-
- i__1 = *n - 1 - *k;
- for (i = 1; i <= i__1; ++i) {
-
-/* generate reflection to annihilate A(k+i+1:n,i) */
-
- i__2 = *n - *k - i + 1;
- wn = dznrm2_(&i__2, &a[*k + i + i * a_dim1], &c__1);
- d__1 = wn / z_abs(&a[*k + i + i * a_dim1]);
- i__2 = *k + i + i * a_dim1;
- z__1.r = d__1 * a[i__2].r, z__1.i = d__1 * a[i__2].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- i__2 = *k + i + i * a_dim1;
- z__1.r = a[i__2].r + wa.r, z__1.i = a[i__2].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__2 = *n - *k - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__2, &z__1, &a[*k + i + 1 + i * a_dim1], &c__1);
- i__2 = *k + i + i * a_dim1;
- a[i__2].r = 1., a[i__2].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* apply reflection to A(k+i:n,i+1:k+i-1) from the left */
-
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- zgemv_("Conjugate transpose", &i__2, &i__3, &c_b2, &a[*k + i + (i + 1)
- * a_dim1], lda, &a[*k + i + i * a_dim1], &c__1, &c_b1, &work[
- 1], &c__1);
- i__2 = *n - *k - i + 1;
- i__3 = *k - 1;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&i__2, &i__3, &z__1, &a[*k + i + i * a_dim1], &c__1, &work[1],
- &c__1, &a[*k + i + (i + 1) * a_dim1], lda);
-
-/* apply reflection to A(k+i:n,k+i:n) from the left and the rig
-ht
-
- compute y := tau * A * conjg(u) */
-
- i__2 = *n - *k - i + 1;
- zlacgv_(&i__2, &a[*k + i + i * a_dim1], &c__1);
- i__2 = *n - *k - i + 1;
- zsymv_("Lower", &i__2, &tau, &a[*k + i + (*k + i) * a_dim1], lda, &a[*
- k + i + i * a_dim1], &c__1, &c_b1, &work[1], &c__1);
- i__2 = *n - *k - i + 1;
- zlacgv_(&i__2, &a[*k + i + i * a_dim1], &c__1);
-
-/* compute v := y - 1/2 * tau * ( u, y ) * u */
-
- z__3.r = -.5, z__3.i = 0.;
- z__2.r = z__3.r * tau.r - z__3.i * tau.i, z__2.i = z__3.r * tau.i +
- z__3.i * tau.r;
- i__2 = *n - *k - i + 1;
- zdotc_(&z__4, &i__2, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1);
- z__1.r = z__2.r * z__4.r - z__2.i * z__4.i, z__1.i = z__2.r * z__4.i
- + z__2.i * z__4.r;
- alpha.r = z__1.r, alpha.i = z__1.i;
- i__2 = *n - *k - i + 1;
- zaxpy_(&i__2, &alpha, &a[*k + i + i * a_dim1], &c__1, &work[1], &c__1)
- ;
-
-/* apply symmetric rank-2 update to A(k+i:n,k+i:n)
-
- CALL ZSYR2( 'Lower', N-K-I+1, -ONE, A( K+I, I ), 1, WORK, 1,
-
- $ A( K+I, K+I ), LDA ) */
-
- i__2 = *n;
- for (jj = *k + i; jj <= i__2; ++jj) {
- i__3 = *n;
- for (ii = jj; ii <= i__3; ++ii) {
- i__4 = ii + jj * a_dim1;
- i__5 = ii + jj * a_dim1;
- i__6 = ii + i * a_dim1;
- i__7 = jj - *k - i + 1;
- z__3.r = a[i__6].r * work[i__7].r - a[i__6].i * work[i__7].i,
- z__3.i = a[i__6].r * work[i__7].i + a[i__6].i * work[
- i__7].r;
- z__2.r = a[i__5].r - z__3.r, z__2.i = a[i__5].i - z__3.i;
- i__8 = ii - *k - i + 1;
- i__9 = jj + i * a_dim1;
- z__4.r = work[i__8].r * a[i__9].r - work[i__8].i * a[i__9].i,
- z__4.i = work[i__8].r * a[i__9].i + work[i__8].i * a[
- i__9].r;
- z__1.r = z__2.r - z__4.r, z__1.i = z__2.i - z__4.i;
- a[i__4].r = z__1.r, a[i__4].i = z__1.i;
-/* L70: */
- }
-/* L80: */
- }
-
- i__2 = *k + i + i * a_dim1;
- z__1.r = -wa.r, z__1.i = -wa.i;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
- i__2 = *n;
- for (j = *k + i + 1; j <= i__2; ++j) {
- i__3 = j + i * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
-/* L90: */
- }
-/* L100: */
- }
-
-/* Store full symmetric matrix */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *n;
- for (i = j + 1; i <= i__2; ++i) {
- i__3 = j + i * a_dim1;
- i__4 = i + j * a_dim1;
- a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;
-/* L110: */
- }
-/* L120: */
- }
- return 0;
-
-/* End of ZLAGSY */
-
-} /* zlagsy_ */
-
diff --git a/TESTING/MATGEN/zlarge.c b/TESTING/MATGEN/zlarge.c
deleted file mode 100644
index a7d6300..0000000
--- a/TESTING/MATGEN/zlarge.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static doublecomplex c_b1 = {0.,0.};
-static doublecomplex c_b2 = {1.,0.};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int zlarge_(integer *n, doublecomplex *a, integer *lda,
- integer *iseed, doublecomplex *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1;
- doublereal d__1;
- doublecomplex z__1;
-
- /* Builtin functions */
- double z_abs(doublecomplex *);
- void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer i;
- extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
- doublecomplex *, integer *, doublecomplex *, integer *,
- doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
- doublecomplex *, integer *), zgemv_(char *, integer *, integer *,
- doublecomplex *, doublecomplex *, integer *, doublecomplex *,
- integer *, doublecomplex *, doublecomplex *, integer *);
- extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
- static doublecomplex wa, wb;
- static doublereal wn;
- extern /* Subroutine */ int xerbla_(char *, integer *), zlarnv_(
- integer *, integer *, integer *, doublecomplex *);
- static doublecomplex tau;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- ZLARGE pre- and post-multiplies a complex general n by n matrix A
- with a random unitary matrix: A = U*D*U'.
-
- Arguments
- =========
-
- N (input) INTEGER
- The order of the matrix A. N >= 0.
-
- A (input/output) COMPLEX*16 array, dimension (LDA,N)
- On entry, the original n by n matrix A.
- On exit, A is overwritten by U*A*U' for some random
- unitary matrix U.
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= N.
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- WORK (workspace) COMPLEX*16 array, dimension (2*N)
-
- INFO (output) INTEGER
- = 0: successful exit
- < 0: if INFO = -i, the i-th argument had an illegal value
-
- =====================================================================
-
-
-
- Test the input arguments
-
- Parameter adjustments */
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --work;
-
- /* Function Body */
- *info = 0;
- if (*n < 0) {
- *info = -1;
- } else if (*lda < max(1,*n)) {
- *info = -3;
- }
- if (*info < 0) {
- i__1 = -(*info);
- xerbla_("ZLARGE", &i__1);
- return 0;
- }
-
-/* pre- and post-multiply A by random unitary matrix */
-
- for (i = *n; i >= 1; --i) {
-
-/* generate random reflection */
-
- i__1 = *n - i + 1;
- zlarnv_(&c__3, &iseed[1], &i__1, &work[1]);
- i__1 = *n - i + 1;
- wn = dznrm2_(&i__1, &work[1], &c__1);
- d__1 = wn / z_abs(&work[1]);
- z__1.r = d__1 * work[1].r, z__1.i = d__1 * work[1].i;
- wa.r = z__1.r, wa.i = z__1.i;
- if (wn == 0.) {
- tau.r = 0., tau.i = 0.;
- } else {
- z__1.r = work[1].r + wa.r, z__1.i = work[1].i + wa.i;
- wb.r = z__1.r, wb.i = z__1.i;
- i__1 = *n - i;
- z_div(&z__1, &c_b2, &wb);
- zscal_(&i__1, &z__1, &work[2], &c__1);
- work[1].r = 1., work[1].i = 0.;
- z_div(&z__1, &wb, &wa);
- d__1 = z__1.r;
- tau.r = d__1, tau.i = 0.;
- }
-
-/* multiply A(i:n,1:n) by random reflection from the left */
-
- i__1 = *n - i + 1;
- zgemv_("Conjugate transpose", &i__1, n, &c_b2, &a[i + a_dim1], lda, &
- work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&i__1, n, &z__1, &work[1], &c__1, &work[*n + 1], &c__1, &a[i +
- a_dim1], lda);
-
-/* multiply A(1:n,i:n) by random reflection from the right */
-
- i__1 = *n - i + 1;
- zgemv_("No transpose", n, &i__1, &c_b2, &a[i * a_dim1 + 1], lda, &
- work[1], &c__1, &c_b1, &work[*n + 1], &c__1);
- i__1 = *n - i + 1;
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(n, &i__1, &z__1, &work[*n + 1], &c__1, &work[1], &c__1, &a[i *
- a_dim1 + 1], lda);
-/* L10: */
- }
- return 0;
-
-/* End of ZLARGE */
-
-} /* zlarge_ */
-
diff --git a/TESTING/MATGEN/zlarnd.c b/TESTING/MATGEN/zlarnd.c
deleted file mode 100644
index 20a782d..0000000
--- a/TESTING/MATGEN/zlarnd.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Double Complex */ VOID zlarnd_(doublecomplex * ret_val, integer *idist,
- integer *iseed)
-{
- /* System generated locals */
- doublereal d__1, d__2;
- doublecomplex z__1, z__2, z__3;
-
- /* Builtin functions */
- double log(doublereal), sqrt(doublereal);
- void z_exp(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static doublereal t1, t2;
- extern doublereal dlaran_(integer *);
-
-
-/* -- 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
-
-
- Purpose
- =======
-
- ZLARND returns a random complex number from a uniform or normal
- distribution.
-
- Arguments
- =========
-
- IDIST (input) INTEGER
- Specifies the distribution of the random numbers:
- = 1: real and imaginary parts each uniform (0,1)
- = 2: real and imaginary parts each uniform (-1,1)
- = 3: real and imaginary parts each normal (0,1)
- = 4: uniformly distributed on the disc abs(z) <= 1
- = 5: uniformly distributed on the circle abs(z) = 1
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- Further Details
- ===============
-
- This routine calls the auxiliary routine DLARAN to generate a random
-
- real number from a uniform (0,1) distribution. The Box-Muller method
-
- is used to transform numbers from a uniform to a normal distribution.
-
-
- =====================================================================
-
-
-
- Generate a pair of real random numbers from a uniform (0,1)
- distribution
-
- Parameter adjustments */
- --iseed;
-
- /* Function Body */
- t1 = dlaran_(&iseed[1]);
- t2 = dlaran_(&iseed[1]);
-
- if (*idist == 1) {
-
-/* real and imaginary parts each uniform (0,1) */
-
- z__1.r = t1, z__1.i = t2;
- ret_val->r = z__1.r, ret_val->i = z__1.i;
- } else if (*idist == 2) {
-
-/* real and imaginary parts each uniform (-1,1) */
-
- d__1 = t1 * 2. - 1.;
- d__2 = t2 * 2. - 1.;
- z__1.r = d__1, z__1.i = d__2;
- ret_val->r = z__1.r, ret_val->i = z__1.i;
- } else if (*idist == 3) {
-
-/* real and imaginary parts each normal (0,1) */
-
- d__1 = sqrt(log(t1) * -2.);
- d__2 = t2 * 6.2831853071795864769252867663;
- z__3.r = 0., z__3.i = d__2;
- z_exp(&z__2, &z__3);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- ret_val->r = z__1.r, ret_val->i = z__1.i;
- } else if (*idist == 4) {
-
-/* uniform distribution on the unit disc abs(z) <= 1 */
-
- d__1 = sqrt(t1);
- d__2 = t2 * 6.2831853071795864769252867663;
- z__3.r = 0., z__3.i = d__2;
- z_exp(&z__2, &z__3);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- ret_val->r = z__1.r, ret_val->i = z__1.i;
- } else if (*idist == 5) {
-
-/* uniform distribution on the unit circle abs(z) = 1 */
-
- d__1 = t2 * 6.2831853071795864769252867663;
- z__2.r = 0., z__2.i = d__1;
- z_exp(&z__1, &z__2);
- ret_val->r = z__1.r, ret_val->i = z__1.i;
- }
- return ;
-
-/* End of ZLARND */
-
-} /* zlarnd_ */
-
diff --git a/TESTING/MATGEN/zlarnv.c b/TESTING/MATGEN/zlarnv.c
deleted file mode 100644
index cd2798f..0000000
--- a/TESTING/MATGEN/zlarnv.c
+++ /dev/null
@@ -1,173 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int zlarnv_(integer *idist, integer *iseed, integer *n,
- doublecomplex *x)
-{
-/* -- 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
-
-
- Purpose
- =======
-
- ZLARNV returns a vector of n random complex numbers from a uniform or
-
- normal distribution.
-
- Arguments
- =========
-
- IDIST (input) INTEGER
- Specifies the distribution of the random numbers:
- = 1: real and imaginary parts each uniform (0,1)
- = 2: real and imaginary parts each uniform (-1,1)
- = 3: real and imaginary parts each normal (0,1)
- = 4: uniformly distributed on the disc abs(z) < 1
- = 5: uniformly distributed on the circle abs(z) = 1
-
- ISEED (input/output) INTEGER array, dimension (4)
- On entry, the seed of the random number generator; the array
-
- elements must be between 0 and 4095, and ISEED(4) must be
- odd.
- On exit, the seed is updated.
-
- N (input) INTEGER
- The number of random numbers to be generated.
-
- X (output) COMPLEX*16 array, dimension (N)
- The generated random numbers.
-
- Further Details
- ===============
-
- This routine calls the auxiliary routine DLARUV to generate random
- real numbers from a uniform (0,1) distribution, in batches of up to
- 128 using vectorisable code. The Box-Muller method is used to
- transform numbers from a uniform to a normal distribution.
-
- =====================================================================
-
-
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer i__1, i__2, i__3, i__4, i__5;
- doublereal d__1, d__2;
- doublecomplex z__1, z__2, z__3;
- /* Builtin functions */
- double log(doublereal), sqrt(doublereal);
- void z_exp(doublecomplex *, doublecomplex *);
- /* Local variables */
- static integer i;
- static doublereal u[128];
- static integer il, iv;
- extern /* Subroutine */ int dlaruv_(integer *, integer *, doublereal *);
-
-
-#define U(I) u[(I)]
-#define X(I) x[(I)-1]
-#define ISEED(I) iseed[(I)-1]
-
-
- i__1 = *n;
- for (iv = 1; iv <= *n; iv += 64) {
-/* Computing MIN */
- i__2 = 64, i__3 = *n - iv + 1;
- il = min(i__2,i__3);
-
-/* Call DLARUV to generate 2*IL real numbers from a uniform (0,
-1)
- distribution (2*IL <= LV) */
-
- i__2 = il << 1;
- dlaruv_(&ISEED(1), &i__2, u);
-
- if (*idist == 1) {
-
-/* Copy generated numbers */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- i__4 = (i << 1) - 2;
- i__5 = (i << 1) - 1;
- z__1.r = U((i<<1)-2), z__1.i = U((i<<1)-1);
- X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
-/* L10: */
- }
- } else if (*idist == 2) {
-
-/* Convert generated numbers to uniform (-1,1) distribut
-ion */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- d__1 = U((i << 1) - 2) * 2. - 1.;
- d__2 = U((i << 1) - 1) * 2. - 1.;
- z__1.r = d__1, z__1.i = d__2;
- X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
-/* L20: */
- }
- } else if (*idist == 3) {
-
-/* Convert generated numbers to normal (0,1) distributio
-n */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- d__1 = sqrt(log(U((i << 1) - 2)) * -2.);
- d__2 = U((i << 1) - 1) * 6.2831853071795864769252867663;
- z__3.r = 0., z__3.i = d__2;
- z_exp(&z__2, &z__3);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
-/* L30: */
- }
- } else if (*idist == 4) {
-
-/* Convert generated numbers to complex numbers uniforml
-y
- distributed on the unit disk */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- d__1 = sqrt(U((i << 1) - 2));
- d__2 = U((i << 1) - 1) * 6.2831853071795864769252867663;
- z__3.r = 0., z__3.i = d__2;
- z_exp(&z__2, &z__3);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
-/* L40: */
- }
- } else if (*idist == 5) {
-
-/* Convert generated numbers to complex numbers uniforml
-y
- distributed on the unit circle */
-
- i__2 = il;
- for (i = 1; i <= il; ++i) {
- i__3 = iv + i - 1;
- d__1 = U((i << 1) - 1) * 6.2831853071795864769252867663;
- z__2.r = 0., z__2.i = d__1;
- z_exp(&z__1, &z__2);
- X(iv+i-1).r = z__1.r, X(iv+i-1).i = z__1.i;
-/* L50: */
- }
- }
-/* L60: */
- }
- return 0;
-
-/* End of ZLARNV */
-
-} /* zlarnv_ */
-
diff --git a/TESTING/MATGEN/zlaror.c b/TESTING/MATGEN/zlaror.c
deleted file mode 100644
index 26658a1..0000000
--- a/TESTING/MATGEN/zlaror.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static doublecomplex c_b1 = {0.,0.};
-static doublecomplex c_b2 = {1.,0.};
-static integer c__3 = 3;
-static integer c__1 = 1;
-
-/* Subroutine */ int zlaror_(char *side, char *init, integer *m, integer *n,
- doublecomplex *a, integer *lda, integer *iseed, doublecomplex *x,
- integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- doublecomplex z__1, z__2;
-
- /* Builtin functions */
- double z_abs(doublecomplex *);
- void d_cnjg(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer kbeg, jcol;
- static doublereal xabs;
- static integer irow, j;
- extern logical lsame_(char *, char *);
- static doublecomplex csign;
- extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
- doublecomplex *, integer *, doublecomplex *, integer *,
- doublecomplex *, integer *), zscal_(integer *, doublecomplex *,
- doublecomplex *, integer *);
- static integer ixfrm;
- extern /* Subroutine */ int zgemv_(char *, integer *, integer *,
- doublecomplex *, doublecomplex *, integer *, doublecomplex *,
- integer *, doublecomplex *, doublecomplex *, integer *);
- static integer itype, nxfrm;
- static doublereal xnorm;
- extern doublereal dznrm2_(integer *, doublecomplex *, integer *);
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static doublereal factor;
- extern /* Subroutine */ int zlacgv_(integer *, doublecomplex *, integer *)
- ;
- extern /* Double Complex */ VOID zlarnd_(doublecomplex *, integer *,
- integer *);
- extern /* Subroutine */ int zlaset_(char *, integer *, integer *,
- doublecomplex *, doublecomplex *, doublecomplex *, integer *);
- static doublecomplex xnorms;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- ZLAROR pre- or post-multiplies an M by N matrix A by a random
- unitary matrix U, overwriting A. A may optionally be
- initialized to the identity matrix before multiplying by U.
- U is generated using the method of G.W. Stewart
- ( SIAM J. Numer. Anal. 17, 1980, pp. 403-409 ).
- (BLAS-2 version)
-
- Arguments
- =========
-
- SIDE - CHARACTER*1
- SIDE specifies whether A is multiplied on the left or right
-
- by U.
- SIDE = 'L' Multiply A on the left (premultiply) by U
- SIDE = 'R' Multiply A on the right (postmultiply) by U*
- SIDE = 'C' Multiply A on the left by U and the right by U*
- SIDE = 'T' Multiply A on the left by U and the right by U'
- Not modified.
-
- INIT - CHARACTER*1
- INIT specifies whether or not A should be initialized to
- the identity matrix.
- INIT = 'I' Initialize A to (a section of) the
- identity matrix before applying U.
- INIT = 'N' No initialization. Apply U to the
- input matrix A.
-
- INIT = 'I' may be used to generate square (i.e., unitary)
- or rectangular orthogonal matrices (orthogonality being
- in the sense of ZDOTC):
-
- For square matrices, M=N, and SIDE many be either 'L' or
- 'R'; the rows will be orthogonal to each other, as will the
-
- columns.
- For rectangular matrices where M < N, SIDE = 'R' will
- produce a dense matrix whose rows will be orthogonal and
- whose columns will not, while SIDE = 'L' will produce a
- matrix whose rows will be orthogonal, and whose first M
- columns will be orthogonal, the remaining columns being
- zero.
- For matrices where M > N, just use the previous
- explaination, interchanging 'L' and 'R' and "rows" and
- "columns".
-
- Not modified.
-
- M - INTEGER
- Number of rows of A. Not modified.
-
- N - INTEGER
- Number of columns of A. Not modified.
-
- A - COMPLEX*16 array, dimension ( LDA, N )
- Input and output array. Overwritten by U A ( if SIDE = 'L' )
-
- or by A U ( if SIDE = 'R' )
- or by U A U* ( if SIDE = 'C')
- or by U A U' ( if SIDE = 'T') on exit.
-
- LDA - INTEGER
- Leading dimension of A. Must be at least MAX ( 1, M ).
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. The array elements should be between 0 and 4095;
-
- if not they will be reduced mod 4096. Also, ISEED(4) must
- be odd. The random number generator uses a linear
- congruential sequence limited to small integers, and so
- should produce machine independent random numbers. The
- values of ISEED are changed on exit, and can be used in the
-
- next call to ZLAROR to continue the same random number
- sequence.
- Modified.
-
- X - COMPLEX*16 array, dimension ( 3*MAX( M, N ) )
- Workspace. Of length:
- 2*M + N if SIDE = 'L',
- 2*N + M if SIDE = 'R',
- 3*N if SIDE = 'C' or 'T'.
- Modified.
-
- INFO - INTEGER
- An error flag. It is set to:
- 0 if no error.
- 1 if ZLARND returned a bad random number (installation
- problem)
- -1 if SIDE is not L, R, C, or T.
- -3 if M is negative.
- -4 if N is negative or if SIDE is C or T and N is not equal
-
- to M.
- -6 if LDA is less than M.
-
- =====================================================================
-
-
-
- Parameter adjustments */
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iseed;
- --x;
-
- /* Function Body */
- if (*n == 0 || *m == 0) {
- return 0;
- }
-
- itype = 0;
- if (lsame_(side, "L")) {
- itype = 1;
- } else if (lsame_(side, "R")) {
- itype = 2;
- } else if (lsame_(side, "C")) {
- itype = 3;
- } else if (lsame_(side, "T")) {
- itype = 4;
- }
-
-/* Check for argument errors. */
-
- *info = 0;
- if (itype == 0) {
- *info = -1;
- } else if (*m < 0) {
- *info = -3;
- } else if (*n < 0 || itype == 3 && *n != *m) {
- *info = -4;
- } else if (*lda < *m) {
- *info = -6;
- }
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("ZLAROR", &i__1);
- return 0;
- }
-
- if (itype == 1) {
- nxfrm = *m;
- } else {
- nxfrm = *n;
- }
-
-/* Initialize A to the identity matrix if desired */
-
- if (lsame_(init, "I")) {
- zlaset_("Full", m, n, &c_b1, &c_b2, &a[a_offset], lda);
- }
-
-/* If no rotation possible, still multiply by
- a random complex number from the circle |x| = 1
-
- 2) Compute Rotation by computing Householder
- Transformations H(2), H(3), ..., H(n). Note that the
- order in which they are computed is irrelevant. */
-
- i__1 = nxfrm;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- x[i__2].r = 0., x[i__2].i = 0.;
-/* L10: */
- }
-
- i__1 = nxfrm;
- for (ixfrm = 2; ixfrm <= i__1; ++ixfrm) {
- kbeg = nxfrm - ixfrm + 1;
-
-/* Generate independent normal( 0, 1 ) random numbers */
-
- i__2 = nxfrm;
- for (j = kbeg; j <= i__2; ++j) {
- i__3 = j;
- zlarnd_(&z__1, &c__3, &iseed[1]);
- x[i__3].r = z__1.r, x[i__3].i = z__1.i;
-/* L20: */
- }
-
-/* Generate a Householder transformation from the random vector
- X */
-
- xnorm = dznrm2_(&ixfrm, &x[kbeg], &c__1);
- xabs = z_abs(&x[kbeg]);
- if (xabs != 0.) {
- i__2 = kbeg;
- z__1.r = x[i__2].r / xabs, z__1.i = x[i__2].i / xabs;
- csign.r = z__1.r, csign.i = z__1.i;
- } else {
- csign.r = 1., csign.i = 0.;
- }
- z__1.r = xnorm * csign.r, z__1.i = xnorm * csign.i;
- xnorms.r = z__1.r, xnorms.i = z__1.i;
- i__2 = nxfrm + kbeg;
- z__1.r = -csign.r, z__1.i = -csign.i;
- x[i__2].r = z__1.r, x[i__2].i = z__1.i;
- factor = xnorm * (xnorm + xabs);
- if (abs(factor) < 1e-20) {
- *info = 1;
- i__2 = -(*info);
- xerbla_("ZLAROR", &i__2);
- return 0;
- } else {
- factor = 1. / factor;
- }
- i__2 = kbeg;
- i__3 = kbeg;
- z__1.r = x[i__3].r + xnorms.r, z__1.i = x[i__3].i + xnorms.i;
- x[i__2].r = z__1.r, x[i__2].i = z__1.i;
-
-/* Apply Householder transformation to A */
-
- if (itype == 1 || itype == 3 || itype == 4) {
-
-/* Apply H(k) on the left of A */
-
- zgemv_("C", &ixfrm, n, &c_b2, &a[kbeg + a_dim1], lda, &x[kbeg], &
- c__1, &c_b1, &x[(nxfrm << 1) + 1], &c__1);
- z__2.r = factor, z__2.i = 0.;
- z__1.r = -z__2.r, z__1.i = -z__2.i;
- zgerc_(&ixfrm, n, &z__1, &x[kbeg], &c__1, &x[(nxfrm << 1) + 1], &
- c__1, &a[kbeg + a_dim1], lda);
-
- }
-
- if (itype >= 2 && itype <= 4) {
-
-/* Apply H(k)* (or H(k)') on the right of A */
-
- if (itype == 4) {
- zlacgv_(&ixfrm, &x[kbeg], &c__1);
- }
-
- zgemv_("N", m, &ixfrm, &c_b2, &a[kbeg * a_dim1 + 1], lda, &x[kbeg]
- , &c__1, &c_b1, &x[(nxfrm << 1) + 1], &c__1);
- z__2.r = factor, z__2.i = 0.;
- z__1.r = -z__2.r, z__1.i = -z__2.i;
- zgerc_(m, &ixfrm, &z__1, &x[(nxfrm << 1) + 1], &c__1, &x[kbeg], &
- c__1, &a[kbeg * a_dim1 + 1], lda);
-
- }
-/* L30: */
- }
-
- zlarnd_(&z__1, &c__3, &iseed[1]);
- x[1].r = z__1.r, x[1].i = z__1.i;
- xabs = z_abs(&x[1]);
- if (xabs != 0.) {
- z__1.r = x[1].r / xabs, z__1.i = x[1].i / xabs;
- csign.r = z__1.r, csign.i = z__1.i;
- } else {
- csign.r = 1., csign.i = 0.;
- }
- i__1 = nxfrm << 1;
- x[i__1].r = csign.r, x[i__1].i = csign.i;
-
-/* Scale the matrix A by D. */
-
- if (itype == 1 || itype == 3 || itype == 4) {
- i__1 = *m;
- for (irow = 1; irow <= i__1; ++irow) {
- d_cnjg(&z__1, &x[nxfrm + irow]);
- zscal_(n, &z__1, &a[irow + a_dim1], lda);
-/* L40: */
- }
- }
-
- if (itype == 2 || itype == 3) {
- i__1 = *n;
- for (jcol = 1; jcol <= i__1; ++jcol) {
- zscal_(m, &x[nxfrm + jcol], &a[jcol * a_dim1 + 1], &c__1);
-/* L50: */
- }
- }
-
- if (itype == 4) {
- i__1 = *n;
- for (jcol = 1; jcol <= i__1; ++jcol) {
- d_cnjg(&z__1, &x[nxfrm + jcol]);
- zscal_(m, &z__1, &a[jcol * a_dim1 + 1], &c__1);
-/* L60: */
- }
- }
- return 0;
-
-/* End of ZLAROR */
-
-} /* zlaror_ */
-
diff --git a/TESTING/MATGEN/zlarot.c b/TESTING/MATGEN/zlarot.c
deleted file mode 100644
index 26a5b97..0000000
--- a/TESTING/MATGEN/zlarot.c
+++ /dev/null
@@ -1,365 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__4 = 4;
-static integer c__8 = 8;
-
-/* Subroutine */ int zlarot_(logical *lrows, logical *lleft, logical *lright,
- integer *nl, doublecomplex *c, doublecomplex *s, doublecomplex *a,
- integer *lda, doublecomplex *xleft, doublecomplex *xright)
-{
- /* System generated locals */
- integer i__1, i__2, i__3, i__4;
- doublecomplex z__1, z__2, z__3, z__4, z__5, z__6;
-
- /* Builtin functions */
- void d_cnjg(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer iinc, j, inext;
- static doublecomplex tempx;
- static integer ix, iy, nt;
- static doublecomplex xt[2], yt[2];
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static integer iyt;
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- ZLAROT applies a (Givens) rotation to two adjacent rows or
- columns, where one element of the first and/or last column/row
- may be a separate variable. This is specifically indended
- for use on matrices stored in some format other than GE, so
- that elements of the matrix may be used or modified for which
- no array element is provided.
-
- One example is a symmetric matrix in SB format (bandwidth=4), for
-
- which UPLO='L': Two adjacent rows will have the format:
-
- row j: * * * * * . . . .
- row j+1: * * * * * . . . .
-
- '*' indicates elements for which storage is provided,
- '.' indicates elements for which no storage is provided, but
- are not necessarily zero; their values are determined by
- symmetry. ' ' indicates elements which are necessarily zero,
- and have no storage provided.
-
- Those columns which have two '*'s can be handled by DROT.
- Those columns which have no '*'s can be ignored, since as long
- as the Givens rotations are carefully applied to preserve
- symmetry, their values are determined.
- Those columns which have one '*' have to be handled separately,
- by using separate variables "p" and "q":
-
- row j: * * * * * p . . .
- row j+1: q * * * * * . . . .
-
- The element p would have to be set correctly, then that column
- is rotated, setting p to its new value. The next call to
- ZLAROT would rotate columns j and j+1, using p, and restore
- symmetry. The element q would start out being zero, and be
- made non-zero by the rotation. Later, rotations would presumably
-
- be chosen to zero q out.
-
- Typical Calling Sequences: rotating the i-th and (i+1)-st rows.
- ------- ------- ---------
-
- General dense matrix:
-
- CALL ZLAROT(.TRUE.,.FALSE.,.FALSE., N, C,S,
- A(i,1),LDA, DUMMY, DUMMY)
-
- General banded matrix in GB format:
-
- j = MAX(1, i-KL )
- NL = MIN( N, i+KU+1 ) + 1-j
- CALL ZLAROT( .TRUE., i-KL.GE.1, i+KU.LT.N, NL, C,S,
- A(KU+i+1-j,j),LDA-1, XLEFT, XRIGHT )
-
- [ note that i+1-j is just MIN(i,KL+1) ]
-
- Symmetric banded matrix in SY format, bandwidth K,
- lower triangle only:
-
- j = MAX(1, i-K )
- NL = MIN( K+1, i ) + 1
- CALL ZLAROT( .TRUE., i-K.GE.1, .TRUE., NL, C,S,
- A(i,j), LDA, XLEFT, XRIGHT )
-
- Same, but upper triangle only:
-
- NL = MIN( K+1, N-i ) + 1
- CALL ZLAROT( .TRUE., .TRUE., i+K.LT.N, NL, C,S,
- A(i,i), LDA, XLEFT, XRIGHT )
-
- Symmetric banded matrix in SB format, bandwidth K,
- lower triangle only:
-
- [ same as for SY, except:]
- . . . .
- A(i+1-j,j), LDA-1, XLEFT, XRIGHT )
-
- [ note that i+1-j is just MIN(i,K+1) ]
-
- Same, but upper triangle only:
- . . .
- A(K+1,i), LDA-1, XLEFT, XRIGHT )
-
- Rotating columns is just the transpose of rotating rows, except
-
- for GB and SB: (rotating columns i and i+1)
-
- GB:
- j = MAX(1, i-KU )
- NL = MIN( N, i+KL+1 ) + 1-j
- CALL ZLAROT( .TRUE., i-KU.GE.1, i+KL.LT.N, NL, C,S,
- A(KU+j+1-i,i),LDA-1, XTOP, XBOTTM )
-
- [note that KU+j+1-i is just MAX(1,KU+2-i)]
-
- SB: (upper triangle)
-
- . . . . . .
- A(K+j+1-i,i),LDA-1, XTOP, XBOTTM )
-
- SB: (lower triangle)
-
- . . . . . .
- A(1,i),LDA-1, XTOP, XBOTTM )
-
- Arguments
- =========
-
- LROWS - LOGICAL
- If .TRUE., then ZLAROT will rotate two rows. If .FALSE.,
- then it will rotate two columns.
- Not modified.
-
- LLEFT - LOGICAL
- If .TRUE., then XLEFT will be used instead of the
- corresponding element of A for the first element in the
- second row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.)
- If .FALSE., then the corresponding element of A will be
- used.
- Not modified.
-
- LRIGHT - LOGICAL
- If .TRUE., then XRIGHT will be used instead of the
- corresponding element of A for the last element in the
- first row (if LROWS=.FALSE.) or column (if LROWS=.TRUE.) If
-
- .FALSE., then the corresponding element of A will be used.
- Not modified.
-
- NL - INTEGER
- The length of the rows (if LROWS=.TRUE.) or columns (if
- LROWS=.FALSE.) to be rotated. If XLEFT and/or XRIGHT are
- used, the columns/rows they are in should be included in
- NL, e.g., if LLEFT = LRIGHT = .TRUE., then NL must be at
- least 2. The number of rows/columns to be rotated
- exclusive of those involving XLEFT and/or XRIGHT may
- not be negative, i.e., NL minus how many of LLEFT and
- LRIGHT are .TRUE. must be at least zero; if not, XERBLA
- will be called.
- Not modified.
-
- C, S - COMPLEX*16
- Specify the Givens rotation to be applied. If LROWS is
- true, then the matrix ( c s )
- ( _ _ )
- (-s c ) is applied from the left;
- if false, then the transpose (not conjugated) thereof is
- applied from the right. Note that in contrast to the
- output of ZROTG or to most versions of ZROT, both C and S
- are complex. For a Givens rotation, |C|**2 + |S|**2 should
-
- be 1, but this is not checked.
- Not modified.
-
- A - COMPLEX*16 array.
- The array containing the rows/columns to be rotated. The
- first element of A should be the upper left element to
- be rotated.
- Read and modified.
-
- LDA - INTEGER
- The "effective" leading dimension of A. If A contains
- a matrix stored in GE, HE, or SY format, then this is just
- the leading dimension of A as dimensioned in the calling
- routine. If A contains a matrix stored in band (GB, HB, or
-
- SB) format, then this should be *one less* than the leading
-
- dimension used in the calling routine. Thus, if A were
- dimensioned A(LDA,*) in ZLAROT, then A(1,j) would be the
- j-th element in the first of the two rows to be rotated,
- and A(2,j) would be the j-th in the second, regardless of
- how the array may be stored in the calling routine. [A
- cannot, however, actually be dimensioned thus, since for
- band format, the row number may exceed LDA, which is not
- legal FORTRAN.]
- If LROWS=.TRUE., then LDA must be at least 1, otherwise
- it must be at least NL minus the number of .TRUE. values
- in XLEFT and XRIGHT.
- Not modified.
-
- XLEFT - COMPLEX*16
- If LLEFT is .TRUE., then XLEFT will be used and modified
- instead of A(2,1) (if LROWS=.TRUE.) or A(1,2)
- (if LROWS=.FALSE.).
- Read and modified.
-
- XRIGHT - COMPLEX*16
- If LRIGHT is .TRUE., then XRIGHT will be used and modified
- instead of A(1,NL) (if LROWS=.TRUE.) or A(NL,1)
- (if LROWS=.FALSE.).
- Read and modified.
-
- =====================================================================
-
-
-
- Set up indices, arrays for ends
-
- Parameter adjustments */
- --a;
-
- /* Function Body */
- if (*lrows) {
- iinc = *lda;
- inext = 1;
- } else {
- iinc = 1;
- inext = *lda;
- }
-
- if (*lleft) {
- nt = 1;
- ix = iinc + 1;
- iy = *lda + 2;
- xt[0].r = a[1].r, xt[0].i = a[1].i;
- yt[0].r = xleft->r, yt[0].i = xleft->i;
- } else {
- nt = 0;
- ix = 1;
- iy = inext + 1;
- }
-
- if (*lright) {
- iyt = inext + 1 + (*nl - 1) * iinc;
- ++nt;
- i__1 = nt - 1;
- xt[i__1].r = xright->r, xt[i__1].i = xright->i;
- i__1 = nt - 1;
- i__2 = iyt;
- yt[i__1].r = a[i__2].r, yt[i__1].i = a[i__2].i;
- }
-
-/* Check for errors */
-
- if (*nl < nt) {
- xerbla_("ZLAROT", &c__4);
- return 0;
- }
- if (*lda <= 0 || ! (*lrows) && *lda < *nl - nt) {
- xerbla_("ZLAROT", &c__8);
- return 0;
- }
-
-/* Rotate
-
- ZROT( NL-NT, A(IX),IINC, A(IY),IINC, C, S ) with complex C, S */
-
- i__1 = *nl - nt - 1;
- for (j = 0; j <= i__1; ++j) {
- i__2 = ix + j * iinc;
- z__2.r = c->r * a[i__2].r - c->i * a[i__2].i, z__2.i = c->r * a[i__2]
- .i + c->i * a[i__2].r;
- i__3 = iy + j * iinc;
- z__3.r = s->r * a[i__3].r - s->i * a[i__3].i, z__3.i = s->r * a[i__3]
- .i + s->i * a[i__3].r;
- z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
- tempx.r = z__1.r, tempx.i = z__1.i;
- i__2 = iy + j * iinc;
- d_cnjg(&z__4, s);
- z__3.r = -z__4.r, z__3.i = -z__4.i;
- i__3 = ix + j * iinc;
- z__2.r = z__3.r * a[i__3].r - z__3.i * a[i__3].i, z__2.i = z__3.r * a[
- i__3].i + z__3.i * a[i__3].r;
- d_cnjg(&z__6, c);
- i__4 = iy + j * iinc;
- z__5.r = z__6.r * a[i__4].r - z__6.i * a[i__4].i, z__5.i = z__6.r * a[
- i__4].i + z__6.i * a[i__4].r;
- z__1.r = z__2.r + z__5.r, z__1.i = z__2.i + z__5.i;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
- i__2 = ix + j * iinc;
- a[i__2].r = tempx.r, a[i__2].i = tempx.i;
-/* L10: */
- }
-
-/* ZROT( NT, XT,1, YT,1, C, S ) with complex C, S */
-
- i__1 = nt;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j - 1;
- z__2.r = c->r * xt[i__2].r - c->i * xt[i__2].i, z__2.i = c->r * xt[
- i__2].i + c->i * xt[i__2].r;
- i__3 = j - 1;
- z__3.r = s->r * yt[i__3].r - s->i * yt[i__3].i, z__3.i = s->r * yt[
- i__3].i + s->i * yt[i__3].r;
- z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
- tempx.r = z__1.r, tempx.i = z__1.i;
- i__2 = j - 1;
- d_cnjg(&z__4, s);
- z__3.r = -z__4.r, z__3.i = -z__4.i;
- i__3 = j - 1;
- z__2.r = z__3.r * xt[i__3].r - z__3.i * xt[i__3].i, z__2.i = z__3.r *
- xt[i__3].i + z__3.i * xt[i__3].r;
- d_cnjg(&z__6, c);
- i__4 = j - 1;
- z__5.r = z__6.r * yt[i__4].r - z__6.i * yt[i__4].i, z__5.i = z__6.r *
- yt[i__4].i + z__6.i * yt[i__4].r;
- z__1.r = z__2.r + z__5.r, z__1.i = z__2.i + z__5.i;
- yt[i__2].r = z__1.r, yt[i__2].i = z__1.i;
- i__2 = j - 1;
- xt[i__2].r = tempx.r, xt[i__2].i = tempx.i;
-/* L20: */
- }
-
-/* Stuff values back into XLEFT, XRIGHT, etc. */
-
- if (*lleft) {
- a[1].r = xt[0].r, a[1].i = xt[0].i;
- xleft->r = yt[0].r, xleft->i = yt[0].i;
- }
-
- if (*lright) {
- i__1 = nt - 1;
- xright->r = xt[i__1].r, xright->i = xt[i__1].i;
- i__1 = iyt;
- i__2 = nt - 1;
- a[i__1].r = yt[i__2].r, a[i__1].i = yt[i__2].i;
- }
-
- return 0;
-
-/* End of ZLAROT */
-
-} /* zlarot_ */
-
diff --git a/TESTING/MATGEN/zlartg.c b/TESTING/MATGEN/zlartg.c
deleted file mode 100644
index 5107870..0000000
--- a/TESTING/MATGEN/zlartg.c
+++ /dev/null
@@ -1,146 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int zlartg_(doublecomplex *f, doublecomplex *g, doublereal *
- cs, doublecomplex *sn, doublecomplex *r)
-{
-/* -- 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
-
-
- Purpose
- =======
-
- ZLARTG generates a plane rotation so that
-
- [ CS SN ] [ F ] [ R ]
- [ __ ] . [ ] = [ ] where CS**2 + |SN|**2 = 1.
- [ -SN CS ] [ G ] [ 0 ]
-
- This is a faster version of the BLAS1 routine ZROTG, except for
- the following differences:
- F and G are unchanged on return.
- If G=0, then CS=1 and SN=0.
- If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any
- floating point operations.
-
- Arguments
- =========
-
- F (input) COMPLEX*16
- The first component of vector to be rotated.
-
- G (input) COMPLEX*16
- The second component of vector to be rotated.
-
- CS (output) DOUBLE PRECISION
- The cosine of the rotation.
-
- SN (output) COMPLEX*16
- The sine of the rotation.
-
- R (output) COMPLEX*16
- The nonzero component of the rotated vector.
-
- =====================================================================
-
-
-
- [ 25 or 38 ops for main paths ] */
- /* System generated locals */
- doublereal d__1, d__2;
- doublecomplex z__1, z__2, z__3;
- /* Builtin functions */
- void d_cnjg(doublecomplex *, doublecomplex *);
- double z_abs(doublecomplex *), d_imag(doublecomplex *), sqrt(doublereal);
- /* Local variables */
- static doublereal d, f1, f2, g1, g2, fa, ga, di;
- static doublecomplex fs, gs, ss;
-
-
- if (g->r == 0. && g->i == 0.) {
- *cs = 1.;
- sn->r = 0., sn->i = 0.;
- r->r = f->r, r->i = f->i;
- } else if (f->r == 0. && f->i == 0.) {
- *cs = 0.;
-
- d_cnjg(&z__2, g);
- d__1 = z_abs(g);
- z__1.r = z__2.r / d__1, z__1.i = z__2.i / d__1;
- sn->r = z__1.r, sn->i = z__1.i;
- d__1 = z_abs(g);
- r->r = d__1, r->i = 0.;
-
-/* SN = ONE
- R = G */
-
- } else {
- f1 = (d__1 = f->r, abs(d__1)) + (d__2 = d_imag(f), abs(d__2));
- g1 = (d__1 = g->r, abs(d__1)) + (d__2 = d_imag(g), abs(d__2));
- if (f1 >= g1) {
- z__1.r = g->r / f1, z__1.i = g->i / f1;
- gs.r = z__1.r, gs.i = z__1.i;
-/* Computing 2nd power */
- d__1 = gs.r;
-/* Computing 2nd power */
- d__2 = d_imag(&gs);
- g2 = d__1 * d__1 + d__2 * d__2;
- z__1.r = f->r / f1, z__1.i = f->i / f1;
- fs.r = z__1.r, fs.i = z__1.i;
-/* Computing 2nd power */
- d__1 = fs.r;
-/* Computing 2nd power */
- d__2 = d_imag(&fs);
- f2 = d__1 * d__1 + d__2 * d__2;
- d = sqrt(g2 / f2 + 1.);
- *cs = 1. / d;
- d_cnjg(&z__3, &gs);
- z__2.r = z__3.r * fs.r - z__3.i * fs.i, z__2.i = z__3.r * fs.i +
- z__3.i * fs.r;
- d__1 = *cs / f2;
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- sn->r = z__1.r, sn->i = z__1.i;
- z__1.r = d * f->r, z__1.i = d * f->i;
- r->r = z__1.r, r->i = z__1.i;
- } else {
- z__1.r = f->r / g1, z__1.i = f->i / g1;
- fs.r = z__1.r, fs.i = z__1.i;
-/* Computing 2nd power */
- d__1 = fs.r;
-/* Computing 2nd power */
- d__2 = d_imag(&fs);
- f2 = d__1 * d__1 + d__2 * d__2;
- fa = sqrt(f2);
- z__1.r = g->r / g1, z__1.i = g->i / g1;
- gs.r = z__1.r, gs.i = z__1.i;
-/* Computing 2nd power */
- d__1 = gs.r;
-/* Computing 2nd power */
- d__2 = d_imag(&gs);
- g2 = d__1 * d__1 + d__2 * d__2;
- ga = sqrt(g2);
- d = sqrt(f2 / g2 + 1.);
- di = 1. / d;
- *cs = fa / ga * di;
- d_cnjg(&z__3, &gs);
- z__2.r = z__3.r * fs.r - z__3.i * fs.i, z__2.i = z__3.r * fs.i +
- z__3.i * fs.r;
- d__1 = fa * ga;
- z__1.r = z__2.r / d__1, z__1.i = z__2.i / d__1;
- ss.r = z__1.r, ss.i = z__1.i;
- z__1.r = di * ss.r, z__1.i = di * ss.i;
- sn->r = z__1.r, sn->i = z__1.i;
- z__2.r = g->r * ss.r - g->i * ss.i, z__2.i = g->r * ss.i + g->i *
- ss.r;
- z__1.r = d * z__2.r, z__1.i = d * z__2.i;
- r->r = z__1.r, r->i = z__1.i;
- }
- }
- return 0;
-
-/* End of ZLARTG */
-
-} /* zlartg_ */
-
diff --git a/TESTING/MATGEN/zlaset.c b/TESTING/MATGEN/zlaset.c
deleted file mode 100644
index 6ddfc9c..0000000
--- a/TESTING/MATGEN/zlaset.c
+++ /dev/null
@@ -1,145 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int zlaset_(char *uplo, integer *m, integer *n,
- doublecomplex *alpha, doublecomplex *beta, doublecomplex *a, integer *
- lda)
-{
-/* -- 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
- =======
-
- ZLASET initializes a 2-D array A to BETA on the diagonal and
- ALPHA on the offdiagonals.
-
- Arguments
- =========
-
- UPLO (input) CHARACTER*1
- Specifies the part of the matrix A to be set.
- = 'U': Upper triangular part is set. The lower triangle
-
- is unchanged.
- = 'L': Lower triangular part is set. The upper triangle
-
- is unchanged.
- Otherwise: All of the matrix A is set.
-
- M (input) INTEGER
- On entry, M specifies the number of rows of A.
-
- N (input) INTEGER
- On entry, N specifies the number of columns of A.
-
- ALPHA (input) COMPLEX*16
- All the offdiagonal array elements are set to ALPHA.
-
- BETA (input) COMPLEX*16
- All the diagonal array elements are set to BETA.
-
- A (input/output) COMPLEX*16 array, dimension (LDA,N)
- On entry, the m by n matrix A.
- On exit, A(i,j) = ALPHA, 1 <= i <= m, 1 <= j <= n, i.ne.j;
- A(i,i) = BETA , 1 <= i <= min(m,n)
-
- LDA (input) INTEGER
- The leading dimension of the array A. LDA >= max(1,M).
-
- =====================================================================
-
-
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3;
- /* Local variables */
- static integer i, j;
- extern logical lsame_(char *, char *);
-
-
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- if (lsame_(uplo, "U")) {
-
-/* Set the diagonal to BETA and the strictly upper triangular
-
- part of the array to ALPHA. */
-
- i__1 = *n;
- for (j = 2; j <= *n; ++j) {
-/* Computing MIN */
- i__3 = j - 1;
- i__2 = min(i__3,*m);
- for (i = 1; i <= min(j-1,*m); ++i) {
- i__3 = i + j * a_dim1;
- A(i,j).r = alpha->r, A(i,j).i = alpha->i;
-/* L10: */
- }
-/* L20: */
- }
- i__1 = min(*n,*m);
- for (i = 1; i <= min(*n,*m); ++i) {
- i__2 = i + i * a_dim1;
- A(i,i).r = beta->r, A(i,i).i = beta->i;
-/* L30: */
- }
-
- } else if (lsame_(uplo, "L")) {
-
-/* Set the diagonal to BETA and the strictly lower triangular
-
- part of the array to ALPHA. */
-
- i__1 = min(*m,*n);
- for (j = 1; j <= min(*m,*n); ++j) {
- i__2 = *m;
- for (i = j + 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- A(i,j).r = alpha->r, A(i,j).i = alpha->i;
-/* L40: */
- }
-/* L50: */
- }
- i__1 = min(*n,*m);
- for (i = 1; i <= min(*n,*m); ++i) {
- i__2 = i + i * a_dim1;
- A(i,i).r = beta->r, A(i,i).i = beta->i;
-/* L60: */
- }
-
- } else {
-
-/* Set the array to BETA on the diagonal and ALPHA on the
- offdiagonal. */
-
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = *m;
- for (i = 1; i <= *m; ++i) {
- i__3 = i + j * a_dim1;
- A(i,j).r = alpha->r, A(i,j).i = alpha->i;
-/* L70: */
- }
-/* L80: */
- }
- i__1 = min(*m,*n);
- for (i = 1; i <= min(*m,*n); ++i) {
- i__2 = i + i * a_dim1;
- A(i,i).r = beta->r, A(i,i).i = beta->i;
-/* L90: */
- }
- }
-
- return 0;
-
-/* End of ZLASET */
-
-} /* zlaset_ */
-
diff --git a/TESTING/MATGEN/zlatb4.c b/TESTING/MATGEN/zlatb4.c
deleted file mode 100644
index 4bfba46..0000000
--- a/TESTING/MATGEN/zlatb4.c
+++ /dev/null
@@ -1,468 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include <string.h>
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__2 = 2;
-
-/* Subroutine */ int zlatb4_(char *path, integer *imat, integer *m, integer *
- n, char *type, integer *kl, integer *ku, doublereal *anorm, integer *
- mode, doublereal *cndnum, char *dist)
-{
- /* Initialized data */
-
- static logical first = TRUE_;
-
- /* System generated locals */
- integer i__1;
-
- /* Builtin functions */
- double sqrt(doublereal);
-
-
- /* Local variables */
- static doublereal badc1, badc2, large, small;
- static char c2[2];
- extern /* Subroutine */ int dlabad_(doublereal *, doublereal *);
- extern doublereal dlamch_(char *);
- extern logical lsamen_(integer *, char *, char *);
- static integer mat;
- static doublereal eps;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- ZLATB4 sets parameters for the matrix generator based on the type of
-
- matrix to be generated.
-
- Arguments
- =========
-
- PATH (input) CHARACTER*3
- The LAPACK path name.
-
- IMAT (input) INTEGER
- An integer key describing which matrix to generate for this
- path.
-
- M (input) INTEGER
- The number of rows in the matrix to be generated.
-
- N (input) INTEGER
- The number of columns in the matrix to be generated.
-
- TYPE (output) CHARACTER*1
- The type of the matrix to be generated:
- = 'S': symmetric matrix
- = 'P': symmetric positive (semi)definite matrix
- = 'N': nonsymmetric matrix
-
- KL (output) INTEGER
- The lower band width of the matrix to be generated.
-
- KU (output) INTEGER
- The upper band width of the matrix to be generated.
-
- ANORM (output) DOUBLE PRECISION
- The desired norm of the matrix to be generated. The diagonal
-
- matrix of singular values or eigenvalues is scaled by this
- value.
-
- MODE (output) INTEGER
- A key indicating how to choose the vector of eigenvalues.
-
- CNDNUM (output) DOUBLE PRECISION
- The desired condition number.
-
- DIST (output) CHARACTER*1
- The type of distribution to be used by the random number
- generator.
-
- =====================================================================
-
-
-
- Set some constants for use in the subroutine. */
-
- if (first) {
- first = FALSE_;
- eps = dlamch_("Precision");
- badc2 = .1 / eps;
- badc1 = sqrt(badc2);
- small = dlamch_("Safe minimum");
- large = 1. / small;
-
-/* If it looks like we're on a Cray, take the square root of
- SMALL and LARGE to avoid overflow and underflow problems. */
-
- dlabad_(&small, &large);
- small = small / eps * .25;
- large = 1. / small;
- }
-
-/* s_copy(c2, path + 1, 2L, 2L);*/
- strncpy(c2, path + 1, 2);
-
-/* Set some parameters we don't plan to change. */
-
- *(unsigned char *)dist = 'S';
- *mode = 3;
-
-/* xQR, xLQ, xQL, xRQ: Set parameters to generate a general
- M x N matrix. */
-
- if (lsamen_(&c__2, c2, "QR") || lsamen_(&c__2, c2, "LQ")
- || lsamen_(&c__2, c2, "QL") || lsamen_(&c__2, c2, "RQ")) {
-
-/* Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- *ku = 0;
- } else if (*imat == 2) {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- } else if (*imat == 3) {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "GE")) {
-
-/* xGE: Set parameters to generate a general M x N matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- *ku = 0;
- } else if (*imat == 2) {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- } else if (*imat == 3) {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
-/* Computing MAX */
- i__1 = *m - 1;
- *kl = max(i__1,0);
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (*imat == 8) {
- *cndnum = badc1;
- } else if (*imat == 9) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 10) {
- *anorm = small;
- } else if (*imat == 11) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "GB")) {
-
-/* xGB: Set parameters to generate a general banded matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the condition number and norm. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2 * .1;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "GT")) {
-
-/* xGT: Set parameters to generate a general tridiagonal matri
-x.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- } else {
- *kl = 1;
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 3) {
- *cndnum = badc1;
- } else if (*imat == 4) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 5 || *imat == 11) {
- *anorm = small;
- } else if (*imat == 6 || *imat == 12) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "PO") || lsamen_(&c__2, c2, "PP") || lsamen_(&c__2, c2, "HE") || lsamen_(&c__2, c2,
- "HP") || lsamen_(&c__2, c2, "SY") || lsamen_(&
- c__2, c2, "SP")) {
-
-/* xPO, xPP, xHE, xHP, xSY, xSP: Set parameters to generate a
-
- symmetric or Hermitian matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = *(unsigned char *)c2;
-
-/* Set the lower and upper bandwidths. */
-
- if (*imat == 1) {
- *kl = 0;
- } else {
-/* Computing MAX */
- i__1 = *n - 1;
- *kl = max(i__1,0);
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 6) {
- *cndnum = badc1;
- } else if (*imat == 7) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 8) {
- *anorm = small;
- } else if (*imat == 9) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "PB")) {
-
-/* xPB: Set parameters to generate a symmetric band matrix.
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'P';
-
-/* Set the norm and condition number. */
-
- if (*imat == 5) {
- *cndnum = badc1;
- } else if (*imat == 6) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 7) {
- *anorm = small;
- } else if (*imat == 8) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "PT")) {
-
-/* xPT: Set parameters to generate a symmetric positive defini
-te
- tridiagonal matrix. */
-
- *(unsigned char *)type = 'P';
- if (*imat == 1) {
- *kl = 0;
- } else {
- *kl = 1;
- }
- *ku = *kl;
-
-/* Set the condition number and norm. */
-
- if (*imat == 3) {
- *cndnum = badc1;
- } else if (*imat == 4) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 5 || *imat == 11) {
- *anorm = small;
- } else if (*imat == 6 || *imat == 12) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "TR") || lsamen_(&c__2, c2, "TP")) {
-
-/* xTR, xTP: Set parameters to generate a triangular matrix
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the lower and upper bandwidths. */
-
- mat = abs(*imat);
- if (mat == 1 || mat == 7) {
- *kl = 0;
- *ku = 0;
- } else if (*imat < 0) {
-/* Computing MAX */
- i__1 = *n - 1;
- *kl = max(i__1,0);
- *ku = 0;
- } else {
- *kl = 0;
-/* Computing MAX */
- i__1 = *n - 1;
- *ku = max(i__1,0);
- }
-
-/* Set the condition number and norm. */
-
- if (mat == 3 || mat == 9) {
- *cndnum = badc1;
- } else if (mat == 4 || mat == 10) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (mat == 5) {
- *anorm = small;
- } else if (mat == 6) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
-
- } else if (lsamen_(&c__2, c2, "TB")) {
-
-/* xTB: Set parameters to generate a triangular band matrix.
-
-
- Set TYPE, the type of matrix to be generated. */
-
- *(unsigned char *)type = 'N';
-
-/* Set the norm and condition number. */
-
- if (*imat == 2 || *imat == 8) {
- *cndnum = badc1;
- } else if (*imat == 3 || *imat == 9) {
- *cndnum = badc2;
- } else {
- *cndnum = 2.;
- }
-
- if (*imat == 4) {
- *anorm = small;
- } else if (*imat == 5) {
- *anorm = large;
- } else {
- *anorm = 1.;
- }
- }
- if (*n <= 1) {
- *cndnum = 1.;
- }
-
- return 0;
-
-/* End of ZLATB4 */
-
-} /* zlatb4_ */
-
diff --git a/TESTING/MATGEN/zlatm2.c b/TESTING/MATGEN/zlatm2.c
deleted file mode 100644
index e4d2d42..0000000
--- a/TESTING/MATGEN/zlatm2.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Double Complex */ VOID zlatm2_(doublecomplex * ret_val, integer *m,
- integer *n, integer *i, integer *j, integer *kl, integer *ku, integer
- *idist, integer *iseed, doublecomplex *d, integer *igrade,
- doublecomplex *dl, doublecomplex *dr, integer *ipvtng, integer *iwork,
- doublereal *sparse)
-{
- /* System generated locals */
- integer i__1, i__2;
- doublecomplex z__1, z__2, z__3;
-
- /* Builtin functions */
- void z_div(doublecomplex *, doublecomplex *, doublecomplex *), d_cnjg(
- doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer isub, jsub;
- static doublecomplex ctemp;
- extern doublereal dlaran_(integer *);
- extern /* Double Complex */ VOID zlarnd_(doublecomplex *, integer *,
- integer *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
-
-
-
- Purpose
- =======
-
- ZLATM2 returns the (I,J) entry of a random matrix of dimension
- (M, N) described by the other paramters. It is called by the
- ZLATMR routine in order to build random test matrices. No error
- checking on parameters is done, because this routine is called in
-
- a tight loop by ZLATMR which has already checked the parameters.
-
- Use of ZLATM2 differs from CLATM3 in the order in which the random
-
- number generator is called to fill in random matrix entries.
- With ZLATM2, the generator is called to fill in the pivoted matrix
-
- columnwise. With ZLATM3, the generator is called to fill in the
- matrix columnwise, after which it is pivoted. Thus, ZLATM3 can
- be used to construct random matrices which differ only in their
- order of rows and/or columns. ZLATM2 is used to construct band
- matrices while avoiding calling the random number generator for
- entries outside the band (and therefore generating random numbers
-
-
- The matrix whose (I,J) entry is returned is constructed as
- follows (this routine only computes one entry):
-
- If I is outside (1..M) or J is outside (1..N), return zero
- (this is convenient for generating matrices in band format).
-
-
- Generate a matrix A with random entries of distribution IDIST.
-
- Set the diagonal to D.
-
- Grade the matrix, if desired, from the left (by DL) and/or
- from the right (by DR or DL) as specified by IGRADE.
-
- Permute, if desired, the rows and/or columns as specified by
- IPVTNG and IWORK.
-
- Band the matrix to have lower bandwidth KL and upper
- bandwidth KU.
-
- Set random entries to zero as specified by SPARSE.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of matrix. Not modified.
-
- N - INTEGER
- Number of columns of matrix. Not modified.
-
- I - INTEGER
- Row of entry to be returned. Not modified.
-
- J - INTEGER
- Column of entry to be returned. Not modified.
-
- KL - INTEGER
- Lower bandwidth. Not modified.
-
- KU - INTEGER
- Upper bandwidth. Not modified.
-
- IDIST - INTEGER
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => real and imaginary parts each UNIFORM( 0, 1 )
- 2 => real and imaginary parts each UNIFORM( -1, 1 )
- 3 => real and imaginary parts each NORMAL( 0, 1 )
- 4 => complex number uniform in DISK( 0 , 1 )
- Not modified.
-
- ISEED - INTEGER array of dimension ( 4 )
- Seed for random number generator.
- Changed on exit.
-
- D - COMPLEX*16 array of dimension ( MIN( I , J ) )
- Diagonal entries of matrix. Not modified.
-
- IGRADE - INTEGER
- Specifies grading of matrix as follows:
- 0 => no grading
- 1 => matrix premultiplied by diag( DL )
- 2 => matrix postmultiplied by diag( DR )
- 3 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- 4 => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- 5 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( CONJG(DL) )
- 6 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- Not modified.
-
- DL - COMPLEX*16 array ( I or J, as appropriate )
- Left scale factors for grading matrix. Not modified.
-
- DR - COMPLEX*16 array ( I or J, as appropriate )
- Right scale factors for grading matrix. Not modified.
-
- IPVTNG - INTEGER
- On entry specifies pivoting permutations as follows:
- 0 => none.
- 1 => row pivoting.
- 2 => column pivoting.
- 3 => full pivoting, i.e., on both sides.
- Not modified.
-
- IWORK - INTEGER array ( I or J, as appropriate )
- This array specifies the permutation used. The
- row (or column) in position K was originally in
- position IWORK( K ).
- This differs from IWORK for ZLATM3. Not modified.
-
- SPARSE - DOUBLE PRECISION between 0. and 1.
- On entry specifies the sparsity of the matrix
- if sparse matix is to be generated.
- SPARSE should lie between 0 and 1.
- A uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- =====================================================================
-
-
-
-
-
-
-
-
-
-
- -----------------------------------------------------------------------
-
-
-
-
- Check for I and J in range
-
- Parameter adjustments */
- --iwork;
- --dr;
- --dl;
- --d;
- --iseed;
-
- /* Function Body */
- if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
- ret_val->r = 0., ret_val->i = 0.;
- return ;
- }
-
-/* Check for banding */
-
- if (*j > *i + *ku || *j < *i - *kl) {
- ret_val->r = 0., ret_val->i = 0.;
- return ;
- }
-
-/* Check for sparsity */
-
- if (*sparse > 0.) {
- if (dlaran_(&iseed[1]) < *sparse) {
- ret_val->r = 0., ret_val->i = 0.;
- return ;
- }
- }
-
-/* Compute subscripts depending on IPVTNG */
-
- if (*ipvtng == 0) {
- isub = *i;
- jsub = *j;
- } else if (*ipvtng == 1) {
- isub = iwork[*i];
- jsub = *j;
- } else if (*ipvtng == 2) {
- isub = *i;
- jsub = iwork[*j];
- } else if (*ipvtng == 3) {
- isub = iwork[*i];
- jsub = iwork[*j];
- }
-
-/* Compute entry and grade it according to IGRADE */
-
- if (isub == jsub) {
- i__1 = isub;
- ctemp.r = d[i__1].r, ctemp.i = d[i__1].i;
- } else {
- zlarnd_(&z__1, idist, &iseed[1]);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- }
- if (*igrade == 1) {
- i__1 = isub;
- z__1.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__1.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 2) {
- i__1 = jsub;
- z__1.r = ctemp.r * dr[i__1].r - ctemp.i * dr[i__1].i, z__1.i =
- ctemp.r * dr[i__1].i + ctemp.i * dr[i__1].r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 3) {
- i__1 = isub;
- z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- i__2 = jsub;
- z__1.r = z__2.r * dr[i__2].r - z__2.i * dr[i__2].i, z__1.i = z__2.r *
- dr[i__2].i + z__2.i * dr[i__2].r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 4 && isub != jsub) {
- i__1 = isub;
- z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- z_div(&z__1, &z__2, &dl[jsub]);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 5) {
- i__1 = isub;
- z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- d_cnjg(&z__3, &dl[jsub]);
- z__1.r = z__2.r * z__3.r - z__2.i * z__3.i, z__1.i = z__2.r * z__3.i
- + z__2.i * z__3.r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 6) {
- i__1 = isub;
- z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- i__2 = jsub;
- z__1.r = z__2.r * dl[i__2].r - z__2.i * dl[i__2].i, z__1.i = z__2.r *
- dl[i__2].i + z__2.i * dl[i__2].r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- }
- ret_val->r = ctemp.r, ret_val->i = ctemp.i;
- return ;
-
-/* End of ZLATM2 */
-
-} /* zlatm2_ */
-
diff --git a/TESTING/MATGEN/zlatm3.c b/TESTING/MATGEN/zlatm3.c
deleted file mode 100644
index 5ed30b7..0000000
--- a/TESTING/MATGEN/zlatm3.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Double Complex */ VOID zlatm3_(doublecomplex * ret_val, integer *m,
- integer *n, integer *i, integer *j, integer *isub, integer *jsub,
- integer *kl, integer *ku, integer *idist, integer *iseed,
- doublecomplex *d, integer *igrade, doublecomplex *dl, doublecomplex *
- dr, integer *ipvtng, integer *iwork, doublereal *sparse)
-{
- /* System generated locals */
- integer i__1, i__2;
- doublecomplex z__1, z__2, z__3;
-
- /* Builtin functions */
- void z_div(doublecomplex *, doublecomplex *, doublecomplex *), d_cnjg(
- doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static doublecomplex ctemp;
- extern doublereal dlaran_(integer *);
- extern /* Double Complex */ VOID zlarnd_(doublecomplex *, integer *,
- integer *);
-
-
-/* -- LAPACK auxiliary test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
-
-
-
- Purpose
- =======
-
- ZLATM3 returns the (ISUB,JSUB) entry of a random matrix of
- dimension (M, N) described by the other paramters. (ISUB,JSUB)
- is the final position of the (I,J) entry after pivoting
- according to IPVTNG and IWORK. ZLATM3 is called by the
- ZLATMR routine in order to build random test matrices. No error
- checking on parameters is done, because this routine is called in
-
- a tight loop by ZLATMR which has already checked the parameters.
-
- Use of ZLATM3 differs from CLATM2 in the order in which the random
-
- number generator is called to fill in random matrix entries.
- With ZLATM2, the generator is called to fill in the pivoted matrix
-
- columnwise. With ZLATM3, the generator is called to fill in the
- matrix columnwise, after which it is pivoted. Thus, ZLATM3 can
- be used to construct random matrices which differ only in their
- order of rows and/or columns. ZLATM2 is used to construct band
- matrices while avoiding calling the random number generator for
- entries outside the band (and therefore generating random numbers
-
- in different orders for different pivot orders).
-
- The matrix whose (ISUB,JSUB) entry is returned is constructed as
- follows (this routine only computes one entry):
-
- If ISUB is outside (1..M) or JSUB is outside (1..N), return zero
-
- (this is convenient for generating matrices in band format).
-
-
- Generate a matrix A with random entries of distribution IDIST.
-
- Set the diagonal to D.
-
- Grade the matrix, if desired, from the left (by DL) and/or
- from the right (by DR or DL) as specified by IGRADE.
-
- Permute, if desired, the rows and/or columns as specified by
- IPVTNG and IWORK.
-
- Band the matrix to have lower bandwidth KL and upper
- bandwidth KU.
-
- Set random entries to zero as specified by SPARSE.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of matrix. Not modified.
-
- N - INTEGER
- Number of columns of matrix. Not modified.
-
- I - INTEGER
- Row of unpivoted entry to be returned. Not modified.
-
- J - INTEGER
- Column of unpivoted entry to be returned. Not modified.
-
- ISUB - INTEGER
- Row of pivoted entry to be returned. Changed on exit.
-
- JSUB - INTEGER
- Column of pivoted entry to be returned. Changed on exit.
-
- KL - INTEGER
- Lower bandwidth. Not modified.
-
- KU - INTEGER
- Upper bandwidth. Not modified.
-
- IDIST - INTEGER
- On entry, IDIST specifies the type of distribution to be
- used to generate a random matrix .
- 1 => real and imaginary parts each UNIFORM( 0, 1 )
- 2 => real and imaginary parts each UNIFORM( -1, 1 )
- 3 => real and imaginary parts each NORMAL( 0, 1 )
- 4 => complex number uniform in DISK( 0 , 1 )
- Not modified.
-
- ISEED - INTEGER array of dimension ( 4 )
- Seed for random number generator.
- Changed on exit.
-
- D - COMPLEX*16 array of dimension ( MIN( I , J ) )
- Diagonal entries of matrix. Not modified.
-
- IGRADE - INTEGER
- Specifies grading of matrix as follows:
- 0 => no grading
- 1 => matrix premultiplied by diag( DL )
- 2 => matrix postmultiplied by diag( DR )
- 3 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- 4 => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- 5 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( CONJG(DL) )
- 6 => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- Not modified.
-
- DL - COMPLEX*16 array ( I or J, as appropriate )
- Left scale factors for grading matrix. Not modified.
-
- DR - COMPLEX*16 array ( I or J, as appropriate )
- Right scale factors for grading matrix. Not modified.
-
- IPVTNG - INTEGER
- On entry specifies pivoting permutations as follows:
- 0 => none.
- 1 => row pivoting.
- 2 => column pivoting.
- 3 => full pivoting, i.e., on both sides.
- Not modified.
-
- IWORK - INTEGER array ( I or J, as appropriate )
- This array specifies the permutation used. The
- row (or column) originally in position K is in
- position IWORK( K ) after pivoting.
- This differs from IWORK for ZLATM2. Not modified.
-
- SPARSE - DOUBLE PRECISION between 0. and 1.
- On entry specifies the sparsity of the matrix
- if sparse matix is to be generated.
- SPARSE should lie between 0 and 1.
- A uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- =====================================================================
-
-
-
-
-
-
-
-
-
-
- -----------------------------------------------------------------------
-
-
-
-
- Check for I and J in range
-
- Parameter adjustments */
- --iwork;
- --dr;
- --dl;
- --d;
- --iseed;
-
- /* Function Body */
- if (*i < 1 || *i > *m || *j < 1 || *j > *n) {
- *isub = *i;
- *jsub = *j;
- ret_val->r = 0., ret_val->i = 0.;
- return ;
- }
-
-/* Compute subscripts depending on IPVTNG */
-
- if (*ipvtng == 0) {
- *isub = *i;
- *jsub = *j;
- } else if (*ipvtng == 1) {
- *isub = iwork[*i];
- *jsub = *j;
- } else if (*ipvtng == 2) {
- *isub = *i;
- *jsub = iwork[*j];
- } else if (*ipvtng == 3) {
- *isub = iwork[*i];
- *jsub = iwork[*j];
- }
-
-/* Check for banding */
-
- if (*jsub > *isub + *ku || *jsub < *isub - *kl) {
- ret_val->r = 0., ret_val->i = 0.;
- return ;
- }
-
-/* Check for sparsity */
-
- if (*sparse > 0.) {
- if (dlaran_(&iseed[1]) < *sparse) {
- ret_val->r = 0., ret_val->i = 0.;
- return ;
- }
- }
-
-/* Compute entry and grade it according to IGRADE */
-
- if (*i == *j) {
- i__1 = *i;
- ctemp.r = d[i__1].r, ctemp.i = d[i__1].i;
- } else {
- zlarnd_(&z__1, idist, &iseed[1]);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- }
- if (*igrade == 1) {
- i__1 = *i;
- z__1.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__1.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 2) {
- i__1 = *j;
- z__1.r = ctemp.r * dr[i__1].r - ctemp.i * dr[i__1].i, z__1.i =
- ctemp.r * dr[i__1].i + ctemp.i * dr[i__1].r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 3) {
- i__1 = *i;
- z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- i__2 = *j;
- z__1.r = z__2.r * dr[i__2].r - z__2.i * dr[i__2].i, z__1.i = z__2.r *
- dr[i__2].i + z__2.i * dr[i__2].r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 4 && *i != *j) {
- i__1 = *i;
- z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- z_div(&z__1, &z__2, &dl[*j]);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 5) {
- i__1 = *i;
- z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- d_cnjg(&z__3, &dl[*j]);
- z__1.r = z__2.r * z__3.r - z__2.i * z__3.i, z__1.i = z__2.r * z__3.i
- + z__2.i * z__3.r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- } else if (*igrade == 6) {
- i__1 = *i;
- z__2.r = ctemp.r * dl[i__1].r - ctemp.i * dl[i__1].i, z__2.i =
- ctemp.r * dl[i__1].i + ctemp.i * dl[i__1].r;
- i__2 = *j;
- z__1.r = z__2.r * dl[i__2].r - z__2.i * dl[i__2].i, z__1.i = z__2.r *
- dl[i__2].i + z__2.i * dl[i__2].r;
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- }
- ret_val->r = ctemp.r, ret_val->i = ctemp.i;
- return ;
-
-/* End of ZLATM3 */
-
-} /* zlatm3_ */
-
diff --git a/TESTING/MATGEN/zlatme.c b/TESTING/MATGEN/zlatme.c
deleted file mode 100644
index 5cab7ce..0000000
--- a/TESTING/MATGEN/zlatme.c
+++ /dev/null
@@ -1,627 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static doublecomplex c_b1 = {0.,0.};
-static doublecomplex c_b2 = {1.,0.};
-static integer c__1 = 1;
-static integer c__0 = 0;
-static integer c__5 = 5;
-
-/* Subroutine */ int zlatme_(integer *n, char *dist, integer *iseed,
- doublecomplex *d, integer *mode, doublereal *cond, doublecomplex *
- dmax__, char *ei, char *rsign, char *upper, char *sim, doublereal *ds,
- integer *modes, doublereal *conds, integer *kl, integer *ku,
- doublereal *anorm, doublecomplex *a, integer *lda, doublecomplex *
- work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2;
- doublereal d__1, d__2;
- doublecomplex z__1, z__2;
-
- /* Builtin functions */
- double z_abs(doublecomplex *);
- void d_cnjg(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static logical bads;
- static integer isim;
- static doublereal temp;
- static integer i, j;
- static doublecomplex alpha;
- extern logical lsame_(char *, char *);
- static integer iinfo;
- static doublereal tempa[1];
- static integer icols;
- extern /* Subroutine */ int zgerc_(integer *, integer *, doublecomplex *,
- doublecomplex *, integer *, doublecomplex *, integer *,
- doublecomplex *, integer *);
- static integer idist;
- extern /* Subroutine */ int zscal_(integer *, doublecomplex *,
- doublecomplex *, integer *), zgemv_(char *, integer *, integer *,
- doublecomplex *, doublecomplex *, integer *, doublecomplex *,
- integer *, doublecomplex *, doublecomplex *, integer *);
- static integer irows;
- extern /* Subroutine */ int zcopy_(integer *, doublecomplex *, integer *,
- doublecomplex *, integer *), dlatm1_(integer *, doublereal *,
- integer *, integer *, integer *, doublereal *, integer *, integer
- *), zlatm1_(integer *, doublereal *, integer *, integer *,
- integer *, doublecomplex *, integer *, integer *);
- static integer ic, jc, ir;
- static doublereal ralpha;
- extern /* Subroutine */ int xerbla_(char *, integer *);
- extern doublereal zlange_(char *, integer *, integer *, doublecomplex *,
- integer *, doublereal *);
- extern /* Subroutine */ int zdscal_(integer *, doublereal *,
- doublecomplex *, integer *), zlarge_(integer *, doublecomplex *,
- integer *, integer *, doublecomplex *, integer *), zlarfg_(
- integer *, doublecomplex *, doublecomplex *, integer *,
- doublecomplex *), zlacgv_(integer *, doublecomplex *, integer *);
- extern /* Double Complex */ void zlarnd_(doublecomplex *, integer *,
- integer *);
- static integer irsign;
- extern /* Subroutine */ int zlaset_(char *, integer *, integer *,
- doublecomplex *, doublecomplex *, doublecomplex *, integer *);
- static integer iupper;
- extern /* Subroutine */ int zlarnv_(integer *, integer *, integer *,
- doublecomplex *);
- static doublecomplex xnorms;
- static integer jcr;
- static doublecomplex tau;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- ZLATME generates random non-symmetric square matrices with
- specified eigenvalues for testing LAPACK programs.
-
- ZLATME operates by applying the following sequence of
- operations:
-
- 1. Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX, and RSIGN
- as described below.
-
- 2. If UPPER='T', the upper triangle of A is set to random values
- out of distribution DIST.
-
- 3. If SIM='T', A is multiplied on the left by a random matrix
- X, whose singular values are specified by DS, MODES, and
- CONDS, and on the right by X inverse.
-
- 4. If KL < N-1, the lower bandwidth is reduced to KL using
- Householder transformations. If KU < N-1, the upper
- bandwidth is reduced to KU.
-
- 5. If ANORM is not negative, the matrix is scaled to have
- maximum-element-norm ANORM.
-
- (Note: since the matrix cannot be reduced beyond Hessenberg form,
-
- no packing options are available.)
-
- Arguments
- =========
-
- N - INTEGER
- The number of columns (or rows) of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate the random eigen-/singular values, and on the
- upper triangle (see UPPER).
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- 'D' => uniform on the complex disc |z| < 1.
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to ZLATME
- to continue the same random number sequence.
- Changed on exit.
-
- D - COMPLEX*16 array, dimension ( N )
- This array is used to specify the eigenvalues of A. If
- MODE=0, then D is assumed to contain the eigenvalues
- otherwise they will be computed according to MODE, COND,
- DMAX, and RSIGN and placed in D.
- Modified if MODE is nonzero.
-
- MODE - INTEGER
- On entry this describes how the eigenvalues are to
- be specified:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is between 1 and 4, D has entries ranging
- from 1 to 1/COND, if between -1 and -4, D has entries
- ranging from 1/COND to 1,
- Not modified.
-
- COND - DOUBLE PRECISION
- On entry, this is used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - COMPLEX*16
- If MODE is neither -6, 0 nor 6, the contents of D, as
- computed according to MODE and COND, will be scaled by
- DMAX / max(abs(D(i))). Note that DMAX need not be
- positive or real: if DMAX is negative or complex (or zero),
-
- D will be scaled by a negative or complex number (or zero).
-
- If RSIGN='F' then the largest (absolute) eigenvalue will be
-
- equal to DMAX.
- Not modified.
-
- EI - CHARACTER*1 (ignored)
- Not modified.
-
- RSIGN - CHARACTER*1
- If MODE is not 0, 6, or -6, and RSIGN='T', then the
- elements of D, as computed according to MODE and COND, will
-
- be multiplied by a random complex number from the unit
- circle |z| = 1. If RSIGN='F', they will not be. RSIGN may
-
- only have the values 'T' or 'F'.
- Not modified.
-
- UPPER - CHARACTER*1
- If UPPER='T', then the elements of A above the diagonal
- will be set to random numbers out of DIST. If UPPER='F',
- they will not. UPPER may only have the values 'T' or 'F'.
- Not modified.
-
- SIM - CHARACTER*1
- If SIM='T', then A will be operated on by a "similarity
- transform", i.e., multiplied on the left by a matrix X and
- on the right by X inverse. X = U S V, where U and V are
- random unitary matrices and S is a (diagonal) matrix of
- singular values specified by DS, MODES, and CONDS. If
- SIM='F', then A will not be transformed.
- Not modified.
-
- DS - DOUBLE PRECISION array, dimension ( N )
- This array is used to specify the singular values of X,
- in the same way that D specifies the eigenvalues of A.
- If MODE=0, the DS contains the singular values, which
- may not be zero.
- Modified if MODE is nonzero.
-
- MODES - INTEGER
- CONDS - DOUBLE PRECISION
- Similar to MODE and COND, but for specifying the diagonal
- of S. MODES=-6 and +6 are not allowed (since they would
- result in randomly ill-conditioned eigenvalues.)
-
- KL - INTEGER
- This specifies the lower bandwidth of the matrix. KL=1
- specifies upper Hessenberg form. If KL is at least N-1,
- then A will have full lower bandwidth.
- Not modified.
-
- KU - INTEGER
- This specifies the upper bandwidth of the matrix. KU=1
- specifies lower Hessenberg form. If KU is at least N-1,
- then A will have full upper bandwidth; if KU and KL
- are both at least N-1, then A will be dense. Only one of
- KU and KL may be less than N-1.
- Not modified.
-
- ANORM - DOUBLE PRECISION
- If ANORM is not negative, then A will be scaled by a non-
- negative real number to make the maximum-element-norm of A
- to be ANORM.
- Not modified.
-
- A - COMPLEX*16 array, dimension ( LDA, N )
- On exit A is the desired test matrix.
- Modified.
-
- LDA - INTEGER
- LDA specifies the first dimension of A as declared in the
- calling program. LDA must be at least M.
- Not modified.
-
- WORK - COMPLEX*16 array, dimension ( 3*N )
- Workspace.
- Modified.
-
- INFO - INTEGER
- Error code. On exit, INFO will be set to one of the
- following values:
- 0 => normal return
- -1 => N negative
- -2 => DIST illegal string
- -5 => MODE not in range -6 to 6
- -6 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -9 => RSIGN is not 'T' or 'F'
- -10 => UPPER is not 'T' or 'F'
- -11 => SIM is not 'T' or 'F'
- -12 => MODES=0 and DS has a zero singular value.
- -13 => MODES is not in the range -5 to 5.
- -14 => MODES is nonzero and CONDS is less than 1.
- -15 => KL is less than 1.
- -16 => KU is less than 1, or KL and KU are both less than
- N-1.
- -19 => LDA is less than M.
- 1 => Error return from ZLATM1 (computing D)
- 2 => Cannot scale to DMAX (max. eigenvalue is 0)
- 3 => Error return from DLATM1 (computing DS)
- 4 => Error return from ZLARGE
- 5 => Zero singular value from DLATM1.
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- --ds;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --work;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else if (lsame_(dist, "D")) {
- idist = 4;
- } else {
- idist = -1;
- }
-
-/* Decode RSIGN */
-
- if (lsame_(rsign, "T")) {
- irsign = 1;
- } else if (lsame_(rsign, "F")) {
- irsign = 0;
- } else {
- irsign = -1;
- }
-
-/* Decode UPPER */
-
- if (lsame_(upper, "T")) {
- iupper = 1;
- } else if (lsame_(upper, "F")) {
- iupper = 0;
- } else {
- iupper = -1;
- }
-
-/* Decode SIM */
-
- if (lsame_(sim, "T")) {
- isim = 1;
- } else if (lsame_(sim, "F")) {
- isim = 0;
- } else {
- isim = -1;
- }
-
-/* Check DS, if MODES=0 and ISIM=1 */
-
- bads = FALSE_;
- if (*modes == 0 && isim == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- if (ds[j] == 0.) {
- bads = TRUE_;
- }
-/* L10: */
- }
- }
-
-/* Set INFO if an error */
-
- if (*n < 0) {
- *info = -1;
- } else if (idist == -1) {
- *info = -2;
- } else if (abs(*mode) > 6) {
- *info = -5;
- } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.) {
- *info = -6;
- } else if (irsign == -1) {
- *info = -9;
- } else if (iupper == -1) {
- *info = -10;
- } else if (isim == -1) {
- *info = -11;
- } else if (bads) {
- *info = -12;
- } else if (isim == 1 && abs(*modes) > 5) {
- *info = -13;
- } else if (isim == 1 && *modes != 0 && *conds < 1.) {
- *info = -14;
- } else if (*kl < 1) {
- *info = -15;
- } else if (*ku < 1 || *ku < *n - 1 && *kl < *n - 1) {
- *info = -16;
- } else if (*lda < max(1,*n)) {
- *info = -19;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("ZLATME", &i__1);
- return 0;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L20: */
- }
-
- if (iseed[4] % 2 != 1) {
- ++iseed[4];
- }
-
-/* 2) Set up diagonal of A
-
- Compute D according to COND and MODE */
-
- zlatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], n, &iinfo);
- if (iinfo != 0) {
- *info = 1;
- return 0;
- }
- if (*mode != 0 && abs(*mode) != 6) {
-
-/* Scale by DMAX */
-
- temp = z_abs(&d[1]);
- i__1 = *n;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- d__1 = temp, d__2 = z_abs(&d[i]);
- temp = max(d__1,d__2);
-/* L30: */
- }
-
- if (temp > 0.) {
- z__1.r = dmax__->r / temp, z__1.i = dmax__->i / temp;
- alpha.r = z__1.r, alpha.i = z__1.i;
- } else {
- *info = 2;
- return 0;
- }
-
- zscal_(n, &alpha, &d[1], &c__1);
-
- }
-
- zlaset_("Full", n, n, &c_b1, &c_b1, &a[a_offset], lda);
- i__1 = *lda + 1;
- zcopy_(n, &d[1], &c__1, &a[a_offset], &i__1);
-
-/* 3) If UPPER='T', set upper triangle of A to random numbers. */
-
- if (iupper != 0) {
- i__1 = *n;
- for (jc = 2; jc <= i__1; ++jc) {
- i__2 = jc - 1;
- zlarnv_(&idist, &iseed[1], &i__2, &a[jc * a_dim1 + 1]);
-/* L40: */
- }
- }
-
-/* 4) If SIM='T', apply similarity transformation.
-
- -1
- Transform is X A X , where X = U S V, thus
-
- it is U S V A V' (1/S) U' */
-
- if (isim != 0) {
-
-/* Compute S (singular values of the eigenvector matrix)
- according to CONDS and MODES */
-
- dlatm1_(modes, conds, &c__0, &c__0, &iseed[1], &ds[1], n, &iinfo);
- if (iinfo != 0) {
- *info = 3;
- return 0;
- }
-
-/* Multiply by V and V' */
-
- zlarge_(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
- if (iinfo != 0) {
- *info = 4;
- return 0;
- }
-
-/* Multiply by S and (1/S) */
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- zdscal_(n, &ds[j], &a[j + a_dim1], lda);
- if (ds[j] != 0.) {
- d__1 = 1. / ds[j];
- zdscal_(n, &d__1, &a[j * a_dim1 + 1], &c__1);
- } else {
- *info = 5;
- return 0;
- }
-/* L50: */
- }
-
-/* Multiply by U and U' */
-
- zlarge_(n, &a[a_offset], lda, &iseed[1], &work[1], &iinfo);
- if (iinfo != 0) {
- *info = 4;
- return 0;
- }
- }
-
-/* 5) Reduce the bandwidth. */
-
- if (*kl < *n - 1) {
-
-/* Reduce bandwidth -- kill column */
-
- i__1 = *n - 1;
- for (jcr = *kl + 1; jcr <= i__1; ++jcr) {
- ic = jcr - *kl;
- irows = *n + 1 - jcr;
- icols = *n + *kl - jcr;
-
- zcopy_(&irows, &a[jcr + ic * a_dim1], &c__1, &work[1], &c__1);
- xnorms.r = work[1].r, xnorms.i = work[1].i;
- zlarfg_(&irows, &xnorms, &work[2], &c__1, &tau);
- d_cnjg(&z__1, &tau);
- tau.r = z__1.r, tau.i = z__1.i;
- work[1].r = 1., work[1].i = 0.;
- zlarnd_(&z__1, &c__5, &iseed[1]);
- alpha.r = z__1.r, alpha.i = z__1.i;
-
- zgemv_("C", &irows, &icols, &c_b2, &a[jcr + (ic + 1) * a_dim1],
- lda, &work[1], &c__1, &c_b1, &work[irows + 1], &c__1);
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&irows, &icols, &z__1, &work[1], &c__1, &work[irows + 1], &
- c__1, &a[jcr + (ic + 1) * a_dim1], lda);
-
- zgemv_("N", n, &irows, &c_b2, &a[jcr * a_dim1 + 1], lda, &work[1],
- &c__1, &c_b1, &work[irows + 1], &c__1);
- d_cnjg(&z__2, &tau);
- z__1.r = -z__2.r, z__1.i = -z__2.i;
- zgerc_(n, &irows, &z__1, &work[irows + 1], &c__1, &work[1], &c__1,
- &a[jcr * a_dim1 + 1], lda);
-
- i__2 = jcr + ic * a_dim1;
- a[i__2].r = xnorms.r, a[i__2].i = xnorms.i;
- i__2 = irows - 1;
- zlaset_("Full", &i__2, &c__1, &c_b1, &c_b1, &a[jcr + 1 + ic *
- a_dim1], lda);
-
- i__2 = icols + 1;
- zscal_(&i__2, &alpha, &a[jcr + ic * a_dim1], lda);
- d_cnjg(&z__1, &alpha);
- zscal_(n, &z__1, &a[jcr * a_dim1 + 1], &c__1);
-/* L60: */
- }
- } else if (*ku < *n - 1) {
-
-/* Reduce upper bandwidth -- kill a row at a time. */
-
- i__1 = *n - 1;
- for (jcr = *ku + 1; jcr <= i__1; ++jcr) {
- ir = jcr - *ku;
- irows = *n + *ku - jcr;
- icols = *n + 1 - jcr;
-
- zcopy_(&icols, &a[ir + jcr * a_dim1], lda, &work[1], &c__1);
- xnorms.r = work[1].r, xnorms.i = work[1].i;
- zlarfg_(&icols, &xnorms, &work[2], &c__1, &tau);
- d_cnjg(&z__1, &tau);
- tau.r = z__1.r, tau.i = z__1.i;
- work[1].r = 1., work[1].i = 0.;
- i__2 = icols - 1;
- zlacgv_(&i__2, &work[2], &c__1);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- alpha.r = z__1.r, alpha.i = z__1.i;
-
- zgemv_("N", &irows, &icols, &c_b2, &a[ir + 1 + jcr * a_dim1], lda,
- &work[1], &c__1, &c_b1, &work[icols + 1], &c__1);
- z__1.r = -tau.r, z__1.i = -tau.i;
- zgerc_(&irows, &icols, &z__1, &work[icols + 1], &c__1, &work[1], &
- c__1, &a[ir + 1 + jcr * a_dim1], lda);
-
- zgemv_("C", &icols, n, &c_b2, &a[jcr + a_dim1], lda, &work[1], &
- c__1, &c_b1, &work[icols + 1], &c__1);
- d_cnjg(&z__2, &tau);
- z__1.r = -z__2.r, z__1.i = -z__2.i;
- zgerc_(&icols, n, &z__1, &work[1], &c__1, &work[icols + 1], &c__1,
- &a[jcr + a_dim1], lda);
-
- i__2 = ir + jcr * a_dim1;
- a[i__2].r = xnorms.r, a[i__2].i = xnorms.i;
- i__2 = icols - 1;
- zlaset_("Full", &c__1, &i__2, &c_b1, &c_b1, &a[ir + (jcr + 1) *
- a_dim1], lda);
-
- i__2 = irows + 1;
- zscal_(&i__2, &alpha, &a[ir + jcr * a_dim1], &c__1);
- d_cnjg(&z__1, &alpha);
- zscal_(n, &z__1, &a[jcr + a_dim1], lda);
-/* L70: */
- }
- }
-
-/* Scale the matrix to have norm ANORM */
-
- if (*anorm >= 0.) {
- temp = zlange_("M", n, n, &a[a_offset], lda, tempa);
- if (temp > 0.) {
- ralpha = *anorm / temp;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- zdscal_(n, &ralpha, &a[j * a_dim1 + 1], &c__1);
-/* L80: */
- }
- }
- }
-
- return 0;
-
-/* End of ZLATME */
-
-} /* zlatme_ */
-
diff --git a/TESTING/MATGEN/zlatmr.c b/TESTING/MATGEN/zlatmr.c
deleted file mode 100644
index 88a0be1..0000000
--- a/TESTING/MATGEN/zlatmr.c
+++ /dev/null
@@ -1,1510 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static integer c__0 = 0;
-static integer c__1 = 1;
-
-/* Subroutine */ int zlatmr_(integer *m, integer *n, char *dist, integer *
- iseed, char *sym, doublecomplex *d, integer *mode, doublereal *cond,
- doublecomplex *dmax__, char *rsign, char *grade, doublecomplex *dl,
- integer *model, doublereal *condl, doublecomplex *dr, integer *moder,
- doublereal *condr, char *pivtng, integer *ipivot, integer *kl,
- integer *ku, doublereal *sparse, doublereal *anorm, char *pack,
- doublecomplex *a, integer *lda, integer *iwork, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4;
- doublereal d__1, d__2;
- doublecomplex z__1, z__2;
-
- /* Builtin functions */
- double z_abs(doublecomplex *);
- void d_cnjg(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer isub, jsub;
- static doublereal temp;
- static integer isym, i, j, k, ipack;
- extern logical lsame_(char *, char *);
- static doublereal tempa[1];
- static doublecomplex ctemp;
- static integer iisub, idist, jjsub, mnmin;
- static logical dzero;
- static integer mnsub;
- static doublereal onorm;
- static integer mxsub, npvts;
- extern /* Subroutine */ int zlatm1_(integer *, doublereal *, integer *,
- integer *, integer *, doublecomplex *, integer *, integer *);
- extern /* Double Complex */ VOID zlatm2_(doublecomplex *, integer *,
- integer *, integer *, integer *, integer *, integer *, integer *,
- integer *, doublecomplex *, integer *, doublecomplex *,
- doublecomplex *, integer *, integer *, doublereal *), zlatm3_(
- doublecomplex *, integer *, integer *, integer *, integer *,
- integer *, integer *, integer *, integer *, integer *, integer *,
- doublecomplex *, integer *, doublecomplex *, doublecomplex *,
- integer *, integer *, doublereal *);
- static doublecomplex calpha;
- static integer igrade;
- static logical fulbnd;
- extern doublereal zlangb_(char *, integer *, integer *, integer *,
- doublecomplex *, integer *, doublereal *);
- extern /* Subroutine */ int xerbla_(char *, integer *);
- static logical badpvt;
- extern doublereal zlange_(char *, integer *, integer *, doublecomplex *,
- integer *, doublereal *);
- extern /* Subroutine */ int zdscal_(integer *, doublereal *,
- doublecomplex *, integer *);
- extern doublereal zlansb_(char *, char *, integer *, integer *,
- doublecomplex *, integer *, doublereal *);
- static integer irsign, ipvtng;
- extern doublereal zlansp_(char *, char *, integer *, doublecomplex *,
- doublereal *), zlansy_(char *, char *, integer *,
- doublecomplex *, integer *, doublereal *);
- static integer kll, kuu;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- February 29, 1992
-
-
- Purpose
- =======
-
- ZLATMR generates random matrices of various types for testing
- LAPACK programs.
-
- ZLATMR operates by applying the following sequence of
- operations:
-
- Generate a matrix A with random entries of distribution DIST
- which is symmetric if SYM='S', Hermitian if SYM='H', and
- nonsymmetric if SYM='N'.
-
- Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX and RSIGN
- as described below.
-
- Grade the matrix, if desired, from the left and/or right
- as specified by GRADE. The inputs DL, MODEL, CONDL, DR,
- MODER and CONDR also determine the grading as described
- below.
-
- Permute, if desired, the rows and/or columns as specified by
- PIVTNG and IPIVOT.
-
- Set random entries to zero, if desired, to get a random sparse
- matrix as specified by SPARSE.
-
- Make A a band matrix, if desired, by zeroing out the matrix
- outside a band of lower bandwidth KL and upper bandwidth KU.
-
-
- Scale A, if desired, to have maximum entry ANORM.
-
- Pack the matrix if desired. Options specified by PACK are:
- no packing
- zero out upper half (if symmetric or Hermitian)
- zero out lower half (if symmetric or Hermitian)
- store the upper half columnwise (if symmetric or Hermitian
- or square upper triangular)
- store the lower half columnwise (if symmetric or Hermitian
- or square lower triangular)
- same as upper half rowwise if symmetric
- same as conjugate upper half rowwise if Hermitian
- store the lower triangle in banded format
- (if symmetric or Hermitian)
- store the upper triangle in banded format
- (if symmetric or Hermitian)
- store the entire matrix in banded format
-
- Note: If two calls to ZLATMR differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
-
- If two calls to ZLATMR both have full bandwidth (KL = M-1
- and KU = N-1), and differ only in the PIVTNG and PACK
- parameters, then the matrices generated will differ only
- in the order of the rows and/or columns, and otherwise
- contain the same data. This consistency cannot be and
- is not maintained with less than full bandwidth.
-
- Arguments
- =========
-
- M - INTEGER
- Number of rows of A. Not modified.
-
- N - INTEGER
- Number of columns of A. Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate a random matrix .
- 'U' => real and imaginary parts are independent
- UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => real and imaginary parts are independent
- UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => real and imaginary parts are independent
- NORMAL( 0, 1 ) ( 'N' for normal )
- 'D' => uniform on interior of unit disk ( 'D' for disk )
- Not modified.
-
- ISEED - INTEGER array, dimension (4)
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to ZLATMR
- to continue the same random number sequence.
- Changed on exit.
-
- SYM - CHARACTER*1
- If SYM='S', generated matrix is symmetric.
- If SYM='H', generated matrix is Hermitian.
- If SYM='N', generated matrix is nonsymmetric.
- Not modified.
-
- D - COMPLEX*16 array, dimension (min(M,N))
- On entry this array specifies the diagonal entries
- of the diagonal of A. D may either be specified
- on entry, or set according to MODE and COND as described
- below. If the matrix is Hermitian, the real part of D
- will be taken. May be changed on exit if MODE is nonzero.
-
- MODE - INTEGER
- On entry describes how D is to be used:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- Not modified.
-
- COND - DOUBLE PRECISION
- On entry, used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - COMPLEX*16
- If MODE neither -6, 0 nor 6, the diagonal is scaled by
- DMAX / max(abs(D(i))), so that maximum absolute entry
- of diagonal is abs(DMAX). If DMAX is complex (or zero),
- diagonal will be scaled by a complex number (or zero).
-
- RSIGN - CHARACTER*1
- If MODE neither -6, 0 nor 6, specifies sign of diagonal
- as follows:
- 'T' => diagonal entries are multiplied by a random complex
- number uniformly distributed with absolute value 1
- 'F' => diagonal unchanged
- Not modified.
-
- GRADE - CHARACTER*1
- Specifies grading of matrix as follows:
- 'N' => no grading
- 'L' => matrix premultiplied by diag( DL )
- (only if matrix nonsymmetric)
- 'R' => matrix postmultiplied by diag( DR )
- (only if matrix nonsymmetric)
- 'B' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DR )
- (only if matrix nonsymmetric)
- 'H' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( CONJG(DL) )
- (only if matrix Hermitian or nonsymmetric)
- 'S' => matrix premultiplied by diag( DL ) and
- postmultiplied by diag( DL )
- (only if matrix symmetric or nonsymmetric)
- 'E' => matrix premultiplied by diag( DL ) and
- postmultiplied by inv( diag( DL ) )
- ( 'S' for similarity )
- (only if matrix nonsymmetric)
- Note: if GRADE='S', then M must equal N.
- Not modified.
-
- DL - COMPLEX*16 array, dimension (M)
- If MODEL=0, then on entry this array specifies the diagonal
-
- entries of a diagonal matrix used as described under GRADE
- above. If MODEL is not zero, then DL will be set according
- to MODEL and CONDL, analogous to the way D is set according
-
- to MODE and COND (except there is no DMAX parameter for DL).
-
- If GRADE='E', then DL cannot have zero entries.
- Not referenced if GRADE = 'N' or 'R'. Changed on exit.
-
- MODEL - INTEGER
- This specifies how the diagonal array DL is to be computed,
-
- just as MODE specifies how D is to be computed.
- Not modified.
-
- CONDL - DOUBLE PRECISION
- When MODEL is not zero, this specifies the condition number
-
- of the computed DL. Not modified.
-
- DR - COMPLEX*16 array, dimension (N)
- If MODER=0, then on entry this array specifies the diagonal
-
- entries of a diagonal matrix used as described under GRADE
- above. If MODER is not zero, then DR will be set according
- to MODER and CONDR, analogous to the way D is set according
-
- to MODE and COND (except there is no DMAX parameter for DR).
-
- Not referenced if GRADE = 'N', 'L', 'H' or 'S'.
- Changed on exit.
-
- MODER - INTEGER
- This specifies how the diagonal array DR is to be computed,
-
- just as MODE specifies how D is to be computed.
- Not modified.
-
- CONDR - DOUBLE PRECISION
- When MODER is not zero, this specifies the condition number
-
- of the computed DR. Not modified.
-
- PIVTNG - CHARACTER*1
- On entry specifies pivoting permutations as follows:
- 'N' or ' ' => none.
- 'L' => left or row pivoting (matrix must be nonsymmetric).
- 'R' => right or column pivoting (matrix must be
- nonsymmetric).
- 'B' or 'F' => both or full pivoting, i.e., on both sides.
- In this case, M must equal N
-
- If two calls to ZLATMR both have full bandwidth (KL = M-1
- and KU = N-1), and differ only in the PIVTNG and PACK
- parameters, then the matrices generated will differ only
- in the order of the rows and/or columns, and otherwise
- contain the same data. This consistency cannot be
- maintained with less than full bandwidth.
-
- IPIVOT - INTEGER array, dimension (N or M)
- This array specifies the permutation used. After the
- basic matrix is generated, the rows, columns, or both
- are permuted. If, say, row pivoting is selected, ZLATMR
- starts with the *last* row and interchanges the M-th and
- IPIVOT(M)-th rows, then moves to the next-to-last row,
- interchanging the (M-1)-th and the IPIVOT(M-1)-th rows,
- and so on. In terms of "2-cycles", the permutation is
- (1 IPIVOT(1)) (2 IPIVOT(2)) ... (M IPIVOT(M))
- where the rightmost cycle is applied first. This is the
- *inverse* of the effect of pivoting in LINPACK. The idea
- is that factoring (with pivoting) an identity matrix
- which has been inverse-pivoted in this way should
- result in a pivot vector identical to IPIVOT.
- Not referenced if PIVTNG = 'N'. Not modified.
-
- SPARSE - DOUBLE PRECISION
- On entry specifies the sparsity of the matrix if a sparse
- matrix is to be generated. SPARSE should lie between
- 0 and 1. To generate a sparse matrix, for each matrix entry
-
- a uniform ( 0, 1 ) random number x is generated and
- compared to SPARSE; if x is larger the matrix entry
- is unchanged and if x is smaller the entry is set
- to zero. Thus on the average a fraction SPARSE of the
- entries will be set to zero.
- Not modified.
-
- KL - INTEGER
- On entry specifies the lower bandwidth of the matrix. For
- example, KL=0 implies upper triangular, KL=1 implies upper
- Hessenberg, and KL at least M-1 implies the matrix is not
- banded. Must equal KU if matrix is symmetric or Hermitian.
- Not modified.
-
- KU - INTEGER
- On entry specifies the upper bandwidth of the matrix. For
- example, KU=0 implies lower triangular, KU=1 implies lower
- Hessenberg, and KU at least N-1 implies the matrix is not
- banded. Must equal KL if matrix is symmetric or Hermitian.
- Not modified.
-
- ANORM - DOUBLE PRECISION
- On entry specifies maximum entry of output matrix
- (output matrix will by multiplied by a constant so that
- its largest absolute entry equal ANORM)
- if ANORM is nonnegative. If ANORM is negative no scaling
- is done. Not modified.
-
- PACK - CHARACTER*1
- On entry specifies packing of matrix as follows:
- 'N' => no packing
- 'U' => zero out all subdiagonal entries
- (if symmetric or Hermitian)
- 'L' => zero out all superdiagonal entries
- (if symmetric or Hermitian)
- 'C' => store the upper triangle columnwise
- (only if matrix symmetric or Hermitian or
- square upper triangular)
- 'R' => store the lower triangle columnwise
- (only if matrix symmetric or Hermitian or
- square lower triangular)
- (same as upper half rowwise if symmetric)
- (same as conjugate upper half rowwise if Hermitian)
- 'B' => store the lower triangle in band storage scheme
- (only if matrix symmetric or Hermitian)
- 'Q' => store the upper triangle in band storage scheme
- (only if matrix symmetric or Hermitian)
- 'Z' => store the entire matrix in band storage scheme
- (pivoting can be provided for by using this
- option to store A in the trailing rows of
- the allocated storage)
-
- Using these options, the various LAPACK packed and banded
- storage schemes can be obtained:
- GB - use 'Z'
- PB, HB or TB - use 'B' or 'Q'
- PP, HP or TP - use 'C' or 'R'
-
- If two calls to ZLATMR differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
- Not modified.
-
- A - COMPLEX*16 array, dimension (LDA,N)
- On exit A is the desired test matrix. Only those
- entries of A which are significant on output
- will be referenced (even if A is in packed or band
- storage format). The 'unoccupied corners' of A in
- band format will be zeroed out.
-
- LDA - INTEGER
- on entry LDA specifies the first dimension of A as
- declared in the calling program.
- If PACK='N', 'U' or 'L', LDA must be at least max ( 1, M ).
-
- If PACK='C' or 'R', LDA must be at least 1.
- If PACK='B', or 'Q', LDA must be MIN ( KU+1, N )
- If PACK='Z', LDA must be at least KUU+KLL+1, where
- KUU = MIN ( KU, N-1 ) and KLL = MIN ( KL, N-1 )
- Not modified.
-
- IWORK - INTEGER array, dimension (N or M)
- Workspace. Not referenced if PIVTNG = 'N'. Changed on exit.
-
-
- INFO - INTEGER
- Error parameter on exit:
- 0 => normal return
- -1 => M negative or unequal to N and SYM='S' or 'H'
- -2 => N negative
- -3 => DIST illegal string
- -5 => SYM illegal string
- -7 => MODE not in range -6 to 6
- -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -10 => MODE neither -6, 0 nor 6 and RSIGN illegal string
- -11 => GRADE illegal string, or GRADE='E' and
- M not equal to N, or GRADE='L', 'R', 'B', 'S' or 'E'
-
- and SYM = 'H', or GRADE='L', 'R', 'B', 'H' or 'E'
- and SYM = 'S'
- -12 => GRADE = 'E' and DL contains zero
- -13 => MODEL not in range -6 to 6 and GRADE= 'L', 'B', 'H',
-
- 'S' or 'E'
- -14 => CONDL less than 1.0, GRADE='L', 'B', 'H', 'S' or 'E',
-
- and MODEL neither -6, 0 nor 6
- -16 => MODER not in range -6 to 6 and GRADE= 'R' or 'B'
- -17 => CONDR less than 1.0, GRADE='R' or 'B', and
- MODER neither -6, 0 nor 6
- -18 => PIVTNG illegal string, or PIVTNG='B' or 'F' and
- M not equal to N, or PIVTNG='L' or 'R' and SYM='S'
- or 'H'
- -19 => IPIVOT contains out of range number and
- PIVTNG not equal to 'N'
- -20 => KL negative
- -21 => KU negative, or SYM='S' or 'H' and KU not equal to KL
-
- -22 => SPARSE not in range 0. to 1.
- -24 => PACK illegal string, or PACK='U', 'L', 'B' or 'Q'
- and SYM='N', or PACK='C' and SYM='N' and either KL
- not equal to 0 or N not equal to M, or PACK='R' and
- SYM='N', and either KU not equal to 0 or N not equal
-
- to M
- -26 => LDA too small
- 1 => Error return from ZLATM1 (computing D)
- 2 => Cannot scale diagonal to DMAX (max. entry is 0)
- 3 => Error return from ZLATM1 (computing DL)
- 4 => Error return from ZLATM1 (computing DR)
- 5 => ANORM is positive, but matrix constructed prior to
- attempting to scale it to have norm ANORM, is zero
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- --dl;
- --dr;
- --ipivot;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --iwork;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*m == 0 || *n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else if (lsame_(dist, "D")) {
- idist = 4;
- } else {
- idist = -1;
- }
-
-/* Decode SYM */
-
- if (lsame_(sym, "H")) {
- isym = 0;
- } else if (lsame_(sym, "N")) {
- isym = 1;
- } else if (lsame_(sym, "S")) {
- isym = 2;
- } else {
- isym = -1;
- }
-
-/* Decode RSIGN */
-
- if (lsame_(rsign, "F")) {
- irsign = 0;
- } else if (lsame_(rsign, "T")) {
- irsign = 1;
- } else {
- irsign = -1;
- }
-
-/* Decode PIVTNG */
-
- if (lsame_(pivtng, "N")) {
- ipvtng = 0;
- } else if (lsame_(pivtng, " ")) {
- ipvtng = 0;
- } else if (lsame_(pivtng, "L")) {
- ipvtng = 1;
- npvts = *m;
- } else if (lsame_(pivtng, "R")) {
- ipvtng = 2;
- npvts = *n;
- } else if (lsame_(pivtng, "B")) {
- ipvtng = 3;
- npvts = min(*n,*m);
- } else if (lsame_(pivtng, "F")) {
- ipvtng = 3;
- npvts = min(*n,*m);
- } else {
- ipvtng = -1;
- }
-
-/* Decode GRADE */
-
- if (lsame_(grade, "N")) {
- igrade = 0;
- } else if (lsame_(grade, "L")) {
- igrade = 1;
- } else if (lsame_(grade, "R")) {
- igrade = 2;
- } else if (lsame_(grade, "B")) {
- igrade = 3;
- } else if (lsame_(grade, "E")) {
- igrade = 4;
- } else if (lsame_(grade, "H")) {
- igrade = 5;
- } else if (lsame_(grade, "S")) {
- igrade = 6;
- } else {
- igrade = -1;
- }
-
-/* Decode PACK */
-
- if (lsame_(pack, "N")) {
- ipack = 0;
- } else if (lsame_(pack, "U")) {
- ipack = 1;
- } else if (lsame_(pack, "L")) {
- ipack = 2;
- } else if (lsame_(pack, "C")) {
- ipack = 3;
- } else if (lsame_(pack, "R")) {
- ipack = 4;
- } else if (lsame_(pack, "B")) {
- ipack = 5;
- } else if (lsame_(pack, "Q")) {
- ipack = 6;
- } else if (lsame_(pack, "Z")) {
- ipack = 7;
- } else {
- ipack = -1;
- }
-
-/* Set certain internal parameters */
-
- mnmin = min(*m,*n);
-/* Computing MIN */
- i__1 = *kl, i__2 = *m - 1;
- kll = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *ku, i__2 = *n - 1;
- kuu = min(i__1,i__2);
-
-/* If inv(DL) is used, check to see if DL has a zero entry. */
-
- dzero = FALSE_;
- if (igrade == 4 && *model == 0) {
- i__1 = *m;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i;
- if (dl[i__2].r == 0. && dl[i__2].i == 0.) {
- dzero = TRUE_;
- }
-/* L10: */
- }
- }
-
-/* Check values in IPIVOT */
-
- badpvt = FALSE_;
- if (ipvtng > 0) {
- i__1 = npvts;
- for (j = 1; j <= i__1; ++j) {
- if (ipivot[j] <= 0 || ipivot[j] > npvts) {
- badpvt = TRUE_;
- }
-/* L20: */
- }
- }
-
-/* Set INFO if an error */
-
- if (*m < 0) {
- *info = -1;
- } else if (*m != *n && (isym == 0 || isym == 2)) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (idist == -1) {
- *info = -3;
- } else if (isym == -1) {
- *info = -5;
- } else if (*mode < -6 || *mode > 6) {
- *info = -7;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && *cond < 1.) {
- *info = -8;
- } else if (*mode != -6 && *mode != 0 && *mode != 6 && irsign == -1) {
- *info = -10;
- } else if (igrade == -1 || igrade == 4 && *m != *n || (igrade == 1 ||
- igrade == 2 || igrade == 3 || igrade == 4 || igrade == 6) && isym
- == 0 || (igrade == 1 || igrade == 2 || igrade == 3 || igrade == 4
- || igrade == 5) && isym == 2) {
- *info = -11;
- } else if (igrade == 4 && dzero) {
- *info = -12;
- } else if ((igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5 ||
- igrade == 6) && (*model < -6 || *model > 6)) {
- *info = -13;
- } else if ((igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5 ||
- igrade == 6) && (*model != -6 && *model != 0 && *model != 6) && *
- condl < 1.) {
- *info = -14;
- } else if ((igrade == 2 || igrade == 3) && (*moder < -6 || *moder > 6)) {
- *info = -16;
- } else if ((igrade == 2 || igrade == 3) && (*moder != -6 && *moder != 0 &&
- *moder != 6) && *condr < 1.) {
- *info = -17;
- } else if (ipvtng == -1 || ipvtng == 3 && *m != *n || (ipvtng == 1 ||
- ipvtng == 2) && (isym == 0 || isym == 2)) {
- *info = -18;
- } else if (ipvtng != 0 && badpvt) {
- *info = -19;
- } else if (*kl < 0) {
- *info = -20;
- } else if (*ku < 0 || (isym == 0 || isym == 2) && *kl != *ku) {
- *info = -21;
- } else if (*sparse < 0. || *sparse > 1.) {
- *info = -22;
- } else if (ipack == -1 || (ipack == 1 || ipack == 2 || ipack == 5 ||
- ipack == 6) && isym == 1 || ipack == 3 && isym == 1 && (*kl != 0
- || *m != *n) || ipack == 4 && isym == 1 && (*ku != 0 || *m != *n))
- {
- *info = -24;
- } else if ((ipack == 0 || ipack == 1 || ipack == 2) && *lda < max(1,*m) ||
- (ipack == 3 || ipack == 4) && *lda < 1 || (ipack == 5 || ipack ==
- 6) && *lda < kuu + 1 || ipack == 7 && *lda < kll + kuu + 1) {
- *info = -26;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("ZLATMR", &i__1);
- return 0;
- }
-
-/* Decide if we can pivot consistently */
-
- fulbnd = FALSE_;
- if (kuu == *n - 1 && kll == *m - 1) {
- fulbnd = TRUE_;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L30: */
- }
-
- iseed[4] = (iseed[4] / 2 << 1) + 1;
-
-/* 2) Set up D, DL, and DR, if indicated.
-
- Compute D according to COND and MODE */
-
- zlatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, info);
- if (*info != 0) {
- *info = 1;
- return 0;
- }
- if (*mode != 0 && *mode != -6 && *mode != 6) {
-
-/* Scale by DMAX */
-
- temp = z_abs(&d[1]);
- i__1 = mnmin;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- d__1 = temp, d__2 = z_abs(&d[i]);
- temp = max(d__1,d__2);
-/* L40: */
- }
- if (temp == 0. && (dmax__->r != 0. || dmax__->i != 0.)) {
- *info = 2;
- return 0;
- }
- if (temp != 0.) {
- z__1.r = dmax__->r / temp, z__1.i = dmax__->i / temp;
- calpha.r = z__1.r, calpha.i = z__1.i;
- } else {
- calpha.r = 1., calpha.i = 0.;
- }
- i__1 = mnmin;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i;
- i__3 = i;
- z__1.r = calpha.r * d[i__3].r - calpha.i * d[i__3].i, z__1.i =
- calpha.r * d[i__3].i + calpha.i * d[i__3].r;
- d[i__2].r = z__1.r, d[i__2].i = z__1.i;
-/* L50: */
- }
-
- }
-
-/* If matrix Hermitian, make D real */
-
- if (isym == 0) {
- i__1 = mnmin;
- for (i = 1; i <= i__1; ++i) {
- i__2 = i;
- i__3 = i;
- d__1 = d[i__3].r;
- d[i__2].r = d__1, d[i__2].i = 0.;
-/* L60: */
- }
- }
-
-/* Compute DL if grading set */
-
- if (igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5 || igrade ==
- 6) {
- zlatm1_(model, condl, &c__0, &idist, &iseed[1], &dl[1], m, info);
- if (*info != 0) {
- *info = 3;
- return 0;
- }
- }
-
-/* Compute DR if grading set */
-
- if (igrade == 2 || igrade == 3) {
- zlatm1_(moder, condr, &c__0, &idist, &iseed[1], &dr[1], n, info);
- if (*info != 0) {
- *info = 4;
- return 0;
- }
- }
-
-/* 3) Generate IWORK if pivoting */
-
- if (ipvtng > 0) {
- i__1 = npvts;
- for (i = 1; i <= i__1; ++i) {
- iwork[i] = i;
-/* L70: */
- }
- if (fulbnd) {
- i__1 = npvts;
- for (i = 1; i <= i__1; ++i) {
- k = ipivot[i];
- j = iwork[i];
- iwork[i] = iwork[k];
- iwork[k] = j;
-/* L80: */
- }
- } else {
- for (i = npvts; i >= 1; --i) {
- k = ipivot[i];
- j = iwork[i];
- iwork[i] = iwork[k];
- iwork[k] = j;
-/* L90: */
- }
- }
- }
-
-/* 4) Generate matrices for each kind of PACKing
- Always sweep matrix columnwise (if symmetric, upper
- half only) so that matrix generated does not depend
- on PACK */
-
- if (fulbnd) {
-
-/* Use ZLATM3 so matrices generated with differing PIVOTing onl
-y
- differ only in the order of their rows and/or columns. */
-
- if (ipack == 0) {
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- i__3 = isub + jsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- i__3 = jsub + isub * a_dim1;
- d_cnjg(&z__1, &ctemp);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
-/* L100: */
- }
-/* L110: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- i__3 = isub + jsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
-/* L120: */
- }
-/* L130: */
- }
- } else if (isym == 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- i__3 = isub + jsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- i__3 = jsub + isub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
-/* L140: */
- }
-/* L150: */
- }
- }
-
- } else if (ipack == 1) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mxsub == isub && isym == 0) {
- i__3 = mnsub + mxsub * a_dim1;
- d_cnjg(&z__1, &ctemp);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = mnsub + mxsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- if (mnsub != mxsub) {
- i__3 = mxsub + mnsub * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
- }
-/* L160: */
- }
-/* L170: */
- }
-
- } else if (ipack == 2) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mxsub == jsub && isym == 0) {
- i__3 = mxsub + mnsub * a_dim1;
- d_cnjg(&z__1, &ctemp);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = mxsub + mnsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- if (mnsub != mxsub) {
- i__3 = mnsub + mxsub * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
- }
-/* L180: */
- }
-/* L190: */
- }
-
- } else if (ipack == 3) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
-
-/* Compute K = location of (ISUB,JSUB) ent
-ry in packed
- array */
-
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- k = mxsub * (mxsub - 1) / 2 + mnsub;
-
-/* Convert K to (IISUB,JJSUB) location */
-
- jjsub = (k - 1) / *lda + 1;
- iisub = k - *lda * (jjsub - 1);
-
- if (mxsub == isub && isym == 0) {
- i__3 = iisub + jjsub * a_dim1;
- d_cnjg(&z__1, &ctemp);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = iisub + jjsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
-/* L200: */
- }
-/* L210: */
- }
-
- } else if (ipack == 4) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
-
-/* Compute K = location of (I,J) entry in
-packed array */
-
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mnsub == 1) {
- k = mxsub;
- } else {
- k = *n * (*n + 1) / 2 - (*n - mnsub + 1) * (*n -
- mnsub + 2) / 2 + mxsub - mnsub + 1;
- }
-
-/* Convert K to (IISUB,JJSUB) location */
-
- jjsub = (k - 1) / *lda + 1;
- iisub = k - *lda * (jjsub - 1);
-
- if (mxsub == jsub && isym == 0) {
- i__3 = iisub + jjsub * a_dim1;
- d_cnjg(&z__1, &ctemp);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = iisub + jjsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
-/* L220: */
- }
-/* L230: */
- }
-
- } else if (ipack == 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- if (i < 1) {
- i__3 = j - i + 1 + (i + *n) * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
- } else {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mxsub == jsub && isym == 0) {
- i__3 = mxsub - mnsub + 1 + mnsub * a_dim1;
- d_cnjg(&z__1, &ctemp);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = mxsub - mnsub + 1 + mnsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- }
-/* L240: */
- }
-/* L250: */
- }
-
- } else if (ipack == 6) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist,
- &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &
- ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (mxsub == isub && isym == 0) {
- i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;
- d_cnjg(&z__1, &ctemp);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
-/* L260: */
- }
-/* L270: */
- }
-
- } else if (ipack == 7) {
-
- if (isym != 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- mnsub = min(isub,jsub);
- mxsub = max(isub,jsub);
- if (i < 1) {
- i__3 = j - i + 1 + kuu + (i + *n) * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
- }
- if (mxsub == isub && isym == 0) {
- i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;
- d_cnjg(&z__1, &ctemp);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- if (i >= 1 && mnsub != mxsub) {
- if (mnsub == isub && isym == 0) {
- i__3 = mxsub - mnsub + 1 + kuu + mnsub *
- a_dim1;
- d_cnjg(&z__1, &ctemp);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = mxsub - mnsub + 1 + kuu + mnsub *
- a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
- }
- }
-/* L280: */
- }
-/* L290: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j + kll;
- for (i = j - kuu; i <= i__2; ++i) {
- zlatm3_(&z__1, m, n, &i, &j, &isub, &jsub, kl, ku, &
- idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[
- 1], &ipvtng, &iwork[1], sparse);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- i__3 = isub - jsub + kuu + 1 + jsub * a_dim1;
- a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;
-/* L300: */
- }
-/* L310: */
- }
- }
-
- }
-
- } else {
-
-/* Use ZLATM2 */
-
- if (ipack == 0) {
- if (isym == 0) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- i__3 = j + i * a_dim1;
- d_cnjg(&z__1, &a[i + j * a_dim1]);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
-/* L320: */
- }
-/* L330: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
-/* L340: */
- }
-/* L350: */
- }
- } else if (isym == 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- i__3 = j + i * a_dim1;
- i__4 = i + j * a_dim1;
- a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;
-/* L360: */
- }
-/* L370: */
- }
- }
-
- } else if (ipack == 1) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- i__3 = i + j * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1], &
- d[1], &igrade, &dl[1], &dr[1], &ipvtng, &iwork[1],
- sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- if (i != j) {
- i__3 = j + i * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
- }
-/* L380: */
- }
-/* L390: */
- }
-
- } else if (ipack == 2) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- if (isym == 0) {
- i__3 = j + i * a_dim1;
- zlatm2_(&z__2, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- d_cnjg(&z__1, &z__2);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = j + i * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- }
- if (i != j) {
- i__3 = i + j * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
- }
-/* L400: */
- }
-/* L410: */
- }
-
- } else if (ipack == 3) {
-
- isub = 0;
- jsub = 1;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- ++isub;
- if (isub > *lda) {
- isub = 1;
- ++jsub;
- }
- i__3 = isub + jsub * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1], &
- d[1], &igrade, &dl[1], &dr[1], &ipvtng, &iwork[1],
- sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
-/* L420: */
- }
-/* L430: */
- }
-
- } else if (ipack == 4) {
-
- if (isym == 0 || isym == 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
-
-/* Compute K = location of (I,J) en
-try in packed array */
-
- if (i == 1) {
- k = j;
- } else {
- k = *n * (*n + 1) / 2 - (*n - i + 1) * (*n - i +
- 2) / 2 + j - i + 1;
- }
-
-/* Convert K to (ISUB,JSUB) locatio
-n */
-
- jsub = (k - 1) / *lda + 1;
- isub = k - *lda * (jsub - 1);
-
- i__3 = isub + jsub * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- if (isym == 0) {
- i__3 = isub + jsub * a_dim1;
- d_cnjg(&z__1, &a[isub + jsub * a_dim1]);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- }
-/* L440: */
- }
-/* L450: */
- }
- } else {
- isub = 0;
- jsub = 1;
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j; i <= i__2; ++i) {
- ++isub;
- if (isub > *lda) {
- isub = 1;
- ++jsub;
- }
- i__3 = isub + jsub * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
-/* L460: */
- }
-/* L470: */
- }
- }
-
- } else if (ipack == 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- if (i < 1) {
- i__3 = j - i + 1 + (i + *n) * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
- } else {
- if (isym == 0) {
- i__3 = j - i + 1 + i * a_dim1;
- zlatm2_(&z__2, m, n, &i, &j, kl, ku, &idist, &
- iseed[1], &d[1], &igrade, &dl[1], &dr[1],
- &ipvtng, &iwork[1], sparse);
- d_cnjg(&z__1, &z__2);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = j - i + 1 + i * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &
- iseed[1], &d[1], &igrade, &dl[1], &dr[1],
- &ipvtng, &iwork[1], sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- }
- }
-/* L480: */
- }
-/* L490: */
- }
-
- } else if (ipack == 6) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- i__3 = i - j + kuu + 1 + j * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1], &
- d[1], &igrade, &dl[1], &dr[1], &ipvtng, &iwork[1],
- sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
-/* L500: */
- }
-/* L510: */
- }
-
- } else if (ipack == 7) {
-
- if (isym != 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = j - kuu; i <= i__2; ++i) {
- i__3 = i - j + kuu + 1 + j * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- if (i < 1) {
- i__3 = j - i + 1 + kuu + (i + *n) * a_dim1;
- a[i__3].r = 0., a[i__3].i = 0.;
- }
- if (i >= 1 && i != j) {
- if (isym == 0) {
- i__3 = j - i + 1 + kuu + i * a_dim1;
- d_cnjg(&z__1, &a[i - j + kuu + 1 + j * a_dim1]
- );
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
- } else {
- i__3 = j - i + 1 + kuu + i * a_dim1;
- i__4 = i - j + kuu + 1 + j * a_dim1;
- a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;
- }
- }
-/* L520: */
- }
-/* L530: */
- }
- } else if (isym == 1) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j + kll;
- for (i = j - kuu; i <= i__2; ++i) {
- i__3 = i - j + kuu + 1 + j * a_dim1;
- zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]
- , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
- iwork[1], sparse);
- a[i__3].r = z__1.r, a[i__3].i = z__1.i;
-/* L540: */
- }
-/* L550: */
- }
- }
-
- }
-
- }
-
-/* 5) Scaling the norm */
-
- if (ipack == 0) {
- onorm = zlange_("M", m, n, &a[a_offset], lda, tempa);
- } else if (ipack == 1) {
- onorm = zlansy_("M", "U", n, &a[a_offset], lda, tempa);
- } else if (ipack == 2) {
- onorm = zlansy_("M", "L", n, &a[a_offset], lda, tempa);
- } else if (ipack == 3) {
- onorm = zlansp_("M", "U", n, &a[a_offset], tempa);
- } else if (ipack == 4) {
- onorm = zlansp_("M", "L", n, &a[a_offset], tempa);
- } else if (ipack == 5) {
- onorm = zlansb_("M", "L", n, &kll, &a[a_offset], lda, tempa);
- } else if (ipack == 6) {
- onorm = zlansb_("M", "U", n, &kuu, &a[a_offset], lda, tempa);
- } else if (ipack == 7) {
- onorm = zlangb_("M", n, &kll, &kuu, &a[a_offset], lda, tempa);
- }
-
- if (*anorm >= 0.) {
-
- if (*anorm > 0. && onorm == 0.) {
-
-/* Desired scaling impossible */
-
- *info = 5;
- return 0;
-
- } else if (*anorm > 1. && onorm < 1. || *anorm < 1. && onorm > 1.) {
-
-/* Scale carefully to avoid over / underflow */
-
- if (ipack <= 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- d__1 = 1. / onorm;
- zdscal_(m, &d__1, &a[j * a_dim1 + 1], &c__1);
- zdscal_(m, anorm, &a[j * a_dim1 + 1], &c__1);
-/* L560: */
- }
-
- } else if (ipack == 3 || ipack == 4) {
-
- i__1 = *n * (*n + 1) / 2;
- d__1 = 1. / onorm;
- zdscal_(&i__1, &d__1, &a[a_offset], &c__1);
- i__1 = *n * (*n + 1) / 2;
- zdscal_(&i__1, anorm, &a[a_offset], &c__1);
-
- } else if (ipack >= 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = kll + kuu + 1;
- d__1 = 1. / onorm;
- zdscal_(&i__2, &d__1, &a[j * a_dim1 + 1], &c__1);
- i__2 = kll + kuu + 1;
- zdscal_(&i__2, anorm, &a[j * a_dim1 + 1], &c__1);
-/* L570: */
- }
-
- }
-
- } else {
-
-/* Scale straightforwardly */
-
- if (ipack <= 2) {
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- d__1 = *anorm / onorm;
- zdscal_(m, &d__1, &a[j * a_dim1 + 1], &c__1);
-/* L580: */
- }
-
- } else if (ipack == 3 || ipack == 4) {
-
- i__1 = *n * (*n + 1) / 2;
- d__1 = *anorm / onorm;
- zdscal_(&i__1, &d__1, &a[a_offset], &c__1);
-
- } else if (ipack >= 5) {
-
- i__1 = *n;
- for (j = 1; j <= i__1; ++j) {
- i__2 = kll + kuu + 1;
- d__1 = *anorm / onorm;
- zdscal_(&i__2, &d__1, &a[j * a_dim1 + 1], &c__1);
-/* L590: */
- }
- }
-
- }
-
- }
-
-/* End of ZLATMR */
-
- return 0;
-} /* zlatmr_ */
-
diff --git a/TESTING/MATGEN/zlatms.c b/TESTING/MATGEN/zlatms.c
deleted file mode 100644
index 9d5cfa9..0000000
--- a/TESTING/MATGEN/zlatms.c
+++ /dev/null
@@ -1,1648 +0,0 @@
-/* -- translated by f2c (version 19940927).
- You must link the resulting object file with the libraries:
- -lf2c -lm (in that order)
-*/
-
-#include "f2c.h"
-
-/* Table of constant values */
-
-static doublecomplex c_b1 = {0.,0.};
-static integer c__1 = 1;
-static integer c__5 = 5;
-static logical c_true = TRUE_;
-static logical c_false = FALSE_;
-
-/* Subroutine */ int zlatms_(integer *m, integer *n, char *dist, integer *
- iseed, char *sym, doublereal *d, integer *mode, doublereal *cond,
- doublereal *dmax__, integer *kl, integer *ku, char *pack,
- doublecomplex *a, integer *lda, doublecomplex *work, integer *info)
-{
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
- doublereal d__1, d__2, d__3;
- doublecomplex z__1, z__2, z__3;
- logical L__1;
-
- /* Builtin functions */
- double cos(doublereal), sin(doublereal);
- void d_cnjg(doublecomplex *, doublecomplex *);
-
- /* Local variables */
- static integer ilda, icol;
- static doublereal temp;
- static integer irow, isym;
- static logical zsym;
- static doublecomplex c;
- static integer i, j, k;
- static doublecomplex s;
- static doublereal alpha, angle;
- static integer ipack;
- static doublereal realc;
- static integer ioffg;
- extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,
- integer *);
- extern logical lsame_(char *, char *);
- static integer iinfo;
- static doublecomplex ctemp;
- static integer idist, mnmin, iskew;
- static doublecomplex extra, dummy;
- extern /* Subroutine */ int dlatm1_(integer *, doublereal *, integer *,
- integer *, integer *, doublereal *, integer *, integer *);
- static integer ic, jc, nc, il;
- static doublecomplex ct;
- static integer iendch, ir, jr, ipackg, mr, minlda;
- extern doublereal dlarnd_(integer *, integer *);
- static doublecomplex st;
- extern /* Subroutine */ int zlagge_(integer *, integer *, integer *,
- integer *, doublereal *, doublecomplex *, integer *, integer *,
- doublecomplex *, integer *), zlaghe_(integer *, integer *,
- doublereal *, doublecomplex *, integer *, integer *,
- doublecomplex *, integer *), xerbla_(char *, integer *);
- static logical iltemp, givens;
- static integer ioffst, irsign;
- extern /* Double Complex */ void zlarnd_(doublecomplex *, integer *,
- integer *);
- extern /* Subroutine */ int zlaset_(char *, integer *, integer *,
- doublecomplex *, doublecomplex *, doublecomplex *, integer *), zlartg_(doublecomplex *, doublecomplex *, doublereal *,
- doublecomplex *, doublecomplex *);
- static logical ilextr;
- extern /* Subroutine */ int zlagsy_(integer *, integer *, doublereal *,
- doublecomplex *, integer *, integer *, doublecomplex *, integer *)
- ;
- static logical topdwn;
- static integer ir1, ir2, isympk;
- extern /* Subroutine */ int zlarot_(logical *, logical *, logical *,
- integer *, doublecomplex *, doublecomplex *, doublecomplex *,
- integer *, doublecomplex *, doublecomplex *);
- static integer jch, llb, jkl, jku, uub;
-
-
-/* -- LAPACK test routine (version 2.0) --
- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- Courant Institute, Argonne National Lab, and Rice University
- September 30, 1994
-
-
- Purpose
- =======
-
- ZLATMS generates random matrices with specified singular values
- (or hermitian with specified eigenvalues)
- for testing LAPACK programs.
-
- ZLATMS operates by applying the following sequence of
- operations:
-
- Set the diagonal to D, where D may be input or
- computed according to MODE, COND, DMAX, and SYM
- as described below.
-
- Generate a matrix with the appropriate band structure, by one
- of two methods:
-
- Method A:
- Generate a dense M x N matrix by multiplying D on the left
- and the right by random unitary matrices, then:
-
- Reduce the bandwidth according to KL and KU, using
- Householder transformations.
-
- Method B:
- Convert the bandwidth-0 (i.e., diagonal) matrix to a
- bandwidth-1 matrix using Givens rotations, "chasing"
- out-of-band elements back, much as in QR; then convert
- the bandwidth-1 to a bandwidth-2 matrix, etc. Note
- that for reasonably small bandwidths (relative to M and
-
- N) this requires less storage, as a dense matrix is not
-
- generated. Also, for hermitian or symmetric matrices,
- only one triangle is generated.
-
- Method A is chosen if the bandwidth is a large fraction of the
- order of the matrix, and LDA is at least M (so a dense
- matrix can be stored.) Method B is chosen if the bandwidth
-
- is small (< 1/2 N for hermitian or symmetric, < .3 N+M for
- non-symmetric), or LDA is less than M and not less than the
-
- bandwidth.
-
- Pack the matrix if desired. Options specified by PACK are:
- no packing
- zero out upper half (if hermitian)
- zero out lower half (if hermitian)
- store the upper half columnwise (if hermitian or upper
- triangular)
- store the lower half columnwise (if hermitian or lower
- triangular)
- store the lower triangle in banded format (if hermitian or
- lower triangular)
- store the upper triangle in banded format (if hermitian or
- upper triangular)
- store the entire matrix in banded format
- If Method B is chosen, and band format is specified, then the
- matrix will be generated in the band format, so no repacking
-
- will be necessary.
-
- Arguments
- =========
-
- M - INTEGER
- The number of rows of A. Not modified.
-
- N - INTEGER
- The number of columns of A. N must equal M if the matrix
- is symmetric or hermitian (i.e., if SYM is not 'N')
- Not modified.
-
- DIST - CHARACTER*1
- On entry, DIST specifies the type of distribution to be used
-
- to generate the random eigen-/singular values.
- 'U' => UNIFORM( 0, 1 ) ( 'U' for uniform )
- 'S' => UNIFORM( -1, 1 ) ( 'S' for symmetric )
- 'N' => NORMAL( 0, 1 ) ( 'N' for normal )
- Not modified.
-
- ISEED - INTEGER array, dimension ( 4 )
- On entry ISEED specifies the seed of the random number
- generator. They should lie between 0 and 4095 inclusive,
- and ISEED(4) should be odd. The random number generator
- uses a linear congruential sequence limited to small
- integers, and so should produce machine independent
- random numbers. The values of ISEED are changed on
- exit, and can be used in the next call to ZLATMS
- to continue the same random number sequence.
- Changed on exit.
-
- SYM - CHARACTER*1
- If SYM='H', the generated matrix is hermitian, with
- eigenvalues specified by D, COND, MODE, and DMAX; they
- may be positive, negative, or zero.
- If SYM='P', the generated matrix is hermitian, with
- eigenvalues (= singular values) specified by D, COND,
- MODE, and DMAX; they will not be negative.
- If SYM='N', the generated matrix is nonsymmetric, with
- singular values specified by D, COND, MODE, and DMAX;
- they will not be negative.
- If SYM='S', the generated matrix is (complex) symmetric,
- with singular values specified by D, COND, MODE, and
- DMAX; they will not be negative.
- Not modified.
-
- D - DOUBLE PRECISION array, dimension ( MIN( M, N ) )
- This array is used to specify the singular values or
- eigenvalues of A (see SYM, above.) If MODE=0, then D is
- assumed to contain the singular/eigenvalues, otherwise
- they will be computed according to MODE, COND, and DMAX,
- and placed in D.
- Modified if MODE is nonzero.
-
- MODE - INTEGER
- On entry this describes how the singular/eigenvalues are to
-
- be specified:
- MODE = 0 means use D as input
- MODE = 1 sets D(1)=1 and D(2:N)=1.0/COND
- MODE = 2 sets D(1:N-1)=1 and D(N)=1.0/COND
- MODE = 3 sets D(I)=COND**(-(I-1)/(N-1))
- MODE = 4 sets D(i)=1 - (i-1)/(N-1)*(1 - 1/COND)
- MODE = 5 sets D to random numbers in the range
- ( 1/COND , 1 ) such that their logarithms
- are uniformly distributed.
- MODE = 6 set D to random numbers from same distribution
- as the rest of the matrix.
- MODE < 0 has the same meaning as ABS(MODE), except that
- the order of the elements of D is reversed.
- Thus if MODE is positive, D has entries ranging from
- 1 to 1/COND, if negative, from 1/COND to 1,
- If SYM='H', and MODE is neither 0, 6, nor -6, then
- the elements of D will also be multiplied by a random
- sign (i.e., +1 or -1.)
- Not modified.
-
- COND - DOUBLE PRECISION
- On entry, this is used as described under MODE above.
- If used, it must be >= 1. Not modified.
-
- DMAX - DOUBLE PRECISION
- If MODE is neither -6, 0 nor 6, the contents of D, as
- computed according to MODE and COND, will be scaled by
- DMAX / max(abs(D(i))); thus, the maximum absolute eigen- or
-
- singular value (which is to say the norm) will be abs(DMAX).
-
- Note that DMAX need not be positive: if DMAX is negative
- (or zero), D will be scaled by a negative number (or zero).
-
- Not modified.
-
- KL - INTEGER
- This specifies the lower bandwidth of the matrix. For
- example, KL=0 implies upper triangular, KL=1 implies upper
- Hessenberg, and KL being at least M-1 means that the matrix
-
- has full lower bandwidth. KL must equal KU if the matrix
- is symmetric or hermitian.
- Not modified.
-
- KU - INTEGER
- This specifies the upper bandwidth of the matrix. For
- example, KU=0 implies lower triangular, KU=1 implies lower
- Hessenberg, and KU being at least N-1 means that the matrix
-
- has full upper bandwidth. KL must equal KU if the matrix
- is symmetric or hermitian.
- Not modified.
-
- PACK - CHARACTER*1
- This specifies packing of matrix as follows:
- 'N' => no packing
- 'U' => zero out all subdiagonal entries (if symmetric
- or hermitian)
- 'L' => zero out all superdiagonal entries (if symmetric
- or hermitian)
- 'C' => store the upper triangle columnwise (only if the
- matrix is symmetric, hermitian, or upper triangular)
-
- 'R' => store the lower triangle columnwise (only if the
- matrix is symmetric, hermitian, or lower triangular)
-
- 'B' => store the lower triangle in band storage scheme
- (only if the matrix is symmetric, hermitian, or
- lower triangular)
- 'Q' => store the upper triangle in band storage scheme
- (only if the matrix is symmetric, hermitian, or
- upper triangular)
- 'Z' => store the entire matrix in band storage scheme
- (pivoting can be provided for by using this
- option to store A in the trailing rows of
- the allocated storage)
-
- Using these options, the various LAPACK packed and banded
- storage schemes can be obtained:
- GB - use 'Z'
- PB, SB, HB, or TB - use 'B' or 'Q'
- PP, SP, HB, or TP - use 'C' or 'R'
-
- If two calls to ZLATMS differ only in the PACK parameter,
- they will generate mathematically equivalent matrices.
- Not modified.
-
- A - COMPLEX*16 array, dimension ( LDA, N )
- On exit A is the desired test matrix. A is first generated
-
- in full (unpacked) form, and then packed, if so specified
- by PACK. Thus, the first M elements of the first N
- columns will always be modified. If PACK specifies a
- packed or banded storage scheme, all LDA elements of the
- first N columns will be modified; the elements of the
- array which do not correspond to elements of the generated
- matrix are set to zero.
- Modified.
-
- LDA - INTEGER
- LDA specifies the first dimension of A as declared in the
- calling program. If PACK='N', 'U', 'L', 'C', or 'R', then
- LDA must be at least M. If PACK='B' or 'Q', then LDA must
- be at least MIN( KL, M-1) (which is equal to MIN(KU,N-1)).
- If PACK='Z', LDA must be large enough to hold the packed
- array: MIN( KU, N-1) + MIN( KL, M-1) + 1.
- Not modified.
-
- WORK - COMPLEX*16 array, dimension ( 3*MAX( N, M ) )
- Workspace.
- Modified.
-
- INFO - INTEGER
- Error code. On exit, INFO will be set to one of the
- following values:
- 0 => normal return
- -1 => M negative or unequal to N and SYM='S', 'H', or 'P'
- -2 => N negative
- -3 => DIST illegal string
- -5 => SYM illegal string
- -7 => MODE not in range -6 to 6
- -8 => COND less than 1.0, and MODE neither -6, 0 nor 6
- -10 => KL negative
- -11 => KU negative, or SYM is not 'N' and KU is not equal to
-
- KL
- -12 => PACK illegal string, or PACK='U' or 'L', and SYM='N';
-
- or PACK='C' or 'Q' and SYM='N' and KL is not zero;
- or PACK='R' or 'B' and SYM='N' and KU is not zero;
- or PACK='U', 'L', 'C', 'R', 'B', or 'Q', and M is not
-
- N.
- -14 => LDA is less than M, or PACK='Z' and LDA is less than
-
- MIN(KU,N-1) + MIN(KL,M-1) + 1.
- 1 => Error return from DLATM1
- 2 => Cannot scale to DMAX (max. sing. value is 0)
- 3 => Error return from ZLAGGE, CLAGHE or CLAGSY
-
- =====================================================================
-
-
-
- 1) Decode and Test the input parameters.
- Initialize flags & seed.
-
- Parameter adjustments */
- --iseed;
- --d;
- a_dim1 = *lda;
- a_offset = a_dim1 + 1;
- a -= a_offset;
- --work;
-
- /* Function Body */
- *info = 0;
-
-/* Quick return if possible */
-
- if (*m == 0 || *n == 0) {
- return 0;
- }
-
-/* Decode DIST */
-
- if (lsame_(dist, "U")) {
- idist = 1;
- } else if (lsame_(dist, "S")) {
- idist = 2;
- } else if (lsame_(dist, "N")) {
- idist = 3;
- } else {
- idist = -1;
- }
-
-/* Decode SYM */
-
- if (lsame_(sym, "N")) {
- isym = 1;
- irsign = 0;
- zsym = FALSE_;
- } else if (lsame_(sym, "P")) {
- isym = 2;
- irsign = 0;
- zsym = FALSE_;
- } else if (lsame_(sym, "S")) {
- isym = 2;
- irsign = 0;
- zsym = TRUE_;
- } else if (lsame_(sym, "H")) {
- isym = 2;
- irsign = 1;
- zsym = FALSE_;
- } else {
- isym = -1;
- }
-
-/* Decode PACK */
-
- isympk = 0;
- if (lsame_(pack, "N")) {
- ipack = 0;
- } else if (lsame_(pack, "U")) {
- ipack = 1;
- isympk = 1;
- } else if (lsame_(pack, "L")) {
- ipack = 2;
- isympk = 1;
- } else if (lsame_(pack, "C")) {
- ipack = 3;
- isympk = 2;
- } else if (lsame_(pack, "R")) {
- ipack = 4;
- isympk = 3;
- } else if (lsame_(pack, "B")) {
- ipack = 5;
- isympk = 3;
- } else if (lsame_(pack, "Q")) {
- ipack = 6;
- isympk = 2;
- } else if (lsame_(pack, "Z")) {
- ipack = 7;
- } else {
- ipack = -1;
- }
-
-/* Set certain internal parameters */
-
- mnmin = min(*m,*n);
-/* Computing MIN */
- i__1 = *kl, i__2 = *m - 1;
- llb = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *ku, i__2 = *n - 1;
- uub = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *m, i__2 = *n + llb;
- mr = min(i__1,i__2);
-/* Computing MIN */
- i__1 = *n, i__2 = *m + uub;
- nc = min(i__1,i__2);
-
- if (ipack == 5 || ipack == 6) {
- minlda = uub + 1;
- } else if (ipack == 7) {
- minlda = llb + uub + 1;
- } else {
- minlda = *m;
- }
-
-/* Use Givens rotation method if bandwidth small enough,
- or if LDA is too small to store the matrix unpacked. */
-
- givens = FALSE_;
- if (isym == 1) {
-/* Computing MAX */
- i__1 = 1, i__2 = mr + nc;
- if ((doublereal) (llb + uub) < (doublereal) max(i__1,i__2) * .3) {
- givens = TRUE_;
- }
- } else {
- if (llb << 1 < *m) {
- givens = TRUE_;
- }
- }
- if (*lda < *m && *lda >= minlda) {
- givens = TRUE_;
- }
-
-/* Set INFO if an error */
-
- if (*m < 0) {
- *info = -1;
- } else if (*m != *n && isym != 1) {
- *info = -1;
- } else if (*n < 0) {
- *info = -2;
- } else if (idist == -1) {
- *info = -3;
- } else if (isym == -1) {
- *info = -5;
- } else if (abs(*mode) > 6) {
- *info = -7;
- } else if (*mode != 0 && abs(*mode) != 6 && *cond < 1.) {
- *info = -8;
- } else if (*kl < 0) {
- *info = -10;
- } else if (*ku < 0 || isym != 1 && *kl != *ku) {
- *info = -11;
- } else if (ipack == -1 || isympk == 1 && isym == 1 || isympk == 2 && isym
- == 1 && *kl > 0 || isympk == 3 && isym == 1 && *ku > 0 || isympk
- != 0 && *m != *n) {
- *info = -12;
- } else if (*lda < max(1,minlda)) {
- *info = -14;
- }
-
- if (*info != 0) {
- i__1 = -(*info);
- xerbla_("ZLATMS", &i__1);
- return 0;
- }
-
-/* Initialize random number generator */
-
- for (i = 1; i <= 4; ++i) {
- iseed[i] = (i__1 = iseed[i], abs(i__1)) % 4096;
-/* L10: */
- }
-
- if (iseed[4] % 2 != 1) {
- ++iseed[4];
- }
-
-/* 2) Set up D if indicated.
-
- Compute D according to COND and MODE */
-
- dlatm1_(mode, cond, &irsign, &idist, &iseed[1], &d[1], &mnmin, &iinfo);
- if (iinfo != 0) {
- *info = 1;
- return 0;
- }
-
-/* Choose Top-Down if D is (apparently) increasing,
- Bottom-Up if D is (apparently) decreasing. */
-
- if (abs(d[1]) <= (d__1 = d[mnmin], abs(d__1))) {
- topdwn = TRUE_;
- } else {
- topdwn = FALSE_;
- }
-
- if (*mode != 0 && abs(*mode) != 6) {
-
-/* Scale by DMAX */
-
- temp = abs(d[1]);
- i__1 = mnmin;
- for (i = 2; i <= i__1; ++i) {
-/* Computing MAX */
- d__2 = temp, d__3 = (d__1 = d[i], abs(d__1));
- temp = max(d__2,d__3);
-/* L20: */
- }
-
- if (temp > 0.) {
- alpha = *dmax__ / temp;
- } else {
- *info = 2;
- return 0;
- }
-
- dscal_(&mnmin, &alpha, &d[1], &c__1);
-
- }
-
- zlaset_("Full", lda, n, &c_b1, &c_b1, &a[a_offset], lda);
-
-/* 3) Generate Banded Matrix using Givens rotations.
- Also the special case of UUB=LLB=0
-
- Compute Addressing constants to cover all
- storage formats. Whether GE, HE, SY, GB, HB, or SB,
- upper or lower triangle or both,
- the (i,j)-th element is in
- A( i - ISKEW*j + IOFFST, j ) */
-
- if (ipack > 4) {
- ilda = *lda - 1;
- iskew = 1;
- if (ipack > 5) {
- ioffst = uub + 1;
- } else {
- ioffst = 1;
- }
- } else {
- ilda = *lda;
- iskew = 0;
- ioffst = 0;
- }
-
-/* IPACKG is the format that the matrix is generated in. If this is
- different from IPACK, then the matrix must be repacked at the
- end. It also signals how to compute the norm, for scaling. */
-
- ipackg = 0;
-
-/* Diagonal Matrix -- We are done, unless it
- is to be stored HP/SP/PP/TP (PACK='R' or 'C') */
-
- if (llb == 0 && uub == 0) {
- i__1 = mnmin;
- for (j = 1; j <= i__1; ++j) {
- i__2 = (1 - iskew) * j + ioffst + j * a_dim1;
- i__3 = j;
- z__1.r = d[i__3], z__1.i = 0.;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
-/* L30: */
- }
-
- if (ipack <= 2 || ipack >= 5) {
- ipackg = ipack;
- }
-
- } else if (givens) {
-
-/* Check whether to use Givens rotations,
- Householder transformations, or nothing. */
-
- if (isym == 1) {
-
-/* Non-symmetric -- A = U D V */
-
- if (ipack > 4) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
-
- i__1 = mnmin;
- for (j = 1; j <= i__1; ++j) {
- i__2 = (1 - iskew) * j + ioffst + j * a_dim1;
- i__3 = j;
- z__1.r = d[i__3], z__1.i = 0.;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
-/* L40: */
- }
-
- if (topdwn) {
- jkl = 0;
- i__1 = uub;
- for (jku = 1; jku <= i__1; ++jku) {
-
-/* Transform from bandwidth JKL, JKU-1 to
-JKL, JKU
-
- Last row actually rotated is M
- Last column actually rotated is MIN( M+
-JKU, N )
-
- Computing MIN */
- i__3 = *m + jku;
- i__2 = min(i__3,*n) + jkl - 1;
- for (jr = 1; jr <= i__2; ++jr) {
- extra.r = 0., extra.i = 0.;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- d__1 = cos(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- c.r = z__1.r, c.i = z__1.i;
- d__1 = sin(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- s.r = z__1.r, s.i = z__1.i;
-/* Computing MAX */
- i__3 = 1, i__4 = jr - jkl;
- icol = max(i__3,i__4);
- if (jr < *m) {
-/* Computing MIN */
- i__3 = *n, i__4 = jr + jku;
- il = min(i__3,i__4) + 1 - icol;
- L__1 = jr > jkl;
- zlarot_(&c_true, &L__1, &c_false, &il, &c, &s, &a[
- jr - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &extra, &dummy);
- }
-
-/* Chase "EXTRA" back up */
-
- ir = jr;
- ic = icol;
- i__3 = -jkl - jku;
- for (jch = jr - jkl; i__3 < 0 ? jch >= 1 : jch <= 1;
- jch += i__3) {
- if (ir < *m) {
- zlartg_(&a[ir + 1 - iskew * (ic + 1) + ioffst
- + (ic + 1) * a_dim1], &extra, &realc,
- &s, &dummy);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__2.r = realc * dummy.r, z__2.i = realc *
- dummy.i;
- d_cnjg(&z__1, &z__2);
- c.r = z__1.r, c.i = z__1.i;
- z__3.r = -s.r, z__3.i = -s.i;
- z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
- z__2.i = z__3.r * dummy.i + z__3.i *
- dummy.r;
- d_cnjg(&z__1, &z__2);
- s.r = z__1.r, s.i = z__1.i;
- }
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jku;
- irow = max(i__4,i__5);
- il = ir + 2 - irow;
- ctemp.r = 0., ctemp.i = 0.;
- iltemp = jch > jku;
- zlarot_(&c_false, &iltemp, &c_true, &il, &c, &s, &
- a[irow - iskew * ic + ioffst + ic *
- a_dim1], &ilda, &ctemp, &extra);
- if (iltemp) {
- zlartg_(&a[irow + 1 - iskew * (ic + 1) +
- ioffst + (ic + 1) * a_dim1], &ctemp, &
- realc, &s, &dummy);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__2.r = realc * dummy.r, z__2.i = realc *
- dummy.i;
- d_cnjg(&z__1, &z__2);
- c.r = z__1.r, c.i = z__1.i;
- z__3.r = -s.r, z__3.i = -s.i;
- z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
- z__2.i = z__3.r * dummy.i + z__3.i *
- dummy.r;
- d_cnjg(&z__1, &z__2);
- s.r = z__1.r, s.i = z__1.i;
-
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jku - jkl;
- icol = max(i__4,i__5);
- il = ic + 2 - icol;
- extra.r = 0., extra.i = 0.;
- L__1 = jch > jku + jkl;
- zlarot_(&c_true, &L__1, &c_true, &il, &c, &s,
- &a[irow - iskew * icol + ioffst +
- icol * a_dim1], &ilda, &extra, &ctemp)
- ;
- ic = icol;
- ir = irow;
- }
-/* L50: */
- }
-/* L60: */
- }
-/* L70: */
- }
-
- jku = uub;
- i__1 = llb;
- for (jkl = 1; jkl <= i__1; ++jkl) {
-
-/* Transform from bandwidth JKL-1, JKU to
-JKL, JKU
-
- Computing MIN */
- i__3 = *n + jkl;
- i__2 = min(i__3,*m) + jku - 1;
- for (jc = 1; jc <= i__2; ++jc) {
- extra.r = 0., extra.i = 0.;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- d__1 = cos(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- c.r = z__1.r, c.i = z__1.i;
- d__1 = sin(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- s.r = z__1.r, s.i = z__1.i;
-/* Computing MAX */
- i__3 = 1, i__4 = jc - jku;
- irow = max(i__3,i__4);
- if (jc < *n) {
-/* Computing MIN */
- i__3 = *m, i__4 = jc + jkl;
- il = min(i__3,i__4) + 1 - irow;
- L__1 = jc > jku;
- zlarot_(&c_false, &L__1, &c_false, &il, &c, &s, &
- a[irow - iskew * jc + ioffst + jc *
- a_dim1], &ilda, &extra, &dummy);
- }
-
-/* Chase "EXTRA" back up */
-
- ic = jc;
- ir = irow;
- i__3 = -jkl - jku;
- for (jch = jc - jku; i__3 < 0 ? jch >= 1 : jch <= 1;
- jch += i__3) {
- if (ic < *n) {
- zlartg_(&a[ir + 1 - iskew * (ic + 1) + ioffst
- + (ic + 1) * a_dim1], &extra, &realc,
- &s, &dummy);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__2.r = realc * dummy.r, z__2.i = realc *
- dummy.i;
- d_cnjg(&z__1, &z__2);
- c.r = z__1.r, c.i = z__1.i;
- z__3.r = -s.r, z__3.i = -s.i;
- z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
- z__2.i = z__3.r * dummy.i + z__3.i *
- dummy.r;
- d_cnjg(&z__1, &z__2);
- s.r = z__1.r, s.i = z__1.i;
- }
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jkl;
- icol = max(i__4,i__5);
- il = ic + 2 - icol;
- ctemp.r = 0., ctemp.i = 0.;
- iltemp = jch > jkl;
- zlarot_(&c_true, &iltemp, &c_true, &il, &c, &s, &
- a[ir - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &ctemp, &extra);
- if (iltemp) {
- zlartg_(&a[ir + 1 - iskew * (icol + 1) +
- ioffst + (icol + 1) * a_dim1], &ctemp,
- &realc, &s, &dummy);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__2.r = realc * dummy.r, z__2.i = realc *
- dummy.i;
- d_cnjg(&z__1, &z__2);
- c.r = z__1.r, c.i = z__1.i;
- z__3.r = -s.r, z__3.i = -s.i;
- z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
- z__2.i = z__3.r * dummy.i + z__3.i *
- dummy.r;
- d_cnjg(&z__1, &z__2);
- s.r = z__1.r, s.i = z__1.i;
-/* Computing MAX */
- i__4 = 1, i__5 = jch - jkl - jku;
- irow = max(i__4,i__5);
- il = ir + 2 - irow;
- extra.r = 0., extra.i = 0.;
- L__1 = jch > jkl + jku;
- zlarot_(&c_false, &L__1, &c_true, &il, &c, &s,
- &a[irow - iskew * icol + ioffst +
- icol * a_dim1], &ilda, &extra, &ctemp)
- ;
- ic = icol;
- ir = irow;
- }
-/* L80: */
- }
-/* L90: */
- }
-/* L100: */
- }
-
- } else {
-
-/* Bottom-Up -- Start at the bottom right. */
-
- jkl = 0;
- i__1 = uub;
- for (jku = 1; jku <= i__1; ++jku) {
-
-/* Transform from bandwidth JKL, JKU-1 to
-JKL, JKU
-
- First row actually rotated is M
- First column actually rotated is MIN( M
-+JKU, N )
-
- Computing MIN */
- i__2 = *m, i__3 = *n + jkl;
- iendch = min(i__2,i__3) - 1;
-/* Computing MIN */
- i__2 = *m + jku;
- i__3 = 1 - jkl;
- for (jc = min(i__2,*n) - 1; jc >= i__3; --jc) {
- extra.r = 0., extra.i = 0.;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- d__1 = cos(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- c.r = z__1.r, c.i = z__1.i;
- d__1 = sin(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- s.r = z__1.r, s.i = z__1.i;
-/* Computing MAX */
- i__2 = 1, i__4 = jc - jku + 1;
- irow = max(i__2,i__4);
- if (jc > 0) {
-/* Computing MIN */
- i__2 = *m, i__4 = jc + jkl + 1;
- il = min(i__2,i__4) + 1 - irow;
- L__1 = jc + jkl < *m;
- zlarot_(&c_false, &c_false, &L__1, &il, &c, &s, &
- a[irow - iskew * jc + ioffst + jc *
- a_dim1], &ilda, &dummy, &extra);
- }
-
-/* Chase "EXTRA" back down */
-
- ic = jc;
- i__2 = iendch;
- i__4 = jkl + jku;
- for (jch = jc + jkl; i__4 < 0 ? jch >= i__2 : jch <=
- i__2; jch += i__4) {
- ilextr = ic > 0;
- if (ilextr) {
- zlartg_(&a[jch - iskew * ic + ioffst + ic *
- a_dim1], &extra, &realc, &s, &dummy);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__1.r = realc * dummy.r, z__1.i = realc *
- dummy.i;
- c.r = z__1.r, c.i = z__1.i;
- z__1.r = s.r * dummy.r - s.i * dummy.i,
- z__1.i = s.r * dummy.i + s.i *
- dummy.r;
- s.r = z__1.r, s.i = z__1.i;
- }
- ic = max(1,ic);
-/* Computing MIN */
- i__5 = *n - 1, i__6 = jch + jku;
- icol = min(i__5,i__6);
- iltemp = jch + jku < *n;
- ctemp.r = 0., ctemp.i = 0.;
- i__5 = icol + 2 - ic;
- zlarot_(&c_true, &ilextr, &iltemp, &i__5, &c, &s,
- &a[jch - iskew * ic + ioffst + ic *
- a_dim1], &ilda, &extra, &ctemp);
- if (iltemp) {
- zlartg_(&a[jch - iskew * icol + ioffst + icol
- * a_dim1], &ctemp, &realc, &s, &dummy)
- ;
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__1.r = realc * dummy.r, z__1.i = realc *
- dummy.i;
- c.r = z__1.r, c.i = z__1.i;
- z__1.r = s.r * dummy.r - s.i * dummy.i,
- z__1.i = s.r * dummy.i + s.i *
- dummy.r;
- s.r = z__1.r, s.i = z__1.i;
-/* Computing MIN */
- i__5 = iendch, i__6 = jch + jkl + jku;
- il = min(i__5,i__6) + 2 - jch;
- extra.r = 0., extra.i = 0.;
- L__1 = jch + jkl + jku <= iendch;
- zlarot_(&c_false, &c_true, &L__1, &il, &c, &s,
- &a[jch - iskew * icol + ioffst +
- icol * a_dim1], &ilda, &ctemp, &extra)
- ;
- ic = icol;
- }
-/* L110: */
- }
-/* L120: */
- }
-/* L130: */
- }
-
- jku = uub;
- i__1 = llb;
- for (jkl = 1; jkl <= i__1; ++jkl) {
-
-/* Transform from bandwidth JKL-1, JKU to
-JKL, JKU
-
- First row actually rotated is MIN( N+JK
-L, M )
- First column actually rotated is N
-
- Computing MIN */
- i__3 = *n, i__4 = *m + jku;
- iendch = min(i__3,i__4) - 1;
-/* Computing MIN */
- i__3 = *n + jkl;
- i__4 = 1 - jku;
- for (jr = min(i__3,*m) - 1; jr >= i__4; --jr) {
- extra.r = 0., extra.i = 0.;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- d__1 = cos(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- c.r = z__1.r, c.i = z__1.i;
- d__1 = sin(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- s.r = z__1.r, s.i = z__1.i;
-/* Computing MAX */
- i__3 = 1, i__2 = jr - jkl + 1;
- icol = max(i__3,i__2);
- if (jr > 0) {
-/* Computing MIN */
- i__3 = *n, i__2 = jr + jku + 1;
- il = min(i__3,i__2) + 1 - icol;
- L__1 = jr + jku < *n;
- zlarot_(&c_true, &c_false, &L__1, &il, &c, &s, &a[
- jr - iskew * icol + ioffst + icol *
- a_dim1], &ilda, &dummy, &extra);
- }
-
-/* Chase "EXTRA" back down */
-
- ir = jr;
- i__3 = iendch;
- i__2 = jkl + jku;
- for (jch = jr + jku; i__2 < 0 ? jch >= i__3 : jch <=
- i__3; jch += i__2) {
- ilextr = ir > 0;
- if (ilextr) {
- zlartg_(&a[ir - iskew * jch + ioffst + jch *
- a_dim1], &extra, &realc, &s, &dummy);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__1.r = realc * dummy.r, z__1.i = realc *
- dummy.i;
- c.r = z__1.r, c.i = z__1.i;
- z__1.r = s.r * dummy.r - s.i * dummy.i,
- z__1.i = s.r * dummy.i + s.i *
- dummy.r;
- s.r = z__1.r, s.i = z__1.i;
- }
- ir = max(1,ir);
-/* Computing MIN */
- i__5 = *m - 1, i__6 = jch + jkl;
- irow = min(i__5,i__6);
- iltemp = jch + jkl < *m;
- ctemp.r = 0., ctemp.i = 0.;
- i__5 = irow + 2 - ir;
- zlarot_(&c_false, &ilextr, &iltemp, &i__5, &c, &s,
- &a[ir - iskew * jch + ioffst + jch *
- a_dim1], &ilda, &extra, &ctemp);
- if (iltemp) {
- zlartg_(&a[irow - iskew * jch + ioffst + jch *
- a_dim1], &ctemp, &realc, &s, &dummy);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__1.r = realc * dummy.r, z__1.i = realc *
- dummy.i;
- c.r = z__1.r, c.i = z__1.i;
- z__1.r = s.r * dummy.r - s.i * dummy.i,
- z__1.i = s.r * dummy.i + s.i *
- dummy.r;
- s.r = z__1.r, s.i = z__1.i;
-/* Computing MIN */
- i__5 = iendch, i__6 = jch + jkl + jku;
- il = min(i__5,i__6) + 2 - jch;
- extra.r = 0., extra.i = 0.;
- L__1 = jch + jkl + jku <= iendch;
- zlarot_(&c_true, &c_true, &L__1, &il, &c, &s,
- &a[irow - iskew * jch + ioffst + jch *
- a_dim1], &ilda, &ctemp, &extra);
- ir = irow;
- }
-/* L140: */
- }
-/* L150: */
- }
-/* L160: */
- }
-
- }
-
- } else {
-
-/* Symmetric -- A = U D U'
- Hermitian -- A = U D U* */
-
- ipackg = ipack;
- ioffg = ioffst;
-
- if (topdwn) {
-
-/* Top-Down -- Generate Upper triangle only */
-
- if (ipack >= 5) {
- ipackg = 6;
- ioffg = uub + 1;
- } else {
- ipackg = 1;
- }
-
- i__1 = mnmin;
- for (j = 1; j <= i__1; ++j) {
- i__4 = (1 - iskew) * j + ioffg + j * a_dim1;
- i__2 = j;
- z__1.r = d[i__2], z__1.i = 0.;
- a[i__4].r = z__1.r, a[i__4].i = z__1.i;
-/* L170: */
- }
-
- i__1 = uub;
- for (k = 1; k <= i__1; ++k) {
- i__4 = *n - 1;
- for (jc = 1; jc <= i__4; ++jc) {
-/* Computing MAX */
- i__2 = 1, i__3 = jc - k;
- irow = max(i__2,i__3);
-/* Computing MIN */
- i__2 = jc + 1, i__3 = k + 2;
- il = min(i__2,i__3);
- extra.r = 0., extra.i = 0.;
- i__2 = jc - iskew * (jc + 1) + ioffg + (jc + 1) *
- a_dim1;
- ctemp.r = a[i__2].r, ctemp.i = a[i__2].i;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- d__1 = cos(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- c.r = z__1.r, c.i = z__1.i;
- d__1 = sin(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- s.r = z__1.r, s.i = z__1.i;
- if (zsym) {
- ct.r = c.r, ct.i = c.i;
- st.r = s.r, st.i = s.i;
- } else {
- d_cnjg(&z__1, &ctemp);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- d_cnjg(&z__1, &c);
- ct.r = z__1.r, ct.i = z__1.i;
- d_cnjg(&z__1, &s);
- st.r = z__1.r, st.i = z__1.i;
- }
- L__1 = jc > k;
- zlarot_(&c_false, &L__1, &c_true, &il, &c, &s, &a[
- irow - iskew * jc + ioffg + jc * a_dim1], &
- ilda, &extra, &ctemp);
-/* Computing MIN */
- i__3 = k, i__5 = *n - jc;
- i__2 = min(i__3,i__5) + 1;
- zlarot_(&c_true, &c_true, &c_false, &i__2, &ct, &st, &
- a[(1 - iskew) * jc + ioffg + jc * a_dim1], &
- ilda, &ctemp, &dummy);
-
-/* Chase EXTRA back up the matrix
-*/
-
- icol = jc;
- i__2 = -k;
- for (jch = jc - k; i__2 < 0 ? jch >= 1 : jch <= 1;
- jch += i__2) {
- zlartg_(&a[jch + 1 - iskew * (icol + 1) + ioffg +
- (icol + 1) * a_dim1], &extra, &realc, &s,
- &dummy);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__2.r = realc * dummy.r, z__2.i = realc *
- dummy.i;
- d_cnjg(&z__1, &z__2);
- c.r = z__1.r, c.i = z__1.i;
- z__3.r = -s.r, z__3.i = -s.i;
- z__2.r = z__3.r * dummy.r - z__3.i * dummy.i,
- z__2.i = z__3.r * dummy.i + z__3.i *
- dummy.r;
- d_cnjg(&z__1, &z__2);
- s.r = z__1.r, s.i = z__1.i;
- i__3 = jch - iskew * (jch + 1) + ioffg + (jch + 1)
- * a_dim1;
- ctemp.r = a[i__3].r, ctemp.i = a[i__3].i;
- if (zsym) {
- ct.r = c.r, ct.i = c.i;
- st.r = s.r, st.i = s.i;
- } else {
- d_cnjg(&z__1, &ctemp);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- d_cnjg(&z__1, &c);
- ct.r = z__1.r, ct.i = z__1.i;
- d_cnjg(&z__1, &s);
- st.r = z__1.r, st.i = z__1.i;
- }
- i__3 = k + 2;
- zlarot_(&c_true, &c_true, &c_true, &i__3, &c, &s,
- &a[(1 - iskew) * jch + ioffg + jch *
- a_dim1], &ilda, &ctemp, &extra);
-/* Computing MAX */
- i__3 = 1, i__5 = jch - k;
- irow = max(i__3,i__5);
-/* Computing MIN */
- i__3 = jch + 1, i__5 = k + 2;
- il = min(i__3,i__5);
- extra.r = 0., extra.i = 0.;
- L__1 = jch > k;
- zlarot_(&c_false, &L__1, &c_true, &il, &ct, &st, &
- a[irow - iskew * jch + ioffg + jch *
- a_dim1], &ilda, &extra, &ctemp);
- icol = jch;
-/* L180: */
- }
-/* L190: */
- }
-/* L200: */
- }
-
-/* If we need lower triangle, copy from upper. No
-te that
- the order of copying is chosen to work for 'q'
- -> 'b' */
-
- if (ipack != ipackg && ipack != 3) {
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- irow = ioffst - iskew * jc;
- if (zsym) {
-/* Computing MIN */
- i__2 = *n, i__3 = jc + uub;
- i__4 = min(i__2,i__3);
- for (jr = jc; jr <= i__4; ++jr) {
- i__2 = jr + irow + jc * a_dim1;
- i__3 = jc - iskew * jr + ioffg + jr * a_dim1;
- a[i__2].r = a[i__3].r, a[i__2].i = a[i__3].i;
-/* L210: */
- }
- } else {
-/* Computing MIN */
- i__2 = *n, i__3 = jc + uub;
- i__4 = min(i__2,i__3);
- for (jr = jc; jr <= i__4; ++jr) {
- i__2 = jr + irow + jc * a_dim1;
- d_cnjg(&z__1, &a[jc - iskew * jr + ioffg + jr
- * a_dim1]);
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
-/* L220: */
- }
- }
-/* L230: */
- }
- if (ipack == 5) {
- i__1 = *n;
- for (jc = *n - uub + 1; jc <= i__1; ++jc) {
- i__4 = uub + 1;
- for (jr = *n + 2 - jc; jr <= i__4; ++jr) {
- i__2 = jr + jc * a_dim1;
- a[i__2].r = 0., a[i__2].i = 0.;
-/* L240: */
- }
-/* L250: */
- }
- }
- if (ipackg == 6) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
- }
- } else {
-
-/* Bottom-Up -- Generate Lower triangle only */
-
- if (ipack >= 5) {
- ipackg = 5;
- if (ipack == 6) {
- ioffg = 1;
- }
- } else {
- ipackg = 2;
- }
-
- i__1 = mnmin;
- for (j = 1; j <= i__1; ++j) {
- i__4 = (1 - iskew) * j + ioffg + j * a_dim1;
- i__2 = j;
- z__1.r = d[i__2], z__1.i = 0.;
- a[i__4].r = z__1.r, a[i__4].i = z__1.i;
-/* L260: */
- }
-
- i__1 = uub;
- for (k = 1; k <= i__1; ++k) {
- for (jc = *n - 1; jc >= 1; --jc) {
-/* Computing MIN */
- i__4 = *n + 1 - jc, i__2 = k + 2;
- il = min(i__4,i__2);
- extra.r = 0., extra.i = 0.;
- i__4 = (1 - iskew) * jc + 1 + ioffg + jc * a_dim1;
- ctemp.r = a[i__4].r, ctemp.i = a[i__4].i;
- angle = dlarnd_(&c__1, &iseed[1]) *
- 6.2831853071795864769252867663;
- d__1 = cos(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- c.r = z__1.r, c.i = z__1.i;
- d__1 = sin(angle);
- zlarnd_(&z__2, &c__5, &iseed[1]);
- z__1.r = d__1 * z__2.r, z__1.i = d__1 * z__2.i;
- s.r = z__1.r, s.i = z__1.i;
- if (zsym) {
- ct.r = c.r, ct.i = c.i;
- st.r = s.r, st.i = s.i;
- } else {
- d_cnjg(&z__1, &ctemp);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- d_cnjg(&z__1, &c);
- ct.r = z__1.r, ct.i = z__1.i;
- d_cnjg(&z__1, &s);
- st.r = z__1.r, st.i = z__1.i;
- }
- L__1 = *n - jc > k;
- zlarot_(&c_false, &c_true, &L__1, &il, &c, &s, &a[(1
- - iskew) * jc + ioffg + jc * a_dim1], &ilda, &
- ctemp, &extra);
-/* Computing MAX */
- i__4 = 1, i__2 = jc - k + 1;
- icol = max(i__4,i__2);
- i__4 = jc + 2 - icol;
- zlarot_(&c_true, &c_false, &c_true, &i__4, &ct, &st, &
- a[jc - iskew * icol + ioffg + icol * a_dim1],
- &ilda, &dummy, &ctemp);
-
-/* Chase EXTRA back down the matrix
- */
-
- icol = jc;
- i__4 = *n - 1;
- i__2 = k;
- for (jch = jc + k; i__2 < 0 ? jch >= i__4 : jch <=
- i__4; jch += i__2) {
- zlartg_(&a[jch - iskew * icol + ioffg + icol *
- a_dim1], &extra, &realc, &s, &dummy);
- zlarnd_(&z__1, &c__5, &iseed[1]);
- dummy.r = z__1.r, dummy.i = z__1.i;
- z__1.r = realc * dummy.r, z__1.i = realc *
- dummy.i;
- c.r = z__1.r, c.i = z__1.i;
- z__1.r = s.r * dummy.r - s.i * dummy.i, z__1.i =
- s.r * dummy.i + s.i * dummy.r;
- s.r = z__1.r, s.i = z__1.i;
- i__3 = (1 - iskew) * jch + 1 + ioffg + jch *
- a_dim1;
- ctemp.r = a[i__3].r, ctemp.i = a[i__3].i;
- if (zsym) {
- ct.r = c.r, ct.i = c.i;
- st.r = s.r, st.i = s.i;
- } else {
- d_cnjg(&z__1, &ctemp);
- ctemp.r = z__1.r, ctemp.i = z__1.i;
- d_cnjg(&z__1, &c);
- ct.r = z__1.r, ct.i = z__1.i;
- d_cnjg(&z__1, &s);
- st.r = z__1.r, st.i = z__1.i;
- }
- i__3 = k + 2;
- zlarot_(&c_true, &c_true, &c_true, &i__3, &c, &s,
- &a[jch - iskew * icol + ioffg + icol *
- a_dim1], &ilda, &extra, &ctemp);
-/* Computing MIN */
- i__3 = *n + 1 - jch, i__5 = k + 2;
- il = min(i__3,i__5);
- extra.r = 0., extra.i = 0.;
- L__1 = *n - jch > k;
- zlarot_(&c_false, &c_true, &L__1, &il, &ct, &st, &
- a[(1 - iskew) * jch + ioffg + jch *
- a_dim1], &ilda, &ctemp, &extra);
- icol = jch;
-/* L270: */
- }
-/* L280: */
- }
-/* L290: */
- }
-
-/* If we need upper triangle, copy from lower. No
-te that
- the order of copying is chosen to work for 'b'
- -> 'q' */
-
- if (ipack != ipackg && ipack != 4) {
- for (jc = *n; jc >= 1; --jc) {
- irow = ioffst - iskew * jc;
- if (zsym) {
-/* Computing MAX */
- i__2 = 1, i__4 = jc - uub;
- i__1 = max(i__2,i__4);
- for (jr = jc; jr >= i__1; --jr) {
- i__2 = jr + irow + jc * a_dim1;
- i__4 = jc - iskew * jr + ioffg + jr * a_dim1;
- a[i__2].r = a[i__4].r, a[i__2].i = a[i__4].i;
-/* L300: */
- }
- } else {
-/* Computing MAX */
- i__2 = 1, i__4 = jc - uub;
- i__1 = max(i__2,i__4);
- for (jr = jc; jr >= i__1; --jr) {
- i__2 = jr + irow + jc * a_dim1;
- d_cnjg(&z__1, &a[jc - iskew * jr + ioffg + jr
- * a_dim1]);
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
-/* L310: */
- }
- }
-/* L320: */
- }
- if (ipack == 6) {
- i__1 = uub;
- for (jc = 1; jc <= i__1; ++jc) {
- i__2 = uub + 1 - jc;
- for (jr = 1; jr <= i__2; ++jr) {
- i__4 = jr + jc * a_dim1;
- a[i__4].r = 0., a[i__4].i = 0.;
-/* L330: */
- }
-/* L340: */
- }
- }
- if (ipackg == 5) {
- ipackg = ipack;
- } else {
- ipackg = 0;
- }
- }
- }
-
-/* Ensure that the diagonal is real if Hermitian */
-
- if (! zsym) {
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- irow = ioffst + (1 - iskew) * jc;
- i__2 = irow + jc * a_dim1;
- i__4 = irow + jc * a_dim1;
- d__1 = a[i__4].r;
- z__1.r = d__1, z__1.i = 0.;
- a[i__2].r = z__1.r, a[i__2].i = z__1.i;
-/* L350: */
- }
- }
-
- }
-
- } else {
-
-/* 4) Generate Banded Matrix by first
- Rotating by random Unitary matrices,
- then reducing the bandwidth using Householder
- transformations.
-
- Note: we should get here only if LDA .ge. N */
-
- if (isym == 1) {
-
-/* Non-symmetric -- A = U D V */
-
- zlagge_(&mr, &nc, &llb, &uub, &d[1], &a[a_offset], lda, &iseed[1],
- &work[1], &iinfo);
- } else {
-
-/* Symmetric -- A = U D U' or
- Hermitian -- A = U D U* */
-
- if (zsym) {
- zlagsy_(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1]
- , &iinfo);
- } else {
- zlaghe_(m, &llb, &d[1], &a[a_offset], lda, &iseed[1], &work[1]
- , &iinfo);
- }
- }
-
- if (iinfo != 0) {
- *info = 3;
- return 0;
- }
- }
-
-/* 5) Pack the matrix */
-
- if (ipack != ipackg) {
- if (ipack == 1) {
-
-/* 'U' -- Upper triangular, not packed */
-
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j + 1; i <= i__2; ++i) {
- i__4 = i + j * a_dim1;
- a[i__4].r = 0., a[i__4].i = 0.;
-/* L360: */
- }
-/* L370: */
- }
-
- } else if (ipack == 2) {
-
-/* 'L' -- Lower triangular, not packed */
-
- i__1 = *m;
- for (j = 2; j <= i__1; ++j) {
- i__2 = j - 1;
- for (i = 1; i <= i__2; ++i) {
- i__4 = i + j * a_dim1;
- a[i__4].r = 0., a[i__4].i = 0.;
-/* L380: */
- }
-/* L390: */
- }
-
- } else if (ipack == 3) {
-
-/* 'C' -- Upper triangle packed Columnwise. */
-
- icol = 1;
- irow = 0;
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = j;
- for (i = 1; i <= i__2; ++i) {
- ++irow;
- if (irow > *lda) {
- irow = 1;
- ++icol;
- }
- i__4 = irow + icol * a_dim1;
- i__3 = i + j * a_dim1;
- a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
-/* L400: */
- }
-/* L410: */
- }
-
- } else if (ipack == 4) {
-
-/* 'R' -- Lower triangle packed Columnwise. */
-
- icol = 1;
- irow = 0;
- i__1 = *m;
- for (j = 1; j <= i__1; ++j) {
- i__2 = *m;
- for (i = j; i <= i__2; ++i) {
- ++irow;
- if (irow > *lda) {
- irow = 1;
- ++icol;
- }
- i__4 = irow + icol * a_dim1;
- i__3 = i + j * a_dim1;
- a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
-/* L420: */
- }
-/* L430: */
- }
-
- } else if (ipack >= 5) {
-
-/* 'B' -- The lower triangle is packed as a band matrix.
-
- 'Q' -- The upper triangle is packed as a band matrix.
-
- 'Z' -- The whole matrix is packed as a band matrix.
-*/
-
- if (ipack == 5) {
- uub = 0;
- }
- if (ipack == 6) {
- llb = 0;
- }
-
- i__1 = uub;
- for (j = 1; j <= i__1; ++j) {
-/* Computing MIN */
- i__2 = j + llb;
- for (i = min(i__2,*m); i >= 1; --i) {
- i__2 = i - j + uub + 1 + j * a_dim1;
- i__4 = i + j * a_dim1;
- a[i__2].r = a[i__4].r, a[i__2].i = a[i__4].i;
-/* L440: */
- }
-/* L450: */
- }
-
- i__1 = *n;
- for (j = uub + 2; j <= i__1; ++j) {
-/* Computing MIN */
- i__4 = j + llb;
- i__2 = min(i__4,*m);
- for (i = j - uub; i <= i__2; ++i) {
- i__4 = i - j + uub + 1 + j * a_dim1;
- i__3 = i + j * a_dim1;
- a[i__4].r = a[i__3].r, a[i__4].i = a[i__3].i;
-/* L460: */
- }
-/* L470: */
- }
- }
-
-/* If packed, zero out extraneous elements.
-
- Symmetric/Triangular Packed --
- zero out everything after A(IROW,ICOL) */
-
- if (ipack == 3 || ipack == 4) {
- i__1 = *m;
- for (jc = icol; jc <= i__1; ++jc) {
- i__2 = *lda;
- for (jr = irow + 1; jr <= i__2; ++jr) {
- i__4 = jr + jc * a_dim1;
- a[i__4].r = 0., a[i__4].i = 0.;
-/* L480: */
- }
- irow = 0;
-/* L490: */
- }
-
- } else if (ipack >= 5) {
-
-/* Packed Band --
- 1st row is now in A( UUB+2-j, j), zero above it
- m-th row is now in A( M+UUB-j,j), zero below it
- last non-zero diagonal is now in A( UUB+LLB+1,j ),
-
- zero below it, too. */
-
- ir1 = uub + llb + 2;
- ir2 = uub + *m + 2;
- i__1 = *n;
- for (jc = 1; jc <= i__1; ++jc) {
- i__2 = uub + 1 - jc;
- for (jr = 1; jr <= i__2; ++jr) {
- i__4 = jr + jc * a_dim1;
- a[i__4].r = 0., a[i__4].i = 0.;
-/* L500: */
- }
-/* Computing MAX
- Computing MIN */
- i__3 = ir1, i__5 = ir2 - jc;
- i__2 = 1, i__4 = min(i__3,i__5);
- i__6 = *lda;
- for (jr = max(i__2,i__4); jr <= i__6; ++jr) {
- i__2 = jr + jc * a_dim1;
- a[i__2].r = 0., a[i__2].i = 0.;
-/* L510: */
- }
-/* L520: */
- }
- }
- }
-
- return 0;
-
-/* End of ZLATMS */
-
-} /* zlatms_ */
-
diff --git a/TESTING/MATGEN/zsymv.c b/TESTING/MATGEN/zsymv.c
deleted file mode 100644
index 49c1b34..0000000
--- a/TESTING/MATGEN/zsymv.c
+++ /dev/null
@@ -1,408 +0,0 @@
-#include "f2c.h"
-
-/* Subroutine */ int zsymv_(char *uplo, integer *n, doublecomplex *alpha,
- doublecomplex *a, integer *lda, doublecomplex *x, integer *incx,
- doublecomplex *beta, doublecomplex *y, integer *incy)
-{
-/* -- 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
- =======
-
- ZSYMV performs the matrix-vector operation
-
- y := alpha*A*x + beta*y,
-
- where alpha and beta are scalars, x and y are n element vectors and
- A is an n by n symmetric matrix.
-
- Arguments
- ==========
-
- UPLO - CHARACTER*1
- On entry, UPLO specifies whether the upper or lower
- triangular part of the array A is to be referenced as
- follows:
-
- UPLO = 'U' or 'u' Only the upper triangular part of A
- is to be referenced.
-
- UPLO = 'L' or 'l' Only the lower triangular part of A
- is to be referenced.
-
- Unchanged on exit.
-
- N - INTEGER
- On entry, N specifies the order of the matrix A.
- N must be at least zero.
- Unchanged on exit.
-
- ALPHA - COMPLEX*16
- On entry, ALPHA specifies the scalar alpha.
- Unchanged on exit.
-
- A - COMPLEX*16 array, dimension ( LDA, N )
- Before entry, with UPLO = 'U' or 'u', the leading n by n
- upper triangular part of the array A must contain the upper
-
- triangular part of the symmetric matrix and the strictly
- lower triangular part of A is not referenced.
- Before entry, with UPLO = 'L' or 'l', the leading n by n
- lower triangular part of the array A must contain the lower
-
- triangular part of the symmetric matrix and the strictly
- upper triangular part of A is not referenced.
- Unchanged on exit.
-
- LDA - INTEGER
- On entry, LDA specifies the first dimension of A as declared
-
- in the calling (sub) program. LDA must be at least
- max( 1, N ).
- Unchanged on exit.
-
- X - COMPLEX*16 array, dimension at least
- ( 1 + ( N - 1 )*abs( INCX ) ).
- Before entry, the incremented array X must contain the N-
- element vector x.
- Unchanged on exit.
-
- INCX - INTEGER
- On entry, INCX specifies the increment for the elements of
- X. INCX must not be zero.
- Unchanged on exit.
-
- BETA - COMPLEX*16
- On entry, BETA specifies the scalar beta. When BETA is
- supplied as zero then Y need not be set on input.
- Unchanged on exit.
-
- Y - COMPLEX*16 array, dimension at least
- ( 1 + ( N - 1 )*abs( INCY ) ).
- Before entry, the incremented array Y must contain the n
- element vector y. On exit, Y is overwritten by the updated
- vector y.
-
- INCY - INTEGER
- On entry, INCY specifies the increment for the elements of
- Y. INCY must not be zero.
- Unchanged on exit.
-
- =====================================================================
-
-
-
- Test the input parameters.
-
-
- Parameter adjustments
- Function Body */
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5;
- doublecomplex z__1, z__2, z__3, z__4;
- /* Local variables */
- static integer info;
- static doublecomplex temp1, temp2;
- static integer i, j;
- extern logical lsame_(char *, char *);
- static integer ix, iy, jx, jy, kx, ky;
- extern /* Subroutine */ int xerbla_(char *, integer *);
-
-
-#define X(I) x[(I)-1]
-#define Y(I) y[(I)-1]
-
-#define A(I,J) a[(I)-1 + ((J)-1)* ( *lda)]
-
- info = 0;
- if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
- info = 1;
- } else if (*n < 0) {
- info = 2;
- } else if (*lda < max(1,*n)) {
- info = 5;
- } else if (*incx == 0) {
- info = 7;
- } else if (*incy == 0) {
- info = 10;
- }
- if (info != 0) {
- xerbla_("ZSYMV ", &info);
- return 0;
- }
-
-/* Quick return if possible. */
-
- if (*n == 0 || alpha->r == 0. && alpha->i == 0. && (beta->r == 1. &&
- beta->i == 0.)) {
- return 0;
- }
-
-/* Set up the start points in X and Y. */
-
- if (*incx > 0) {
- kx = 1;
- } else {
- kx = 1 - (*n - 1) * *incx;
- }
- if (*incy > 0) {
- ky = 1;
- } else {
- ky = 1 - (*n - 1) * *incy;
- }
-
-/* Start the operations. In this version the elements of A are
- accessed sequentially with one pass through the triangular part
- of A.
-
- First form y := beta*y. */
-
- if (beta->r != 1. || beta->i != 0.) {
- if (*incy == 1) {
- if (beta->r == 0. && beta->i == 0.) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- Y(i).r = 0., Y(i).i = 0.;
-/* L10: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = i;
- i__3 = i;
- z__1.r = beta->r * Y(i).r - beta->i * Y(i).i,
- z__1.i = beta->r * Y(i).i + beta->i * Y(i)
- .r;
- Y(i).r = z__1.r, Y(i).i = z__1.i;
-/* L20: */
- }
- }
- } else {
- iy = ky;
- if (beta->r == 0. && beta->i == 0.) {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = iy;
- Y(iy).r = 0., Y(iy).i = 0.;
- iy += *incy;
-/* L30: */
- }
- } else {
- i__1 = *n;
- for (i = 1; i <= *n; ++i) {
- i__2 = iy;
- i__3 = iy;
- z__1.r = beta->r * Y(iy).r - beta->i * Y(iy).i,
- z__1.i = beta->r * Y(iy).i + beta->i * Y(iy)
- .r;
- Y(iy).r = z__1.r, Y(iy).i = z__1.i;
- iy += *incy;
-/* L40: */
- }
- }
- }
- }
- if (alpha->r == 0. && alpha->i == 0.) {
- return 0;
- }
- if (lsame_(uplo, "U")) {
-
-/* Form y when A is stored in upper triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- z__1.r = alpha->r * X(j).r - alpha->i * X(j).i, z__1.i =
- alpha->r * X(j).i + alpha->i * X(j).r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- temp2.r = 0., temp2.i = 0.;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i + z__2.i;
- Y(i).r = z__1.r, Y(i).i = z__1.i;
- i__3 = i + j * a_dim1;
- i__4 = i;
- z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i).i,
- z__2.i = A(i,j).r * X(i).i + A(i,j).i * X(
- i).r;
- z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
- temp2.r = z__1.r, temp2.i = z__1.i;
-/* L50: */
- }
- i__2 = j;
- i__3 = j;
- i__4 = j + j * a_dim1;
- z__3.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, z__3.i =
- temp1.r * A(j,j).i + temp1.i * A(j,j).r;
- z__2.r = Y(j).r + z__3.r, z__2.i = Y(j).i + z__3.i;
- z__4.r = alpha->r * temp2.r - alpha->i * temp2.i, z__4.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
- Y(j).r = z__1.r, Y(j).i = z__1.i;
-/* L60: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, z__1.i =
- alpha->r * X(jx).i + alpha->i * X(jx).r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- temp2.r = 0., temp2.i = 0.;
- ix = kx;
- iy = ky;
- i__2 = j - 1;
- for (i = 1; i <= j-1; ++i) {
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i + z__2.i;
- Y(iy).r = z__1.r, Y(iy).i = z__1.i;
- i__3 = i + j * a_dim1;
- i__4 = ix;
- z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix).i,
- z__2.i = A(i,j).r * X(ix).i + A(i,j).i * X(
- ix).r;
- z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
- temp2.r = z__1.r, temp2.i = z__1.i;
- ix += *incx;
- iy += *incy;
-/* L70: */
- }
- i__2 = jy;
- i__3 = jy;
- i__4 = j + j * a_dim1;
- z__3.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, z__3.i =
- temp1.r * A(j,j).i + temp1.i * A(j,j).r;
- z__2.r = Y(jy).r + z__3.r, z__2.i = Y(jy).i + z__3.i;
- z__4.r = alpha->r * temp2.r - alpha->i * temp2.i, z__4.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- z__1.r = z__2.r + z__4.r, z__1.i = z__2.i + z__4.i;
- Y(jy).r = z__1.r, Y(jy).i = z__1.i;
- jx += *incx;
- jy += *incy;
-/* L80: */
- }
- }
- } else {
-
-/* Form y when A is stored in lower triangle. */
-
- if (*incx == 1 && *incy == 1) {
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = j;
- z__1.r = alpha->r * X(j).r - alpha->i * X(j).i, z__1.i =
- alpha->r * X(j).i + alpha->i * X(j).r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- temp2.r = 0., temp2.i = 0.;
- i__2 = j;
- i__3 = j;
- i__4 = j + j * a_dim1;
- z__2.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, z__2.i =
- temp1.r * A(j,j).i + temp1.i * A(j,j).r;
- z__1.r = Y(j).r + z__2.r, z__1.i = Y(j).i + z__2.i;
- Y(j).r = z__1.r, Y(j).i = z__1.i;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- i__3 = i;
- i__4 = i;
- i__5 = i + j * a_dim1;
- z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- z__1.r = Y(i).r + z__2.r, z__1.i = Y(i).i + z__2.i;
- Y(i).r = z__1.r, Y(i).i = z__1.i;
- i__3 = i + j * a_dim1;
- i__4 = i;
- z__2.r = A(i,j).r * X(i).r - A(i,j).i * X(i).i,
- z__2.i = A(i,j).r * X(i).i + A(i,j).i * X(
- i).r;
- z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
- temp2.r = z__1.r, temp2.i = z__1.i;
-/* L90: */
- }
- i__2 = j;
- i__3 = j;
- z__2.r = alpha->r * temp2.r - alpha->i * temp2.i, z__2.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- z__1.r = Y(j).r + z__2.r, z__1.i = Y(j).i + z__2.i;
- Y(j).r = z__1.r, Y(j).i = z__1.i;
-/* L100: */
- }
- } else {
- jx = kx;
- jy = ky;
- i__1 = *n;
- for (j = 1; j <= *n; ++j) {
- i__2 = jx;
- z__1.r = alpha->r * X(jx).r - alpha->i * X(jx).i, z__1.i =
- alpha->r * X(jx).i + alpha->i * X(jx).r;
- temp1.r = z__1.r, temp1.i = z__1.i;
- temp2.r = 0., temp2.i = 0.;
- i__2 = jy;
- i__3 = jy;
- i__4 = j + j * a_dim1;
- z__2.r = temp1.r * A(j,j).r - temp1.i * A(j,j).i, z__2.i =
- temp1.r * A(j,j).i + temp1.i * A(j,j).r;
- z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
- Y(jy).r = z__1.r, Y(jy).i = z__1.i;
- ix = jx;
- iy = jy;
- i__2 = *n;
- for (i = j + 1; i <= *n; ++i) {
- ix += *incx;
- iy += *incy;
- i__3 = iy;
- i__4 = iy;
- i__5 = i + j * a_dim1;
- z__2.r = temp1.r * A(i,j).r - temp1.i * A(i,j).i,
- z__2.i = temp1.r * A(i,j).i + temp1.i * A(i,j)
- .r;
- z__1.r = Y(iy).r + z__2.r, z__1.i = Y(iy).i + z__2.i;
- Y(iy).r = z__1.r, Y(iy).i = z__1.i;
- i__3 = i + j * a_dim1;
- i__4 = ix;
- z__2.r = A(i,j).r * X(ix).r - A(i,j).i * X(ix).i,
- z__2.i = A(i,j).r * X(ix).i + A(i,j).i * X(
- ix).r;
- z__1.r = temp2.r + z__2.r, z__1.i = temp2.i + z__2.i;
- temp2.r = z__1.r, temp2.i = z__1.i;
-/* L110: */
- }
- i__2 = jy;
- i__3 = jy;
- z__2.r = alpha->r * temp2.r - alpha->i * temp2.i, z__2.i =
- alpha->r * temp2.i + alpha->i * temp2.r;
- z__1.r = Y(jy).r + z__2.r, z__1.i = Y(jy).i + z__2.i;
- Y(jy).r = z__1.r, Y(jy).i = z__1.i;
- jx += *incx;
- jy += *incy;
-/* L120: */
- }
- }
- }
-
- return 0;
-
-/* End of ZSYMV */
-
-} /* zsymv_ */
-
diff --git a/TESTING/cdrive.c b/TESTING/cdrive.c
deleted file mode 100644
index 9baf1ad..0000000
--- a/TESTING/cdrive.c
+++ /dev/null
@@ -1,544 +0,0 @@
-
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
- *
- */
-/*
- * File name: cdrive.c
- * Purpose: MAIN test program
- */
-#include <string.h>
-#include "slu_cdefs.h"
-
-#define NTESTS 5 /* Number of test types */
-#define NTYPES 11 /* Number of matrix types */
-#define NTRAN 2
-#define THRESH 20.0
-#define FMT1 "%10s:n=%d, test(%d)=%12.5g\n"
-#define FMT2 "%10s:fact=%4d, trans=%4d, equed=%c, n=%d, imat=%d, test(%d)=%12.5g\n"
-#define FMT3 "%10s:info=%d, izero=%d, n=%d, nrhs=%d, imat=%d, nfail=%d\n"
-
-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, double *u);
-
-main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * CDRIVE is the main test program for the COMPLEX linear
- * equation driver routines CGSSV and CGSSVX.
- *
- * The program is invoked by a shell script file -- ctest.csh.
- * The output from the tests are written into a file -- ctest.out.
- *
- * =====================================================================
- */
- complex *a, *a_save;
- int *asub, *asub_save;
- int *xa, *xa_save;
- SuperMatrix A, B, X, L, U;
- SuperMatrix ASAV, AC;
- mem_usage_t mem_usage;
- int *perm_r; /* row permutation from partial pivoting */
- int *perm_c, *pc_save; /* column permutation */
- int *etree;
- complex zero = {0.0, 0.0};
- float *R, *C;
- float *ferr, *berr;
- float *rwork;
- complex *wwork;
- void *work;
- int info, lwork, nrhs, panel_size, relax;
- int m, n, nnz;
- complex *xact;
- complex *rhsb, *solx, *bsav;
- int ldb, ldx;
- float rpg, rcond;
- int i, j, k1;
- float rowcnd, colcnd, amax;
- int maxsuper, rowblk, colblk;
- int prefact, nofact, equil, iequed;
- int nt, nrun, nfail, nerrs, imat, fimat, nimat;
- int nfact, ifact, itran;
- int kl, ku, mode, lda;
- int zerot, izero, ioff;
- double u;
- float anorm, cndnum;
- complex *Afull;
- float result[NTESTS];
- superlu_options_t options;
- fact_t fact;
- trans_t trans;
- SuperLUStat_t stat;
- static char matrix_type[8];
- static char equed[1], path[4], sym[1], dist[1];
-
- /* Fixed set of parameters */
- int iseed[] = {1988, 1989, 1990, 1991};
- static char equeds[] = {'N', 'R', 'C', 'B'};
- static fact_t facts[] = {FACTORED, DOFACT, SamePattern,
- SamePattern_SameRowPerm};
- static trans_t transs[] = {NOTRANS, TRANS, CONJ};
-
- /* Some function prototypes */
- 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 *,
- float *, int *, float *, char *);
- extern int clatms_(int *, int *, char *, int *, char *, float *d,
- int *, float *, float *, int *, int *,
- char *, complex *, int *, complex *, int *);
- extern int sp_cconvert(int, int, complex *, int, int, int,
- complex *a, int *, int *, int *);
-
-
- /* Executable statements */
-
- strcpy(path, "CGE");
- nrun = 0;
- nfail = 0;
- nerrs = 0;
-
- /* Defaults */
- lwork = 0;
- n = 1;
- nrhs = 1;
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
- u = 1.0;
- strcpy(matrix_type, "LA");
- parse_command_line(argc, argv, matrix_type, &n,
- &panel_size, &relax, &nrhs, &maxsuper,
- &rowblk, &colblk, &lwork, &u);
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- fprintf(stderr, "expert: cannot allocate %d bytes\n", lwork);
- exit (-1);
- }
- }
-
- /* Set the default input options. */
- set_default_options(&options);
- options.DiagPivotThresh = u;
- options.PrintStat = NO;
- options.PivotGrowth = YES;
- options.ConditionNumber = YES;
- options.IterRefine = SLU_SINGLE;
-
- if ( strcmp(matrix_type, "LA") == 0 ) {
- /* Test LAPACK matrix suite. */
- m = n;
- lda = SUPERLU_MAX(n, 1);
- nnz = n * n; /* upper bound */
- fimat = 1;
- nimat = NTYPES;
- Afull = complexCalloc(lda * n);
- callocateA(n, nnz, &a, &asub, &xa);
- } else {
- /* Read a sparse matrix */
- fimat = nimat = 0;
- creadhb(&m, &n, &nnz, &a, &asub, &xa);
- }
-
- callocateA(n, nnz, &a_save, &asub_save, &xa_save);
- rhsb = complexMalloc(m * nrhs);
- bsav = complexMalloc(m * nrhs);
- solx = complexMalloc(n * nrhs);
- ldb = m;
- ldx = n;
- cCreate_Dense_Matrix(&B, m, nrhs, rhsb, ldb, SLU_DN, SLU_C, SLU_GE);
- cCreate_Dense_Matrix(&X, n, nrhs, solx, ldx, SLU_DN, SLU_C, SLU_GE);
- xact = complexMalloc(n * nrhs);
- etree = intMalloc(n);
- perm_r = intMalloc(n);
- perm_c = intMalloc(n);
- pc_save = intMalloc(n);
- R = (float *) SUPERLU_MALLOC(m*sizeof(float));
- C = (float *) SUPERLU_MALLOC(n*sizeof(float));
- ferr = (float *) SUPERLU_MALLOC(nrhs*sizeof(float));
- berr = (float *) SUPERLU_MALLOC(nrhs*sizeof(float));
- j = SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs);
- rwork = (float *) SUPERLU_MALLOC(j*sizeof(float));
- for (i = 0; i < j; ++i) rwork[i] = 0.;
- if ( !R ) ABORT("SUPERLU_MALLOC fails for R");
- if ( !C ) ABORT("SUPERLU_MALLOC fails for C");
- if ( !ferr ) ABORT("SUPERLU_MALLOC fails for ferr");
- if ( !berr ) ABORT("SUPERLU_MALLOC fails for berr");
- if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
- wwork = complexCalloc( SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs) );
-
- for (i = 0; i < n; ++i) perm_c[i] = pc_save[i] = i;
- options.ColPerm = MY_PERMC;
-
- for (imat = fimat; imat <= nimat; ++imat) { /* All matrix types */
-
- if ( imat ) {
-
- /* Skip types 5, 6, or 7 if the matrix size is too small. */
- zerot = (imat >= 5 && imat <= 7);
- if ( zerot && n < imat-4 )
- continue;
-
- /* Set up parameters with CLATB4 and generate a test matrix
- with CLATMS. */
- clatb4_(path, &imat, &n, &n, sym, &kl, &ku, &anorm, &mode,
- &cndnum, dist);
-
- clatms_(&n, &n, dist, iseed, sym, &rwork[0], &mode, &cndnum,
- &anorm, &kl, &ku, "No packing", Afull, &lda,
- &wwork[0], &info);
-
- if ( info ) {
- printf(FMT3, "CLATMS", info, izero, n, nrhs, imat, nfail);
- continue;
- }
-
- /* For types 5-7, zero one or more columns of the matrix
- to test that INFO is returned correctly. */
- if ( zerot ) {
- if ( imat == 5 ) izero = 1;
- else if ( imat == 6 ) izero = n;
- else izero = n / 2 + 1;
- ioff = (izero - 1) * lda;
- if ( imat < 7 ) {
- for (i = 0; i < n; ++i) Afull[ioff + i] = zero;
- } else {
- for (j = 0; j < n - izero + 1; ++j)
- for (i = 0; i < n; ++i)
- Afull[ioff + i + j*lda] = zero;
- }
- } else {
- izero = 0;
- }
-
- /* Convert to sparse representation. */
- sp_cconvert(n, n, Afull, lda, kl, ku, a, asub, xa, &nnz);
-
- } else {
- izero = 0;
- zerot = 0;
- }
-
- cCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_C, SLU_GE);
-
- /* Save a copy of matrix A in ASAV */
- cCreate_CompCol_Matrix(&ASAV, m, n, nnz, a_save, asub_save, xa_save,
- SLU_NC, SLU_C, SLU_GE);
- cCopy_CompCol_Matrix(&A, &ASAV);
-
- /* Form exact solution. */
- cGenXtrue(n, nrhs, xact, ldx);
-
- StatInit(&stat);
-
- for (iequed = 0; iequed < 4; ++iequed) {
- *equed = equeds[iequed];
- if (iequed == 0) nfact = 4;
- else nfact = 1; /* Only test factored, pre-equilibrated matrix */
-
- for (ifact = 0; ifact < nfact; ++ifact) {
- fact = facts[ifact];
- options.Fact = fact;
-
- for (equil = 0; equil < 2; ++equil) {
- options.Equil = equil;
- prefact = ( options.Fact == FACTORED ||
- options.Fact == SamePattern_SameRowPerm );
- /* Need a first factor */
- nofact = (options.Fact != FACTORED); /* Not factored */
-
- /* Restore the matrix A. */
- cCopy_CompCol_Matrix(&ASAV, &A);
-
- if ( zerot ) {
- if ( prefact ) continue;
- } else if ( options.Fact == FACTORED ) {
- if ( equil || iequed ) {
- /* Compute row and column scale factors to
- equilibrate matrix A. */
- cgsequ(&A, R, C, &rowcnd, &colcnd, &amax, &info);
-
- /* Force equilibration. */
- if ( !info && n > 0 ) {
- if ( lsame_(equed, "R") ) {
- rowcnd = 0.;
- colcnd = 1.;
- } else if ( lsame_(equed, "C") ) {
- rowcnd = 1.;
- colcnd = 0.;
- } else if ( lsame_(equed, "B") ) {
- rowcnd = 0.;
- colcnd = 0.;
- }
- }
-
- /* Equilibrate the matrix. */
- claqgs(&A, R, C, rowcnd, colcnd, amax, equed);
- }
- }
-
- if ( prefact ) { /* Need a factor for the first time */
-
- /* Save Fact option. */
- fact = options.Fact;
- options.Fact = DOFACT;
-
- /* Preorder the matrix, obtain the column etree. */
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- /* Factor the matrix AC. */
- cgstrf(&options, &AC, relax, panel_size,
- etree, work, lwork, perm_c, perm_r, &L, &U,
- &stat, &info);
-
- if ( info ) {
- printf("** First factor: info %d, equed %c\n",
- info, *equed);
- if ( lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n",
- info - n);
- exit(0);
- }
- }
-
- Destroy_CompCol_Permuted(&AC);
-
- /* Restore Fact option. */
- options.Fact = fact;
- } /* if .. first time factor */
-
- for (itran = 0; itran < NTRAN; ++itran) {
- trans = transs[itran];
- options.Trans = trans;
-
- /* Restore the matrix A. */
- cCopy_CompCol_Matrix(&ASAV, &A);
-
- /* Set the right hand side. */
- cFillRHS(trans, nrhs, xact, ldx, &A, &B);
- cCopy_Dense_Matrix(m, nrhs, rhsb, ldb, bsav, ldb);
-
- /*----------------
- * Test cgssv
- *----------------*/
- if ( options.Fact == DOFACT && itran == 0) {
- /* Not yet factored, and untransposed */
-
- cCopy_Dense_Matrix(m, nrhs, rhsb, ldb, solx, ldx);
- cgssv(&options, &A, perm_c, perm_r, &L, &U, &X,
- &stat, &info);
-
- if ( info && info != izero ) {
- printf(FMT3, "cgssv",
- info, izero, n, nrhs, imat, nfail);
- } else {
- /* Reconstruct matrix from factors and
- compute residual. */
- 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);
- cgst02(trans, m, n, nrhs, &A, solx,
- ldx, wwork,ldb, &result[1]);
- nt = 2;
- }
-
- /* Print information about the tests that
- did not pass the threshold. */
- for (i = 0; i < nt; ++i) {
- if ( result[i] >= THRESH ) {
- printf(FMT1, "cgssv", n, i,
- result[i]);
- ++nfail;
- }
- }
- nrun += nt;
- } /* else .. info == 0 */
-
- /* Restore perm_c. */
- for (i = 0; i < n; ++i) perm_c[i] = pc_save[i];
-
- if (lwork == 0) {
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
- } /* if .. end of testing cgssv */
-
- /*----------------
- * Test cgssvx
- *----------------*/
-
- /* Equilibrate the matrix if fact = FACTORED and
- equed = 'R', 'C', or 'B'. */
- if ( options.Fact == FACTORED &&
- (equil || iequed) && n > 0 ) {
- claqgs(&A, R, C, rowcnd, colcnd, amax, equed);
- }
-
- /* Solve the system and compute the condition number
- and error bounds using cgssvx. */
- cgssvx(&options, &A, perm_c, perm_r, etree,
- equed, R, C, &L, &U, work, lwork, &B, &X, &rpg,
- &rcond, ferr, berr, &mem_usage, &stat, &info);
-
- if ( info && info != izero ) {
- printf(FMT3, "cgssvx",
- info, izero, n, nrhs, imat, nfail);
- if ( lwork == -1 ) {
- printf("** Estimated memory: %.0f bytes\n",
- mem_usage.total_needed);
- exit(0);
- }
- } else {
- if ( !prefact ) {
- /* Reconstruct matrix from factors and
- compute residual. */
- cgst01(m, n, &A, &L, &U, perm_c, perm_r,
- &result[0]);
- k1 = 0;
- } else {
- k1 = 1;
- }
-
- if ( !info ) {
- /* Compute residual of the computed solution.*/
- cCopy_Dense_Matrix(m, nrhs, bsav, ldb,
- wwork, ldb);
- cgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
- wwork, ldb, &result[1]);
-
- /* Check solution from generated exact
- solution. */
- cgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
- &result[2]);
-
- /* Check the error bounds from iterative
- refinement. */
- cgst07(trans, n, nrhs, &ASAV, bsav, ldb,
- solx, ldx, xact, ldx, ferr, berr,
- &result[3]);
-
- /* Print information about the tests that did
- not pass the threshold. */
- for (i = k1; i < NTESTS; ++i) {
- if ( result[i] >= THRESH ) {
- printf(FMT2, "cgssvx",
- options.Fact, trans, *equed,
- n, imat, i, result[i]);
- ++nfail;
- }
- }
- nrun += NTESTS;
- } /* if .. info == 0 */
- } /* else .. end of testing cgssvx */
-
- } /* for itran ... */
-
- if ( lwork == 0 ) {
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
-
- } /* for equil ... */
- } /* for ifact ... */
- } /* for iequed ... */
-#if 0
- if ( !info ) {
- PrintPerf(&L, &U, &mem_usage, rpg, rcond, ferr, berr, equed);
- }
-#endif
-
- } /* for imat ... */
-
- /* Print a summary of the results. */
- PrintSumm("CGE", nfail, nrun, nerrs);
-
- SUPERLU_FREE (rhsb);
- SUPERLU_FREE (bsav);
- SUPERLU_FREE (solx);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (etree);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- SUPERLU_FREE (pc_save);
- SUPERLU_FREE (R);
- SUPERLU_FREE (C);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- SUPERLU_FREE (rwork);
- SUPERLU_FREE (wwork);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- Destroy_CompCol_Matrix(&A);
- Destroy_CompCol_Matrix(&ASAV);
- if ( lwork > 0 ) {
- SUPERLU_FREE (work);
- Destroy_SuperMatrix_Store(&L);
- Destroy_SuperMatrix_Store(&U);
- }
- StatFree(&stat);
-
- return 0;
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-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, double *u)
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "ht:n:w:r:s:m:b:c:l:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-w <int> - panel size\n");
- printf("\t-r <int> - granularity of relaxed supernodes\n");
- exit(1);
- break;
- case 't': strcpy(matrix_type, optarg);
- break;
- case 'n': *n = atoi(optarg);
- break;
- case 'w': *w = atoi(optarg);
- break;
- case 'r': *relax = atoi(optarg);
- break;
- case 's': *nrhs = atoi(optarg);
- break;
- case 'm': *maxsuper = atoi(optarg);
- break;
- case 'b': *rowblk = atoi(optarg);
- break;
- case 'c': *colblk = atoi(optarg);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- }
- }
-}
diff --git a/TESTING/cgst01.c b/TESTING/cgst01.c
deleted file mode 100644
index e6698f1..0000000
--- a/TESTING/cgst01.c
+++ /dev/null
@@ -1,171 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-#include <math.h>
-#include "slu_cdefs.h"
-
-int cgst01(int m, int n, SuperMatrix *A, SuperMatrix *L,
- SuperMatrix *U, int *perm_c, int *perm_r, float *resid)
-{
-/*
- Purpose
- =======
-
- 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.
-
- Arguments
- ==========
-
- M (input) INT
- The number of rows of the matrix A. M >= 0.
-
- N (input) INT
- The number of columns of the matrix A. N >= 0.
-
- A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
- The original M x N matrix A.
-
- L (input) SuperMatrix *, dimension (L->nrow, L->ncol)
- The factor matrix 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.
-
- RESID (output) FLOAT*
- norm(L*U - A) / ( N * norm(A) * EPS )
-
- =====================================================================
-*/
-
- /* Local variables */
- complex zero = {0.0, 0.0};
- int i, j, k, arow, lptr,isub, urow, superno, fsupc, u_part;
- complex utemp, comp_temp;
- float anorm, tnorm, cnorm;
- float eps;
- complex *work;
- SCformat *Lstore;
- NCformat *Astore, *Ustore;
- complex *Aval, *Lval, *Uval;
- int *colbeg, *colend;
-
- /* Function prototypes */
- extern float clangs(char *, SuperMatrix *);
-
- /* Quick exit if M = 0 or N = 0. */
-
- if (m <= 0 || n <= 0) {
- *resid = 0.f;
- return 0;
- }
-
- work = (complex *)complexCalloc(m);
-
- Astore = A->Store;
- Aval = Astore->nzval;
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
-
- /* Determine EPS and the norm of A. */
- eps = slamch_("Epsilon");
- anorm = clangs("1", A);
- cnorm = 0.;
-
- /* Compute the product L*U, one column at a time */
- for (k = 0; k < n; ++k) {
-
- /* The U part outside the rectangular supernode */
- for (i = U_NZ_START(k); i < U_NZ_START(k+1); ++i) {
- urow = U_SUB(i);
- utemp = Uval[i];
- superno = Lstore->col_to_sup[urow];
- fsupc = L_FST_SUPC(superno);
- u_part = urow - fsupc + 1;
- lptr = L_SUB_START(fsupc) + u_part;
- work[L_SUB(lptr-1)].r -= utemp.r;
- work[L_SUB(lptr-1)].i -= utemp.i;
- for (j = L_NZ_START(urow) + u_part; j < L_NZ_START(urow+1); ++j) {
- isub = L_SUB(lptr);
- cc_mult(&comp_temp, &utemp, &Lval[j]);
- c_sub(&work[isub], &work[isub], &comp_temp);
- ++lptr;
- }
- }
-
- /* The U part inside the rectangular supernode */
- superno = Lstore->col_to_sup[k];
- fsupc = L_FST_SUPC(superno);
- urow = L_NZ_START(k);
- for (i = fsupc; i <= k; ++i) {
- utemp = Lval[urow++];
- u_part = i - fsupc + 1;
- lptr = L_SUB_START(fsupc) + u_part;
- work[L_SUB(lptr-1)].r -= utemp.r;
- work[L_SUB(lptr-1)].i -= utemp.i;
- for (j = L_NZ_START(i)+u_part; j < L_NZ_START(i+1); ++j) {
- isub = L_SUB(lptr);
- cc_mult(&comp_temp, &utemp, &Lval[j]);
- c_sub(&work[isub], &work[isub], &comp_temp);
- ++lptr;
- }
- }
-
- /* 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;
- }
-
- /* Now compute the 1-norm of the column vector work */
- tnorm = 0.;
- for (i = 0; i < m; ++i) {
- tnorm += fabs(work[i].r) + fabs(work[i].i);
- work[i] = zero;
- }
- cnorm = SUPERLU_MAX(tnorm, cnorm);
- }
-
- *resid = cnorm;
-
- if (anorm <= 0.f) {
- if (*resid != 0.f) {
- *resid = 1.f / eps;
- }
- } else {
- *resid = *resid / (float) n / anorm / eps;
- }
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(colbeg);
- SUPERLU_FREE(colend);
- return 0;
-
-/* End of CGST01 */
-
-} /* cgst01_ */
-
diff --git a/TESTING/cgst02.c b/TESTING/cgst02.c
deleted file mode 100644
index 26128ce..0000000
--- a/TESTING/cgst02.c
+++ /dev/null
@@ -1,138 +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_cdefs.h"
-
-int cgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
- complex *x, int ldx, complex *b, int ldb, float *resid)
-{
-/*
- Purpose
- =======
-
- 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.
-
- Arguments
- =========
-
- TRANS (input) trans_t
- Specifies the form of the system of equations:
- = NOTRANS: A *x = b
- = TRANS : A'*x = b, where A' is the transpose of A
- = CONJ : A'*x = b, where A' is the transpose of A
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- NRHS (input) INTEGER
- The number of columns of B, the matrix of right hand sides.
- NRHS >= 0.
-
- A (input) SuperMatrix*, dimension (LDA,N)
- The original M x N sparse matrix A.
-
- X (input) COMPLEX PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors for the system of linear
- equations.
-
- LDX (input) INTEGER
- The leading dimension of the array X. If TRANS = NOTRANS,
- LDX >= max(1,N); if TRANS = TRANS or CONJ, LDX >= max(1,M).
-
- B (input/output) COMPLEX PRECISION array, dimension (LDB,NRHS)
- On entry, the right hand side vectors for the system of
- linear equations.
- On exit, B is overwritten with the difference B - A*X.
-
- LDB (input) INTEGER
- The leading dimension of the array B. IF TRANS = NOTRANS,
- LDB >= max(1,M); if TRANS = TRANS or CONJ, LDB >= max(1,N).
-
- RESID (output) FLOAT PRECISION
- The maximum over the number of right hand sides of
- norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
-
- =====================================================================
-*/
-
- /* Table of constant values */
- complex alpha = {-1., 0.0};
- complex beta = {1., 0.0};
- int c__1 = 1;
-
- /* System generated locals */
- float d__1, d__2;
-
- /* Local variables */
- int j;
- int n1, n2;
- float anorm, bnorm;
- float xnorm;
- float eps;
- char transc[1];
-
- /* Function prototypes */
- extern int lsame_(char *, char *);
- extern float clangs(char *, SuperMatrix *);
- extern float scasum_(int *, complex *, int *);
-
- /* Function Body */
- if ( m <= 0 || n <= 0 || nrhs == 0) {
- *resid = 0.;
- return 0;
- }
-
- if ( (trans == TRANS) || (trans == CONJ) ) {
- n1 = n;
- n2 = m;
- *transc = 'T';
- } else {
- n1 = m;
- n2 = n;
- *transc = 'N';
- }
-
- /* Exit with RESID = 1/EPS if ANORM = 0. */
-
- eps = slamch_("Epsilon");
- anorm = clangs("1", A);
- if (anorm <= 0.) {
- *resid = 1. / eps;
- return 0;
- }
-
- /* Compute B - A*X (or B - A'*X ) and store in B. */
-
- sp_cgemm(transc, "N", n1, nrhs, n2, alpha, A, x, ldx, beta, b, ldb);
-
- /* Compute the maximum over the number of right hand sides of
- norm(B - A*X) / ( norm(A) * norm(X) * EPS ) . */
-
- *resid = 0.;
- for (j = 0; j < nrhs; ++j) {
- bnorm = scasum_(&n1, &b[j*ldb], &c__1);
- xnorm = scasum_(&n2, &x[j*ldx], &c__1);
- if (xnorm <= 0.) {
- *resid = 1. / eps;
- } else {
- /* Computing MAX */
- d__1 = *resid, d__2 = bnorm / anorm / xnorm / eps;
- *resid = SUPERLU_MAX(d__1, d__2);
- }
- }
-
- return 0;
-
-} /* cgst02 */
-
diff --git a/TESTING/cgst04.c b/TESTING/cgst04.c
deleted file mode 100644
index 5ab19a4..0000000
--- a/TESTING/cgst04.c
+++ /dev/null
@@ -1,122 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-#include <math.h>
-#include "slu_cdefs.h"
-
-int cgst04(int n, int nrhs, complex *x, int ldx, complex *xact,
- int ldxact, float rcond, float *resid)
-{
-/*
- Purpose
- =======
-
- 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
- machine epsilon.
-
- Arguments
- =========
-
- N (input) INT
- The number of rows of the matrices X and XACT. N >= 0.
-
- NRHS (input) INT
- The number of columns of the matrices X and XACT. NRHS >= 0.
-
- X (input) COMPLEX PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors. Each vector is stored as a
- column of the matrix X.
-
- LDX (input) INT
- The leading dimension of the array X. LDX >= max(1,N).
-
- XACT (input) COMPLEX PRECISION array, dimension( LDX, NRHS )
- The exact solution vectors. Each vector is stored as a
- column of the matrix XACT.
-
- LDXACT (input) INT
- The leading dimension of the array XACT. LDXACT >= max(1,N).
-
- RCOND (input) COMPLEX PRECISION
- The reciprocal of the condition number of the coefficient
- matrix in the system of equations.
-
- RESID (output) FLOAT PRECISION
- The maximum over the NRHS solution vectors of
- ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS )
-
- =====================================================================
-*/
- /* Table of constant values */
- int c__1 = 1;
-
- /* System generated locals */
- float d__1, d__2, d__3, d__4;
-
- /* Local variables */
- int i, j, n__1;
- int ix;
- float xnorm;
- float eps;
- float diffnm;
-
- /* Function prototypes */
- extern int icamax_(int *, complex *, int *);
-
- /* Quick exit if N = 0 or NRHS = 0. */
- if ( n <= 0 || nrhs <= 0 ) {
- *resid = 0.;
- return 0;
- }
-
- /* Exit with RESID = 1/EPS if RCOND is invalid. */
-
- eps = slamch_("Epsilon");
- if ( rcond < 0. ) {
- *resid = 1. / eps;
- return 0;
- }
-
- /* Compute the maximum of norm(X - XACT) / ( norm(XACT) * EPS )
- over all the vectors X and XACT . */
-
- *resid = 0.;
- for (j = 0; j < nrhs; ++j) {
- n__1 = n;
- ix = icamax_(&n__1, &xact[j*ldxact], &c__1);
- xnorm = (d__1 = xact[ix-1 + j*ldxact].r, fabs(d__1)) +
- (d__2 = xact[ix-1 + j*ldxact].i, fabs(d__2));
-
- diffnm = 0.;
- for (i = 0; i < n; ++i) {
- /* Computing MAX */
- d__3 = diffnm;
- d__4 = (d__1 = x[i+j*ldx].r-xact[i+j*ldxact].r, fabs(d__1)) +
- (d__2 = x[i+j*ldx].i-xact[i+j*ldxact].i, fabs(d__2));
- diffnm = SUPERLU_MAX(d__3,d__4);
- }
- if (xnorm <= 0.) {
- if (diffnm > 0.) {
- *resid = 1. / eps;
- }
- } else {
- /* Computing MAX */
- d__1 = *resid, d__2 = diffnm / xnorm * rcond;
- *resid = SUPERLU_MAX(d__1,d__2);
- }
- }
- if (*resid * eps < 1.) {
- *resid /= eps;
- }
-
- return 0;
-
-} /* cgst04_ */
diff --git a/TESTING/cgst07.c b/TESTING/cgst07.c
deleted file mode 100644
index b7f3079..0000000
--- a/TESTING/cgst07.c
+++ /dev/null
@@ -1,228 +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 <math.h>
-#include "slu_cdefs.h"
-
-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)
-{
-/*
- Purpose
- =======
-
- 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.
-
- RESLTS(1) = test of the error bound
- = norm(X - XACT) / ( norm(X) * FERR )
- A large value is returned if this ratio is not less than one.
-
- RESLTS(2) = residual from the iterative refinement routine
- = the maximum of BERR / ( (n+1)*EPS + (*) ), where
- (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
-
- Arguments
- =========
-
- TRANS (input) trans_t
- Specifies the form of the system of equations.
- = NOTRANS: A *x = b
- = TRANS : A'*x = b, where A' is the transpose of A
- = CONJ : A'*x = b, where A' is the transpose of A
-
- N (input) INT
- The number of rows of the matrices X and XACT. N >= 0.
-
- NRHS (input) INT
- The number of columns of the matrices X and XACT. NRHS >= 0.
-
-
- A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
- The original n by n matrix A.
-
- B (input) COMPLEX PRECISION array, dimension (LDB,NRHS)
- The right hand side vectors for the system of linear
- equations.
-
- LDB (input) INT
- The leading dimension of the array B. LDB >= max(1,N).
-
- X (input) COMPLEX PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors. Each vector is stored as a
- column of the matrix X.
-
- LDX (input) INT
- The leading dimension of the array X. LDX >= max(1,N).
-
- XACT (input) COMPLEX PRECISION array, dimension (LDX,NRHS)
- The exact solution vectors. Each vector is stored as a
- column of the matrix XACT.
-
- LDXACT (input) INT
- The leading dimension of the array XACT. LDXACT >= max(1,N).
-
-
- FERR (input) COMPLEX PRECISION array, dimension (NRHS)
- The estimated forward error bounds for each solution vector
- X. If XTRUE is the true solution, FERR bounds the magnitude
- of the largest entry in (X - XTRUE) divided by the magnitude
- of the largest entry in X.
-
- BERR (input) COMPLEX PRECISION array, dimension (NRHS)
- The componentwise relative backward error of each solution
- vector (i.e., the smallest relative change in any entry of A
-
- or B that makes X an exact solution).
-
- RESLTS (output) FLOAT PRECISION array, dimension (2)
- The maximum over the NRHS solution vectors of the ratios:
- RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
- RESLTS(2) = BERR / ( (n+1)*EPS + (*) )
-
- =====================================================================
-*/
-
- /* Table of constant values */
- int c__1 = 1;
-
- /* System generated locals */
- float d__1, d__2;
- float d__3, d__4;
-
- /* Local variables */
- float diff, axbi;
- int imax, irow, n__1;
- int i, j, k;
- float unfl, ovfl;
- float xnorm;
- float errbnd;
- int notran;
- float eps, tmp;
- float *rwork;
- complex *Aval;
- NCformat *Astore;
-
- /* Function prototypes */
- extern int lsame_(char *, char *);
- extern int icamax_(int *, complex *, int *);
-
-
- /* Quick exit if N = 0 or NRHS = 0. */
- if ( n <= 0 || nrhs <= 0 ) {
- reslts[0] = 0.;
- reslts[1] = 0.;
- return 0;
- }
-
- eps = slamch_("Epsilon");
- unfl = slamch_("Safe minimum");
- ovfl = 1. / unfl;
- notran = (trans == NOTRANS);
-
- rwork = (float *) SUPERLU_MALLOC(n*sizeof(float));
- if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
- Astore = A->Store;
- Aval = (complex *) Astore->nzval;
-
- /* Test 1: Compute the maximum of
- norm(X - XACT) / ( norm(X) * FERR )
- over all the vectors X and XACT using the infinity-norm. */
-
- errbnd = 0.;
- for (j = 0; j < nrhs; ++j) {
- n__1 = n;
- imax = icamax_(&n__1, &x[j*ldx], &c__1);
- d__1 = (d__2 = x[imax-1 + j*ldx].r, fabs(d__2)) +
- (d__3 = x[imax-1 + j*ldx].i, fabs(d__3));
- xnorm = SUPERLU_MAX(d__1,unfl);
- diff = 0.;
- for (i = 0; i < n; ++i) {
- d__1 = (d__2 = x[i+j*ldx].r - xact[i+j*ldxact].r, fabs(d__2)) +
- (d__3 = x[i+j*ldx].i - xact[i+j*ldxact].i, fabs(d__3));
- diff = SUPERLU_MAX(diff, d__1);
- }
-
- if (xnorm > 1.) {
- goto L20;
- } else if (diff <= ovfl * xnorm) {
- goto L20;
- } else {
- errbnd = 1. / eps;
- goto L30;
- }
-
-L20:
-#if 0
- if (diff / xnorm <= ferr[j]) {
- d__1 = diff / xnorm / ferr[j];
- errbnd = SUPERLU_MAX(errbnd,d__1);
- } else {
- errbnd = 1. / eps;
- }
-#endif
- d__1 = diff / xnorm / ferr[j];
- errbnd = SUPERLU_MAX(errbnd,d__1);
- /*printf("Ferr: %f\n", errbnd);*/
-L30:
- ;
- }
- reslts[0] = errbnd;
-
- /* Test 2: Compute the maximum of BERR / ( (n+1)*EPS + (*) ), where
- (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) + abs(b))_i ) */
-
- for (k = 0; k < nrhs; ++k) {
- for (i = 0; i < n; ++i)
- rwork[i] = (d__1 = b[i + k*ldb].r, fabs(d__1)) +
- (d__2 = b[i + k*ldb].i, fabs(d__2));
- if ( notran ) {
- for (j = 0; j < n; ++j) {
- tmp = (d__1 = x[j + k*ldx].r, fabs(d__1)) +
- (d__2 = x[j + k*ldx].i, fabs(d__2));
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- d__1 = (d__2 = Aval[i].r, fabs(d__2)) +
- (d__3 = Aval[i].i, fabs(d__3));
- rwork[Astore->rowind[i]] += d__1 * tmp;
- }
- }
- } else {
- for (j = 0; j < n; ++j) {
- tmp = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- d__1 = (d__2 = x[irow + k*ldx].r, fabs(d__2)) +
- (d__3 = x[irow + k*ldx].i, fabs(d__3));
- d__2 = (d__3 = Aval[i].r, fabs(d__3)) +
- (d__4 = Aval[i].i, fabs(d__4));
- tmp += d__2 * d__1;
- }
- rwork[j] += tmp;
- }
- }
-
- axbi = rwork[0];
- for (i = 1; i < n; ++i) axbi = SUPERLU_MIN(axbi, rwork[i]);
-
- /* Computing MAX */
- d__1 = axbi, d__2 = (n + 1) * unfl;
- tmp = berr[k] / ((n + 1) * eps + (n + 1) * unfl / SUPERLU_MAX(d__1,d__2));
-
- if (k == 0) {
- reslts[1] = tmp;
- } else {
- reslts[1] = SUPERLU_MAX(reslts[1],tmp);
- }
- }
-
- SUPERLU_FREE(rwork);
- return 0;
-
-} /* cgst07 */
diff --git a/TESTING/ctest.csh b/TESTING/ctest.csh
deleted file mode 100644
index 2f5feba..0000000
--- a/TESTING/ctest.csh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/csh
-
-set ofile = ctest.out # output file
-if ( -e $ofile ) then
- rm -f $ofile
-endif
-echo "Single-precision complex testing output" > $ofile
-
-set MATRICES = (LAPACK cg20.cua)
-set NVAL = (9 19)
-set NRHS = (5)
-set LWORK = (0 10000000)
-
-#
-# Loop through all matrices ...
-#
-foreach m ($MATRICES)
-
- #--------------------------------------------
- # Test matrix types generated in LAPACK-style
- #--------------------------------------------
- if ($m == 'LAPACK') then
- echo '== LAPACK test matrices' >> $ofile
- foreach n ($NVAL)
- foreach s ($NRHS)
- foreach l ($LWORK)
- echo '' >> $ofile
- echo 'n='$n 'nrhs='$s 'lwork='$l >> $ofile
- ./ctest -t "LA" -l $l -n $n -s $s >> $ofile
- end
- end
- end
- #--------------------------------------------
- # Test a specified sparse matrix
- #--------------------------------------------
- else
- echo '' >> $ofile
- echo '== sparse matrix:' $m >> $ofile
- foreach s ($NRHS)
- foreach l ($LWORK)
- echo '' >> $ofile
- echo 'nrhs='$s 'lwork='$l >> $ofile
- ./ctest -t "SP" -s $s -l $l < ../EXAMPLE/$m >> $ofile
- end
- end
- endif
-
-end
-
-
diff --git a/TESTING/ddrive.c b/TESTING/ddrive.c
deleted file mode 100644
index 086d8c8..0000000
--- a/TESTING/ddrive.c
+++ /dev/null
@@ -1,544 +0,0 @@
-
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
- *
- */
-/*
- * File name: ddrive.c
- * Purpose: MAIN test program
- */
-#include <string.h>
-#include "slu_ddefs.h"
-
-#define NTESTS 5 /* Number of test types */
-#define NTYPES 11 /* Number of matrix types */
-#define NTRAN 2
-#define THRESH 20.0
-#define FMT1 "%10s:n=%d, test(%d)=%12.5g\n"
-#define FMT2 "%10s:fact=%4d, trans=%4d, equed=%c, n=%d, imat=%d, test(%d)=%12.5g\n"
-#define FMT3 "%10s:info=%d, izero=%d, n=%d, nrhs=%d, imat=%d, nfail=%d\n"
-
-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, double *u);
-
-main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * DDRIVE is the main test program for the DOUBLE linear
- * equation driver routines DGSSV and DGSSVX.
- *
- * The program is invoked by a shell script file -- dtest.csh.
- * The output from the tests are written into a file -- dtest.out.
- *
- * =====================================================================
- */
- double *a, *a_save;
- int *asub, *asub_save;
- int *xa, *xa_save;
- SuperMatrix A, B, X, L, U;
- SuperMatrix ASAV, AC;
- mem_usage_t mem_usage;
- int *perm_r; /* row permutation from partial pivoting */
- int *perm_c, *pc_save; /* column permutation */
- int *etree;
- double zero = 0.0;
- double *R, *C;
- double *ferr, *berr;
- double *rwork;
- double *wwork;
- void *work;
- int info, lwork, nrhs, panel_size, relax;
- int m, n, nnz;
- double *xact;
- double *rhsb, *solx, *bsav;
- int ldb, ldx;
- double rpg, rcond;
- int i, j, k1;
- double rowcnd, colcnd, amax;
- int maxsuper, rowblk, colblk;
- int prefact, nofact, equil, iequed;
- int nt, nrun, nfail, nerrs, imat, fimat, nimat;
- int nfact, ifact, itran;
- int kl, ku, mode, lda;
- int zerot, izero, ioff;
- double u;
- double anorm, cndnum;
- double *Afull;
- double result[NTESTS];
- superlu_options_t options;
- fact_t fact;
- trans_t trans;
- SuperLUStat_t stat;
- static char matrix_type[8];
- static char equed[1], path[4], sym[1], dist[1];
-
- /* Fixed set of parameters */
- int iseed[] = {1988, 1989, 1990, 1991};
- static char equeds[] = {'N', 'R', 'C', 'B'};
- static fact_t facts[] = {FACTORED, DOFACT, SamePattern,
- SamePattern_SameRowPerm};
- static trans_t transs[] = {NOTRANS, TRANS, CONJ};
-
- /* Some function prototypes */
- 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 *,
- double *, int *, double *, char *);
- extern int dlatms_(int *, int *, char *, int *, char *, double *d,
- int *, double *, double *, int *, int *,
- char *, double *, int *, double *, int *);
- extern int sp_dconvert(int, int, double *, int, int, int,
- double *a, int *, int *, int *);
-
-
- /* Executable statements */
-
- strcpy(path, "DGE");
- nrun = 0;
- nfail = 0;
- nerrs = 0;
-
- /* Defaults */
- lwork = 0;
- n = 1;
- nrhs = 1;
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
- u = 1.0;
- strcpy(matrix_type, "LA");
- parse_command_line(argc, argv, matrix_type, &n,
- &panel_size, &relax, &nrhs, &maxsuper,
- &rowblk, &colblk, &lwork, &u);
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- fprintf(stderr, "expert: cannot allocate %d bytes\n", lwork);
- exit (-1);
- }
- }
-
- /* Set the default input options. */
- set_default_options(&options);
- options.DiagPivotThresh = u;
- options.PrintStat = NO;
- options.PivotGrowth = YES;
- options.ConditionNumber = YES;
- options.IterRefine = SLU_DOUBLE;
-
- if ( strcmp(matrix_type, "LA") == 0 ) {
- /* Test LAPACK matrix suite. */
- m = n;
- lda = SUPERLU_MAX(n, 1);
- nnz = n * n; /* upper bound */
- fimat = 1;
- nimat = NTYPES;
- Afull = doubleCalloc(lda * n);
- dallocateA(n, nnz, &a, &asub, &xa);
- } else {
- /* Read a sparse matrix */
- fimat = nimat = 0;
- dreadhb(&m, &n, &nnz, &a, &asub, &xa);
- }
-
- dallocateA(n, nnz, &a_save, &asub_save, &xa_save);
- rhsb = doubleMalloc(m * nrhs);
- bsav = doubleMalloc(m * nrhs);
- solx = doubleMalloc(n * nrhs);
- ldb = m;
- ldx = n;
- dCreate_Dense_Matrix(&B, m, nrhs, rhsb, ldb, SLU_DN, SLU_D, SLU_GE);
- dCreate_Dense_Matrix(&X, n, nrhs, solx, ldx, SLU_DN, SLU_D, SLU_GE);
- xact = doubleMalloc(n * nrhs);
- etree = intMalloc(n);
- perm_r = intMalloc(n);
- perm_c = intMalloc(n);
- pc_save = intMalloc(n);
- R = (double *) SUPERLU_MALLOC(m*sizeof(double));
- C = (double *) SUPERLU_MALLOC(n*sizeof(double));
- ferr = (double *) SUPERLU_MALLOC(nrhs*sizeof(double));
- berr = (double *) SUPERLU_MALLOC(nrhs*sizeof(double));
- j = SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs);
- rwork = (double *) SUPERLU_MALLOC(j*sizeof(double));
- for (i = 0; i < j; ++i) rwork[i] = 0.;
- if ( !R ) ABORT("SUPERLU_MALLOC fails for R");
- if ( !C ) ABORT("SUPERLU_MALLOC fails for C");
- if ( !ferr ) ABORT("SUPERLU_MALLOC fails for ferr");
- if ( !berr ) ABORT("SUPERLU_MALLOC fails for berr");
- if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
- wwork = doubleCalloc( SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs) );
-
- for (i = 0; i < n; ++i) perm_c[i] = pc_save[i] = i;
- options.ColPerm = MY_PERMC;
-
- for (imat = fimat; imat <= nimat; ++imat) { /* All matrix types */
-
- if ( imat ) {
-
- /* Skip types 5, 6, or 7 if the matrix size is too small. */
- zerot = (imat >= 5 && imat <= 7);
- if ( zerot && n < imat-4 )
- continue;
-
- /* Set up parameters with DLATB4 and generate a test matrix
- with DLATMS. */
- dlatb4_(path, &imat, &n, &n, sym, &kl, &ku, &anorm, &mode,
- &cndnum, dist);
-
- dlatms_(&n, &n, dist, iseed, sym, &rwork[0], &mode, &cndnum,
- &anorm, &kl, &ku, "No packing", Afull, &lda,
- &wwork[0], &info);
-
- if ( info ) {
- printf(FMT3, "DLATMS", info, izero, n, nrhs, imat, nfail);
- continue;
- }
-
- /* For types 5-7, zero one or more columns of the matrix
- to test that INFO is returned correctly. */
- if ( zerot ) {
- if ( imat == 5 ) izero = 1;
- else if ( imat == 6 ) izero = n;
- else izero = n / 2 + 1;
- ioff = (izero - 1) * lda;
- if ( imat < 7 ) {
- for (i = 0; i < n; ++i) Afull[ioff + i] = zero;
- } else {
- for (j = 0; j < n - izero + 1; ++j)
- for (i = 0; i < n; ++i)
- Afull[ioff + i + j*lda] = zero;
- }
- } else {
- izero = 0;
- }
-
- /* Convert to sparse representation. */
- sp_dconvert(n, n, Afull, lda, kl, ku, a, asub, xa, &nnz);
-
- } else {
- izero = 0;
- zerot = 0;
- }
-
- dCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_D, SLU_GE);
-
- /* Save a copy of matrix A in ASAV */
- dCreate_CompCol_Matrix(&ASAV, m, n, nnz, a_save, asub_save, xa_save,
- SLU_NC, SLU_D, SLU_GE);
- dCopy_CompCol_Matrix(&A, &ASAV);
-
- /* Form exact solution. */
- dGenXtrue(n, nrhs, xact, ldx);
-
- StatInit(&stat);
-
- for (iequed = 0; iequed < 4; ++iequed) {
- *equed = equeds[iequed];
- if (iequed == 0) nfact = 4;
- else nfact = 1; /* Only test factored, pre-equilibrated matrix */
-
- for (ifact = 0; ifact < nfact; ++ifact) {
- fact = facts[ifact];
- options.Fact = fact;
-
- for (equil = 0; equil < 2; ++equil) {
- options.Equil = equil;
- prefact = ( options.Fact == FACTORED ||
- options.Fact == SamePattern_SameRowPerm );
- /* Need a first factor */
- nofact = (options.Fact != FACTORED); /* Not factored */
-
- /* Restore the matrix A. */
- dCopy_CompCol_Matrix(&ASAV, &A);
-
- if ( zerot ) {
- if ( prefact ) continue;
- } else if ( options.Fact == FACTORED ) {
- if ( equil || iequed ) {
- /* Compute row and column scale factors to
- equilibrate matrix A. */
- dgsequ(&A, R, C, &rowcnd, &colcnd, &amax, &info);
-
- /* Force equilibration. */
- if ( !info && n > 0 ) {
- if ( lsame_(equed, "R") ) {
- rowcnd = 0.;
- colcnd = 1.;
- } else if ( lsame_(equed, "C") ) {
- rowcnd = 1.;
- colcnd = 0.;
- } else if ( lsame_(equed, "B") ) {
- rowcnd = 0.;
- colcnd = 0.;
- }
- }
-
- /* Equilibrate the matrix. */
- dlaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
- }
- }
-
- if ( prefact ) { /* Need a factor for the first time */
-
- /* Save Fact option. */
- fact = options.Fact;
- options.Fact = DOFACT;
-
- /* Preorder the matrix, obtain the column etree. */
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- /* Factor the matrix AC. */
- dgstrf(&options, &AC, relax, panel_size,
- etree, work, lwork, perm_c, perm_r, &L, &U,
- &stat, &info);
-
- if ( info ) {
- printf("** First factor: info %d, equed %c\n",
- info, *equed);
- if ( lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n",
- info - n);
- exit(0);
- }
- }
-
- Destroy_CompCol_Permuted(&AC);
-
- /* Restore Fact option. */
- options.Fact = fact;
- } /* if .. first time factor */
-
- for (itran = 0; itran < NTRAN; ++itran) {
- trans = transs[itran];
- options.Trans = trans;
-
- /* Restore the matrix A. */
- dCopy_CompCol_Matrix(&ASAV, &A);
-
- /* Set the right hand side. */
- dFillRHS(trans, nrhs, xact, ldx, &A, &B);
- dCopy_Dense_Matrix(m, nrhs, rhsb, ldb, bsav, ldb);
-
- /*----------------
- * Test dgssv
- *----------------*/
- if ( options.Fact == DOFACT && itran == 0) {
- /* Not yet factored, and untransposed */
-
- dCopy_Dense_Matrix(m, nrhs, rhsb, ldb, solx, ldx);
- dgssv(&options, &A, perm_c, perm_r, &L, &U, &X,
- &stat, &info);
-
- if ( info && info != izero ) {
- printf(FMT3, "dgssv",
- info, izero, n, nrhs, imat, nfail);
- } else {
- /* Reconstruct matrix from factors and
- compute residual. */
- 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);
- dgst02(trans, m, n, nrhs, &A, solx,
- ldx, wwork,ldb, &result[1]);
- nt = 2;
- }
-
- /* Print information about the tests that
- did not pass the threshold. */
- for (i = 0; i < nt; ++i) {
- if ( result[i] >= THRESH ) {
- printf(FMT1, "dgssv", n, i,
- result[i]);
- ++nfail;
- }
- }
- nrun += nt;
- } /* else .. info == 0 */
-
- /* Restore perm_c. */
- for (i = 0; i < n; ++i) perm_c[i] = pc_save[i];
-
- if (lwork == 0) {
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
- } /* if .. end of testing dgssv */
-
- /*----------------
- * Test dgssvx
- *----------------*/
-
- /* Equilibrate the matrix if fact = FACTORED and
- equed = 'R', 'C', or 'B'. */
- if ( options.Fact == FACTORED &&
- (equil || iequed) && n > 0 ) {
- dlaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
- }
-
- /* Solve the system and compute the condition number
- and error bounds using dgssvx. */
- dgssvx(&options, &A, perm_c, perm_r, etree,
- equed, R, C, &L, &U, work, lwork, &B, &X, &rpg,
- &rcond, ferr, berr, &mem_usage, &stat, &info);
-
- if ( info && info != izero ) {
- printf(FMT3, "dgssvx",
- info, izero, n, nrhs, imat, nfail);
- if ( lwork == -1 ) {
- printf("** Estimated memory: %.0f bytes\n",
- mem_usage.total_needed);
- exit(0);
- }
- } else {
- if ( !prefact ) {
- /* Reconstruct matrix from factors and
- compute residual. */
- dgst01(m, n, &A, &L, &U, perm_c, perm_r,
- &result[0]);
- k1 = 0;
- } else {
- k1 = 1;
- }
-
- if ( !info ) {
- /* Compute residual of the computed solution.*/
- dCopy_Dense_Matrix(m, nrhs, bsav, ldb,
- wwork, ldb);
- dgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
- wwork, ldb, &result[1]);
-
- /* Check solution from generated exact
- solution. */
- dgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
- &result[2]);
-
- /* Check the error bounds from iterative
- refinement. */
- dgst07(trans, n, nrhs, &ASAV, bsav, ldb,
- solx, ldx, xact, ldx, ferr, berr,
- &result[3]);
-
- /* Print information about the tests that did
- not pass the threshold. */
- for (i = k1; i < NTESTS; ++i) {
- if ( result[i] >= THRESH ) {
- printf(FMT2, "dgssvx",
- options.Fact, trans, *equed,
- n, imat, i, result[i]);
- ++nfail;
- }
- }
- nrun += NTESTS;
- } /* if .. info == 0 */
- } /* else .. end of testing dgssvx */
-
- } /* for itran ... */
-
- if ( lwork == 0 ) {
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
-
- } /* for equil ... */
- } /* for ifact ... */
- } /* for iequed ... */
-#if 0
- if ( !info ) {
- PrintPerf(&L, &U, &mem_usage, rpg, rcond, ferr, berr, equed);
- }
-#endif
-
- } /* for imat ... */
-
- /* Print a summary of the results. */
- PrintSumm("DGE", nfail, nrun, nerrs);
-
- SUPERLU_FREE (rhsb);
- SUPERLU_FREE (bsav);
- SUPERLU_FREE (solx);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (etree);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- SUPERLU_FREE (pc_save);
- SUPERLU_FREE (R);
- SUPERLU_FREE (C);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- SUPERLU_FREE (rwork);
- SUPERLU_FREE (wwork);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- Destroy_CompCol_Matrix(&A);
- Destroy_CompCol_Matrix(&ASAV);
- if ( lwork > 0 ) {
- SUPERLU_FREE (work);
- Destroy_SuperMatrix_Store(&L);
- Destroy_SuperMatrix_Store(&U);
- }
- StatFree(&stat);
-
- return 0;
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-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, double *u)
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "ht:n:w:r:s:m:b:c:l:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-w <int> - panel size\n");
- printf("\t-r <int> - granularity of relaxed supernodes\n");
- exit(1);
- break;
- case 't': strcpy(matrix_type, optarg);
- break;
- case 'n': *n = atoi(optarg);
- break;
- case 'w': *w = atoi(optarg);
- break;
- case 'r': *relax = atoi(optarg);
- break;
- case 's': *nrhs = atoi(optarg);
- break;
- case 'm': *maxsuper = atoi(optarg);
- break;
- case 'b': *rowblk = atoi(optarg);
- break;
- case 'c': *colblk = atoi(optarg);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- }
- }
-}
diff --git a/TESTING/dgst01.c b/TESTING/dgst01.c
deleted file mode 100644
index a1477e0..0000000
--- a/TESTING/dgst01.c
+++ /dev/null
@@ -1,166 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-#include <math.h>
-#include "slu_ddefs.h"
-
-int dgst01(int m, int n, SuperMatrix *A, SuperMatrix *L,
- SuperMatrix *U, int *perm_c, int *perm_r, double *resid)
-{
-/*
- Purpose
- =======
-
- 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.
-
- Arguments
- ==========
-
- M (input) INT
- The number of rows of the matrix A. M >= 0.
-
- N (input) INT
- The number of columns of the matrix A. N >= 0.
-
- A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
- The original M x N matrix A.
-
- L (input) SuperMatrix *, dimension (L->nrow, L->ncol)
- The factor matrix 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.
-
- RESID (output) DOUBLE*
- norm(L*U - A) / ( N * norm(A) * EPS )
-
- =====================================================================
-*/
-
- /* Local variables */
- double zero = 0.0;
- int i, j, k, arow, lptr,isub, urow, superno, fsupc, u_part;
- double utemp, comp_temp;
- double anorm, tnorm, cnorm;
- double eps;
- double *work;
- SCformat *Lstore;
- NCformat *Astore, *Ustore;
- double *Aval, *Lval, *Uval;
- int *colbeg, *colend;
-
- /* Function prototypes */
- extern double dlangs(char *, SuperMatrix *);
-
- /* Quick exit if M = 0 or N = 0. */
-
- if (m <= 0 || n <= 0) {
- *resid = 0.f;
- return 0;
- }
-
- work = (double *)doubleCalloc(m);
-
- Astore = A->Store;
- Aval = Astore->nzval;
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
-
- /* Determine EPS and the norm of A. */
- eps = dlamch_("Epsilon");
- anorm = dlangs("1", A);
- cnorm = 0.;
-
- /* Compute the product L*U, one column at a time */
- for (k = 0; k < n; ++k) {
-
- /* The U part outside the rectangular supernode */
- for (i = U_NZ_START(k); i < U_NZ_START(k+1); ++i) {
- urow = U_SUB(i);
- utemp = Uval[i];
- superno = Lstore->col_to_sup[urow];
- fsupc = L_FST_SUPC(superno);
- u_part = urow - fsupc + 1;
- lptr = L_SUB_START(fsupc) + u_part;
- work[L_SUB(lptr-1)] -= utemp; /* L_ii = 1 */
- for (j = L_NZ_START(urow) + u_part; j < L_NZ_START(urow+1); ++j) {
- isub = L_SUB(lptr);
- work[isub] -= Lval[j] * utemp;
- ++lptr;
- }
- }
-
- /* The U part inside the rectangular supernode */
- superno = Lstore->col_to_sup[k];
- fsupc = L_FST_SUPC(superno);
- urow = L_NZ_START(k);
- for (i = fsupc; i <= k; ++i) {
- utemp = Lval[urow++];
- u_part = i - fsupc + 1;
- lptr = L_SUB_START(fsupc) + u_part;
- work[L_SUB(lptr-1)] -= utemp; /* L_ii = 1 */
- for (j = L_NZ_START(i)+u_part; j < L_NZ_START(i+1); ++j) {
- isub = L_SUB(lptr);
- work[isub] -= Lval[j] * utemp;
- ++lptr;
- }
- }
-
- /* 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];
- }
-
- /* Now compute the 1-norm of the column vector work */
- tnorm = 0.;
- for (i = 0; i < m; ++i) {
- tnorm += fabs(work[i]);
- work[i] = zero;
- }
- cnorm = SUPERLU_MAX(tnorm, cnorm);
- }
-
- *resid = cnorm;
-
- if (anorm <= 0.f) {
- if (*resid != 0.f) {
- *resid = 1.f / eps;
- }
- } else {
- *resid = *resid / (float) n / anorm / eps;
- }
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(colbeg);
- SUPERLU_FREE(colend);
- return 0;
-
-/* End of DGST01 */
-
-} /* dgst01_ */
-
diff --git a/TESTING/dgst02.c b/TESTING/dgst02.c
deleted file mode 100644
index 2275fef..0000000
--- a/TESTING/dgst02.c
+++ /dev/null
@@ -1,138 +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_ddefs.h"
-
-int dgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
- double *x, int ldx, double *b, int ldb, double *resid)
-{
-/*
- Purpose
- =======
-
- 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.
-
- Arguments
- =========
-
- TRANS (input) trans_t
- Specifies the form of the system of equations:
- = NOTRANS: A *x = b
- = TRANS : A'*x = b, where A' is the transpose of A
- = CONJ : A'*x = b, where A' is the transpose of A
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- NRHS (input) INTEGER
- The number of columns of B, the matrix of right hand sides.
- NRHS >= 0.
-
- A (input) SuperMatrix*, dimension (LDA,N)
- The original M x N sparse matrix A.
-
- X (input) DOUBLE PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors for the system of linear
- equations.
-
- LDX (input) INTEGER
- The leading dimension of the array X. If TRANS = NOTRANS,
- LDX >= max(1,N); if TRANS = TRANS or CONJ, LDX >= max(1,M).
-
- B (input/output) DOUBLE PRECISION array, dimension (LDB,NRHS)
- On entry, the right hand side vectors for the system of
- linear equations.
- On exit, B is overwritten with the difference B - A*X.
-
- LDB (input) INTEGER
- The leading dimension of the array B. IF TRANS = NOTRANS,
- LDB >= max(1,M); if TRANS = TRANS or CONJ, LDB >= max(1,N).
-
- RESID (output) DOUBLE PRECISION
- The maximum over the number of right hand sides of
- norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
-
- =====================================================================
-*/
-
- /* Table of constant values */
- double alpha = -1.;
- double beta = 1.;
- int c__1 = 1;
-
- /* System generated locals */
- double d__1, d__2;
-
- /* Local variables */
- int j;
- int n1, n2;
- double anorm, bnorm;
- double xnorm;
- double eps;
- char transc[1];
-
- /* Function prototypes */
- extern int lsame_(char *, char *);
- extern double dlangs(char *, SuperMatrix *);
- extern double dasum_(int *, double *, int *);
-
- /* Function Body */
- if ( m <= 0 || n <= 0 || nrhs == 0) {
- *resid = 0.;
- return 0;
- }
-
- if ( (trans == TRANS) || (trans == CONJ) ) {
- n1 = n;
- n2 = m;
- *transc = 'T';
- } else {
- n1 = m;
- n2 = n;
- *transc = 'N';
- }
-
- /* Exit with RESID = 1/EPS if ANORM = 0. */
-
- eps = dlamch_("Epsilon");
- anorm = dlangs("1", A);
- if (anorm <= 0.) {
- *resid = 1. / eps;
- return 0;
- }
-
- /* Compute B - A*X (or B - A'*X ) and store in B. */
-
- sp_dgemm(transc, "N", n1, nrhs, n2, alpha, A, x, ldx, beta, b, ldb);
-
- /* Compute the maximum over the number of right hand sides of
- norm(B - A*X) / ( norm(A) * norm(X) * EPS ) . */
-
- *resid = 0.;
- for (j = 0; j < nrhs; ++j) {
- bnorm = dasum_(&n1, &b[j*ldb], &c__1);
- xnorm = dasum_(&n2, &x[j*ldx], &c__1);
- if (xnorm <= 0.) {
- *resid = 1. / eps;
- } else {
- /* Computing MAX */
- d__1 = *resid, d__2 = bnorm / anorm / xnorm / eps;
- *resid = SUPERLU_MAX(d__1, d__2);
- }
- }
-
- return 0;
-
-} /* dgst02 */
-
diff --git a/TESTING/dgst04.c b/TESTING/dgst04.c
deleted file mode 100644
index 11d2044..0000000
--- a/TESTING/dgst04.c
+++ /dev/null
@@ -1,120 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-#include <math.h>
-#include "slu_ddefs.h"
-
-int dgst04(int n, int nrhs, double *x, int ldx, double *xact,
- int ldxact, double rcond, double *resid)
-{
-/*
- Purpose
- =======
-
- 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
- machine epsilon.
-
- Arguments
- =========
-
- N (input) INT
- The number of rows of the matrices X and XACT. N >= 0.
-
- NRHS (input) INT
- The number of columns of the matrices X and XACT. NRHS >= 0.
-
- X (input) DOUBLE PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors. Each vector is stored as a
- column of the matrix X.
-
- LDX (input) INT
- The leading dimension of the array X. LDX >= max(1,N).
-
- XACT (input) DOUBLE PRECISION array, dimension( LDX, NRHS )
- The exact solution vectors. Each vector is stored as a
- column of the matrix XACT.
-
- LDXACT (input) INT
- The leading dimension of the array XACT. LDXACT >= max(1,N).
-
- RCOND (input) DOUBLE PRECISION
- The reciprocal of the condition number of the coefficient
- matrix in the system of equations.
-
- RESID (output) DOUBLE PRECISION
- The maximum over the NRHS solution vectors of
- ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS )
-
- =====================================================================
-*/
- /* Table of constant values */
- int c__1 = 1;
-
- /* System generated locals */
- double d__1, d__2, d__3, d__4;
-
- /* Local variables */
- int i, j, n__1;
- int ix;
- double xnorm;
- double eps;
- double diffnm;
-
- /* Function prototypes */
- extern int idamax_(int *, double *, int *);
-
- /* Quick exit if N = 0 or NRHS = 0. */
- if ( n <= 0 || nrhs <= 0 ) {
- *resid = 0.;
- return 0;
- }
-
- /* Exit with RESID = 1/EPS if RCOND is invalid. */
-
- eps = dlamch_("Epsilon");
- if ( rcond < 0. ) {
- *resid = 1. / eps;
- return 0;
- }
-
- /* Compute the maximum of norm(X - XACT) / ( norm(XACT) * EPS )
- over all the vectors X and XACT . */
-
- *resid = 0.;
- for (j = 0; j < nrhs; ++j) {
- n__1 = n;
- ix = idamax_(&n__1, &xact[j*ldxact], &c__1);
- xnorm = (d__1 = xact[ix-1 + j*ldxact], fabs(d__1));
-
- diffnm = 0.;
- for (i = 0; i < n; ++i) {
- /* Computing MAX */
- d__3 = diffnm;
- d__4 = (d__1 = x[i+j*ldx]-xact[i+j*ldxact], fabs(d__1));
- diffnm = SUPERLU_MAX(d__3,d__4);
- }
- if (xnorm <= 0.) {
- if (diffnm > 0.) {
- *resid = 1. / eps;
- }
- } else {
- /* Computing MAX */
- d__1 = *resid, d__2 = diffnm / xnorm * rcond;
- *resid = SUPERLU_MAX(d__1,d__2);
- }
- }
- if (*resid * eps < 1.) {
- *resid /= eps;
- }
-
- return 0;
-
-} /* dgst04_ */
diff --git a/TESTING/dgst07.c b/TESTING/dgst07.c
deleted file mode 100644
index 0aa300d..0000000
--- a/TESTING/dgst07.c
+++ /dev/null
@@ -1,218 +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 <math.h>
-#include "slu_ddefs.h"
-
-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)
-{
-/*
- Purpose
- =======
-
- 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.
-
- RESLTS(1) = test of the error bound
- = norm(X - XACT) / ( norm(X) * FERR )
- A large value is returned if this ratio is not less than one.
-
- RESLTS(2) = residual from the iterative refinement routine
- = the maximum of BERR / ( (n+1)*EPS + (*) ), where
- (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
-
- Arguments
- =========
-
- TRANS (input) trans_t
- Specifies the form of the system of equations.
- = NOTRANS: A *x = b
- = TRANS : A'*x = b, where A' is the transpose of A
- = CONJ : A'*x = b, where A' is the transpose of A
-
- N (input) INT
- The number of rows of the matrices X and XACT. N >= 0.
-
- NRHS (input) INT
- The number of columns of the matrices X and XACT. NRHS >= 0.
-
-
- A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
- The original n by n matrix A.
-
- B (input) DOUBLE PRECISION array, dimension (LDB,NRHS)
- The right hand side vectors for the system of linear
- equations.
-
- LDB (input) INT
- The leading dimension of the array B. LDB >= max(1,N).
-
- X (input) DOUBLE PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors. Each vector is stored as a
- column of the matrix X.
-
- LDX (input) INT
- The leading dimension of the array X. LDX >= max(1,N).
-
- XACT (input) DOUBLE PRECISION array, dimension (LDX,NRHS)
- The exact solution vectors. Each vector is stored as a
- column of the matrix XACT.
-
- LDXACT (input) INT
- The leading dimension of the array XACT. LDXACT >= max(1,N).
-
-
- FERR (input) DOUBLE PRECISION array, dimension (NRHS)
- The estimated forward error bounds for each solution vector
- X. If XTRUE is the true solution, FERR bounds the magnitude
- of the largest entry in (X - XTRUE) divided by the magnitude
- of the largest entry in X.
-
- BERR (input) DOUBLE PRECISION array, dimension (NRHS)
- The componentwise relative backward error of each solution
- vector (i.e., the smallest relative change in any entry of A
-
- or B that makes X an exact solution).
-
- RESLTS (output) DOUBLE PRECISION array, dimension (2)
- The maximum over the NRHS solution vectors of the ratios:
- RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
- RESLTS(2) = BERR / ( (n+1)*EPS + (*) )
-
- =====================================================================
-*/
-
- /* Table of constant values */
- int c__1 = 1;
-
- /* System generated locals */
- double d__1, d__2;
-
- /* Local variables */
- double diff, axbi;
- int imax, irow, n__1;
- int i, j, k;
- double unfl, ovfl;
- double xnorm;
- double errbnd;
- int notran;
- double eps, tmp;
- double *rwork;
- double *Aval;
- NCformat *Astore;
-
- /* Function prototypes */
- extern int lsame_(char *, char *);
- extern int idamax_(int *, double *, int *);
-
-
- /* Quick exit if N = 0 or NRHS = 0. */
- if ( n <= 0 || nrhs <= 0 ) {
- reslts[0] = 0.;
- reslts[1] = 0.;
- return 0;
- }
-
- eps = dlamch_("Epsilon");
- unfl = dlamch_("Safe minimum");
- ovfl = 1. / unfl;
- notran = (trans == NOTRANS);
-
- rwork = (double *) SUPERLU_MALLOC(n*sizeof(double));
- if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
- Astore = A->Store;
- Aval = (double *) Astore->nzval;
-
- /* Test 1: Compute the maximum of
- norm(X - XACT) / ( norm(X) * FERR )
- over all the vectors X and XACT using the infinity-norm. */
-
- errbnd = 0.;
- for (j = 0; j < nrhs; ++j) {
- n__1 = n;
- imax = idamax_(&n__1, &x[j*ldx], &c__1);
- d__1 = fabs(x[imax-1 + j*ldx]);
- xnorm = SUPERLU_MAX(d__1,unfl);
- diff = 0.;
- for (i = 0; i < n; ++i) {
- d__1 = fabs(x[i+j*ldx] - xact[i+j*ldxact]);
- diff = SUPERLU_MAX(diff, d__1);
- }
-
- if (xnorm > 1.) {
- goto L20;
- } else if (diff <= ovfl * xnorm) {
- goto L20;
- } else {
- errbnd = 1. / eps;
- goto L30;
- }
-
-L20:
-#if 0
- if (diff / xnorm <= ferr[j]) {
- d__1 = diff / xnorm / ferr[j];
- errbnd = SUPERLU_MAX(errbnd,d__1);
- } else {
- errbnd = 1. / eps;
- }
-#endif
- d__1 = diff / xnorm / ferr[j];
- errbnd = SUPERLU_MAX(errbnd,d__1);
- /*printf("Ferr: %f\n", errbnd);*/
-L30:
- ;
- }
- reslts[0] = errbnd;
-
- /* Test 2: Compute the maximum of BERR / ( (n+1)*EPS + (*) ), where
- (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) + abs(b))_i ) */
-
- for (k = 0; k < nrhs; ++k) {
- for (i = 0; i < n; ++i)
- rwork[i] = fabs( b[i + k*ldb] );
- if ( notran ) {
- for (j = 0; j < n; ++j) {
- tmp = fabs( x[j + k*ldx] );
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- rwork[Astore->rowind[i]] += fabs(Aval[i]) * tmp;
- }
- }
- } else {
- for (j = 0; j < n; ++j) {
- tmp = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- d__1 = fabs( x[irow + k*ldx] );
- tmp += fabs(Aval[i]) * d__1;
- }
- rwork[j] += tmp;
- }
- }
-
- axbi = rwork[0];
- for (i = 1; i < n; ++i) axbi = SUPERLU_MIN(axbi, rwork[i]);
-
- /* Computing MAX */
- d__1 = axbi, d__2 = (n + 1) * unfl;
- tmp = berr[k] / ((n + 1) * eps + (n + 1) * unfl / SUPERLU_MAX(d__1,d__2));
-
- if (k == 0) {
- reslts[1] = tmp;
- } else {
- reslts[1] = SUPERLU_MAX(reslts[1],tmp);
- }
- }
-
- SUPERLU_FREE(rwork);
- return 0;
-
-} /* dgst07 */
diff --git a/TESTING/dtest.csh b/TESTING/dtest.csh
deleted file mode 100644
index 613c9f1..0000000
--- a/TESTING/dtest.csh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/csh
-
-set ofile = dtest.out # output file
-if ( -e $ofile ) then
- rm -f $ofile
-endif
-echo "Double-precision testing output" > $ofile
-
-set MATRICES = (LAPACK g20.rua)
-set NVAL = (9 19)
-set NRHS = (5)
-set LWORK = (0 10000000)
-
-#
-# Loop through all matrices ...
-#
-foreach m ($MATRICES)
-
- #--------------------------------------------
- # Test matrix types generated in LAPACK-style
- #--------------------------------------------
- if ($m == 'LAPACK') then
- echo '== LAPACK test matrices' >> $ofile
- foreach n ($NVAL)
- foreach s ($NRHS)
- foreach l ($LWORK)
- echo '' >> $ofile
- echo 'n='$n 'nrhs='$s 'lwork='$l >> $ofile
- ./dtest -t "LA" -l $l -n $n -s $s >> $ofile
- end
- end
- end
- #--------------------------------------------
- # Test a specified sparse matrix
- #--------------------------------------------
- else
- echo '' >> $ofile
- echo '== sparse matrix:' $m >> $ofile
- foreach s ($NRHS)
- foreach l ($LWORK)
- echo '' >> $ofile
- echo 'nrhs='$s 'lwork='$l >> $ofile
- ./dtest -t "SP" -s $s -l $l < ../EXAMPLE/$m >> $ofile
- end
- end
- endif
-
-end
-
diff --git a/TESTING/sdrive.c b/TESTING/sdrive.c
deleted file mode 100644
index 726d4e1..0000000
--- a/TESTING/sdrive.c
+++ /dev/null
@@ -1,544 +0,0 @@
-
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
- *
- */
-/*
- * File name: sdrive.c
- * Purpose: MAIN test program
- */
-#include <string.h>
-#include "slu_sdefs.h"
-
-#define NTESTS 5 /* Number of test types */
-#define NTYPES 11 /* Number of matrix types */
-#define NTRAN 2
-#define THRESH 20.0
-#define FMT1 "%10s:n=%d, test(%d)=%12.5g\n"
-#define FMT2 "%10s:fact=%4d, trans=%4d, equed=%c, n=%d, imat=%d, test(%d)=%12.5g\n"
-#define FMT3 "%10s:info=%d, izero=%d, n=%d, nrhs=%d, imat=%d, nfail=%d\n"
-
-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, double *u);
-
-main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * SDRIVE is the main test program for the FLOAT linear
- * equation driver routines SGSSV and SGSSVX.
- *
- * The program is invoked by a shell script file -- stest.csh.
- * The output from the tests are written into a file -- stest.out.
- *
- * =====================================================================
- */
- float *a, *a_save;
- int *asub, *asub_save;
- int *xa, *xa_save;
- SuperMatrix A, B, X, L, U;
- SuperMatrix ASAV, AC;
- mem_usage_t mem_usage;
- int *perm_r; /* row permutation from partial pivoting */
- int *perm_c, *pc_save; /* column permutation */
- int *etree;
- float zero = 0.0;
- float *R, *C;
- float *ferr, *berr;
- float *rwork;
- float *wwork;
- void *work;
- int info, lwork, nrhs, panel_size, relax;
- int m, n, nnz;
- float *xact;
- float *rhsb, *solx, *bsav;
- int ldb, ldx;
- float rpg, rcond;
- int i, j, k1;
- float rowcnd, colcnd, amax;
- int maxsuper, rowblk, colblk;
- int prefact, nofact, equil, iequed;
- int nt, nrun, nfail, nerrs, imat, fimat, nimat;
- int nfact, ifact, itran;
- int kl, ku, mode, lda;
- int zerot, izero, ioff;
- double u;
- float anorm, cndnum;
- float *Afull;
- float result[NTESTS];
- superlu_options_t options;
- fact_t fact;
- trans_t trans;
- SuperLUStat_t stat;
- static char matrix_type[8];
- static char equed[1], path[4], sym[1], dist[1];
-
- /* Fixed set of parameters */
- int iseed[] = {1988, 1989, 1990, 1991};
- static char equeds[] = {'N', 'R', 'C', 'B'};
- static fact_t facts[] = {FACTORED, DOFACT, SamePattern,
- SamePattern_SameRowPerm};
- static trans_t transs[] = {NOTRANS, TRANS, CONJ};
-
- /* Some function prototypes */
- 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 *,
- float *, int *, float *, char *);
- extern int slatms_(int *, int *, char *, int *, char *, float *d,
- int *, float *, float *, int *, int *,
- char *, float *, int *, float *, int *);
- extern int sp_sconvert(int, int, float *, int, int, int,
- float *a, int *, int *, int *);
-
-
- /* Executable statements */
-
- strcpy(path, "SGE");
- nrun = 0;
- nfail = 0;
- nerrs = 0;
-
- /* Defaults */
- lwork = 0;
- n = 1;
- nrhs = 1;
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
- u = 1.0;
- strcpy(matrix_type, "LA");
- parse_command_line(argc, argv, matrix_type, &n,
- &panel_size, &relax, &nrhs, &maxsuper,
- &rowblk, &colblk, &lwork, &u);
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- fprintf(stderr, "expert: cannot allocate %d bytes\n", lwork);
- exit (-1);
- }
- }
-
- /* Set the default input options. */
- set_default_options(&options);
- options.DiagPivotThresh = u;
- options.PrintStat = NO;
- options.PivotGrowth = YES;
- options.ConditionNumber = YES;
- options.IterRefine = SLU_SINGLE;
-
- if ( strcmp(matrix_type, "LA") == 0 ) {
- /* Test LAPACK matrix suite. */
- m = n;
- lda = SUPERLU_MAX(n, 1);
- nnz = n * n; /* upper bound */
- fimat = 1;
- nimat = NTYPES;
- Afull = floatCalloc(lda * n);
- sallocateA(n, nnz, &a, &asub, &xa);
- } else {
- /* Read a sparse matrix */
- fimat = nimat = 0;
- sreadhb(&m, &n, &nnz, &a, &asub, &xa);
- }
-
- sallocateA(n, nnz, &a_save, &asub_save, &xa_save);
- rhsb = floatMalloc(m * nrhs);
- bsav = floatMalloc(m * nrhs);
- solx = floatMalloc(n * nrhs);
- ldb = m;
- ldx = n;
- sCreate_Dense_Matrix(&B, m, nrhs, rhsb, ldb, SLU_DN, SLU_S, SLU_GE);
- sCreate_Dense_Matrix(&X, n, nrhs, solx, ldx, SLU_DN, SLU_S, SLU_GE);
- xact = floatMalloc(n * nrhs);
- etree = intMalloc(n);
- perm_r = intMalloc(n);
- perm_c = intMalloc(n);
- pc_save = intMalloc(n);
- R = (float *) SUPERLU_MALLOC(m*sizeof(float));
- C = (float *) SUPERLU_MALLOC(n*sizeof(float));
- ferr = (float *) SUPERLU_MALLOC(nrhs*sizeof(float));
- berr = (float *) SUPERLU_MALLOC(nrhs*sizeof(float));
- j = SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs);
- rwork = (float *) SUPERLU_MALLOC(j*sizeof(float));
- for (i = 0; i < j; ++i) rwork[i] = 0.;
- if ( !R ) ABORT("SUPERLU_MALLOC fails for R");
- if ( !C ) ABORT("SUPERLU_MALLOC fails for C");
- if ( !ferr ) ABORT("SUPERLU_MALLOC fails for ferr");
- if ( !berr ) ABORT("SUPERLU_MALLOC fails for berr");
- if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
- wwork = floatCalloc( SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs) );
-
- for (i = 0; i < n; ++i) perm_c[i] = pc_save[i] = i;
- options.ColPerm = MY_PERMC;
-
- for (imat = fimat; imat <= nimat; ++imat) { /* All matrix types */
-
- if ( imat ) {
-
- /* Skip types 5, 6, or 7 if the matrix size is too small. */
- zerot = (imat >= 5 && imat <= 7);
- if ( zerot && n < imat-4 )
- continue;
-
- /* Set up parameters with SLATB4 and generate a test matrix
- with SLATMS. */
- slatb4_(path, &imat, &n, &n, sym, &kl, &ku, &anorm, &mode,
- &cndnum, dist);
-
- slatms_(&n, &n, dist, iseed, sym, &rwork[0], &mode, &cndnum,
- &anorm, &kl, &ku, "No packing", Afull, &lda,
- &wwork[0], &info);
-
- if ( info ) {
- printf(FMT3, "SLATMS", info, izero, n, nrhs, imat, nfail);
- continue;
- }
-
- /* For types 5-7, zero one or more columns of the matrix
- to test that INFO is returned correctly. */
- if ( zerot ) {
- if ( imat == 5 ) izero = 1;
- else if ( imat == 6 ) izero = n;
- else izero = n / 2 + 1;
- ioff = (izero - 1) * lda;
- if ( imat < 7 ) {
- for (i = 0; i < n; ++i) Afull[ioff + i] = zero;
- } else {
- for (j = 0; j < n - izero + 1; ++j)
- for (i = 0; i < n; ++i)
- Afull[ioff + i + j*lda] = zero;
- }
- } else {
- izero = 0;
- }
-
- /* Convert to sparse representation. */
- sp_sconvert(n, n, Afull, lda, kl, ku, a, asub, xa, &nnz);
-
- } else {
- izero = 0;
- zerot = 0;
- }
-
- sCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_S, SLU_GE);
-
- /* Save a copy of matrix A in ASAV */
- sCreate_CompCol_Matrix(&ASAV, m, n, nnz, a_save, asub_save, xa_save,
- SLU_NC, SLU_S, SLU_GE);
- sCopy_CompCol_Matrix(&A, &ASAV);
-
- /* Form exact solution. */
- sGenXtrue(n, nrhs, xact, ldx);
-
- StatInit(&stat);
-
- for (iequed = 0; iequed < 4; ++iequed) {
- *equed = equeds[iequed];
- if (iequed == 0) nfact = 4;
- else nfact = 1; /* Only test factored, pre-equilibrated matrix */
-
- for (ifact = 0; ifact < nfact; ++ifact) {
- fact = facts[ifact];
- options.Fact = fact;
-
- for (equil = 0; equil < 2; ++equil) {
- options.Equil = equil;
- prefact = ( options.Fact == FACTORED ||
- options.Fact == SamePattern_SameRowPerm );
- /* Need a first factor */
- nofact = (options.Fact != FACTORED); /* Not factored */
-
- /* Restore the matrix A. */
- sCopy_CompCol_Matrix(&ASAV, &A);
-
- if ( zerot ) {
- if ( prefact ) continue;
- } else if ( options.Fact == FACTORED ) {
- if ( equil || iequed ) {
- /* Compute row and column scale factors to
- equilibrate matrix A. */
- sgsequ(&A, R, C, &rowcnd, &colcnd, &amax, &info);
-
- /* Force equilibration. */
- if ( !info && n > 0 ) {
- if ( lsame_(equed, "R") ) {
- rowcnd = 0.;
- colcnd = 1.;
- } else if ( lsame_(equed, "C") ) {
- rowcnd = 1.;
- colcnd = 0.;
- } else if ( lsame_(equed, "B") ) {
- rowcnd = 0.;
- colcnd = 0.;
- }
- }
-
- /* Equilibrate the matrix. */
- slaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
- }
- }
-
- if ( prefact ) { /* Need a factor for the first time */
-
- /* Save Fact option. */
- fact = options.Fact;
- options.Fact = DOFACT;
-
- /* Preorder the matrix, obtain the column etree. */
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- /* Factor the matrix AC. */
- sgstrf(&options, &AC, relax, panel_size,
- etree, work, lwork, perm_c, perm_r, &L, &U,
- &stat, &info);
-
- if ( info ) {
- printf("** First factor: info %d, equed %c\n",
- info, *equed);
- if ( lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n",
- info - n);
- exit(0);
- }
- }
-
- Destroy_CompCol_Permuted(&AC);
-
- /* Restore Fact option. */
- options.Fact = fact;
- } /* if .. first time factor */
-
- for (itran = 0; itran < NTRAN; ++itran) {
- trans = transs[itran];
- options.Trans = trans;
-
- /* Restore the matrix A. */
- sCopy_CompCol_Matrix(&ASAV, &A);
-
- /* Set the right hand side. */
- sFillRHS(trans, nrhs, xact, ldx, &A, &B);
- sCopy_Dense_Matrix(m, nrhs, rhsb, ldb, bsav, ldb);
-
- /*----------------
- * Test sgssv
- *----------------*/
- if ( options.Fact == DOFACT && itran == 0) {
- /* Not yet factored, and untransposed */
-
- sCopy_Dense_Matrix(m, nrhs, rhsb, ldb, solx, ldx);
- sgssv(&options, &A, perm_c, perm_r, &L, &U, &X,
- &stat, &info);
-
- if ( info && info != izero ) {
- printf(FMT3, "sgssv",
- info, izero, n, nrhs, imat, nfail);
- } else {
- /* Reconstruct matrix from factors and
- compute residual. */
- 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);
- sgst02(trans, m, n, nrhs, &A, solx,
- ldx, wwork,ldb, &result[1]);
- nt = 2;
- }
-
- /* Print information about the tests that
- did not pass the threshold. */
- for (i = 0; i < nt; ++i) {
- if ( result[i] >= THRESH ) {
- printf(FMT1, "sgssv", n, i,
- result[i]);
- ++nfail;
- }
- }
- nrun += nt;
- } /* else .. info == 0 */
-
- /* Restore perm_c. */
- for (i = 0; i < n; ++i) perm_c[i] = pc_save[i];
-
- if (lwork == 0) {
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
- } /* if .. end of testing sgssv */
-
- /*----------------
- * Test sgssvx
- *----------------*/
-
- /* Equilibrate the matrix if fact = FACTORED and
- equed = 'R', 'C', or 'B'. */
- if ( options.Fact == FACTORED &&
- (equil || iequed) && n > 0 ) {
- slaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
- }
-
- /* Solve the system and compute the condition number
- and error bounds using sgssvx. */
- sgssvx(&options, &A, perm_c, perm_r, etree,
- equed, R, C, &L, &U, work, lwork, &B, &X, &rpg,
- &rcond, ferr, berr, &mem_usage, &stat, &info);
-
- if ( info && info != izero ) {
- printf(FMT3, "sgssvx",
- info, izero, n, nrhs, imat, nfail);
- if ( lwork == -1 ) {
- printf("** Estimated memory: %.0f bytes\n",
- mem_usage.total_needed);
- exit(0);
- }
- } else {
- if ( !prefact ) {
- /* Reconstruct matrix from factors and
- compute residual. */
- sgst01(m, n, &A, &L, &U, perm_c, perm_r,
- &result[0]);
- k1 = 0;
- } else {
- k1 = 1;
- }
-
- if ( !info ) {
- /* Compute residual of the computed solution.*/
- sCopy_Dense_Matrix(m, nrhs, bsav, ldb,
- wwork, ldb);
- sgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
- wwork, ldb, &result[1]);
-
- /* Check solution from generated exact
- solution. */
- sgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
- &result[2]);
-
- /* Check the error bounds from iterative
- refinement. */
- sgst07(trans, n, nrhs, &ASAV, bsav, ldb,
- solx, ldx, xact, ldx, ferr, berr,
- &result[3]);
-
- /* Print information about the tests that did
- not pass the threshold. */
- for (i = k1; i < NTESTS; ++i) {
- if ( result[i] >= THRESH ) {
- printf(FMT2, "sgssvx",
- options.Fact, trans, *equed,
- n, imat, i, result[i]);
- ++nfail;
- }
- }
- nrun += NTESTS;
- } /* if .. info == 0 */
- } /* else .. end of testing sgssvx */
-
- } /* for itran ... */
-
- if ( lwork == 0 ) {
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
-
- } /* for equil ... */
- } /* for ifact ... */
- } /* for iequed ... */
-#if 0
- if ( !info ) {
- PrintPerf(&L, &U, &mem_usage, rpg, rcond, ferr, berr, equed);
- }
-#endif
-
- } /* for imat ... */
-
- /* Print a summary of the results. */
- PrintSumm("SGE", nfail, nrun, nerrs);
-
- SUPERLU_FREE (rhsb);
- SUPERLU_FREE (bsav);
- SUPERLU_FREE (solx);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (etree);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- SUPERLU_FREE (pc_save);
- SUPERLU_FREE (R);
- SUPERLU_FREE (C);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- SUPERLU_FREE (rwork);
- SUPERLU_FREE (wwork);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- Destroy_CompCol_Matrix(&A);
- Destroy_CompCol_Matrix(&ASAV);
- if ( lwork > 0 ) {
- SUPERLU_FREE (work);
- Destroy_SuperMatrix_Store(&L);
- Destroy_SuperMatrix_Store(&U);
- }
- StatFree(&stat);
-
- return 0;
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-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, double *u)
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "ht:n:w:r:s:m:b:c:l:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-w <int> - panel size\n");
- printf("\t-r <int> - granularity of relaxed supernodes\n");
- exit(1);
- break;
- case 't': strcpy(matrix_type, optarg);
- break;
- case 'n': *n = atoi(optarg);
- break;
- case 'w': *w = atoi(optarg);
- break;
- case 'r': *relax = atoi(optarg);
- break;
- case 's': *nrhs = atoi(optarg);
- break;
- case 'm': *maxsuper = atoi(optarg);
- break;
- case 'b': *rowblk = atoi(optarg);
- break;
- case 'c': *colblk = atoi(optarg);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- }
- }
-}
diff --git a/TESTING/sgst01.c b/TESTING/sgst01.c
deleted file mode 100644
index 1930d01..0000000
--- a/TESTING/sgst01.c
+++ /dev/null
@@ -1,166 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-#include <math.h>
-#include "slu_sdefs.h"
-
-int sgst01(int m, int n, SuperMatrix *A, SuperMatrix *L,
- SuperMatrix *U, int *perm_c, int *perm_r, float *resid)
-{
-/*
- Purpose
- =======
-
- 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.
-
- Arguments
- ==========
-
- M (input) INT
- The number of rows of the matrix A. M >= 0.
-
- N (input) INT
- The number of columns of the matrix A. N >= 0.
-
- A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
- The original M x N matrix A.
-
- L (input) SuperMatrix *, dimension (L->nrow, L->ncol)
- The factor matrix 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.
-
- RESID (output) FLOAT*
- norm(L*U - A) / ( N * norm(A) * EPS )
-
- =====================================================================
-*/
-
- /* Local variables */
- float zero = 0.0;
- int i, j, k, arow, lptr,isub, urow, superno, fsupc, u_part;
- float utemp, comp_temp;
- float anorm, tnorm, cnorm;
- float eps;
- float *work;
- SCformat *Lstore;
- NCformat *Astore, *Ustore;
- float *Aval, *Lval, *Uval;
- int *colbeg, *colend;
-
- /* Function prototypes */
- extern float slangs(char *, SuperMatrix *);
-
- /* Quick exit if M = 0 or N = 0. */
-
- if (m <= 0 || n <= 0) {
- *resid = 0.f;
- return 0;
- }
-
- work = (float *)floatCalloc(m);
-
- Astore = A->Store;
- Aval = Astore->nzval;
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
-
- /* Determine EPS and the norm of A. */
- eps = slamch_("Epsilon");
- anorm = slangs("1", A);
- cnorm = 0.;
-
- /* Compute the product L*U, one column at a time */
- for (k = 0; k < n; ++k) {
-
- /* The U part outside the rectangular supernode */
- for (i = U_NZ_START(k); i < U_NZ_START(k+1); ++i) {
- urow = U_SUB(i);
- utemp = Uval[i];
- superno = Lstore->col_to_sup[urow];
- fsupc = L_FST_SUPC(superno);
- u_part = urow - fsupc + 1;
- lptr = L_SUB_START(fsupc) + u_part;
- work[L_SUB(lptr-1)] -= utemp; /* L_ii = 1 */
- for (j = L_NZ_START(urow) + u_part; j < L_NZ_START(urow+1); ++j) {
- isub = L_SUB(lptr);
- work[isub] -= Lval[j] * utemp;
- ++lptr;
- }
- }
-
- /* The U part inside the rectangular supernode */
- superno = Lstore->col_to_sup[k];
- fsupc = L_FST_SUPC(superno);
- urow = L_NZ_START(k);
- for (i = fsupc; i <= k; ++i) {
- utemp = Lval[urow++];
- u_part = i - fsupc + 1;
- lptr = L_SUB_START(fsupc) + u_part;
- work[L_SUB(lptr-1)] -= utemp; /* L_ii = 1 */
- for (j = L_NZ_START(i)+u_part; j < L_NZ_START(i+1); ++j) {
- isub = L_SUB(lptr);
- work[isub] -= Lval[j] * utemp;
- ++lptr;
- }
- }
-
- /* 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];
- }
-
- /* Now compute the 1-norm of the column vector work */
- tnorm = 0.;
- for (i = 0; i < m; ++i) {
- tnorm += fabs(work[i]);
- work[i] = zero;
- }
- cnorm = SUPERLU_MAX(tnorm, cnorm);
- }
-
- *resid = cnorm;
-
- if (anorm <= 0.f) {
- if (*resid != 0.f) {
- *resid = 1.f / eps;
- }
- } else {
- *resid = *resid / (float) n / anorm / eps;
- }
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(colbeg);
- SUPERLU_FREE(colend);
- return 0;
-
-/* End of SGST01 */
-
-} /* sgst01_ */
-
diff --git a/TESTING/sgst02.c b/TESTING/sgst02.c
deleted file mode 100644
index f518e21..0000000
--- a/TESTING/sgst02.c
+++ /dev/null
@@ -1,138 +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_sdefs.h"
-
-int sgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
- float *x, int ldx, float *b, int ldb, float *resid)
-{
-/*
- Purpose
- =======
-
- 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.
-
- Arguments
- =========
-
- TRANS (input) trans_t
- Specifies the form of the system of equations:
- = NOTRANS: A *x = b
- = TRANS : A'*x = b, where A' is the transpose of A
- = CONJ : A'*x = b, where A' is the transpose of A
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- NRHS (input) INTEGER
- The number of columns of B, the matrix of right hand sides.
- NRHS >= 0.
-
- A (input) SuperMatrix*, dimension (LDA,N)
- The original M x N sparse matrix A.
-
- X (input) FLOAT PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors for the system of linear
- equations.
-
- LDX (input) INTEGER
- The leading dimension of the array X. If TRANS = NOTRANS,
- LDX >= max(1,N); if TRANS = TRANS or CONJ, LDX >= max(1,M).
-
- B (input/output) FLOAT PRECISION array, dimension (LDB,NRHS)
- On entry, the right hand side vectors for the system of
- linear equations.
- On exit, B is overwritten with the difference B - A*X.
-
- LDB (input) INTEGER
- The leading dimension of the array B. IF TRANS = NOTRANS,
- LDB >= max(1,M); if TRANS = TRANS or CONJ, LDB >= max(1,N).
-
- RESID (output) FLOAT PRECISION
- The maximum over the number of right hand sides of
- norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
-
- =====================================================================
-*/
-
- /* Table of constant values */
- float alpha = -1.;
- float beta = 1.;
- int c__1 = 1;
-
- /* System generated locals */
- float d__1, d__2;
-
- /* Local variables */
- int j;
- int n1, n2;
- float anorm, bnorm;
- float xnorm;
- float eps;
- char transc[1];
-
- /* Function prototypes */
- extern int lsame_(char *, char *);
- extern float slangs(char *, SuperMatrix *);
- extern float sasum_(int *, float *, int *);
-
- /* Function Body */
- if ( m <= 0 || n <= 0 || nrhs == 0) {
- *resid = 0.;
- return 0;
- }
-
- if ( (trans == TRANS) || (trans == CONJ) ) {
- n1 = n;
- n2 = m;
- *transc = 'T';
- } else {
- n1 = m;
- n2 = n;
- *transc = 'N';
- }
-
- /* Exit with RESID = 1/EPS if ANORM = 0. */
-
- eps = slamch_("Epsilon");
- anorm = slangs("1", A);
- if (anorm <= 0.) {
- *resid = 1. / eps;
- return 0;
- }
-
- /* Compute B - A*X (or B - A'*X ) and store in B. */
-
- sp_sgemm(transc, "N", n1, nrhs, n2, alpha, A, x, ldx, beta, b, ldb);
-
- /* Compute the maximum over the number of right hand sides of
- norm(B - A*X) / ( norm(A) * norm(X) * EPS ) . */
-
- *resid = 0.;
- for (j = 0; j < nrhs; ++j) {
- bnorm = sasum_(&n1, &b[j*ldb], &c__1);
- xnorm = sasum_(&n2, &x[j*ldx], &c__1);
- if (xnorm <= 0.) {
- *resid = 1. / eps;
- } else {
- /* Computing MAX */
- d__1 = *resid, d__2 = bnorm / anorm / xnorm / eps;
- *resid = SUPERLU_MAX(d__1, d__2);
- }
- }
-
- return 0;
-
-} /* sgst02 */
-
diff --git a/TESTING/sgst04.c b/TESTING/sgst04.c
deleted file mode 100644
index d7c46c7..0000000
--- a/TESTING/sgst04.c
+++ /dev/null
@@ -1,120 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-#include <math.h>
-#include "slu_sdefs.h"
-
-int sgst04(int n, int nrhs, float *x, int ldx, float *xact,
- int ldxact, float rcond, float *resid)
-{
-/*
- Purpose
- =======
-
- 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
- machine epsilon.
-
- Arguments
- =========
-
- N (input) INT
- The number of rows of the matrices X and XACT. N >= 0.
-
- NRHS (input) INT
- The number of columns of the matrices X and XACT. NRHS >= 0.
-
- X (input) FLOAT PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors. Each vector is stored as a
- column of the matrix X.
-
- LDX (input) INT
- The leading dimension of the array X. LDX >= max(1,N).
-
- XACT (input) FLOAT PRECISION array, dimension( LDX, NRHS )
- The exact solution vectors. Each vector is stored as a
- column of the matrix XACT.
-
- LDXACT (input) INT
- The leading dimension of the array XACT. LDXACT >= max(1,N).
-
- RCOND (input) FLOAT PRECISION
- The reciprocal of the condition number of the coefficient
- matrix in the system of equations.
-
- RESID (output) FLOAT PRECISION
- The maximum over the NRHS solution vectors of
- ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS )
-
- =====================================================================
-*/
- /* Table of constant values */
- int c__1 = 1;
-
- /* System generated locals */
- float d__1, d__2, d__3, d__4;
-
- /* Local variables */
- int i, j, n__1;
- int ix;
- float xnorm;
- float eps;
- float diffnm;
-
- /* Function prototypes */
- extern int isamax_(int *, float *, int *);
-
- /* Quick exit if N = 0 or NRHS = 0. */
- if ( n <= 0 || nrhs <= 0 ) {
- *resid = 0.;
- return 0;
- }
-
- /* Exit with RESID = 1/EPS if RCOND is invalid. */
-
- eps = slamch_("Epsilon");
- if ( rcond < 0. ) {
- *resid = 1. / eps;
- return 0;
- }
-
- /* Compute the maximum of norm(X - XACT) / ( norm(XACT) * EPS )
- over all the vectors X and XACT . */
-
- *resid = 0.;
- for (j = 0; j < nrhs; ++j) {
- n__1 = n;
- ix = isamax_(&n__1, &xact[j*ldxact], &c__1);
- xnorm = (d__1 = xact[ix-1 + j*ldxact], fabs(d__1));
-
- diffnm = 0.;
- for (i = 0; i < n; ++i) {
- /* Computing MAX */
- d__3 = diffnm;
- d__4 = (d__1 = x[i+j*ldx]-xact[i+j*ldxact], fabs(d__1));
- diffnm = SUPERLU_MAX(d__3,d__4);
- }
- if (xnorm <= 0.) {
- if (diffnm > 0.) {
- *resid = 1. / eps;
- }
- } else {
- /* Computing MAX */
- d__1 = *resid, d__2 = diffnm / xnorm * rcond;
- *resid = SUPERLU_MAX(d__1,d__2);
- }
- }
- if (*resid * eps < 1.) {
- *resid /= eps;
- }
-
- return 0;
-
-} /* sgst04_ */
diff --git a/TESTING/sgst07.c b/TESTING/sgst07.c
deleted file mode 100644
index 8317999..0000000
--- a/TESTING/sgst07.c
+++ /dev/null
@@ -1,218 +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 <math.h>
-#include "slu_sdefs.h"
-
-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)
-{
-/*
- Purpose
- =======
-
- 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.
-
- RESLTS(1) = test of the error bound
- = norm(X - XACT) / ( norm(X) * FERR )
- A large value is returned if this ratio is not less than one.
-
- RESLTS(2) = residual from the iterative refinement routine
- = the maximum of BERR / ( (n+1)*EPS + (*) ), where
- (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
-
- Arguments
- =========
-
- TRANS (input) trans_t
- Specifies the form of the system of equations.
- = NOTRANS: A *x = b
- = TRANS : A'*x = b, where A' is the transpose of A
- = CONJ : A'*x = b, where A' is the transpose of A
-
- N (input) INT
- The number of rows of the matrices X and XACT. N >= 0.
-
- NRHS (input) INT
- The number of columns of the matrices X and XACT. NRHS >= 0.
-
-
- A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
- The original n by n matrix A.
-
- B (input) FLOAT PRECISION array, dimension (LDB,NRHS)
- The right hand side vectors for the system of linear
- equations.
-
- LDB (input) INT
- The leading dimension of the array B. LDB >= max(1,N).
-
- X (input) FLOAT PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors. Each vector is stored as a
- column of the matrix X.
-
- LDX (input) INT
- The leading dimension of the array X. LDX >= max(1,N).
-
- XACT (input) FLOAT PRECISION array, dimension (LDX,NRHS)
- The exact solution vectors. Each vector is stored as a
- column of the matrix XACT.
-
- LDXACT (input) INT
- The leading dimension of the array XACT. LDXACT >= max(1,N).
-
-
- FERR (input) FLOAT PRECISION array, dimension (NRHS)
- The estimated forward error bounds for each solution vector
- X. If XTRUE is the true solution, FERR bounds the magnitude
- of the largest entry in (X - XTRUE) divided by the magnitude
- of the largest entry in X.
-
- BERR (input) FLOAT PRECISION array, dimension (NRHS)
- The componentwise relative backward error of each solution
- vector (i.e., the smallest relative change in any entry of A
-
- or B that makes X an exact solution).
-
- RESLTS (output) FLOAT PRECISION array, dimension (2)
- The maximum over the NRHS solution vectors of the ratios:
- RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
- RESLTS(2) = BERR / ( (n+1)*EPS + (*) )
-
- =====================================================================
-*/
-
- /* Table of constant values */
- int c__1 = 1;
-
- /* System generated locals */
- float d__1, d__2;
-
- /* Local variables */
- float diff, axbi;
- int imax, irow, n__1;
- int i, j, k;
- float unfl, ovfl;
- float xnorm;
- float errbnd;
- int notran;
- float eps, tmp;
- float *rwork;
- float *Aval;
- NCformat *Astore;
-
- /* Function prototypes */
- extern int lsame_(char *, char *);
- extern int isamax_(int *, float *, int *);
-
-
- /* Quick exit if N = 0 or NRHS = 0. */
- if ( n <= 0 || nrhs <= 0 ) {
- reslts[0] = 0.;
- reslts[1] = 0.;
- return 0;
- }
-
- eps = slamch_("Epsilon");
- unfl = slamch_("Safe minimum");
- ovfl = 1. / unfl;
- notran = (trans == NOTRANS);
-
- rwork = (float *) SUPERLU_MALLOC(n*sizeof(float));
- if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
- Astore = A->Store;
- Aval = (float *) Astore->nzval;
-
- /* Test 1: Compute the maximum of
- norm(X - XACT) / ( norm(X) * FERR )
- over all the vectors X and XACT using the infinity-norm. */
-
- errbnd = 0.;
- for (j = 0; j < nrhs; ++j) {
- n__1 = n;
- imax = isamax_(&n__1, &x[j*ldx], &c__1);
- d__1 = fabs(x[imax-1 + j*ldx]);
- xnorm = SUPERLU_MAX(d__1,unfl);
- diff = 0.;
- for (i = 0; i < n; ++i) {
- d__1 = fabs(x[i+j*ldx] - xact[i+j*ldxact]);
- diff = SUPERLU_MAX(diff, d__1);
- }
-
- if (xnorm > 1.) {
- goto L20;
- } else if (diff <= ovfl * xnorm) {
- goto L20;
- } else {
- errbnd = 1. / eps;
- goto L30;
- }
-
-L20:
-#if 0
- if (diff / xnorm <= ferr[j]) {
- d__1 = diff / xnorm / ferr[j];
- errbnd = SUPERLU_MAX(errbnd,d__1);
- } else {
- errbnd = 1. / eps;
- }
-#endif
- d__1 = diff / xnorm / ferr[j];
- errbnd = SUPERLU_MAX(errbnd,d__1);
- /*printf("Ferr: %f\n", errbnd);*/
-L30:
- ;
- }
- reslts[0] = errbnd;
-
- /* Test 2: Compute the maximum of BERR / ( (n+1)*EPS + (*) ), where
- (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) + abs(b))_i ) */
-
- for (k = 0; k < nrhs; ++k) {
- for (i = 0; i < n; ++i)
- rwork[i] = fabs( b[i + k*ldb] );
- if ( notran ) {
- for (j = 0; j < n; ++j) {
- tmp = fabs( x[j + k*ldx] );
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- rwork[Astore->rowind[i]] += fabs(Aval[i]) * tmp;
- }
- }
- } else {
- for (j = 0; j < n; ++j) {
- tmp = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- d__1 = fabs( x[irow + k*ldx] );
- tmp += fabs(Aval[i]) * d__1;
- }
- rwork[j] += tmp;
- }
- }
-
- axbi = rwork[0];
- for (i = 1; i < n; ++i) axbi = SUPERLU_MIN(axbi, rwork[i]);
-
- /* Computing MAX */
- d__1 = axbi, d__2 = (n + 1) * unfl;
- tmp = berr[k] / ((n + 1) * eps + (n + 1) * unfl / SUPERLU_MAX(d__1,d__2));
-
- if (k == 0) {
- reslts[1] = tmp;
- } else {
- reslts[1] = SUPERLU_MAX(reslts[1],tmp);
- }
- }
-
- SUPERLU_FREE(rwork);
- return 0;
-
-} /* sgst07 */
diff --git a/TESTING/sp_cconvert.c b/TESTING/sp_cconvert.c
deleted file mode 100644
index 243400d..0000000
--- a/TESTING/sp_cconvert.c
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-
-#include "slu_cdefs.h"
-
-/*
- * Convert a full matrix into a sparse matrix format.
- */
-int
-sp_cconvert(int m, int n, complex *A, int lda, int kl, int ku,
- complex *a, int *asub, int *xa, int *nnz)
-{
- int lasta = 0;
- int i, j, ilow, ihigh;
- int *row;
- complex *val;
-
- for (j = 0; j < n; ++j) {
- xa[j] = lasta;
- val = &a[xa[j]];
- row = &asub[xa[j]];
-
- ilow = SUPERLU_MAX(0, j - ku);
- ihigh = SUPERLU_MIN(n-1, j + kl);
- for (i = ilow; i <= ihigh; ++i) {
- val[i-ilow] = A[i + j*lda];
- row[i-ilow] = i;
- }
- lasta += ihigh - ilow + 1;
- }
-
- xa[n] = *nnz = lasta;
- return 0;
-}
-
-
diff --git a/TESTING/sp_dconvert.c b/TESTING/sp_dconvert.c
deleted file mode 100644
index dec3b32..0000000
--- a/TESTING/sp_dconvert.c
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-
-#include "slu_ddefs.h"
-
-/*
- * Convert a full matrix into a sparse matrix format.
- */
-int
-sp_dconvert(int m, int n, double *A, int lda, int kl, int ku,
- double *a, int *asub, int *xa, int *nnz)
-{
- int lasta = 0;
- int i, j, ilow, ihigh;
- int *row;
- double *val;
-
- for (j = 0; j < n; ++j) {
- xa[j] = lasta;
- val = &a[xa[j]];
- row = &asub[xa[j]];
-
- ilow = SUPERLU_MAX(0, j - ku);
- ihigh = SUPERLU_MIN(n-1, j + kl);
- for (i = ilow; i <= ihigh; ++i) {
- val[i-ilow] = A[i + j*lda];
- row[i-ilow] = i;
- }
- lasta += ihigh - ilow + 1;
- }
-
- xa[n] = *nnz = lasta;
- return 0;
-}
-
-
diff --git a/TESTING/sp_ienv.c b/TESTING/sp_ienv.c
deleted file mode 100644
index 4366812..0000000
--- a/TESTING/sp_ienv.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * File name: sp_ienv.c
- * History: Modified from lapack routine ILAENV
- */
-#include "slu_Cnames.h"
-
-int
-sp_ienv(int ispec)
-{
-/*
- Purpose
- =======
-
- sp_ienv() is inquired to choose machine-dependent parameters for the
- local environment. See ISPEC for a description of the parameters.
-
- 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.
-
- Arguments
- =========
-
- 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 the their row structures.
- = 3: the maximum size for a supernode;
- = 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;
-
- (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.
-
- =====================================================================
-*/
-
- switch (ispec) {
- case 1: return (3);
- case 2: return (2);
- case 3: return (10);
- case 4: return (20);
- case 5: return (10);
- case 6: return (2);
- }
-
- /* Invalid value for ISPEC */
- return (-1);
-
-} /* sp_ienv_ */
diff --git a/TESTING/sp_sconvert.c b/TESTING/sp_sconvert.c
deleted file mode 100644
index 0b35d78..0000000
--- a/TESTING/sp_sconvert.c
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-
-#include "slu_sdefs.h"
-
-/*
- * Convert a full matrix into a sparse matrix format.
- */
-int
-sp_sconvert(int m, int n, float *A, int lda, int kl, int ku,
- float *a, int *asub, int *xa, int *nnz)
-{
- int lasta = 0;
- int i, j, ilow, ihigh;
- int *row;
- float *val;
-
- for (j = 0; j < n; ++j) {
- xa[j] = lasta;
- val = &a[xa[j]];
- row = &asub[xa[j]];
-
- ilow = SUPERLU_MAX(0, j - ku);
- ihigh = SUPERLU_MIN(n-1, j + kl);
- for (i = ilow; i <= ihigh; ++i) {
- val[i-ilow] = A[i + j*lda];
- row[i-ilow] = i;
- }
- lasta += ihigh - ilow + 1;
- }
-
- xa[n] = *nnz = lasta;
- return 0;
-}
-
-
diff --git a/TESTING/sp_zconvert.c b/TESTING/sp_zconvert.c
deleted file mode 100644
index 4e1d17e..0000000
--- a/TESTING/sp_zconvert.c
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-
-#include "slu_zdefs.h"
-
-/*
- * Convert a full matrix into a sparse matrix format.
- */
-int
-sp_zconvert(int m, int n, doublecomplex *A, int lda, int kl, int ku,
- doublecomplex *a, int *asub, int *xa, int *nnz)
-{
- int lasta = 0;
- int i, j, ilow, ihigh;
- int *row;
- doublecomplex *val;
-
- for (j = 0; j < n; ++j) {
- xa[j] = lasta;
- val = &a[xa[j]];
- row = &asub[xa[j]];
-
- ilow = SUPERLU_MAX(0, j - ku);
- ihigh = SUPERLU_MIN(n-1, j + kl);
- for (i = ilow; i <= ihigh; ++i) {
- val[i-ilow] = A[i + j*lda];
- row[i-ilow] = i;
- }
- lasta += ihigh - ilow + 1;
- }
-
- xa[n] = *nnz = lasta;
- return 0;
-}
-
-
diff --git a/TESTING/stest.csh b/TESTING/stest.csh
deleted file mode 100644
index 001aea2..0000000
--- a/TESTING/stest.csh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/csh
-
-set ofile = stest.out # output file
-if ( -e $ofile ) then
- rm -f $ofile
-endif
-echo "Single-precision testing output" > $ofile
-
-set MATRICES = (LAPACK g20.rua)
-set NVAL = (9 19)
-set NRHS = (5)
-set LWORK = (0 10000000)
-
-#
-# Loop through all matrices ...
-#
-foreach m ($MATRICES)
-
- #--------------------------------------------
- # Test matrix types generated in LAPACK-style
- #--------------------------------------------
- if ($m == 'LAPACK') then
- echo '== LAPACK test matrices' >> $ofile
- foreach n ($NVAL)
- foreach s ($NRHS)
- foreach l ($LWORK)
- echo '' >> $ofile
- echo 'n='$n 'nrhs='$s 'lwork='$l >> $ofile
- ./stest -t "LA" -l $l -n $n -s $s >> $ofile
- end
- end
- end
- #--------------------------------------------
- # Test a specified sparse matrix
- #--------------------------------------------
- else
- echo '' >> $ofile
- echo '== sparse matrix:' $m >> $ofile
- foreach s ($NRHS)
- foreach l ($LWORK)
- echo '' >> $ofile
- echo 'nrhs='$s 'lwork='$l >> $ofile
- ./stest -t "SP" -s $s -l $l < ../EXAMPLE/$m >> $ofile
- end
- end
- endif
-
-end
-
-
diff --git a/TESTING/zdrive.c b/TESTING/zdrive.c
deleted file mode 100644
index 9eaa425..0000000
--- a/TESTING/zdrive.c
+++ /dev/null
@@ -1,544 +0,0 @@
-
-/*
- * -- SuperLU routine (version 3.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * October 15, 2003
- *
- */
-/*
- * File name: zdrive.c
- * Purpose: MAIN test program
- */
-#include <string.h>
-#include "slu_zdefs.h"
-
-#define NTESTS 5 /* Number of test types */
-#define NTYPES 11 /* Number of matrix types */
-#define NTRAN 2
-#define THRESH 20.0
-#define FMT1 "%10s:n=%d, test(%d)=%12.5g\n"
-#define FMT2 "%10s:fact=%4d, trans=%4d, equed=%c, n=%d, imat=%d, test(%d)=%12.5g\n"
-#define FMT3 "%10s:info=%d, izero=%d, n=%d, nrhs=%d, imat=%d, nfail=%d\n"
-
-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, double *u);
-
-main(int argc, char *argv[])
-{
-/*
- * Purpose
- * =======
- *
- * ZDRIVE is the main test program for the DOUBLE COMPLEX linear
- * equation driver routines ZGSSV and ZGSSVX.
- *
- * The program is invoked by a shell script file -- ztest.csh.
- * The output from the tests are written into a file -- ztest.out.
- *
- * =====================================================================
- */
- doublecomplex *a, *a_save;
- int *asub, *asub_save;
- int *xa, *xa_save;
- SuperMatrix A, B, X, L, U;
- SuperMatrix ASAV, AC;
- mem_usage_t mem_usage;
- int *perm_r; /* row permutation from partial pivoting */
- int *perm_c, *pc_save; /* column permutation */
- int *etree;
- doublecomplex zero = {0.0, 0.0};
- double *R, *C;
- double *ferr, *berr;
- double *rwork;
- doublecomplex *wwork;
- void *work;
- int info, lwork, nrhs, panel_size, relax;
- int m, n, nnz;
- doublecomplex *xact;
- doublecomplex *rhsb, *solx, *bsav;
- int ldb, ldx;
- double rpg, rcond;
- int i, j, k1;
- double rowcnd, colcnd, amax;
- int maxsuper, rowblk, colblk;
- int prefact, nofact, equil, iequed;
- int nt, nrun, nfail, nerrs, imat, fimat, nimat;
- int nfact, ifact, itran;
- int kl, ku, mode, lda;
- int zerot, izero, ioff;
- double u;
- double anorm, cndnum;
- doublecomplex *Afull;
- double result[NTESTS];
- superlu_options_t options;
- fact_t fact;
- trans_t trans;
- SuperLUStat_t stat;
- static char matrix_type[8];
- static char equed[1], path[4], sym[1], dist[1];
-
- /* Fixed set of parameters */
- int iseed[] = {1988, 1989, 1990, 1991};
- static char equeds[] = {'N', 'R', 'C', 'B'};
- static fact_t facts[] = {FACTORED, DOFACT, SamePattern,
- SamePattern_SameRowPerm};
- static trans_t transs[] = {NOTRANS, TRANS, CONJ};
-
- /* Some function prototypes */
- 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 *,
- double *, int *, double *, char *);
- extern int zlatms_(int *, int *, char *, int *, char *, double *d,
- int *, double *, double *, int *, int *,
- char *, doublecomplex *, int *, doublecomplex *, int *);
- extern int sp_zconvert(int, int, doublecomplex *, int, int, int,
- doublecomplex *a, int *, int *, int *);
-
-
- /* Executable statements */
-
- strcpy(path, "ZGE");
- nrun = 0;
- nfail = 0;
- nerrs = 0;
-
- /* Defaults */
- lwork = 0;
- n = 1;
- nrhs = 1;
- panel_size = sp_ienv(1);
- relax = sp_ienv(2);
- u = 1.0;
- strcpy(matrix_type, "LA");
- parse_command_line(argc, argv, matrix_type, &n,
- &panel_size, &relax, &nrhs, &maxsuper,
- &rowblk, &colblk, &lwork, &u);
- if ( lwork > 0 ) {
- work = SUPERLU_MALLOC(lwork);
- if ( !work ) {
- fprintf(stderr, "expert: cannot allocate %d bytes\n", lwork);
- exit (-1);
- }
- }
-
- /* Set the default input options. */
- set_default_options(&options);
- options.DiagPivotThresh = u;
- options.PrintStat = NO;
- options.PivotGrowth = YES;
- options.ConditionNumber = YES;
- options.IterRefine = SLU_DOUBLE;
-
- if ( strcmp(matrix_type, "LA") == 0 ) {
- /* Test LAPACK matrix suite. */
- m = n;
- lda = SUPERLU_MAX(n, 1);
- nnz = n * n; /* upper bound */
- fimat = 1;
- nimat = NTYPES;
- Afull = doublecomplexCalloc(lda * n);
- zallocateA(n, nnz, &a, &asub, &xa);
- } else {
- /* Read a sparse matrix */
- fimat = nimat = 0;
- zreadhb(&m, &n, &nnz, &a, &asub, &xa);
- }
-
- zallocateA(n, nnz, &a_save, &asub_save, &xa_save);
- rhsb = doublecomplexMalloc(m * nrhs);
- bsav = doublecomplexMalloc(m * nrhs);
- solx = doublecomplexMalloc(n * nrhs);
- ldb = m;
- ldx = n;
- zCreate_Dense_Matrix(&B, m, nrhs, rhsb, ldb, SLU_DN, SLU_Z, SLU_GE);
- zCreate_Dense_Matrix(&X, n, nrhs, solx, ldx, SLU_DN, SLU_Z, SLU_GE);
- xact = doublecomplexMalloc(n * nrhs);
- etree = intMalloc(n);
- perm_r = intMalloc(n);
- perm_c = intMalloc(n);
- pc_save = intMalloc(n);
- R = (double *) SUPERLU_MALLOC(m*sizeof(double));
- C = (double *) SUPERLU_MALLOC(n*sizeof(double));
- ferr = (double *) SUPERLU_MALLOC(nrhs*sizeof(double));
- berr = (double *) SUPERLU_MALLOC(nrhs*sizeof(double));
- j = SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs);
- rwork = (double *) SUPERLU_MALLOC(j*sizeof(double));
- for (i = 0; i < j; ++i) rwork[i] = 0.;
- if ( !R ) ABORT("SUPERLU_MALLOC fails for R");
- if ( !C ) ABORT("SUPERLU_MALLOC fails for C");
- if ( !ferr ) ABORT("SUPERLU_MALLOC fails for ferr");
- if ( !berr ) ABORT("SUPERLU_MALLOC fails for berr");
- if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
- wwork = doublecomplexCalloc( SUPERLU_MAX(m,n) * SUPERLU_MAX(4,nrhs) );
-
- for (i = 0; i < n; ++i) perm_c[i] = pc_save[i] = i;
- options.ColPerm = MY_PERMC;
-
- for (imat = fimat; imat <= nimat; ++imat) { /* All matrix types */
-
- if ( imat ) {
-
- /* Skip types 5, 6, or 7 if the matrix size is too small. */
- zerot = (imat >= 5 && imat <= 7);
- if ( zerot && n < imat-4 )
- continue;
-
- /* Set up parameters with ZLATB4 and generate a test matrix
- with ZLATMS. */
- zlatb4_(path, &imat, &n, &n, sym, &kl, &ku, &anorm, &mode,
- &cndnum, dist);
-
- zlatms_(&n, &n, dist, iseed, sym, &rwork[0], &mode, &cndnum,
- &anorm, &kl, &ku, "No packing", Afull, &lda,
- &wwork[0], &info);
-
- if ( info ) {
- printf(FMT3, "ZLATMS", info, izero, n, nrhs, imat, nfail);
- continue;
- }
-
- /* For types 5-7, zero one or more columns of the matrix
- to test that INFO is returned correctly. */
- if ( zerot ) {
- if ( imat == 5 ) izero = 1;
- else if ( imat == 6 ) izero = n;
- else izero = n / 2 + 1;
- ioff = (izero - 1) * lda;
- if ( imat < 7 ) {
- for (i = 0; i < n; ++i) Afull[ioff + i] = zero;
- } else {
- for (j = 0; j < n - izero + 1; ++j)
- for (i = 0; i < n; ++i)
- Afull[ioff + i + j*lda] = zero;
- }
- } else {
- izero = 0;
- }
-
- /* Convert to sparse representation. */
- sp_zconvert(n, n, Afull, lda, kl, ku, a, asub, xa, &nnz);
-
- } else {
- izero = 0;
- zerot = 0;
- }
-
- zCreate_CompCol_Matrix(&A, m, n, nnz, a, asub, xa, SLU_NC, SLU_Z, SLU_GE);
-
- /* Save a copy of matrix A in ASAV */
- zCreate_CompCol_Matrix(&ASAV, m, n, nnz, a_save, asub_save, xa_save,
- SLU_NC, SLU_Z, SLU_GE);
- zCopy_CompCol_Matrix(&A, &ASAV);
-
- /* Form exact solution. */
- zGenXtrue(n, nrhs, xact, ldx);
-
- StatInit(&stat);
-
- for (iequed = 0; iequed < 4; ++iequed) {
- *equed = equeds[iequed];
- if (iequed == 0) nfact = 4;
- else nfact = 1; /* Only test factored, pre-equilibrated matrix */
-
- for (ifact = 0; ifact < nfact; ++ifact) {
- fact = facts[ifact];
- options.Fact = fact;
-
- for (equil = 0; equil < 2; ++equil) {
- options.Equil = equil;
- prefact = ( options.Fact == FACTORED ||
- options.Fact == SamePattern_SameRowPerm );
- /* Need a first factor */
- nofact = (options.Fact != FACTORED); /* Not factored */
-
- /* Restore the matrix A. */
- zCopy_CompCol_Matrix(&ASAV, &A);
-
- if ( zerot ) {
- if ( prefact ) continue;
- } else if ( options.Fact == FACTORED ) {
- if ( equil || iequed ) {
- /* Compute row and column scale factors to
- equilibrate matrix A. */
- zgsequ(&A, R, C, &rowcnd, &colcnd, &amax, &info);
-
- /* Force equilibration. */
- if ( !info && n > 0 ) {
- if ( lsame_(equed, "R") ) {
- rowcnd = 0.;
- colcnd = 1.;
- } else if ( lsame_(equed, "C") ) {
- rowcnd = 1.;
- colcnd = 0.;
- } else if ( lsame_(equed, "B") ) {
- rowcnd = 0.;
- colcnd = 0.;
- }
- }
-
- /* Equilibrate the matrix. */
- zlaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
- }
- }
-
- if ( prefact ) { /* Need a factor for the first time */
-
- /* Save Fact option. */
- fact = options.Fact;
- options.Fact = DOFACT;
-
- /* Preorder the matrix, obtain the column etree. */
- sp_preorder(&options, &A, perm_c, etree, &AC);
-
- /* Factor the matrix AC. */
- zgstrf(&options, &AC, relax, panel_size,
- etree, work, lwork, perm_c, perm_r, &L, &U,
- &stat, &info);
-
- if ( info ) {
- printf("** First factor: info %d, equed %c\n",
- info, *equed);
- if ( lwork == -1 ) {
- printf("** Estimated memory: %d bytes\n",
- info - n);
- exit(0);
- }
- }
-
- Destroy_CompCol_Permuted(&AC);
-
- /* Restore Fact option. */
- options.Fact = fact;
- } /* if .. first time factor */
-
- for (itran = 0; itran < NTRAN; ++itran) {
- trans = transs[itran];
- options.Trans = trans;
-
- /* Restore the matrix A. */
- zCopy_CompCol_Matrix(&ASAV, &A);
-
- /* Set the right hand side. */
- zFillRHS(trans, nrhs, xact, ldx, &A, &B);
- zCopy_Dense_Matrix(m, nrhs, rhsb, ldb, bsav, ldb);
-
- /*----------------
- * Test zgssv
- *----------------*/
- if ( options.Fact == DOFACT && itran == 0) {
- /* Not yet factored, and untransposed */
-
- zCopy_Dense_Matrix(m, nrhs, rhsb, ldb, solx, ldx);
- zgssv(&options, &A, perm_c, perm_r, &L, &U, &X,
- &stat, &info);
-
- if ( info && info != izero ) {
- printf(FMT3, "zgssv",
- info, izero, n, nrhs, imat, nfail);
- } else {
- /* Reconstruct matrix from factors and
- compute residual. */
- 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);
- zgst02(trans, m, n, nrhs, &A, solx,
- ldx, wwork,ldb, &result[1]);
- nt = 2;
- }
-
- /* Print information about the tests that
- did not pass the threshold. */
- for (i = 0; i < nt; ++i) {
- if ( result[i] >= THRESH ) {
- printf(FMT1, "zgssv", n, i,
- result[i]);
- ++nfail;
- }
- }
- nrun += nt;
- } /* else .. info == 0 */
-
- /* Restore perm_c. */
- for (i = 0; i < n; ++i) perm_c[i] = pc_save[i];
-
- if (lwork == 0) {
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
- } /* if .. end of testing zgssv */
-
- /*----------------
- * Test zgssvx
- *----------------*/
-
- /* Equilibrate the matrix if fact = FACTORED and
- equed = 'R', 'C', or 'B'. */
- if ( options.Fact == FACTORED &&
- (equil || iequed) && n > 0 ) {
- zlaqgs(&A, R, C, rowcnd, colcnd, amax, equed);
- }
-
- /* Solve the system and compute the condition number
- and error bounds using zgssvx. */
- zgssvx(&options, &A, perm_c, perm_r, etree,
- equed, R, C, &L, &U, work, lwork, &B, &X, &rpg,
- &rcond, ferr, berr, &mem_usage, &stat, &info);
-
- if ( info && info != izero ) {
- printf(FMT3, "zgssvx",
- info, izero, n, nrhs, imat, nfail);
- if ( lwork == -1 ) {
- printf("** Estimated memory: %.0f bytes\n",
- mem_usage.total_needed);
- exit(0);
- }
- } else {
- if ( !prefact ) {
- /* Reconstruct matrix from factors and
- compute residual. */
- zgst01(m, n, &A, &L, &U, perm_c, perm_r,
- &result[0]);
- k1 = 0;
- } else {
- k1 = 1;
- }
-
- if ( !info ) {
- /* Compute residual of the computed solution.*/
- zCopy_Dense_Matrix(m, nrhs, bsav, ldb,
- wwork, ldb);
- zgst02(trans, m, n, nrhs, &ASAV, solx, ldx,
- wwork, ldb, &result[1]);
-
- /* Check solution from generated exact
- solution. */
- zgst04(n, nrhs, solx, ldx, xact, ldx, rcond,
- &result[2]);
-
- /* Check the error bounds from iterative
- refinement. */
- zgst07(trans, n, nrhs, &ASAV, bsav, ldb,
- solx, ldx, xact, ldx, ferr, berr,
- &result[3]);
-
- /* Print information about the tests that did
- not pass the threshold. */
- for (i = k1; i < NTESTS; ++i) {
- if ( result[i] >= THRESH ) {
- printf(FMT2, "zgssvx",
- options.Fact, trans, *equed,
- n, imat, i, result[i]);
- ++nfail;
- }
- }
- nrun += NTESTS;
- } /* if .. info == 0 */
- } /* else .. end of testing zgssvx */
-
- } /* for itran ... */
-
- if ( lwork == 0 ) {
- Destroy_SuperNode_Matrix(&L);
- Destroy_CompCol_Matrix(&U);
- }
-
- } /* for equil ... */
- } /* for ifact ... */
- } /* for iequed ... */
-#if 0
- if ( !info ) {
- PrintPerf(&L, &U, &mem_usage, rpg, rcond, ferr, berr, equed);
- }
-#endif
-
- } /* for imat ... */
-
- /* Print a summary of the results. */
- PrintSumm("ZGE", nfail, nrun, nerrs);
-
- SUPERLU_FREE (rhsb);
- SUPERLU_FREE (bsav);
- SUPERLU_FREE (solx);
- SUPERLU_FREE (xact);
- SUPERLU_FREE (etree);
- SUPERLU_FREE (perm_r);
- SUPERLU_FREE (perm_c);
- SUPERLU_FREE (pc_save);
- SUPERLU_FREE (R);
- SUPERLU_FREE (C);
- SUPERLU_FREE (ferr);
- SUPERLU_FREE (berr);
- SUPERLU_FREE (rwork);
- SUPERLU_FREE (wwork);
- Destroy_SuperMatrix_Store(&B);
- Destroy_SuperMatrix_Store(&X);
- Destroy_CompCol_Matrix(&A);
- Destroy_CompCol_Matrix(&ASAV);
- if ( lwork > 0 ) {
- SUPERLU_FREE (work);
- Destroy_SuperMatrix_Store(&L);
- Destroy_SuperMatrix_Store(&U);
- }
- StatFree(&stat);
-
- return 0;
-}
-
-/*
- * Parse command line options to get relaxed snode size, panel size, etc.
- */
-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, double *u)
-{
- int c;
- extern char *optarg;
-
- while ( (c = getopt(argc, argv, "ht:n:w:r:s:m:b:c:l:")) != EOF ) {
- switch (c) {
- case 'h':
- printf("Options:\n");
- printf("\t-w <int> - panel size\n");
- printf("\t-r <int> - granularity of relaxed supernodes\n");
- exit(1);
- break;
- case 't': strcpy(matrix_type, optarg);
- break;
- case 'n': *n = atoi(optarg);
- break;
- case 'w': *w = atoi(optarg);
- break;
- case 'r': *relax = atoi(optarg);
- break;
- case 's': *nrhs = atoi(optarg);
- break;
- case 'm': *maxsuper = atoi(optarg);
- break;
- case 'b': *rowblk = atoi(optarg);
- break;
- case 'c': *colblk = atoi(optarg);
- break;
- case 'l': *lwork = atoi(optarg);
- break;
- case 'u': *u = atof(optarg);
- break;
- }
- }
-}
diff --git a/TESTING/zgst01.c b/TESTING/zgst01.c
deleted file mode 100644
index 7f8ba8a..0000000
--- a/TESTING/zgst01.c
+++ /dev/null
@@ -1,171 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-#include <math.h>
-#include "slu_zdefs.h"
-
-int zgst01(int m, int n, SuperMatrix *A, SuperMatrix *L,
- SuperMatrix *U, int *perm_c, int *perm_r, double *resid)
-{
-/*
- Purpose
- =======
-
- 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.
-
- Arguments
- ==========
-
- M (input) INT
- The number of rows of the matrix A. M >= 0.
-
- N (input) INT
- The number of columns of the matrix A. N >= 0.
-
- A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
- The original M x N matrix A.
-
- L (input) SuperMatrix *, dimension (L->nrow, L->ncol)
- The factor matrix 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.
-
- RESID (output) DOUBLE*
- norm(L*U - A) / ( N * norm(A) * EPS )
-
- =====================================================================
-*/
-
- /* Local variables */
- doublecomplex zero = {0.0, 0.0};
- int i, j, k, arow, lptr,isub, urow, superno, fsupc, u_part;
- doublecomplex utemp, comp_temp;
- double anorm, tnorm, cnorm;
- double eps;
- doublecomplex *work;
- SCformat *Lstore;
- NCformat *Astore, *Ustore;
- doublecomplex *Aval, *Lval, *Uval;
- int *colbeg, *colend;
-
- /* Function prototypes */
- extern double zlangs(char *, SuperMatrix *);
-
- /* Quick exit if M = 0 or N = 0. */
-
- if (m <= 0 || n <= 0) {
- *resid = 0.f;
- return 0;
- }
-
- work = (doublecomplex *)doublecomplexCalloc(m);
-
- Astore = A->Store;
- Aval = Astore->nzval;
- Lstore = L->Store;
- Lval = Lstore->nzval;
- Ustore = U->Store;
- Uval = Ustore->nzval;
-
- /* Determine EPS and the norm of A. */
- eps = dlamch_("Epsilon");
- anorm = zlangs("1", A);
- cnorm = 0.;
-
- /* Compute the product L*U, one column at a time */
- for (k = 0; k < n; ++k) {
-
- /* The U part outside the rectangular supernode */
- for (i = U_NZ_START(k); i < U_NZ_START(k+1); ++i) {
- urow = U_SUB(i);
- utemp = Uval[i];
- superno = Lstore->col_to_sup[urow];
- fsupc = L_FST_SUPC(superno);
- u_part = urow - fsupc + 1;
- lptr = L_SUB_START(fsupc) + u_part;
- work[L_SUB(lptr-1)].r -= utemp.r;
- work[L_SUB(lptr-1)].i -= utemp.i;
- for (j = L_NZ_START(urow) + u_part; j < L_NZ_START(urow+1); ++j) {
- isub = L_SUB(lptr);
- zz_mult(&comp_temp, &utemp, &Lval[j]);
- z_sub(&work[isub], &work[isub], &comp_temp);
- ++lptr;
- }
- }
-
- /* The U part inside the rectangular supernode */
- superno = Lstore->col_to_sup[k];
- fsupc = L_FST_SUPC(superno);
- urow = L_NZ_START(k);
- for (i = fsupc; i <= k; ++i) {
- utemp = Lval[urow++];
- u_part = i - fsupc + 1;
- lptr = L_SUB_START(fsupc) + u_part;
- work[L_SUB(lptr-1)].r -= utemp.r;
- work[L_SUB(lptr-1)].i -= utemp.i;
- for (j = L_NZ_START(i)+u_part; j < L_NZ_START(i+1); ++j) {
- isub = L_SUB(lptr);
- zz_mult(&comp_temp, &utemp, &Lval[j]);
- z_sub(&work[isub], &work[isub], &comp_temp);
- ++lptr;
- }
- }
-
- /* 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;
- }
-
- /* Now compute the 1-norm of the column vector work */
- tnorm = 0.;
- for (i = 0; i < m; ++i) {
- tnorm += fabs(work[i].r) + fabs(work[i].i);
- work[i] = zero;
- }
- cnorm = SUPERLU_MAX(tnorm, cnorm);
- }
-
- *resid = cnorm;
-
- if (anorm <= 0.f) {
- if (*resid != 0.f) {
- *resid = 1.f / eps;
- }
- } else {
- *resid = *resid / (float) n / anorm / eps;
- }
-
- SUPERLU_FREE(work);
- SUPERLU_FREE(colbeg);
- SUPERLU_FREE(colend);
- return 0;
-
-/* End of ZGST01 */
-
-} /* zgst01_ */
-
diff --git a/TESTING/zgst02.c b/TESTING/zgst02.c
deleted file mode 100644
index fc048e4..0000000
--- a/TESTING/zgst02.c
+++ /dev/null
@@ -1,138 +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"
-
-int zgst02(trans_t trans, int m, int n, int nrhs, SuperMatrix *A,
- doublecomplex *x, int ldx, doublecomplex *b, int ldb, double *resid)
-{
-/*
- Purpose
- =======
-
- 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.
-
- Arguments
- =========
-
- TRANS (input) trans_t
- Specifies the form of the system of equations:
- = NOTRANS: A *x = b
- = TRANS : A'*x = b, where A' is the transpose of A
- = CONJ : A'*x = b, where A' is the transpose of A
-
- M (input) INTEGER
- The number of rows of the matrix A. M >= 0.
-
- N (input) INTEGER
- The number of columns of the matrix A. N >= 0.
-
- NRHS (input) INTEGER
- The number of columns of B, the matrix of right hand sides.
- NRHS >= 0.
-
- A (input) SuperMatrix*, dimension (LDA,N)
- The original M x N sparse matrix A.
-
- X (input) DOUBLE COMPLEX PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors for the system of linear
- equations.
-
- LDX (input) INTEGER
- The leading dimension of the array X. If TRANS = NOTRANS,
- LDX >= max(1,N); if TRANS = TRANS or CONJ, LDX >= max(1,M).
-
- B (input/output) DOUBLE COMPLEX PRECISION array, dimension (LDB,NRHS)
- On entry, the right hand side vectors for the system of
- linear equations.
- On exit, B is overwritten with the difference B - A*X.
-
- LDB (input) INTEGER
- The leading dimension of the array B. IF TRANS = NOTRANS,
- LDB >= max(1,M); if TRANS = TRANS or CONJ, LDB >= max(1,N).
-
- RESID (output) DOUBLE PRECISION
- The maximum over the number of right hand sides of
- norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
-
- =====================================================================
-*/
-
- /* Table of constant values */
- doublecomplex alpha = {-1., 0.0};
- doublecomplex beta = {1., 0.0};
- int c__1 = 1;
-
- /* System generated locals */
- double d__1, d__2;
-
- /* Local variables */
- int j;
- int n1, n2;
- double anorm, bnorm;
- double xnorm;
- double eps;
- char transc[1];
-
- /* Function prototypes */
- extern int lsame_(char *, char *);
- extern double zlangs(char *, SuperMatrix *);
- extern double dzasum_(int *, doublecomplex *, int *);
-
- /* Function Body */
- if ( m <= 0 || n <= 0 || nrhs == 0) {
- *resid = 0.;
- return 0;
- }
-
- if ( (trans == TRANS) || (trans == CONJ) ) {
- n1 = n;
- n2 = m;
- *transc = 'T';
- } else {
- n1 = m;
- n2 = n;
- *transc = 'N';
- }
-
- /* Exit with RESID = 1/EPS if ANORM = 0. */
-
- eps = dlamch_("Epsilon");
- anorm = zlangs("1", A);
- if (anorm <= 0.) {
- *resid = 1. / eps;
- return 0;
- }
-
- /* Compute B - A*X (or B - A'*X ) and store in B. */
-
- sp_zgemm(transc, "N", n1, nrhs, n2, alpha, A, x, ldx, beta, b, ldb);
-
- /* Compute the maximum over the number of right hand sides of
- norm(B - A*X) / ( norm(A) * norm(X) * EPS ) . */
-
- *resid = 0.;
- for (j = 0; j < nrhs; ++j) {
- bnorm = dzasum_(&n1, &b[j*ldb], &c__1);
- xnorm = dzasum_(&n2, &x[j*ldx], &c__1);
- if (xnorm <= 0.) {
- *resid = 1. / eps;
- } else {
- /* Computing MAX */
- d__1 = *resid, d__2 = bnorm / anorm / xnorm / eps;
- *resid = SUPERLU_MAX(d__1, d__2);
- }
- }
-
- return 0;
-
-} /* zgst02 */
-
diff --git a/TESTING/zgst04.c b/TESTING/zgst04.c
deleted file mode 100644
index 0c00db4..0000000
--- a/TESTING/zgst04.c
+++ /dev/null
@@ -1,122 +0,0 @@
-
-/*
- * -- SuperLU routine (version 2.0) --
- * Univ. of California Berkeley, Xerox Palo Alto Research Center,
- * and Lawrence Berkeley National Lab.
- * November 15, 1997
- *
- */
-#include <math.h>
-#include "slu_zdefs.h"
-
-int zgst04(int n, int nrhs, doublecomplex *x, int ldx, doublecomplex *xact,
- int ldxact, double rcond, double *resid)
-{
-/*
- Purpose
- =======
-
- 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
- machine epsilon.
-
- Arguments
- =========
-
- N (input) INT
- The number of rows of the matrices X and XACT. N >= 0.
-
- NRHS (input) INT
- The number of columns of the matrices X and XACT. NRHS >= 0.
-
- X (input) DOUBLE COMPLEX PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors. Each vector is stored as a
- column of the matrix X.
-
- LDX (input) INT
- The leading dimension of the array X. LDX >= max(1,N).
-
- XACT (input) DOUBLE COMPLEX PRECISION array, dimension( LDX, NRHS )
- The exact solution vectors. Each vector is stored as a
- column of the matrix XACT.
-
- LDXACT (input) INT
- The leading dimension of the array XACT. LDXACT >= max(1,N).
-
- RCOND (input) DOUBLE COMPLEX PRECISION
- The reciprocal of the condition number of the coefficient
- matrix in the system of equations.
-
- RESID (output) DOUBLE PRECISION
- The maximum over the NRHS solution vectors of
- ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS )
-
- =====================================================================
-*/
- /* Table of constant values */
- int c__1 = 1;
-
- /* System generated locals */
- double d__1, d__2, d__3, d__4;
-
- /* Local variables */
- int i, j, n__1;
- int ix;
- double xnorm;
- double eps;
- double diffnm;
-
- /* Function prototypes */
- extern int izamax_(int *, doublecomplex *, int *);
-
- /* Quick exit if N = 0 or NRHS = 0. */
- if ( n <= 0 || nrhs <= 0 ) {
- *resid = 0.;
- return 0;
- }
-
- /* Exit with RESID = 1/EPS if RCOND is invalid. */
-
- eps = dlamch_("Epsilon");
- if ( rcond < 0. ) {
- *resid = 1. / eps;
- return 0;
- }
-
- /* Compute the maximum of norm(X - XACT) / ( norm(XACT) * EPS )
- over all the vectors X and XACT . */
-
- *resid = 0.;
- for (j = 0; j < nrhs; ++j) {
- n__1 = n;
- ix = izamax_(&n__1, &xact[j*ldxact], &c__1);
- xnorm = (d__1 = xact[ix-1 + j*ldxact].r, fabs(d__1)) +
- (d__2 = xact[ix-1 + j*ldxact].i, fabs(d__2));
-
- diffnm = 0.;
- for (i = 0; i < n; ++i) {
- /* Computing MAX */
- d__3 = diffnm;
- d__4 = (d__1 = x[i+j*ldx].r-xact[i+j*ldxact].r, fabs(d__1)) +
- (d__2 = x[i+j*ldx].i-xact[i+j*ldxact].i, fabs(d__2));
- diffnm = SUPERLU_MAX(d__3,d__4);
- }
- if (xnorm <= 0.) {
- if (diffnm > 0.) {
- *resid = 1. / eps;
- }
- } else {
- /* Computing MAX */
- d__1 = *resid, d__2 = diffnm / xnorm * rcond;
- *resid = SUPERLU_MAX(d__1,d__2);
- }
- }
- if (*resid * eps < 1.) {
- *resid /= eps;
- }
-
- return 0;
-
-} /* zgst04_ */
diff --git a/TESTING/zgst07.c b/TESTING/zgst07.c
deleted file mode 100644
index cdc5d7a..0000000
--- a/TESTING/zgst07.c
+++ /dev/null
@@ -1,228 +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 <math.h>
-#include "slu_zdefs.h"
-
-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)
-{
-/*
- Purpose
- =======
-
- 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.
-
- RESLTS(1) = test of the error bound
- = norm(X - XACT) / ( norm(X) * FERR )
- A large value is returned if this ratio is not less than one.
-
- RESLTS(2) = residual from the iterative refinement routine
- = the maximum of BERR / ( (n+1)*EPS + (*) ), where
- (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
-
- Arguments
- =========
-
- TRANS (input) trans_t
- Specifies the form of the system of equations.
- = NOTRANS: A *x = b
- = TRANS : A'*x = b, where A' is the transpose of A
- = CONJ : A'*x = b, where A' is the transpose of A
-
- N (input) INT
- The number of rows of the matrices X and XACT. N >= 0.
-
- NRHS (input) INT
- The number of columns of the matrices X and XACT. NRHS >= 0.
-
-
- A (input) SuperMatrix *, dimension (A->nrow, A->ncol)
- The original n by n matrix A.
-
- B (input) DOUBLE COMPLEX PRECISION array, dimension (LDB,NRHS)
- The right hand side vectors for the system of linear
- equations.
-
- LDB (input) INT
- The leading dimension of the array B. LDB >= max(1,N).
-
- X (input) DOUBLE COMPLEX PRECISION array, dimension (LDX,NRHS)
- The computed solution vectors. Each vector is stored as a
- column of the matrix X.
-
- LDX (input) INT
- The leading dimension of the array X. LDX >= max(1,N).
-
- XACT (input) DOUBLE COMPLEX PRECISION array, dimension (LDX,NRHS)
- The exact solution vectors. Each vector is stored as a
- column of the matrix XACT.
-
- LDXACT (input) INT
- The leading dimension of the array XACT. LDXACT >= max(1,N).
-
-
- FERR (input) DOUBLE COMPLEX PRECISION array, dimension (NRHS)
- The estimated forward error bounds for each solution vector
- X. If XTRUE is the true solution, FERR bounds the magnitude
- of the largest entry in (X - XTRUE) divided by the magnitude
- of the largest entry in X.
-
- BERR (input) DOUBLE COMPLEX PRECISION array, dimension (NRHS)
- The componentwise relative backward error of each solution
- vector (i.e., the smallest relative change in any entry of A
-
- or B that makes X an exact solution).
-
- RESLTS (output) DOUBLE PRECISION array, dimension (2)
- The maximum over the NRHS solution vectors of the ratios:
- RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
- RESLTS(2) = BERR / ( (n+1)*EPS + (*) )
-
- =====================================================================
-*/
-
- /* Table of constant values */
- int c__1 = 1;
-
- /* System generated locals */
- double d__1, d__2;
- double d__3, d__4;
-
- /* Local variables */
- double diff, axbi;
- int imax, irow, n__1;
- int i, j, k;
- double unfl, ovfl;
- double xnorm;
- double errbnd;
- int notran;
- double eps, tmp;
- double *rwork;
- doublecomplex *Aval;
- NCformat *Astore;
-
- /* Function prototypes */
- extern int lsame_(char *, char *);
- extern int izamax_(int *, doublecomplex *, int *);
-
-
- /* Quick exit if N = 0 or NRHS = 0. */
- if ( n <= 0 || nrhs <= 0 ) {
- reslts[0] = 0.;
- reslts[1] = 0.;
- return 0;
- }
-
- eps = dlamch_("Epsilon");
- unfl = dlamch_("Safe minimum");
- ovfl = 1. / unfl;
- notran = (trans == NOTRANS);
-
- rwork = (double *) SUPERLU_MALLOC(n*sizeof(double));
- if ( !rwork ) ABORT("SUPERLU_MALLOC fails for rwork");
- Astore = A->Store;
- Aval = (doublecomplex *) Astore->nzval;
-
- /* Test 1: Compute the maximum of
- norm(X - XACT) / ( norm(X) * FERR )
- over all the vectors X and XACT using the infinity-norm. */
-
- errbnd = 0.;
- for (j = 0; j < nrhs; ++j) {
- n__1 = n;
- imax = izamax_(&n__1, &x[j*ldx], &c__1);
- d__1 = (d__2 = x[imax-1 + j*ldx].r, fabs(d__2)) +
- (d__3 = x[imax-1 + j*ldx].i, fabs(d__3));
- xnorm = SUPERLU_MAX(d__1,unfl);
- diff = 0.;
- for (i = 0; i < n; ++i) {
- d__1 = (d__2 = x[i+j*ldx].r - xact[i+j*ldxact].r, fabs(d__2)) +
- (d__3 = x[i+j*ldx].i - xact[i+j*ldxact].i, fabs(d__3));
- diff = SUPERLU_MAX(diff, d__1);
- }
-
- if (xnorm > 1.) {
- goto L20;
- } else if (diff <= ovfl * xnorm) {
- goto L20;
- } else {
- errbnd = 1. / eps;
- goto L30;
- }
-
-L20:
-#if 0
- if (diff / xnorm <= ferr[j]) {
- d__1 = diff / xnorm / ferr[j];
- errbnd = SUPERLU_MAX(errbnd,d__1);
- } else {
- errbnd = 1. / eps;
- }
-#endif
- d__1 = diff / xnorm / ferr[j];
- errbnd = SUPERLU_MAX(errbnd,d__1);
- /*printf("Ferr: %f\n", errbnd);*/
-L30:
- ;
- }
- reslts[0] = errbnd;
-
- /* Test 2: Compute the maximum of BERR / ( (n+1)*EPS + (*) ), where
- (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) + abs(b))_i ) */
-
- for (k = 0; k < nrhs; ++k) {
- for (i = 0; i < n; ++i)
- rwork[i] = (d__1 = b[i + k*ldb].r, fabs(d__1)) +
- (d__2 = b[i + k*ldb].i, fabs(d__2));
- if ( notran ) {
- for (j = 0; j < n; ++j) {
- tmp = (d__1 = x[j + k*ldx].r, fabs(d__1)) +
- (d__2 = x[j + k*ldx].i, fabs(d__2));
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- d__1 = (d__2 = Aval[i].r, fabs(d__2)) +
- (d__3 = Aval[i].i, fabs(d__3));
- rwork[Astore->rowind[i]] += d__1 * tmp;
- }
- }
- } else {
- for (j = 0; j < n; ++j) {
- tmp = 0.;
- for (i = Astore->colptr[j]; i < Astore->colptr[j+1]; ++i) {
- irow = Astore->rowind[i];
- d__1 = (d__2 = x[irow + k*ldx].r, fabs(d__2)) +
- (d__3 = x[irow + k*ldx].i, fabs(d__3));
- d__2 = (d__3 = Aval[i].r, fabs(d__3)) +
- (d__4 = Aval[i].i, fabs(d__4));
- tmp += d__2 * d__1;
- }
- rwork[j] += tmp;
- }
- }
-
- axbi = rwork[0];
- for (i = 1; i < n; ++i) axbi = SUPERLU_MIN(axbi, rwork[i]);
-
- /* Computing MAX */
- d__1 = axbi, d__2 = (n + 1) * unfl;
- tmp = berr[k] / ((n + 1) * eps + (n + 1) * unfl / SUPERLU_MAX(d__1,d__2));
-
- if (k == 0) {
- reslts[1] = tmp;
- } else {
- reslts[1] = SUPERLU_MAX(reslts[1],tmp);
- }
- }
-
- SUPERLU_FREE(rwork);
- return 0;
-
-} /* zgst07 */
diff --git a/TESTING/ztest.csh b/TESTING/ztest.csh
deleted file mode 100644
index 32a8a3f..0000000
--- a/TESTING/ztest.csh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/csh
-
-set ofile = ztest.out # output file
-if ( -e $ofile ) then
- rm -f $ofile
-endif
-echo "Double-precision complex testing output" > $ofile
-
-set MATRICES = (LAPACK cg20.cua)
-set NVAL = (9 19)
-set NRHS = (5)
-set LWORK = (0 10000000)
-
-#
-# Loop through all matrices ...
-#
-foreach m ($MATRICES)
-
- #--------------------------------------------
- # Test matrix types generated in LAPACK-style
- #--------------------------------------------
- if ($m == 'LAPACK') then
- echo '== LAPACK test matrices' >> $ofile
- foreach n ($NVAL)
- foreach s ($NRHS)
- foreach l ($LWORK)
- echo '' >> $ofile
- echo 'n='$n 'nrhs='$s 'lwork='$l >> $ofile
- ./ztest -t "LA" -l $l -n $n -s $s >> $ofile
- end
- end
- end
- #--------------------------------------------
- # Test a specified sparse matrix
- #--------------------------------------------
- else
- echo '' >> $ofile
- echo '== sparse matrix:' $m >> $ofile
- foreach s ($NRHS)
- foreach l ($LWORK)
- echo '' >> $ofile
- echo 'nrhs='$s 'lwork='$l >> $ofile
- ./ztest -t "SP" -s $s -l $l < ../EXAMPLE/$m >> $ofile
- end
- end
- endif
-
-end
-
diff --git a/make.inc b/make.inc
deleted file mode 100644
index 2ffd9f4..0000000
--- a/make.inc
+++ /dev/null
@@ -1,65 +0,0 @@
-############################################################################
-#
-# 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
-#
-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)
-# If your system has no ranlib, set RANLIB = echo.
-#
-ARCH = ar
-ARCHFLAGS = cr
-RANLIB = ranlib
-
-CC = gcc
-CFLAGS = -DPRNTlevel=0 -O3
-NOOPTS =
-FORTRAN = g77
-FFLAGS = -O2
-LOADER = $(CC)
-LOADOPTS =
-
-#
-# 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/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